数字IC基础

Q:什么是时钟抖动?

时钟抖动是指芯片的某一个给定点上时钟周期发生暂时性变化,也就是说时钟周期在不同的周期上可能加长或缩短。它是一个平均值为0的平均变量。

Q:如何解决亚稳态?

亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。

在亚稳态期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。

解决方法主要有:

  • 降低系统时钟;
  • 用反应更快的触发器(FF),锁存器(LATCH);
  • 引入同步机制,防止亚稳态传播;
  • 改善时钟质量,用边沿变化快速的时钟信号;
  • 使用工艺好、时钟周期裕量大的器件。
Q:跨时钟域数据传输

参考资料:
IC面试中常被问到——跨时钟域信号如何处理?
跨时钟域处理–最终详尽版

1、为什么要分析跨时钟域数据传输问题?

  • 正常来讲同步时钟域下的数据传输,只要建立和保持时间满足,外部环境(核心电压/温度)没有剧烈变化,一般情况下可以保证数据可靠传输。而异步时钟域在时序约束的时候已经设置了不同的clock
    group,相互之间的数据是不会进行时序分析的,因此即便是静态时序分析没有报告时序问题也不意味着异步数据传输可以可靠进行。因此说,跨时钟域的数据传输是设计出来的,而不是约束出来的。
  • 需要明确的是只要是异步数据传输就必然会有亚稳态的问题,通过一些特殊设计,比如打两拍同步等只能减低亚稳态概率而不能完全消除。因此在设计中应该尽量选择同步设计的方式。若一定要用到异步设计,那也应当处理好跨时钟域数据传输的问题,尽量使得系统对亚稳态错误不敏感。
  • 亚稳态其实就是数据没有满足寄存器的建立和保持时间而引发的现象,说白了就是数据到来的时机和采样沿挨得太近,导致寄存器不知道这次数据到底是0还是1,在经历了一段决断时间之后,随机地输出了一个值,该值与数据毫无关联。因此系统功能就会出错。

2、减少亚稳态的方法:

  • 降低时钟频率,为数据到来提供足够的准备时间
  • 选用高端器件,建立保持时间很短,也是为数据传输尽可能地留时间
  • 采用特殊设计,处理好异步数据传输,如引入同步机制

3、跨时钟域数据传输分类:

  • 按照传输数据位数分
    (1)单bit数据传输,比如使能信号、FIFO读写命令、复位信号等
    (2)多bit数据传输,比如固件通过Qsys中PIO的IP向NIOS发送多位数据,数据采集模块和数据处理模块直接异步传输等
  • 按照异步时钟域快慢分
    (1)快采慢
    (2)慢采快

4、常用的异步处理策略

  • 对于复位信号,常用的方式就是异步复位,同步释放
  • 对于单bit数据传输,快采慢,源时钟域过来的数据置位时间必然大于目的时钟域的一个周期,因此只需要将源时钟域的数据打两拍同步后使用即可,主要是抑制亚稳态的传播;
  • 对于单bit数据传输,慢采快,若源时钟域数据不做特殊处理(展宽,握手机制等),那么就只置位一个源时钟域的时钟周期,有可能置位的这一个时钟周期刚好没有被目的时钟域的采样沿采集到,那就导致系统出错。因此在这种情况下,不仅需要打两拍来抑制亚稳态的传播,还要防止慢采不到快的数据,此时需要使用信号展宽或者握手机制来处理。
  • 对于多bit数据传输,快采慢,这种情况下也不建议使用打两拍的方式处理,因为数据位数越多,打拍子能够完全消除亚稳态的概率就越低,只要有1位没有被消除,那么整个多位数据将全部失效。
    因此,对于多bit数据传输,慢采快,更不能使用打两拍的方式。
    通用的方式是使用异步FIFO,或者双端口RAM,握手信号等对数据进行缓冲处理,两个时钟域分别控制着读写命令或地址,在这种情况下可靠地传输数据。

5、为什么是两级DFF呢?一级或者三级DFF行不行呢?

  • 这里有一个平均失效间隔时间MTBF(Mean Time Between
    Failure)的考虑。MTBF时间越长,出现亚稳态的概率就越小,但是也不能完全避免亚稳态。注意采样时钟频率越高,MTBF可能会迅速减小。
  • 有文献给出的数据:对于一个采样频率为200Mhz的系统,如果不做同步MTBF是2.5us,一级DFF同步的MTBF大概是23年,两级DFF同步的大约MTBF大概是640年,MTBF越长出错的概率越小。所以一级看上去不太稳,二级差不多够用了,至于三级可能会影响到系统的性能,而且增加面积,所以看上去没什么必要。
Q:建立时间、保持时间

建立时间和保持时间都是针对触发器的特性说的。

建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被稳定地打入触发器;Tsu就是指这个最小的稳定时间。

保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被稳定地打入触发器,Th就是指这个最小的保持时间。

我们把这段时间称为setup-hold时间(如下图所示)。在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态(Metastability)

建立时间裕量(setup slack):满足设置时序要求的余量。 它确保启动的数据及时到达,以满足锁定要求。一般来说建立时间裕量和保持时间裕量都大于等于0。

clock skew:时钟信号到达两个FF的时间差称之为clock skew(时钟偏斜或时钟延时)

建立时间违例怎么办

  • 增大时钟周期,降低时钟频率,但这意味着速度下降,一般不会这么处理。
  • 重新分配关键路径,将过长的关键路径中的一部分逻辑从关键路径中剥离出来,放到相邻的时序级里,使每一级里面的时序长度相差无几。前提是不破坏系统整体功能,一般使用pipelining。
  • 调整优化组合逻辑结构,尽可能减少组合逻辑延迟。

保持时间违例怎么办

  • 保持时间不满足的话,比较难修复,处理方法就是让它晚到达。增加传输时间,通常采用的做法是在传输路径上插入buffer(其实就是两个反相器构成的器件),不影响逻辑功能,只增加延迟。
    注:插入buffer还有一个功能,就是当信号线过长的时候,其上的RC会增加,可能导致驱动能力减弱,若通过插入buffer来分割长信号线,用以“分段驱动”。

为什么触发器要满足建立时间和保持时间?

因为触发器内部数据的锁存、传递和反馈都是是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。

(比较容易理解的方式)换个方式理解:需要建立时间是因为触发器D端的数据在被时钟上升沿采集前需要经过引导门,它需要经过两个与非门的延迟时间;需要保持时间是因为在时钟沿到来之后,触发器要通过反馈线来封锁引导门,从后级门传到前级门需要经过一个与非门的延迟时间。

RS触发器 D触发器

(1)RS触发器由两个与非门交叉偶尔而成。但输入信号R,S都为1时(RS=11),触发器处于Q=1或Q=0某一状态保持不变,所以它是具有两个稳定状态的双稳态触发器。RS触发器是构成各种功能触发器的基本单元,所以称为基本触发器。
(2)D触发器由钟控RS触发器、引导门和4根反馈线组成。

系统最高速度计算(最快时钟频率)和流水线设计思想:

同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。

假设Tco是触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间(Tco=Tsetpup+Thold);Tdelay是组合逻辑的延时;Tsetup是D触发器的建立时间。假设数据已被时钟打入D触发器,那么数据到达第一个触发器的Q输出端需要的延时时间是Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,则时钟的延迟必须大于Tco+Tdelay+Tsetup,也就是说最小的时钟周期Tmin =Tco+Tdelay+Tsetup,即最快的时钟频率Fmax =1/Tmin。

FPGA开发软件也是通过这种方法来计算系统最高运行速度Fmax。因为Tco和Tsetup是由具体的器件工艺决定的,故设计电路时只能改变组合逻辑的延迟时间Tdelay,所以说缩短触发器间组合逻辑的延时时间是提高同步电路速度的关键所在。由于一般同步电路都大于一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求。故只有缩短最长延时路径,才能提高电路的工作频率。可以将较大的组合逻辑分解为较小的N块,通过适当的方法平均分配组合逻辑,然后在中间插入触发器,并和原触发器使用相同的时钟,就可以避免在两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。

这就是所谓"流水线"技术的基本设计思想,即原设计速度受限部分用一个时钟周期实现,采用流水线技术插入触发器后,可用N个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。这样做的坏处是会增加数据输出的时钟周期个数,每插入一个寄存器,数据就会延时一个Tclk,但是好在不会影响吞吐量,所以这是最建议的办法。注意,流水线设计会在原数据通路上加入延时,另外硬件面积也会稍有增加。

Q:有关setup,hold时间的题目

1:给了reg的setup,hold时间,求中间组合逻辑的delay范围。

2:时钟周期为T,触发器D1的建立时间最大为T1max,最小为T1min,该触发器的数据输出延时为Tco。组合逻辑电路最大延迟为 T2max,最小为T2min。:问,触发器D2的建立时间T3和保持时间T4应满足什么条件。

3:计算电路的最大工作频率

建立时间和保持时间关系详解

理解建立时间保持时间需要一个模型,如下图所示。

时钟沿到来时采样数据D,将采到的数据寄存下来,并输出到Q端,所以如果没有新的时钟沿到来,则Q端输出的一直是上次采样的数据,每来一个时钟沿,采样一次数据D。

那么分析这个建立时间和保持时间,我们分两种情况,一种是clka没有传输延时(clock skew),一种是有传输延时,前者相对容易一些。
在这里插入图片描述
建立时间太短或者保持时间不够,均不能在clk的上升沿采集到正确的数据。

后面分析需要用到的参数:
  Tco: 数据正确采样后从D端到达Q端的延时,触发器固有属性,不可改变
  TDelay: D1输出端到D2输入端的组合逻辑延时和布线延时
  Tsu: 触发器的建立时间,触发器固有属性,不可改变
  Th: 触发器的保持时间,触发器固有属性,不可改变
  Tclk: 时钟周期
  t1: 假设源时钟为clka,clka到达D1的延时
  t2: 同t1,是clka到达D2的延时

无传输延迟分析
在这里插入图片描述
建立时间:
在这里插入图片描述
为了画图分析方便,我们假设组合逻辑的Delay延迟非常大,如下图所示。
在这里插入图片描述
保持时间:
在这里插入图片描述
有传输延迟分析:

红色部分是时钟偏移t2-t1
在这里插入图片描述
建立时间:
在这里插入图片描述

在这里插入图片描述
保持时间:
在这里插入图片描述

分析建立时间时,考虑最坏的情况是:触发器的输出延时最大,组合逻辑电路的延时也最大
分析保持时间时,考虑最坏的情况是:触发器的输出延时最小,组合逻辑电路的延时也最小

(建立时间的最大值与保持时间的最大值之和是时钟周期Tclk)

Q:锁存器、触发器、寄存器三者的区别?

(1)概念

锁存器:电平敏感的存储器件称为锁存器;分高电平锁存器和低电平锁存器,用于不同时钟间的同步。在使能信号有效时latch相当于通路,输出端的信号随着输入信号变化,在使能信号无效时latch保持输出状态。这意味着锁存器的应用场合是时钟信号(使能信号)先到,数据信号后到。

触发器:由交叉耦合的门构成的双稳态存储器件称为触发器,分为上升沿触发和下降沿触发,可认为是两个不同电平敏感的锁存器串联而成,前一个锁存器决定了触发器的建立时间,后一个锁存器决定了触发器的保持时间。触发器的应用场合是数据信号先建立,时钟信号后建立,在CP上升沿时刻将数据打入触发器。

寄存器:在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储 n位二进制码的寄存器。

(2)区别(锁存器和触发器的区别)

latch由电平触发,非同步控制。DFF由时钟沿触发,同步控制。

latch容易产生毛刺(glitch),DFF则不易产生毛刺。
(为什么?因为latch是电平触发,在其使能的阶段,输出端完全跟随输入端,如果输入端有了毛刺那么就会立刻传导给输出端。但是DFF是上升沿或下降沿敏感,毛刺出现的时候,只有等到上升沿或是下降沿出现才能传递给输出端口,且因为FF有setup和hold time的规定,数据信号会稳定下来,因此DFF相对于latch,其传递毛刺的概率要小的多。)

如果使用门电路来搭建latch和DFF,则latch消耗的门资源比DFF要少,这是latch比DFF优越的地方。所以,在ASIC中使用 latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个latch需要多个LE才能实现。

latch将静态时序分析变得极为复杂。一般的设计规则是:在绝大多数设计中避免产生latch。它会让您设计的时序完蛋,并且它的隐蔽性很强,非老手不能查出。latch最大的危害在于不能过滤毛刺。这对于下一级电路是极其危险的。所以,只要能用D触发器的地方,就不用latch。

有些地方没有时钟,也只能用latch了。比如现在用一个clk接到latch的使能端(假设是高电平使能),这样需要的setup时间,就是数据在时钟的下降沿之前需要的时间,但是如果是一个DFF,那么setup时间就是在时钟的上升沿需要的时间。

这就说明如果数据晚于控制信号的情况下,只能用 latch,这种情况就是,前面所提到的latch timing borrow。基本上相当于借了一个高电平时间。也就是说,latch借的时间也是有限的。

(3)为什么现在多用register?行为级描述中latch如何产生的?

Latch(锁存器)是电平触发,Register(寄存器)是边沿触发,register在同一时钟边沿触发下动作,符合同步电路的设计思想,而latch则属于异步电路设计,往往会导致时序分析困难,不适当的应用latch则会大量浪费芯片资源。

行为级描述中latch一般是由于if或case逻辑表述不完全产生的。

Q:说说静态、动态时序模拟的优缺点?

静态时序分析是采用穷尽分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过 对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。
它不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计 进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计,因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中。

动态时序模拟就是通常的仿真,因为不可能产生完备的测试向量,覆盖门级网表中的每一条路径。因此在动态时序分析中,无法暴露一些路径上可能存在的时序问题。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值