FPGA实现边沿检测电路(上升沿、下降沿)
原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/112187021
1.什么是边沿检测
边沿检测用于检测信号的上升沿或下降沿,通常用于使能信号的捕捉等场景。
2、采用1级触发器的边沿检测电路设计(以下降沿为例)
由此我们可以推导出边沿检测信号产生的一般方法:
将需要检测的信号寄存一拍,同步到系统时钟域下,得到信号 in_d1
将需要检测的信号反向,得到信号 ~in
将信号 in_d1 反向,得到信号 ~in_d1
通过组合逻辑电路可以得到下降沿信号 in_neg:assign in_neg = ~in && in_d1
同样通过组合逻辑电路可以得到上升沿信号 in_pos:assign in_pos = in && ~in_d1
双边沿检测就是将上两条加(或运算)起来就可以了,化简后有:双边沿信号 in_both = in ^ ind1
//使用1级寄存器的下降沿检测电路 module detect_1 ( input sys_clk, //时钟(设定为 50MHz) input sys_rst_n, //复位信号(n 表示低电平有效) input in, //需要进行下降沿检测的输入信号 output in_neg //输出的下降沿指示信号 ); //reg 定义 reg in_d1; //寄存一拍的信号 assign in_neg = ~in && in_d1; //组合逻辑得到下降沿 //上升沿: assign in_pos = in && ~in_d1; //双边沿: assign in_pos = in ^ in_d1; //寄存模块,将输入信号打一拍 always@(posedge sys_clk or negedge sys_rst_n)begin if(!sys_rst_n) in_d1 <= 1'b0; //复位清零 else in_d1 <= in; //寄存一拍 end endmodule
3、采用2级触发器的边沿检测电路(以下降沿为例)
由此我们可以推导出边沿检测信号产生的一般方法:
将需要检测的信号分别寄存1拍、2拍,同步到系统时钟域下,得到信号 in_d1、in_d2
将in_d1信号反向,得到信号 ~in_d1
将in_d2信号反向,得到信号 ~in_d2
通过组合逻辑电路可以得到下降沿信号 in_neg:assign in_neg = ~in_d1 && in_d2
同样通过组合逻辑电路可以得到上升沿信号 in_pos:assign in_pos = in_d1 && ~in_d2
双边沿检测就是将上两条加(或运算)起来就可以了,化简后有:双边沿信号 in_both = in_d1 ^ in_d2
//使用1级寄存器的下降沿检测电路 module detect_2 ( input sys_clk, //时钟(设定为 50MHz) input sys_rst_n, //复位信号(n 表示低电平有效) input in, //需要进行下降沿检测的输入信号 output in_neg //输出的下降沿指示信号 ); //reg 定义 reg in_d1; //寄存1拍的信号 reg in_d2; //寄存2拍的信号 assign in_neg = ~in_d1 && in_d2;//组合逻辑得到下降沿 //上升沿: assign in_pos = in && ~in_d1; //双边沿: assign in_pos = in ^ in_d1; //寄存模块,将输入信号打1拍、打2拍 always@(posedge sys_clk or negedge sys_rst_n)begin if(!sys_rst_n)begin in_d1 <= 1'b0; //复位清零 in_d2 <= 1'b0; end else begin in_d1 <= in; //寄存1拍 in_d2 <= in_d1; //寄存2拍 end end endmodule
原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/112187021