一个简单的上升沿检测代码:
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上升沿这两种方法有什么具体区别吗?
此帖出自
小平头技术问答
有区别,因为rs信号不像clk那样是已知的稳定的信号,可能rs信号中有毛刺,按照楼主的第二种方法来检测,如果rs中的毛刺信号产生的话,一样会被检测到,这样就满足了always @ (posedge RS or posedge RESET)//这句里的触发条件,系统就会认为是有rs信号产生,但其实它只是一个毛刺。所以,第一种语法用触发器同步来滤除毛刺信号(用两个D触发器可以更好的滤除毛刺信号,使最后输出的信号产生毛刺的概率更低)。
ps:个人看法,如果有错误的话,请各位批评指正。
[ 本帖最后由 linhaiqing60 于 2010-9-26 09:26 编辑 ]一周热门 更多>