为什么“异步复位同步释放”的时候要用2级寄存器?

[复制链接]
4225|12
 楼主| seaundersky 发表于 2013-1-31 16:54 | 显示全部楼层 |阅读模式
最近在看代码的时候遇到异步复位同步释放的问题,代码里实现的方法如下:
  1. reg rst1, rst2;
  2. wire rst_n_delay;
  3. always @(posedge clk or negedge rst_n)
  4. if(!rst_n)
  5. begin
  6. rst1 <= 1'b0;
  7. rst2 <= 1'b0;
  8. end
  9. else
  10. begin
  11. rst1 <= 1'b1;
  12. rst2 <= rst1;
  13. end
异步复位是没有疑问的,但是为什么要经过2级的触发器才输出复位信号呢?第一级输出不可以吗?上网找了一下,都是说亚稳态的问题,但是始终看不明白为什么第二级就消除了亚稳态。第二级不就是比第一级延长了一个周期吗?如果第一级存在亚稳态,那么延长一个周期之后这个亚稳态不是也会影响到第二级输出吗?
求解。


ococ 发表于 2013-1-31 17:16 | 显示全部楼层
本帖最后由 ococ 于 2013-1-31 17:17 编辑

一般亚稳态经过一个时钟周期后应该能稳定到一个或对或错的状态了。在用寄存器寄存一下输出后几乎就不会再出现亚稳态了。
 楼主| seaundersky 发表于 2013-1-31 17:46 | 显示全部楼层
ococ 发表于 2013-1-31 17:16
一般亚稳态经过一个时钟周期后应该能稳定到一个或对或错的状态了。在用寄存器寄存一下输出后几乎就不会再出 ...

谢谢,看了你的解释又再上网找了一下。终于弄懂了。
在同步系统中,如果触发器的 setup time / hold time 不满足,就可能产生亚稳态,此时触发器输出端 Q 在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里 Q 端会出现毛刺、振荡、或固定在某一电压值,而不一定等于数据输入端 D 的值。由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出 0~1 之间的中间电压值还会使下一级产生亚稳态,即导致 meta. stability的传播。
所以,即使第一个触发器的输出端存在亚稳态,经过一个 CLK 周期后,第二个触发器 D 端的电平仍未稳定的概率非常小,因此第二个触发器 Q 端基本不会产生亚稳态。
 楼主| seaundersky 发表于 2013-1-31 17:46 | 显示全部楼层
kaiseradler 发表于 2013-1-31 17:16
这个无非就是打了2级时钟,相当于把rst_n因为亚稳态的持续时间一般不会超过1个周期,所以一般情况下打2拍, ...

懂了,谢谢
蓝色风暴@FPGA 发表于 2013-1-31 17:58 | 显示全部楼层
不是消除亚稳态,是延时,等待亚稳态恢复成稳态
GoldSunMonkey 发表于 2013-1-31 23:17 | 显示全部楼层
蓝色风暴@FPGA 发表于 2013-1-31 17:58
不是消除亚稳态,是延时,等待亚稳态恢复成稳态

就是消除亚稳态啊
qin552011373 发表于 2013-2-1 20:06 | 显示全部楼层
 楼主| seaundersky 发表于 2013-9-30 17:15 | 显示全部楼层
回头看到自己发的帖子,发现还是有点问题没有解释清楚。
首先,这里亚稳态的产生是由于reset端在clk上升沿发生时刚好发生变化,这时无法确定reset为高还是低,因此输出不稳定。
我之前一直想不清楚的是为什么后面的寄存器也用了相同的reset端,为什么就不会发生亚稳态。
后来发现原来在reset端变化时第二个寄存器的输入为0,也就是无论reset端为0或1,输出都是0,因此不会有亚稳态的情况产生。
至于为什么输入为0,可以看下图,主要是因为输出相对输入延时。

从图中可以看到,因为通过利用输出相对输入的延时来避过亚稳态。最终rst2相对rst会延时1~2个周期。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
blacorse 发表于 2013-10-25 18:57 | 显示全部楼层
其实很多资料上都没说这句话,才让人对亚稳态心存疑惑:亚稳态是不能消除的,亚稳态的影响更是不能消除的。亚稳态的传播指的是并行传播,不是串行传播,因为一般第二级后就基本不会发生了。
GoldSunMonkey 发表于 2013-10-25 23:06 | 显示全部楼层
blacorse 发表于 2013-10-25 18:57
其实很多资料上都没说这句话,才让人对亚稳态心存疑惑:亚稳态是不能消除的,亚稳态的影响更是不能消除的。 ...

这个没有办法
GoldSunMonkey 发表于 2013-10-25 23:06 | 显示全部楼层
blacorse 发表于 2013-10-25 18:57
其实很多资料上都没说这句话,才让人对亚稳态心存疑惑:亚稳态是不能消除的,亚稳态的影响更是不能消除的。 ...

只能减少,而不能消除
cxz_00 发表于 2013-10-25 23:09 | 显示全部楼层
xins_n 发表于 2013-12-17 09:36 | 显示全部楼层
如果在同步复位中用这个还有什么优势嘛?也只是能更好的避免亚稳态?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部