用移位寄存器实现边沿检测的技巧

电子发烧友网工程师 发表于 2018-04-15 10:26:01 收藏 已收藏
赞(0) •  评论(0

用移位寄存器实现边沿检测的技巧

电子发烧友网工程师 发表于 2018-04-15 10:26:01

本文记录一下关于用移位寄存器实现边沿检测的技巧。要学会硬件思维式的“模块式”读写代码,那么请多看别人的代码,并用ISE或者VIVADO综合出来看看。

边沿检测
边沿检测,顾名思义,就是检查信号的边沿,当信号的上升沿或者下降沿到来时,获取一个脉冲信号,时序图如下所示:


上图的检测信号同时输出上升沿检测和下降沿检测。那么这个波形怎么来的呢,我们来看看下面几组波形:

可以发现:
原始信号与延迟一拍的信号 d0 的反向信号相与,就是上升沿脉冲;

而原始信号取反,然后与延迟一拍信号d0相与就是下降沿脉冲。

如果担心采样不稳定,可以利用延迟两拍的 d1 信号进行相 与。如果担心不定态,还可以将脉冲信号进行锁存。

多级触发器的代码如下所示:

module DFF_N #(parameter N=1)(

2 input clk,

3 input reset,

4 input [N-1:0] D,

5 output [N-1:0] D_rising_edge, //上升沿检测

6 output [N-1:0] D_falling_edge //下降沿检测

7 );

8 reg [N-1:0]d0;

9 reg [N-1:0]d1;

10 reg [N-1:0]Q;

11 always@(posedge clk or negedge reset)

12 if(!reset)begin

13 d0 <= 0;

14 d1 <= 0;

15 Q <= 0;

16 end else begin

17 d0 <= D;

18 d1 <= d0;

19 Q <= d1;

20 end

21

22 assign D_rising_edge = ~d0 & D; //关键

23 assign D_falling_edge= d0 & ~D; //关键

24 endmodule

综合得到的电路如下所示:

这个电路把代码中的Q触发器优化掉了。两个输出信号D_rising_edge 、D_falling_edge分别输出上升沿检测信号脉冲和下降沿检测信号脉冲。

收藏

相关话题
文章来源栏目
+关注

评论(0)

加载更多评论

参与评论

分享到

QQ空间 QQ好友 微博
取消