跑丢的孩子

VHDL实现边沿检测技术

0
阅读(4393)

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity trigger is
    Port ( clk : in  STD_LOGIC;
           rst : in  STD_LOGIC;
           trigger : in  STD_LOGIC;
           rise : out  STD_LOGIC;
           fall : out  STD_LOGIC);
end trigger;

architecture Behavioral of trigger is
signal temp : std_logic;
begin
 process(clk,rst)
 begin
  if (rst='0') then
   temp <= '0';
  elsif rising_edge(clk) then
   temp <= trigger;
  end if;
 end process;
 fall <= temp and (not trigger);
 rise <= trigger and (not temp);
end Behavioral;
 
RTL级原理图
所谓的边沿检测,就是对输入信号的上升沿和下降沿的检测。上面一段简短的代码实现了对输入信号上升沿和下降沿的检测,对应的RTL级原理图如上图所示。该模块一共有5个信号,分别是复位信号rst,时钟信号clk,触发信号trigger,下降沿信号fall,上升沿信号rise。当时钟有效时,触发器会锁存前一个时刻的触发信号,然后分别通过两个与门与当前时刻的触发信号进行逻辑运算,来判断是上升沿还是下降沿。为了消除抖动,使得信号更加稳定,可以多加几级触发器。读者可以自己试着完成。