在数字IC设计中经常需要用到边沿检测电路,比如在雷达的信息处理流程中,数据进入时通常会跟着进入一路包络信号,包络信号可以看成时数据的有效位,即包络为高电平时,数据有效才会进行下面的信息处理流程,当包络无效即为低电平时,数据无效不会进入下面的信息处理流程。也就是非连续脉冲处理的机制中,这种边沿检测思想用到了,但是不止脉冲处理机制,基本上IC或者FPGA大一点的工程中都会用到边缘检测思想,下面针对边缘检测电路提供几版的verilog实现:
思路就是直接加一个寄存器,对有效信号打一拍处理,将打一拍后信号与原始信号对比,对比出上升沿和下降沿;
代码实现如下:
module edge_detect(clk,rst,signal,pos_edge,neg_edge,both_edge);
input clk;
input rst_n;
input di;
output pos_edge;
output neg_edge;
reg di_dly;//寄存器
always @(posedge clk or negedge rst_n) //打一拍处理
begin
if(~rst_n)
di_dly <= 1'b0;
else
di_dly <= di;
end
assign pos_edge = ~di_dly & di;
assign neg_edge = di_dly & ~di;
endmodule