亚稳态/异步电路/glitch(毛刺)/glitchFree clk切换的一些疑问及理解

 


0 参考资料

0.0 图文,公式详细介绍了什么是亚稳态/产生/消除/危害/稳定

认识FPGA触发器的亚稳态

浅谈IC设计中亚稳态的问题以及信号同步电路简单实现

亚稳态与跨时钟域

高级FPGA设计技巧!多时钟域和异步信号处理解决方案

高级FPGA设计技巧!多时钟域和异步信号处理解决方案

1.1 什么是亚稳态

假设器件输出在电压0-VL认为数字逻辑0,VH-VDD之间认为是数字逻辑1.当器件超过规定时间内输出电压仍在VL--VH之间时不能判定是逻辑0还是逻辑1,经过更长时间电压稳定时也不能确定稳定在0-VL还是VH-VDD。我们称之为亚稳态。

1.2 为什么会有亚稳态

本段摘自亚稳态与跨时钟域--冯旭

为什么要满足建立时间和保持时间的要求?因为虽然说数字电路中只有1和0,但实际上电路在从1到0和从0到1变化时是不可能瞬间完成的,是有一个变化的过程的(性能越好的器件这个变化的时间越短,但不可能完全没有)。

在时钟变化的这段时间里,寄存器将对数据进行锁存。如果数据在这段时间内发生了变化,对于寄存器来说也就无法识别应该锁存哪个数据,到底是变化前的还是变化后的,寄存器的输出也将变得无法预测。因此,数据在建立时间和保持时间内必须保持稳定不变。

从更加宏观的设计角度来看,异步逻辑是亚稳态出现的重要原因。

在正常的同步电路中,亚稳态出现的可能性很小,除非时钟的设计有很大问题(比如时钟延迟、时钟抖动、时钟偏斜很严重)。在设计过程中designer会通过sdc等约束保证同步电路的时序收敛。而异步逻辑则很容易出现亚稳态,异步逻辑没有统一的时钟,也无法通过sdc约束和工具检查 完全发现异步逻辑的时序问题。没有统一的时钟也就意味着控制信号随时可能发生变化,想要满足建立时间和保持时间的约束当然也就变的十分困难。

亚稳态的出现归根到底就是因为建立时间和保持时间不满足要求。

1.3 为什么异步电路更容易亚稳态,同步电路能不能保证没有亚稳态

原因见1.2节,同步电路肯定要保证在正常工作频率/电压/温度/工艺下是没有亚稳态的。异步电路是无法保证一定没有亚稳态,但designer识别风险并保证亚稳态概率降到可控范围内。

1.4 异步FIFO使用格雷码做地址同步的原因

首先必须是+1或者-1,才能保证两次改变只有1bit变化

a.格雷码没有毛刺,不会引入额外的亚稳态

b.如果地址同步错误(仅限+1/-1同步错误,突然读和写都连续进行,导致地址变化过快,同步可能错误太多会出现mem空或者满,这种情况只能靠其他rtl设计保证)功能上虚空虚满不会造成逻辑错误。

2.多级寄存器的同步电路,Physical Design能不能通过约束保证setup/hold不违例

当src clk和des clk完全异步关系,时钟没有任何频率与相位的关系时,Physical Design也无法通过sdc等约束来保证setup/hold的满足。所以只能通过多级寄存器级联降低亚稳态,rtl design通过设计保证跨时钟域的信号传输正确性。cdc会找到所有这些寄存器,后端替换使用专用的cell来改善亚稳态

3.亚稳态的巨大危害到底是什么

最大的危害就是亚稳态的传播,如果发生亚稳态输出负载了很多组合逻辑,这些组合逻辑又输入到不同的寄存器,就会极其容易导致这些寄存器也进入亚稳态,然后继续传播。最终能够导致整个系统崩溃(范围太大,rtl设计也无法保证错误被纠正或被放弃)

亚稳态可能会导致cell的输出值错误,但这个错误如果不传播问题不大,也可以通过设计放弃或纠正错误值。2级或更多级的寄存器级联同步器的第一级寄存器就很可能输出错误的值,但是多级级联增加了亚稳态的稳定时间使最后一级寄存器进入亚稳态的概率极大的降低(可以达到几十年上百年一次),就相当于降低亚稳态的概率和传播。

4.多级寄存器级联的同步电路是为了防止亚稳态的传播和降低亚稳态的概率

并不能完全消除亚稳态及其传播,只能降低到可接受的范围之内。

两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。

假设每一级寄存器输出在下一级寄存器capture时间还没有稳定的概率为p,那么多加n级寄存器最后一级输出亚稳态的概率就是p的n次方,所以大大降低了亚稳态的传播

5.不满足建立/保持时间是否一定有亚稳态

不一定。不满足建立保持时间寄存器不知道capture logic ‘0’ 还是logic ‘1’,输出最终稳定值可能不确定,但寄存器可能会在规定的时间内输出稳定。

6.多级寄存器同步之间不能加组合逻辑为何?

不是不能,而是由于经过了组合逻辑和走线的延时,亚稳态传播到目的寄存器的时间增大很多。本来可能在到达下一级寄存器的时候满足下一级的setup/hold时间,结果又不能满足setup。这种情况下,只有在很低速的时钟频率时,第二拍触发器才可以避免亚稳态。因此是不正确的处理方法。也就是说同步器两级触发器之间不要添加任何逻辑,这样可以使得信号获得尽可能长的时间来回到稳定状态。否则还有经过组合逻辑的时间。

组合逻辑还会产生glitch,导致增加亚稳态的几率

通过组合逻辑信号沿可能变差

 

7.多级寄存器同步电路的第一级输入信号需要寄存器输出为何?

原因和问题6一致。

7.1为什么多bit数据不能用一位同步器分别同步?

不是不能,比如说准静态信号 经常是可以这么做的。就APB配置信号 可以这么做。

但是大多情况下 由于多bit之间的走线延时不一样(假设中间没有组合逻辑),到达destination clk domain 寄存器的D端时间不一样 ,导致被采样时间有的早一拍,有的晚一拍,输出Q端就永远无法得到想要的数据。同时由于bit位宽增加,亚稳态的概率也增加了。所以要加握手信号或者经过fifo。

对于一位同步器 或者用多个一位同步器同步多bit数据 本身即使降低了亚稳态的传播,并不能保证数据的正确性。应用在静态或准静态数据好使,其他情况要添加握手机制。

最重要的是多bit信号,bit之间的相关性丢失了(无论是否有亚稳态,这种相关性在跨时钟域采样之后都会丢失)。官方的解释如下:

可参考本人另一篇转载文章https://blog.csdn.net/cy413026/article/details/103141979

相关信号在跨越时钟边界后失去相关。这个问题是最不直观的。这将导致非常不确定的行为,如数据丢失,算术结果破坏。

这类不直观的问题在可视化的检查中很难被发现,特别是用RTL电路形式,在设计审查是经常被忽视。必须将严格的设计规则和有效的自动分析用于这类问题。

在广泛的相关信号中,可能产生相关性丢失的几种不同方式,包括:

  • 总线的多数据位
  • 单信号的多次复制
  • 握手信号,如请求与应答信号
  • 明显不相关的信号合并在接收时钟域的同一逻辑中

无论何时一个信号进入亚稳态,可以使用同步器确定它的值,但是在接收时钟域不能保证在信号有效之前的精确周期数。因此,任何一个多位信号,每位有独立的时钟同步,每位在到达接收时钟域时,相对其它位将产生倾斜。

即使亚稳定不发生,任何成对数据位信号在到达相应的同步器之前,通过不同的线路或者电特性使两个信号产生不同的延时,都可能丢失同步。

可能一个同步器采样输入信号,并且在另一个同步器捕获信号变化之前,先捕获信号的变化,这样,两个信号将在一个时钟周期内倾斜,并且不再相关。

 

8.glitch的严重危害是什么?

和亚稳态一样,最怕glitch在组合逻辑中大面积传播。

对于启动信号、控制信号、握手信号,触发器的清零信号(CLEAR)、预置信号 (PRESET)、时钟输入信号(CLK)或锁存器的输入信号/异步电路就会产生逻辑错误。任何一点毛刺都可能使系统出错。非常敏感。

D触发器是对毛刺不敏感的,毛刺如果要通过D触发器到达Q端,就需要在时钟跳变沿产生,且满足setup/hold时间。概率要小很多,通常是不能满足的。

9.glitchFree clk切换电路

参考本人另一篇文章GlitchFree的时钟切换技术

10.glitch在时钟/复位/异步电路中的危害?

在时钟电路中,引起错误 驱动寄存器工作,或则毛刺时钟时序不好引起亚稳态。

在复位电路中也是会导致系统错误的复位,或者不满足remove/recovery时间,导致复位亚稳态。

异步电路最怕glitch引起亚稳态,所以同步电路过程的寄存器之间不要有组合逻辑,以免引入glitch导致额外的亚稳态。

11.怎么消除或减少glitch

利用冗余项消除毛刺,采用格雷码,采样法,吸收法,延迟办法,具体可参考

FPGA中竞争冒险问题的研究

组合逻辑电路的分析与设计

Race_condition

12.遗留问题

12.1 soc的后端会考虑毛刺吗,后仿真加sdf的信息能不能发现毛刺

12.2 寄存器自动加门控,门控通常是if 的条件信号,可能是个复杂的组合逻辑条件。这个门控对时钟沿的影响是怎么考虑进去的,这个门控信号的毛刺又是如何保证不影响时钟的。

 

<think>好的,用户的问题是关于异步复位信号是否可以通过MUX进行处理,以及具体的方法和注意事项。我需要结合提供的引用内容来回答这个问题。首先,我需要回忆异步复位的基本概念,然后看看MUX如何影响复位信号的处理。 根据引用[2],异步电路的存储元件状态会随输入信号立即变化,时序复杂,这可能影响复位信号的稳定性。引用[3]提到,复位信号在DFF中需要作为第一个判断条件,否则综合会出错。这说明复位信号的优先级和处理方式非常重要,尤其是在同步和异步复位设计中。 接下来,用户询问是否可以用MUX处理异步复位。通常,MUX用于选择不同的输入信号,但处理复位信号时需要注意避免毛刺和确保稳定性。例如,如果MUX的两个输入源是不同时钟域的复位信号,直接切换可能导致亚稳态。需要同步处理这些信号,可能使用同步器链,如引用[3]中提到的同步释放机制。 另外,引用[3]还指出,复位信号的优先级在代码中必须放在首位,否则综合工具无法正确识别,导致错误。所以在使用MUX时,必须确保无论选择哪个复位源,复位信号的优先级不会被其他逻辑覆盖。 注意事项方面,需要关注信号的同步、避免组合逻辑产生毛刺、复位释放时的时序,以及综合工具的要求。比如,在FPGA中,复位网络有专用资源,使用MUX可能影响布局布线,增加延迟或占用更多资源。同时,复位信号的扇出较大,MUX的位置和驱动能力也很重要。 可能还需要考虑多时钟域的情况,不同复位源可能来自不同时钟域,这时必须进行跨时钟域处理,避免亚稳态。引用[4]提到不同STM32系列的USART处理差异,虽然不直接相关,但说明硬件模块对信号处理有特定要求,类比到复位信号,MUX的设计需符合硬件特性。 总结,异步复位信号可以通过MUX处理,但必须注意同步、毛刺消除、优先级保持、时序分析和工具约束。需要具体的方法步骤,如选择信号同步、同步释放、代码结构等,并提醒用户在实际应用中的注意事项。</think>### 异步复位信号通过MUX处理的方法及注意事项 #### 1. **异步复位信号与MUX的基本原理** 异步复位信号(如`rstn`)通常用于强制电路进入已知状态,其特点是**不受时钟控制**,响应速度快[^2]。通过MUX(多路复用器)处理异步复位信号时,需确保复位路径的**稳定性和时序一致性**,避免因信号切换导致电路状态不可控。 #### 2. **实现方法** ##### (1) **信号选择逻辑** 通过MUX在不同复位源之间切换,例如选择**外部复位信号**或**内部逻辑生成的复位信号**。需注意: - **同步化处理**:若复位源来自不同时钟域,需先通过**两级同步器**消除亚稳态风险[^3]。 - **复位优先级**:若多个复位信号存在优先级,需在MUX前通过组合逻辑明确优先级关系。 代码示例(Verilog): ```verilog // 异步复位信号通过MUX选择 always @(posedge clk or negedge global_rstn) begin if (!global_rstn) begin // 全局复位优先级最高 local_rstn <= 0; end else begin local_rstn <= (reset_sel) ? internal_rstn : external_rstn; end end ``` ##### (2) **复位信号的同步释放** 异步复位信号的**撤销(释放)**需与时钟同步,避免时序冲突。常用方法为“复位同步器”: ```verilog reg [1:0] sync_rstn; always @(posedge clk or negedge async_rstn) begin if (!async_rstn) sync_rstn <= 2'b00; else sync_rstn <= {sync_rstn[0], 1'b1}; end assign sync_release_rstn = sync_rstn[1]; ``` #### 3. **关键注意事项** - **毛刺Glitch)抑制**:MUX输出可能因输入信号跳变产生毛刺,需在复位路径中插入**低通滤波器**或使用专用复位缓冲器[^1]。 - **时序约束**:复位信号传播延迟需满足目标器件的时序要求,避免因MUX引入额外延迟导致复位失效。 - **综合工具限制**:若复位信号未作为`if`条件的第一优先级,综合工具可能无法正确映射到物理器件(如FPGA的专用复位网络)。 - **跨时钟域风险**:若MUX选择信号来自不同时钟域,需通过同步器隔离,防止亚稳态传播[^2]。 #### 4. **应用场景** - **多复位源管理**:例如系统级复位、模块级复位、看门狗复位等。 - **动态复位配置**:在运行时切换复位策略(如硬件调试模式)。 --- ### 相关问题 1. **如何验证异步复位信号的同步释放是否成功?** 2. **在多时钟域系统中,异步复位信号如何处理跨时钟域问题?** 3. **FPGA中专用复位网络与通用逻辑资源对复位信号的影响有何差异?** --- ### 引用说明 - 异步复位的时序复杂性和同步释放需求[^2]。 - 复位信号优先级和综合工具约束。 - 多时钟域同步方法[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值