IC设计问题

本文深入探讨了数字系统中的时序设计,包括建立时间、保持时间和时序容限的概念。这些参数确保了触发器在不同时钟域间正确工作。亚稳态是由于不满足建立或保持时间而导致的输出不稳定状态,可能影响系统性能。解决跨时钟域通信问题的关键策略包括使用同步器(如电平同步器、边沿检测同步器和脉冲同步器)以及同步FIFO和保持寄存器。正确的时序设计和同步技术能有效防止亚稳态,确保数据在不同时钟域间准确传输。
摘要由CSDN通过智能技术生成

前言

建立时间:是指在触发器的时钟信号上升沿到来之前,数据稳定不变的时间。
保持时间:是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间。
建立时间和保持时间是由器件决定的。 具体可以参考:
为什么会有建立时间和保持时间
在这里插入图片描述
注意:对于这个问题,在实际应用中,由于触发器的延时是固定的,所以更多时候改变的是组合逻辑的延时,以使整个系统满足时序要求。
t p d t_{pd} tpd 也叫传播延时,是指触发器输出的响应时间,也就是触发器的输出在clk时钟上升沿到来之后多长的时间内发生变化并且稳定,也可以理解为触发器的输出延时。
t c o m b t_{comb} tcomb 是组合逻辑延时,即触发器的输出经过组合逻辑所需要的时间。
建立时间容限:相当于保护时间,这里要求建立时间容县大于等于 0。
保持时间容限:保持时间容限也要求大于等于0。

允许的最短时钟周期,也就是最高的时钟频率情况下(满足触发器D2的建立时间)

在这里插入图片描述
需要在最短的时钟周期内满足时序,也就是在一个时钟周期内满足时序。由上图可以知道:
建立时间容限 = T c l k − T p d 1 ( m a x ) − T c o m b ( m a x ) − T s e t u p 2 建立时间容限 = T_{clk} - T_{pd1(max)}-T_{comb(max)}-T_{setup2} 建立时间容限=TclkTpd1(max)Tcomb(max)Tsetup2
由于建立时间容限大于等于0,所以可以得到:
T c l k ≥ T p d 1 ( m a x ) + T c o m b ( m a x ) + T s e t u p 2 T_{clk} \ge T_{pd1(max)}+T_{comb(max)}+T_{setup2} TclkTpd1(max)+Tcomb(max)+Tsetup2
所以建立时间决定了该系统的最短时钟周期(最大时钟频率)
由此可以得到触发器D2 T s e t u p 2 T_{setup2} Tsetup2 应该满足以下条件:
T s e t u p 2 ≤ T c l k − T p d 1 ( m a x ) − T c o m b ( m a x ) T_{setup2} \le T_{clk} - T_{pd1(max)}-T_{comb(max)} Tsetup2TclkTpd1(max)Tcomb(max)
组合逻辑的最大延时应该满足:
T c o m b ( m a x ) ≤ T c l k − T p d 1 ( m a x ) − T s e t u p 2 T_{comb(max)} \le T_{clk} - T_{pd1(max)}-T_{setup2} Tcomb(max)TclkTpd1(max)Tsetup2
所以建立时间决定了该系统的组合逻辑的最大延迟

避免信号竞争的情况下(满足触发器D2的的保持时间)

触发器D1的输出必须要保持一定的时间(这个一定的时间+组合逻辑的延时必须要满足触发器D2的的保持时间),才能让触发器D2的输出信号正确,不产生竞争。
当前时刻的输出(即触发器D2的输入)必须要保证不会影响到前一个时钟的触发器D2的输出,也就是说触发器D2的输出需要一定的保持时间才能稳定输出,但是在不满足保持时间的情况下触发器D2的输入被改变了,导致后面的输出就会出现竞争导致错误。

通俗来讲就是:在触发器D2的输入信号还处在保持时间的时候,如果触发器D1的输出已经通过组合逻辑到达D2的输入端的话,将会破坏D2本来应该保持的数据。
在这里插入图片描述
由上图可得出,极限情况:
保持时间容限 + t h o l d 2 = t p d 1 ( m i n ) + t c o m b ( m i n ) 保持时间容限 + t_{hold2} = t_{pd1(min)}+ t_{comb(min)} 保持时间容限+thold2=tpd1(min)+tcomb(min)
由于保持时间容限大于等于0,所以触发器D2t_{hold2}应该满足:
t h o l d 2 ≤ t p d 1 ( m i n ) + t c o m b ( m i n ) t_{hold2} \le t_{pd1(min)}+ t_{comb(min)} thold2tpd1(min)+tcomb(min)
可以得到组合逻辑的最小延时应该满足:
t c o m b ( m i n ) ≥ t p d 1 ( m i n ) − t h o l d 2 t_{comb(min)} \ge t_{pd1(min)} -t_{hold2} tcomb(min)tpd1(min)thold2
所以建立时间决定了该系统的组合逻辑的最小延迟

跨时钟域(CDC)问题

亚稳态

1、概念
亚稳态是由于电路的边沿触发导致输出在高电平和低电平之间震荡的一种现象,原因就是建立时间或者保持时间不满足。当用时钟对变化的数据信号进行采样时,事件的顺序决定了结果。事件之间的时间差越小,确定哪个先发生的时间就越长。当两个事件非常接近地发生时,决定过程可能需要比分配的时间更长的时间,并且会发生同步失败。
2、引起亚稳态的原因
(1)对变化的数据信号进行采样
(2)在数据跳变期间进行采样,建立或者保持时间不满足

  • 跨时钟域的信号和同步时钟之间的关系不能确定
  • 单一时钟域内EDA工具确保建立保持时间,不会出现亚稳态
    3、如何减少亚稳态的风险
    单一时钟域内信号------EDA工具检查每个触发器的建立保持时间,确保其不出现亚稳态
    跨时钟域的信号---------没有EDA工具可以保证其可靠性;静态时序分析其应该设置false path约束;只能靠逻辑设计来保证:同步化技术。
    4、同步化技术
    根据跨时钟域信号的特点来选择同步化方法:
    (1)同步器----针对控制信号
    (2)保持寄存器和握手-----地址或数据总线信号
    (3)异步FIFO设计----------数据总线信号
同步器(也就是使用two-stage of flip-flop)

1、同步器就是使用一个两级的触发器接在原来的输出后面,从而用一定时间的延时获得更可靠的输出
在这里插入图片描述
2、同步器的分类
(1)电平同步器—适用于clk1和clk2频率差不多的情况下
在这里插入图片描述
电平同步器会由于clk1和clk2频率不同造成数据的丢失或者重复的采样
(2)边沿检测同步器-----慢时钟域到快时钟域
在这里插入图片描述
把数据的变化转换一个脉冲,去除重复采样。
(3)脉冲同步器------快时钟到慢时钟域
在这里插入图片描述3、同步器设计推荐的做法
同步器单独成模块,引入两个独立时钟。
其他模块都设计为单一时钟模块,完全同步模块
以时钟域作为信号命名的前缀
静态时序分析的时候,对同步器模块异步输入信号的设定false path:用通配符

3、使用同步器需要注意的问题
(1)原时钟域的寄存器和新时钟域的两个寄存器之间都不能有组合逻辑
(2)快时钟域到慢时钟域
(3)多位控制信号跨时钟域
在这里插入图片描述最简单的方法是将多路控制信号合并成一路,传输到另一个时钟域后再分开。如下图所示
在这里插入图片描述
(4)总线信号跨时钟域(一般是多位的数据,不可能和多位控制信号那样合成一路)
直接使用同步器会带来问题。一般用的方法:保持寄存器加握手信号、异步FIFO设计(这两种方法都要使用同步器)。

  • 保持寄存器和握手
    在这里插入图片描述
    效率比较低,因为数据需要一拍一拍地发,而且还需要每拍还有握手开销,造成了延时。
  • FIFO
    同步FIFO:写时钟和读时钟为同一个时钟
    异步FIFO:写时钟和读时钟为独立时钟,用来匹配不同时钟域的读写速度。
    跨时钟域的数据信号需要用到异步FIFO,隔离时钟域,匹配读写速度。
    在这里插入图片描述
    FIFO重点:写满和读空标志的产生
    读写指针的相对位置的比较产生:
    (1)同步FIFO直接把读写时钟比较或运算产生
    (2)异步FIFO由于读写指针不同时钟域,比较前指针必须同步化
    (3)由于二进制的指针会出现多位同时跳变,直接由同步器进行同步优化会有问题,所以一般用格雷码(任意两个相邻数之间转换是,只有一位发生变化)
    在这里插入图片描述
    ===================== 分割线===================================
    跨时钟域问题就是两个使用不同时钟信号控制的模块间的信号进行通信传输的问题。按照传输信号的位数可以将跨时钟域问题分为单bit多bit问题。
    (1) 单bit问题(一般是控制信号):打两拍或者握手信号
    (2) 多bit问题(一般是数据信号):使用FIFO
    同时按照两个不同模块的时钟的快慢顺序可以分为从快时钟域到慢时钟域的传输,或从慢时钟域到快时钟域的传输。所以总共可以分为四种情况。

慢时钟采集快时钟、单bit传输----------打两拍

打两拍就是增加一个两级触发器,同时该触发器由快时钟进行驱动。
在这里插入图片描述
慢采快可能会出现data1信号不能满足F2所需的建立时间和保持时间从而使得触发器处在亚稳态状态。可以采用打两拍的方法来缓解这种现象。可以用平均故障间隔时间 (MTBF, Mean Time Between Failure)来衡量两次错误发生的间隔时间(越大越好),易知:
M T B F ∝ 1 F MTBF \propto \frac{1}{F} MTBFF1
注意:打两拍(多加一级触发器)只是加长MTBF,但是并不能完全解决掉亚稳态问题。
xxxx
在实际应用中,如果clk1clk2的频率相差比较大的时候,可能后面的data2data3会重复的采集到data1的高电平或者低电平,所以为了避免重复采集的情况发生,一般的解决方案是通过采集data1的边沿来将数据同步到F2的时钟域中。

快时钟域到慢时钟域,单bit采集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值