上升沿的捕获电路(代码)

2019-03-25 10:45发布

一个简单的上升沿检测代码:
reg RS_r1,RS_r2;
always @ (posedge CLKIN or posedge RESET)
    if(RESET)
        RS_r1 <= 1'b0;
    else
        RS_r1 <= RS;
always @ (posedge CLKIN or posedge RESET)
    if(RESET)
        RS_r2 <= 1'b0;
    else
        RS_r2 <= RS_r1;
        
wire pos_RS = RS_r1 & ~RS_r2;

然后我们使用pos_RS来在其他模块里做判断使用,

但这种方法实际检测到的上升沿会比实际上升沿延迟2个时钟

那用下面的方法不就可以直接检测上升沿了吗?


always @ (posedge RS or posedge RESET)//直接检测RS上升沿

这两种方法有什么具体区别吗? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
linhaiqing60
2019-03-25 17:22

有区别,因为rs信号不像clk那样是已知的稳定的信号,可能rs信号中有毛刺,按照楼主的第二种方法来检测,如果rs中的毛刺信号产生的话,一样会被检测到,这样就满足了always @ (posedge RS or posedge RESET)//这句里的触发条件,系统就会认为是有rs信号产生,但其实它只是一个毛刺。所以,第一种语法用触发器同步来滤除毛刺信号(用两个D触发器可以更好的滤除毛刺信号,使最后输出的信号产生毛刺的概率更低)。

 

ps:个人看法,如果有错误的话,请各位批评指正。

[ 本帖最后由 linhaiqing60 于 2010-9-26 09:26 编辑 ]

一周热门 更多>