0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何理解FPGA中异步复位和同步释放

TLOc_gh_3394704 来源:OpenFPGA 作者:OpenFPGA 2021-08-11 09:14 次阅读

同步复位和异步复位

异步复位

异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。

RTL代码如下:

always@(posedgeclkornegedgerst_n)

if(!rst_n)b<= 1'b0;

         else b <= a;

综合后如下:

4aa2cf92-f7b2-11eb-9bcf-12bb97331649.png

我们可以看到FPGA寄存器都有一个异步的清零端(CLR),在异步复位的设计中这个端口一般就是接低电平有效的复位信号rst_n。即使说你的设计中是高电平复位,那么实际综合后会把你的复位信号反向后接这个CLR端。公众号:OpenFPGA

同步复位

同步复位是指只有在时钟上升沿到来时才会对复位信号进行采样,也就是只有在时钟上升沿时,复位信号才有效。

其RTL代码如下:

always@(posedgeclk)

if(!rst_n)b<= 1'b0;

         else b <= a;

综合后如下:

4aad9b0c-f7b2-11eb-9bcf-12bb97331649.png

和异步复位相比,同步复位没有用上寄存器的CLR端口,综合出来的实际电路只是把复位信号rst_n作为了输入逻辑的使能信号。那么,这样的同步复位势必会额外增加FPGA内部的资源消耗。

那么同步复位和异步复位到底孰优孰劣呢?

只能说,各有优缺点。同步复位的好在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率;它的不好上面也说了,在于它需要消耗更多的器件资源,这是我们不希望看到的。FPGA的寄存器有支持异步复位专用的端口,采用异步复位的端口无需额外增加器件资源的消耗,但是异步复位也存在着隐患,特权同学曾说过从没有意识到也没有见识过。异步时钟域的亚稳态问题同样的存在与异步复位信号和系统时钟信号之间。公众号:OpenFPGA

上面的分析似乎都让人意识到同步复位和异步复位都不可靠,那么如何将两者结合,取长补短呢?

异步复位、同步释放

所谓异步复位,同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。

如下图,单独看方框左的复位策略,是一个异步复位电路,即复位信号有效时不管时钟信号是否处于有效沿,输出都会被复位,但是如果复位信号在时钟信号的上升沿撤销时,这时候的输出就是亚稳态。

4ab9986c-f7b2-11eb-9bcf-12bb97331649.png

首先看一下怎么实现异步复位:当rst_async_n有效时,第二个D触发器的输出rst_sync_n就是低电平,方框左中的异步复位端口有效,输出被复位。

然后是同步释放:假设rst_async_n在clk的上升沿时撤除,那么第一级触发器处于亚稳态,但是由于两级触发器的缓冲作用,第二级触发器的输入为clk到来前第一级触发器的输出,即为低电平。因此,此时第二级触发器的输出一定是稳定的低电平,方框左中触发器仍然处于复位状态。在下一个clk到来时,第一级触发器的输出已经是稳定的高电平了,故rst_sync_n已经是稳定的高电平,此时复位释放。也就是同步释放。公众号:OpenFPGA

通过上面分析可知:异步复位、同步释放其最显著特征是既保留了异步复位的功能,又避免了异步复位释放时所面临的recovery或者removal违例问题。

那异步复位同步释放是如何避免recovery和removal违例问题的呢?如下代码所示,是异步复位同步释放的RTL code。

always@(posedgeclk,negedgerst_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 

从上述代码可以看出,rst_async_n=0时,rst_sync_n会被立即复位为0,输出到后续电路用于异步复位;rst_async_n=1时,假设此时恰好在时钟沿附近,会造成recovery或者removal的违例,但经过DFF1和DFF2的两级同步,rst_sync_n释放沿与时钟沿同步,送入到后续电路不会再有recovery和removal违例出现。

问题1

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

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

首先,回顾理论教材里介绍的建立保持时间违反分析,教材一般都是拿没有复位端口的D触发器举例。

然后,画出带有异步复位端口的D触发器,下图带异步复位Rd,并带有异步置位端口Sd。公众号:OpenFPGA

由此得知,异步复位信号或者异步置位信号,跟数据端口D信号,没有什么区别,都会存在建立保持时间的违反,从而时序冲突,引发输出亚稳态。

4b2ad89c-f7b2-11eb-9bcf-12bb97331649.png

问题2

复位信号存在亚稳态,有危险吗?

回答:

亚稳态,出现的问题或者麻烦,是在信号变化的时候,不能保证第一拍采样的值是固定的。

如果信号稳定,不会出现亚稳态的。就是采样后的跳变,时刻不确定,也许早,也许晚。

系统不希望这样的未知状态发生,系统希望知道在某一个时刻,后续逻辑需要的输入信号,是稳定值。公众号:OpenFPGA

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

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

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

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

问题3

如果只做一级触发器同步,如何?

回答:不可以。第一级触发器的输出,永远存在亚稳态的可能。亚稳态,导致系统不会复位初始化到已知状态。

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

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

问题4

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

回答:不能。大大降低概率,如果几十年出现一次,也无所谓了。毕竟芯片不会用几十年,早就老化严重淘汰了。

4b378ce0-f7b2-11eb-9bcf-12bb97331649.png

问题5

第一级触发器的数据端口为什么是1’b1?回答:

如果第一级触发器的数据端口,使用rst_async_n。综合后的第一级触发器电路图如下

4b5a458c-f7b2-11eb-9bcf-12bb97331649.png

如果第一级触发器的数据端口,使用1’b1。综合后的第一级触发器电路图如下:

4b653b18-f7b2-11eb-9bcf-12bb97331649.png

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

参考资料

https://blog.csdn.net/cainiaoyizhiyang/article/details/98479356https://blog.csdn.net/wordwarwordwar/article/details/79889725

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21664

    浏览量

    601682
  • 异步复位
    +关注

    关注

    0

    文章

    47

    浏览量

    13299

原文标题:FPGA中异步复位,同步释放的理解

文章出处:【微信号:gh_339470469b7d,微信公众号:FPGA与数据通信】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Xilinx FPGA异步复位同步释放同步后的复位该当作同步复位还是异步复位

    针对异步复位同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用
    发表于 06-21 09:59 1383次阅读
    Xilinx <b class='flag-5'>FPGA</b><b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b><b class='flag-5'>释放</b>—<b class='flag-5'>同步</b>后的<b class='flag-5'>复位</b>该当作<b class='flag-5'>同步</b><b class='flag-5'>复位</b>还是<b class='flag-5'>异步</b><b class='flag-5'>复位</b>?

    异步复位同步释放有多个时钟域时如何处理 异步复位同步释放的策略

    对于从FPGA外部进来的信号,我们通常采用“异步复位同步释放的策略”,具体电路如下图所示。
    的头像 发表于 07-20 09:04 1844次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b><b class='flag-5'>释放</b>有多个时钟域时如何处理 <b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b><b class='flag-5'>释放</b>的策略

    异步复位异步释放会有什么问题?FPGA异步复位为什么要同步释放呢?

    一般来说,复位信号有效后会保持比较长一段时间,确保 register 被复位完成。但是复位信号释放时,因为其和时钟是异步的关系,我们不知道它
    的头像 发表于 01-24 09:32 1668次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>异步</b><b class='flag-5'>释放</b>会有什么问题?<b class='flag-5'>FPGA</b><b class='flag-5'>异步</b><b class='flag-5'>复位</b>为什么要<b class='flag-5'>同步</b><b class='flag-5'>释放</b>呢?

    verilog 异步复位同步释放

    fpga异步复位同步释放代码如下module asy_rst(clk,rst_n,asy_rst);input clk;input r
    发表于 05-28 13:02

    同步复位异步复位同步释放的对比疑问

    在网上了解到fpga同步复位异步复位都会存在不足,因此有人提出异步
    发表于 04-16 22:17

    关于异步复位同步释放理解与分析

    是指复位信号是异步有效的,即复位的发生与clk无关。后半句“同步释放”是指复位信号的撤除也与cl
    发表于 11-30 08:58 2.4w次阅读
    关于<b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b><b class='flag-5'>释放</b><b class='flag-5'>理解</b>与分析

    FPGA设计异步复位同步释放问题

    异步复位同步释放 首先要说一下同步复位异步
    发表于 06-07 02:46 2140次阅读

    异步复位同步释放的基本原理与代码举例

    异步复位同步释放是指复位信号是异步有效的,即复位的发
    的头像 发表于 11-20 07:06 4142次阅读

    利用FPGA异步复位端口实现同步复位功能,释放本性

    FPGA开发,一种最常用的复位技术就是“异步复位同步释放
    发表于 08-18 13:56 1291次阅读
    利用<b class='flag-5'>FPGA</b><b class='flag-5'>异步</b><b class='flag-5'>复位</b>端口实现<b class='flag-5'>同步</b><b class='flag-5'>复位</b>功能,<b class='flag-5'>释放</b>本性

    详细讲解同步后的复位同步复位还是异步复位

    针对异步复位同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用
    的头像 发表于 04-27 18:12 4684次阅读
    详细讲解<b class='flag-5'>同步</b>后的<b class='flag-5'>复位</b>是<b class='flag-5'>同步</b><b class='flag-5'>复位</b>还是<b class='flag-5'>异步</b><b class='flag-5'>复位</b>?

    FPGA异步复位同步释放理解

    异步复位同步释放理解目录目录 同步复位
    发表于 01-17 12:53 4次下载
    【<b class='flag-5'>FPGA</b>】<b class='flag-5'>异步</b><b class='flag-5'>复位</b>,<b class='flag-5'>同步</b><b class='flag-5'>释放</b>的<b class='flag-5'>理解</b>

    同步复位异步复位的区别

    请简述同步复位异步复位的区别,说明两种复位方式的优缺点,并解释“异步
    的头像 发表于 08-14 11:49 7008次阅读

    浅析异步复位同步释放同步复位打拍模块

    异步复位同步释放:rst_synchronizer.v
    的头像 发表于 08-21 09:27 951次阅读
    浅析<b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b><b class='flag-5'>释放</b>与<b class='flag-5'>同步</b><b class='flag-5'>复位</b>打拍模块

    FPGA学习-异步复位同步释放

    点击上方 蓝字 关注我们 系统的复位对于系统稳定工作至关重要,最佳的复位方式为:异步复位同步释放
    的头像 发表于 09-09 14:15 1083次阅读
    <b class='flag-5'>FPGA</b>学习-<b class='flag-5'>异步</b><b class='flag-5'>复位</b>,<b class='flag-5'>同步</b><b class='flag-5'>释放</b>

    FPGA同步复位异步复位

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)复位操作是设计过程不可或缺的一环,它负责将电路恢复到初始状态,以确保系统的正确启动和稳定运
    的头像 发表于 07-17 11:12 1318次阅读