异步复位,同步释放的理解

什么情况下,复位信号需要做“异步复位,同步释放”处理?

回答:一般来说,同步系统,都使用异步复位。这是因为同步复位的电路实现,比异步复位的电路实现,要浪费更多电路资源。
未在本模块时钟域做过“异步复位,同步释放”处理的复位信号,提供给本模块做异步复位使用时,都需要做“异步复位,同步释放”处理。常见于系统内两部件不在同一时钟域的情况下。

工程实践中,确实见过由于未做异步复位的同步处理,而出现大概率系统死机现象(复位的作用域是很大的)。

异步复位同步释放原理

这里写图片描述

代码实现:

always @ (posedge clk, negedge rst_async_n)  
if (!rst_async_n) begin   
rst_s1 <= 1'b0;  
rst_s2 <= 1'b0;  
end  
else begin  
rst_s1 <= 1'b1;  
rst_s2 <= rst_s1;  
end  

assign rst_sync_n = rst_s2;   
endmodule  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

利用前面两级触发器实现。特点:

  • 第一级触发器的数据端口是接电源,即高电平1’b1。
  • 第一级触发器的输出,不能使用,因为仍存在亚稳态的危险。两级触发器做同步,是非总线信号的最常见异步处理方法。总线信号的异步处理方法,最常见的是异步fifo实现。

下面讲述理解点。

问题1. 如果没有前面两级触发器的处理。异步信号直接驱动系统的触发器。会出现什么情况?

回答:很多人只知道触发器D端口来源是异步的话,会因为建立保持时间的时序违反而在触发器Q端口产生亚稳态。
但是不清楚,异步复位信号为什么会导致亚稳态的产生。

首先,回顾理论教材里介绍的建立保持时间违反分析,教材一般都是拿没有复位端口的D触发器举例。
然后,画出带有异步复位端口的D触发器,下图带异步复位Rd,并带有异步置位端口Sd。
由此得知,异步复位信号或者异步置位信号,跟数据端口D信号,没有什么区别,都会存在建立保持时间的违反,从而时序冲突,引发输出亚稳态。
这里写图片描述

问题2. 复位信号存在亚稳态,有危险吗?

回答:
亚稳态,出现的问题或者麻烦,是在信号变化的时候,不能保证第一拍采样的值是固定的。
如果信号稳定,不会出现亚稳态的。就是采样后的跳变,时刻不确定,也许早,也许晚。
系统不希望这样的未知状态发生,系统希望知道在某一个时刻,后续逻辑需要的输入信号,是稳定值。

二级触发器同步后,第二季触发器的输出基本上是稳定值。后续逻辑根据稳定值,会有稳定的行为。这就是追求的系统稳定性。

最好是系统一起复位释放,但是时钟域不同,不可能保证系统一起复位释放。一般来说,系统复位释放的顺序,是需要保证的。否则系统就是不安全的。

举个例子,系统启动时,内核读取启动指令,要powerdown某外设;但是powerdown的逻辑要求外设和内核没有通信请求正在发生。此时,外设比内核先释放复位的情况(复位释放的时刻,外设有可能已经开始与内核发生请求),与内核比外设先释放复位的情况(复位释放的时刻,外设肯定与内核没有发生请求),是不一样的,powerdown也许不能处理成功。

这也是异步复位信号需要同步释放的原因,目的都是为了避免亚稳态的产生。

问题3. 如果只做一级触发器同步,如何?

回答:不可以。第一级触发器的输出,永远存在亚稳态的可能。亚稳态,导致系统不会复位初始化到已知状态。
当第一级触发器采样异步输入之后,允许输出出现的亚稳态可以长达一个周期,在这个周期内,亚稳态特性减弱。在第二个时钟沿到来时,第二级同步器采样,之后才把该信号传递到内部逻辑中去。第二级输出是稳定且已被同步了的。如果在第二级采样时保持时间不够,第一级的输出仍然处于很强的亚稳态,将会导致第二级同步器也进入亚稳态,但这种故障出现的概率比较小。

一般情况下,两级同步器总体的故障概率是一级同步器故障概率的平方。在大部分的同步化设计中,两级同步器足以消除所有可能的亚稳态了。

问题4. 两级触发器同步,就能消除亚稳态吗?

回答:可以。但需要综合或者静态时序分析的工作配合。第一级触发器,永远存在亚稳态的情况,因为建立保持时间不能保证不发生时序冲突。第二级触发器,可以保证不发生时序冲突。
~~一般来说,第一级触发器,可以在综合的时候,设置伪路径,忽略时序冲突。~~
第二级触发器,在综合的时候,分析时序冲突(一般出现保持时间违反,综合会插入buffer解决吧?!)。

如此,第二级触发器,由于避免了时序冲突的发生,输出不会出现亚稳态。
回答:不能。大大降低概率,如果几十年出现一次,也无所谓了。毕竟芯片不会用几十年,早就老化严重淘汰了。
这里写图片描述

问题5. 第一级触发器的数据端口为什么是1’b1?

回答:
1. 如果第一级触发器的数据端口,使用rst_async_n。综合后的第一级触发器电路图如下
(下图为转载图片,来自http://www.cnblogs.com/qiweiwang/archive/2010/11/25/1887888.html):
这里写图片描述
2. 如果第一级触发器的数据端口,使用1’b1。综合后的第一级触发器电路图如下:
这里写图片描述

考虑到电路实现的资源,还是第2种方案最节省,为最佳设计。

综上所述,异步复位同步释放的电路结构是稳定可靠最省资源的,是最优的方案。请按套路出牌即可。

存在不同时钟域的系统环境中,请检查并正确处理“异步复位,同步释放”。

  • 也不知道上述说法,有没有误区,请指点。纯属个人理解,仅供参考。
<think>嗯,用户问的是同步复位异步释放异步复位同步释放的概念及区别,尤其是它们在FPGA和数字电路设计中的工作原理。首先,我需要确认这两个术语的正确定义,以及它们在电路中的具体实现方式。同步复位异步释放可能是指复位信号同步的,但释放时是异步的?或者是不是有别的说法?可能用户在这里有笔误,因为常见的术语是“异步复位同步释放”(Asynchronous Reset Synchronous Release)。而同步复位异步释放可能不太常见,需要仔细核对。 接下来,我需要回顾一下同步复位和异步复位的基本概念。同步复位是指复位信号在时钟边沿有效,而异步复位则立即生效,无需等待时钟。但是同步复位可能会因为时钟周期的问题导致复位不彻底,同时消耗更多逻辑资源,因为需要将复位信号合并到数据路径中。而异步复位虽然响应快,但可能存在复位释放时的亚稳态问题。 然后,异步复位同步释放(ARSR)是一种常见的优化方法,它的原理是异步复位,但在释放时通过同步器来避免亚稳态。也就是说,复位信号的撤销(释放)会经过两级触发器同步,确保释放时与时钟同步,从而避免复位撤消时由于时序问题导致的电路不稳定。 可能用户提到的“同步复位异步释放”实际上是同步复位,而释放的时候没有特别处理,仍然是同步的?或者可能是混淆了术语?需要明确这两个术语的正确定义。如果用户确实是想比较同步复位异步释放异步复位同步释放,可能前者并不常见,需要确认是否存在这样的设计方法。 在FPGA设计中,由于大多数触发器的复位端口是异步的,使用同步复位需要额外的逻辑资源,而异步复位同步释放则结合了异步复位的即时性和同步释放的稳定性。因此,异步复位同步释放被广泛采用,以避免亚稳态问题。 另外,需要解释这两种方法的工作原理,绘制简单的电路图或者时序图可能有助于理解。例如,异步复位同步释放的电路通常包括一个复位信号经过两个串联的触发器,确保释放时与时钟同步。而同步复位则直接将复位信号与数据逻辑结合,在时钟边沿生效。 同时,要指出它们的区别:复位信号的生效和释放方式、资源消耗、抗亚稳态能力、适用场景等。例如,同步复位可能在时钟无效时无法及时复位,而异步复位同步释放则在复位时立即生效,释放同步避免亚稳态。 需要确保回答中提到的每个概念都有明确的定义,并且对比它们的优缺点。同时,引用用户提供的参考内容,关于同步复位需要更长的有效时间,以及FPGA中DFF的异步复位端口,这些都需要结合到回答中,以增强可靠性。 最后,生成的相关问题需要围绕复位策略的应用、设计考虑、优化方法等,帮助用户进一步理解。</think>### 同步复位异步释放 vs 异步复位同步释放 #### 1. 基本概念 - **同步复位**:复位信号仅在时钟有效边沿生效,复位操作与时钟同步。例如: $$ \text{always @(posedge clk)} \quad \text{if (reset) ...} $$ 需要保证复位信号在时钟周期内保持稳定,否则可能无法正确复位[^1]。 - **异步复位**:复位信号立即生效,无需等待时钟边沿。例如: $$ \text{always @(posedge clk or posedge reset)} \quad \text{if (reset) ...} $$ 响应快,但释放时可能因亚稳态导致系统不稳定。 #### 2. 工作原理对比 - **异步复位同步释放 (ARSR)** - **复位阶段**:异步复位信号直接触发复位操作。 - **释放阶段**:通过两级触发器同步复位信号的撤销,确保释放与时钟同步。 ```verilog always @(posedge clk or posedge async_reset) if (async_reset) {sync_reg1, sync_reg2} <= 2'b11; else {sync_reg1, sync_reg2} <= {1'b0, sync_reg1}; ``` 最终输出 `sync_reset = sync_reg2`,释放时避免亚稳态。 - **同步复位异步释放 (不常见,可能为术语混淆)** 通常指复位信号同步生效,但释放时未做同步处理。这种方式可能因复位撤销时序不稳定导致风险,实际设计中较少使用。 #### 3. 核心区别 | **特性** | 异步复位同步释放 (ARSR) | 同步复位 | |------------------|------------------------------|-------------------------| | **复位响应速度** | 立即生效 | 需等待时钟边沿 | | **资源消耗** | 较低(利用DFF异步复位端口) | 较高(需插入组合逻辑) | | **亚稳态风险** | 释放时通过同步器规避 | 复位信号毛刺可能引发问题 | | **FPGA适用性** | 更优(匹配器件原生结构) | 需额外逻辑资源 | #### 4. FPGA设计建议 - **优先选择异步复位同步释放**:匹配FPGA的异步复位硬件结构,同时通过同步释放规避亚稳态。 - **避免纯异步复位**:复位撤销时可能因信号延迟差异导致逻辑状态不一致。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值