关于信号边沿检测的问题
时间:10-02
整理:3721RD
点击:
以下这段程序用于检测信号data的上跳沿和下跳沿:
always @(posedge clock)
begin
a3 <= data;
b3 <= a3;
end
assign flag1_data= ((b3==0)&&(a3==1))?1:0; //上跳沿
assign flag2_data= ((b3==1)&&(a3==0))?1:0; //下跳沿
那么,标志位 flag1_data和 flag2_data是在什么时候变化得呢?在时钟上跳沿处还是在上跳沿之后呢,很困惑!求解答
always @(posedge clock)
begin
a3 <= data;
b3 <= a3;
end
assign flag1_data= ((b3==0)&&(a3==1))?1:0; //上跳沿
assign flag2_data= ((b3==1)&&(a3==0))?1:0; //下跳沿
那么,标志位 flag1_data和 flag2_data是在什么时候变化得呢?在时钟上跳沿处还是在上跳沿之后呢,很困惑!求解答
a3存储当前的值,b3存储上一时刻的值,
flag1_data:当前为1,上一个时刻位0,这个就是上升沿啊。同理。自己推敲一下吧。
我懂。我就是想知道实际情况中flag是在上升沿之后变化的还是核上升沿同步变化的
搭建一个环境仿真一下
比任何人说的话都来得直观
时钟上升沿之后,tCK->Q的延时后跳变
我用ISE编了,再用ISE自带的Isim做了功能仿真,时序图显示flag和data同时跳变,感觉不太对……
tCK->Q是什么?
register 的CK端到Q端的延迟
我觉得这个回答靠谱,也就是说flag的跳变在data跳变之后,all right?
我想做个时序仿真验证一下。
你要么通过后防能看出来,前仿看不出的。
或者前仿,修改code成这样:
always @(posedge clock)
begin
a3 <= #1 data;
b3 <= #1 a3;
end
试试。
看你的输入信号,如果你的 data 和a3都是寄存器输出,则可以检测边沿,如果这两个是组合电路的输出,就会同时跳变
用#1表示ck到Q的延迟,可以
个人认为小编应该是对的吧!当上升沿到来时a3=1,b3未知,下一个下降沿到来时a3=0,b3=1,此时应该是信号的下降沿........如果仿真同意楼上观点!
