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

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

3天内不再提示

FPGA中复位电路产生亚稳态概述与理论分析

电子工程师 来源:FPGA设计论坛 作者:FPGA设计论坛 2020-10-25 09:50 次阅读

亚稳态概述

01亚稳态发生原因

FPGA 系统中,如果数据传输中不满足触发器的 Tsu 和 Th 不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端 Q 在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里 Q 端在 0 和 1 之间处于振荡状态,而不是等于数据输入端 D 的值。这段时间称为决断时间(resolution time)。经过 resolution time 之后 Q 端将稳定到 0 或 1 上,但是稳定到 0 或者 1,是随机的,与输入没有必然的关系。

02 亚稳态发生场合

只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、跨时钟域信号传输以及复位电路等常用设计中。

03 亚稳态危害

由于产生亚稳态后,寄存器Q 端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。在复位电路中产生亚稳态可能会导致复位失败。怎么降低亚稳态发生的概率成了FPGA设计需要重视的一个注意事项。

理论分析

01 信号传输中的亚稳态

在同步系统中,输入信号总是系统时钟同步,能够达到寄存器的时序要求,所以亚稳态不会发生。亚稳态问题通常发生在一些跨时钟域信号传输以及异步信号采集上。

它们发生的原因如下:

在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器 Tsu 和 Th 的要求;

在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器 Tsu 和 Th 的要求;

当数据在目的寄存器 Tsu-Th 时间窗口发生变化,也即当数据的建立时间或者保持时间不满足时,就可能发生亚稳态现象。如图 3.1 所示。

图 3.1 亚稳态产生示意图

由图可知,当产生亚稳态后 Tco 时间后会有 Tmet(决断时间)的振荡时间段,当振荡结束回到稳定状态时为“0”或者“1”,这个是随机的。因此,会对后续电路判断造成影响。

02 复位电路的亚稳态

(1)异步复位电路

在复位电路设计中,复位信号基本都是异步的,常用异步复位电路 Verilog 描述如下:

always @(posedge clk or negedge rst_n)
begin
if(!rst_n) a <= 1’b0;
else a <= b;
end

综合出来复位电路模型如图 3.2 所示:

图 3.2 异步复位电路模型

如图 3.3 所示,为复位电路复位时序图。如果异步复位信号的撤销时间在 Trecovery(恢复时间)和 Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的 Tco 后会产生振荡,振荡时间为 Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。

图 3.3 异步复位时序

(2)同步复位电路

在复位电路中,由于复位信号是异步的,因此,有些设计采用同步复位电路进行复位,并且绝大多数资料对于同步复位电路都认为不会发生亚稳态,其实不然,同步电路也会发生亚稳态,只是几率小于异步复位电路。

如下面 verilog 代码对同步复位电路的描述:

always @(posedge clk)
begin
if(!rst_n) a <= 1’b0;
else a <= b;
end


综合出硬件电路如图 3.4 所示。

图 3.4 同步复位电路

在此,我们不讨论同步复位的消耗资源问题,只讨论同步复位的亚稳态产生情况。

当输入端 Din 为高电平,而且复位信号的撤销时间在 clk 的 Tsu 和 Th 内时候,亚稳态就随之产生了。如图 3.5 时序所示,当复位撤销时间在 clk 的 Tsu 和 Th 内,输入数据为“1”,通过和输入数据相与后的数据也在 clk 的 Tsu 和 Th 内,因此,势必会造成类似异步信号采集的亚稳态情况。

图 3.5 同步复位电路时序图

03 亚稳态产生概率以及串扰概率

在实际的FPGA电路设计中,常常人们想的是怎么减少亚稳态对系统的影响,很少有人考虑怎么才能减少亚稳态发生几率,以及亚稳态串扰的概率问题。

(1)亚稳态发生概率

由上面分析得知,系统亚稳态发生的都是由于 clk 的 Tsu 和 Th 不满足,又或者是复位信号的移除和恢复时间不满足。常用 FPGA 器件的 Tsu+Th 约等于 1ns,复位移除和恢复时间相加约等于 1ns。

当异步信号不是一组数据,或者信号量较少,那就需要对异步信号进行同步处理,例如对一个异步脉冲信号进行采集,只要脉冲信号变化发生在时钟 Tsu 和 Th 窗口内,那就很可能会产生亚稳态,亚稳态产生的概率大概为:

概率=(建立时间+保持时间)/ 采集时钟周期

(公式 3-1)

由公式 3-1 可以看出,随着 clk 频率的增加,亚稳态发生的几率是增加的。

例如,为系统采用 100M 时钟对一个外部信号进行采集,采集时钟周期为 10ns,那采集产生亚稳态的概率为:1ns/10ns=10%

同理采用 300M 时钟对一个外部信号进行采集,那产生亚稳态的概率为:1ns/3.3ns=30%

如果采用三相相位差为 120°的时钟对一个外部信号进行采集,那产生亚稳态的概率接近 90%

所以在异步信号采集过程中,要想减少亚稳态发生的概率:

降低系统工作时钟,增大系统周期,亚稳态概率就会减小;

采用工艺更好的 FPGA,也就是 Tsu 和 Th 时间较小的 FPGA 器件、

(2)亚稳态的串扰概率

使用异步信号进行使用的时候,好的设计都会对异步信号进行同步处理,同步一般采用多级 D 触发器级联处理,如图 3.6 所示,采用三级 D 触发器对异步信号进行同步处理。

图 3.6 三级寄存器同步

这种模型大部分资料都说的是第一级寄存器产生亚稳态后,第二级寄存器稳定输出概率为 90%,第三极寄存器稳定输出的概率为 99%,如果亚稳态跟随电路一直传递下去,那就会另自我修护能力较弱的系统直接崩溃。接下来我们分析这种串扰的概率问题。

如图 3.7 所示为一个正常第一级寄存器发生了亚稳态,第二级、第三极寄存器消除亚稳态时序模型。

图 3.7 三级寄存器消除亚稳态

由上图可以看出,当第一个寄存器发生亚稳态后,经过 Tmet 的振荡稳定后,第二级寄存器能采集到一个稳定的值。但是为什么第二级寄存器还是可能会产生亚稳态呢?

由于振荡时间 Tmet 是受到很多因素影响的,所以 Tmet 时间又长有短,所以当 Tmet 时间长到大于一个采集周期后,那第二级寄存器就会采集到亚稳态。如图 3.8 所示。

图 3.8 二级寄存器亚稳态

由上图可知,第二级也是一个亚稳态,所以在这种情况下,亚稳态产生了串扰,从第一级寄存器传到了第二级寄存器,同样也可能从第二级寄存器串扰到第三级寄存器。这样会让设计逻辑判断出错,产生亚稳态传输,可能导致系统死机奔溃。

(3)亚稳态振荡时间 Tmet

亚稳态震荡时间 Tmet 关系到后级寄存器的采集稳定问题,Tmet 影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成 Tmet 增长。

消除亚稳态的办法

有亚稳态产生,我们就要对亚稳态进行消除,常用对亚稳态消除有三种方式:

对异步信号进行同步处理;

采用 FIFO 对跨时钟域数据通信进行缓冲设计;

对复位电路采用异步复位、同步释放方式处理。

01 对异步信号进行同步提取边沿

在异步通信或者跨时钟域通信过程中,最常用的就是对异步信号进行同步提取边沿处理。对一个异步信号进行提取上升沿通常采用程序清单 4.1 所示。

程序清单 4.1 双极寄存器提取边沿


input sig_nsyn;
wire sig_nsyn_p;
reg[1:0] sig_nsyn_r;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n) sig_nsyn_r <= 2’d0;
else sig_nsyn_r <= { sig_nsyn_r [0], sig_nsyn };
end
assign sig_nsyn_p = sig_nsyn_r[0] & ~sig_nsyn_r[1];


这种边沿提取方式对于一个稳定的系统是不合适的,例如:当第一级寄存器采集到亚稳态,那势必造成 sig_nsyn_p 输出亚稳态,这样就会对采用 sig_nsyn_p 的信号进行判断的电路造成影响,甚至判断出错误的值。

根据 3.3.1 小节的亚稳态产生概率,如果在 100M 时种下那第一级寄存器产生亚稳态的概率约为 10%,随着系统采集频率升高,那产生亚稳态的概率也会随之上升。因此,在进行异步信号跨频提取边沿时候,一般采用多进行一级寄存器消除亚稳态,可能在系统稳定性要求高的情况下,采用更多级寄存器来消除亚稳态,如程序清单 4.2 所示,即为采用 4 级寄存器消除亚稳态,相应的边沿信号产生的时间就晚了两个时钟周期。

程序清单 4.2 多级寄存器提取边沿信号


input sig_nsyn;
wire sig_nsyn_p;
reg[3:0] sig_nsyn_r;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n) sig_nsyn_r <= 2’d0;
else sig_nsyn_r <= { sig_nsyn_r [2::0], sig_nsyn };
end
assign sig_nsyn_p = sig_nsyn_r[2] & ~sig_nsyn_r[3];

02FIFO 进行异步跨频数据处理

当数据流从一个时钟域到另一个时钟域的时候,绝大多数情况下都采用 FIFO 来作为中间缓冲,采用双时钟对数据缓冲,就可以避免亚稳态的发生。

03 异步复位,同步释放

对于复位情况下的亚稳态,常常是由于恢复时间和移除时钟不满足造成的,因此,最常用的处理方式是采用异步复位、同步释放。常用电路模型如所示。采用第二级寄存器输出作为全局复位信号输出。

程序清单 4.3 异步复位处理


wire sys_rst_n;
reg [1:0] rst_r;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n) rst_r <= 2’d0;
else rst_r <= {rst_r[0], 1’b1};
end
assign sys_rst_n = rst_r[1];

通过上面三种方式处理异步信号、异步数据、以及异步复位可有效的提高系统的稳定性。减少亚稳态的产生。

责任编辑:xj

原文标题:详解 | FPGA中复位电路产生亚稳态的原因

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

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

    关注

    1602

    文章

    21309

    浏览量

    593130
  • 亚稳态
    +关注

    关注

    0

    文章

    44

    浏览量

    13118
  • 复位电路
    +关注

    关注

    13

    文章

    308

    浏览量

    44276

原文标题:详解 | FPGA中复位电路产生亚稳态的原因

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

    两级触发器同步,就能消除亚稳态吗? 两级触发器同步可以帮助消除亚稳态。本文将详细解释两级触发器同步原理、亚稳态的定义和产生原因、以及两级触发器同步如何消除
    的头像 发表于 01-16 16:29 371次阅读

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

    复位信号存在亚稳态,有危险吗? 复位信号在电子设备中起着重要的作用,它用于使设备回到初始状态,以确保设备的正常运行。然而,我们有时会发现复位信号存在
    的头像 发表于 01-16 16:25 172次阅读

    数字电路中的亚稳态产生原因

    亚稳态是指触发器的输入信号无法在规定时间内达到一个确定的状态,导致输出振荡,最终会在某个不确定的时间产生不确定的输出,可能是0,也可能是1,导致输出结果不可靠。
    的头像 发表于 11-22 18:26 1252次阅读
    数字<b class='flag-5'>电路</b>中的<b class='flag-5'>亚稳态</b><b class='flag-5'>产生</b>原因

    FPGA项目开发之同步信号和亚稳态

    FPGA项目开发之同步信号和亚稳态 让我们从触发器开始,所有触发器都有一个围绕活动时钟沿的建立(setup time)和保持窗口(hold time),在此期间数据不得更改。如果该窗口中的数据
    发表于 11-03 10:36

    FPGA设计中的亚稳态解析

    说起亚稳态,首先我们先来了解一下什么叫做亚稳态亚稳态现象:信号在无关信号或者异步时钟域之间传输时导致数字器件失效的一种现象。
    的头像 发表于 09-19 15:18 1308次阅读
    <b class='flag-5'>FPGA</b>设计中的<b class='flag-5'>亚稳态</b>解析

    亚稳态理论知识 如何减少亚稳态

    亚稳态(Metastability)是由于输入信号违反了触发器的建立时间(Setup time)或保持时间(Hold time)而产生的。建立时间是指在时钟上升沿到来前的一段时间,数据信号就要
    的头像 发表于 09-19 09:27 433次阅读
    <b class='flag-5'>亚稳态</b><b class='flag-5'>理论</b>知识 如何减少<b class='flag-5'>亚稳态</b>

    FPGA设计拦路虎之亚稳态度决定一切

    亚稳态这种现象是不可避免的,哪怕是在同步电路中也有概率出现,所以作为设计人员,我们能做的是减少亚稳态发生的概率。
    发表于 08-03 09:04 254次阅读
    <b class='flag-5'>FPGA</b>设计拦路虎之<b class='flag-5'>亚稳态</b>度决定一切

    D触发器与亚稳态的那些事

    本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。对于FPGA和ASIC设计中,D触发器是最常用的器件,也可以说是时序逻辑的核心,本文根据个人的思考历程结合相关书籍内容和网上文章,聊一聊D触发器与亚稳态的那些事。
    的头像 发表于 07-25 10:45 601次阅读
    D触发器与<b class='flag-5'>亚稳态</b>的那些事

    亚稳态分析与处理

    本文主要介绍了亚稳态分析与处理。
    的头像 发表于 06-21 14:38 2446次阅读
    <b class='flag-5'>亚稳态</b>的<b class='flag-5'>分析</b>与处理

    从锁存器角度看亚稳态发生的原因及方案简单分析

    发生亚稳态的原因是信号在传输的过程中不能满足触发器的建立时间和保持时间。
    的头像 发表于 06-20 15:29 754次阅读
    从锁存器角度看<b class='flag-5'>亚稳态</b>发生的原因及方案简单<b class='flag-5'>分析</b>

    FPGA系统中三种方式减少亚稳态产生

    点击上方 蓝字 关注我们 1.1 亚稳态发生原因 在 FPGA 系统中,如果数据传输中不满足 触发器 的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(re
    的头像 发表于 06-03 07:05 1119次阅读

    FPGA入门之复位电路设计

    前面在时序分析中提到过亚稳态的概念,每天学习一点FPGA知识点(9)之时序分析并且在电路设计中如果不满足Tsu(建立时间)和Th(保持时间)
    的头像 发表于 05-25 15:55 1018次阅读
    <b class='flag-5'>FPGA</b>入门之<b class='flag-5'>复位</b><b class='flag-5'>电路</b>设计

    什么是亚稳态?如何克服亚稳态

    亚稳态电路设计中是常见的属性现象,是指系统处于一种不稳定的状态,虽然不是平衡状态,但可在短时间内保持相对稳定的状态。对工程师来说,亚稳态的存在可以带来独特的性质和应用,如非晶态材料、晶体缺陷
    的头像 发表于 05-18 11:03 2949次阅读

    FPGA设计的D触发器与亚稳态

    本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。对于FPGA和ASIC设计中,D触发器是最常用的器件,也可以说是时序逻辑的核心,本文根据个人的思考历程结合相关书籍内容和网上文章,聊一聊D触发器与亚稳态的那些事。
    的头像 发表于 05-12 16:37 1406次阅读
    <b class='flag-5'>FPGA</b>设计的D触发器与<b class='flag-5'>亚稳态</b>

    今日说“法”:让FPGA设计亚稳态“无处可逃”

    分析一下。 背景 1、亚稳态发生原因 在FPGA系统,如果数据传输不满足触发器的Tsu和Th不满足,或者
    发表于 04-27 17:31