首页 > 编程知识 正文

跨时钟域 亚稳态,时域仿真方法的暂态稳定

时间:2023-05-03 19:47:38 阅读:158712 作者:4272

虽然前述内容是根据《数字电路中的亚稳态产生原因和处理方法》、《FPGA中的亚稳态》整理的,但是它们只是面向准稳态,基本上正在谈论时域间处理,所以可以点击上一篇文章《CDC:跨时钟域处理》来查看。

1 .亚稳态1.1什么是亚稳态? 是怎么出生的? 无法满足目标寄存器的设置时间和保持时间。

在数字电路设计中,如果在数据传输过程中触发器的Tsu、Th没有满足,或者在复位过程中复位信号的释放没有满足有效时钟沿的恢复时间(recovery time ),则不是数据输入端d的值这个时间称为“决定时间”。 经过resolution time,q端稳定在0或1,但稳定在0或1是随机的,与输入没有必然关系。 1.2出现亚稳态时,只要系统有异步元件,亚稳态是不可避免的。 亚稳态主要发生在异步信号检测、时钟域间信号传输和复位电路等常用设计中。 1.3亚稳态危害亚稳态发生后,寄存器q端的输出在稳定之前可能是毛刺、振动、恒定的某一电压值。 如果在信号传输过程中出现亚稳态,则与其连接的其他数字部件对其进行不同的判断,有的判断为“1”,有的判断为“0”,有的进入亚稳态,数字部件在逻辑上混乱。 如果复位电路发生准稳定状态,则有可能复位失败。 如何降低亚稳态发生的概率已成为FPGA设计中应重视的注意事项之一。 2 .理论分析2.1在信号传输中的亚稳态同步系统中,由于输入信号总是与系统时钟同步,能够满足寄存器的定时要求,所以不发生亚稳态。 准稳定性问题通常出现在几个时钟域之间的信号传输和异步信号采集中,主要原因是不能满足建立时间和保持时间的要求。 目的不能保证满足寄存器制作时间Tsu和保持时间Th的要求,有以下理由。

)时钟域之间传输信号时,由于源寄存器时钟和目标寄存器时钟的相位偏差是未知的,所以源寄存器数据有可能发出数据,数据随时到达异步时钟域的目标寄存器

)2)在异步信号采集中,异步信号能够在任意时刻到达目标寄存器。 准稳态现象可能在数据在目的寄存器Tsu-Th的时间窗口内发生改变时,即,不满足数据的建立时间或保持时间时发生。 如图3.1所示。

图3.1亚稳态发生示意图

从图中可以看出,如果出现亚稳态后的Tco时间,则存在Tmet (决断时间)的振荡时间段,如果振荡结束并返回到稳定状态,则变为“0”或“1”,这是随机的。 因此,会影响后续电路的判断。

2.2复位电路的亚稳态2.2.1异步复位电路在复位电路设计中,复位信号基本上是异步的,常用异步复位电路Verilog描述如下。

always @ (posedgeclkornegedgerst _ n ) begin if (! rst_n ) a=1’B0; else a=b; end综合复位电路如下所示。

图3.2异步复位电路模型

如图3.3所示,复位电路的复位时序图。 如果异步复位信号的解除时间在Trecovery (恢复时间)和Tremoval (恢复时间)以内,则无论如何都会发生准稳态,输出在时钟沿的Tco后振荡,振荡时间为Tmet ),最终稳定为"0"或"1"

图3.3异步复位定时

2.2.2在同步复位电路的亚稳态复位电路中,由于复位信号不同步,所以设计为由同步复位电路复位,认为大部分数据不会相对于同步复位电路发生亚稳态,但否则在同步电路中也是亚稳态但是,概率比异步复位电路低。

以下是基于verilog代码的同步复位电路的说明。

Always@(Posedgeclk ) 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同步复位电路的时序图

2.3亚稳态发生概率和串扰概率实际的FPGA电路设计中,总是考虑如何减少亚稳态对系统的影响,很少有人去考虑亚稳态发生概率,以及亚稳态串扰概率问题

2.3.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%

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

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

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

2.3.2 亚稳态的串扰概率

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


图3.6 三级寄存器同步

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

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

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

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

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


图3.8 二级寄存器亚稳态

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

2.3.3 亚稳态振荡时间Tmet

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

3. 应用分析

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

(1) 对异步信号进行同步处理;

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

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

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

在异步通信或者跨时钟域通信过程中,最常用的就是对异步信号进行同步提取边沿处理。对一个异步信号进行提取上升沿通常采用程序清单 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]; 3.1.2 FIFO进行异步跨频数据处理

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

3.1.3 异步复位,同步释放

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

程序清单 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};endassign sys_rst_n = rst_r[1];

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

后记

亚稳态,跨时钟域同步需要进一步学习了解。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。