chapter2——时钟和复位

1.同步设计

在同步设计中由单个主时钟和单个主置位/复位信号驱动设计中所有的时序器件,对于ASIC的时钟域控制最安全的方法就是同步设计。

  • 避免使用行波计数器

由于第一个触发器到q的延迟而使第二个触发器的时钟输入产生偏移,而且不能在每个时钟边沿都激活。所以用触发器来驱动其他触发器的时钟输入端,一般会存在问题。用这种方式连接两个以上的触发器就会形成行波计数器,由于使用了更多的触发器,会使延迟累积增加,所以不推荐使用这种方式。
在这里插入图片描述

  • 门控时钟

时钟线上的门控单元会导致时钟偏移,并会引入尖峰脉冲作用于触发器。在时钟线上存在多路复用器时,这个问题尤为严重。
在这里插入图片描述
含门控时钟的设计在仿真时可能工作正常,但是进行综合时就会出现问题。

  • 双边沿或混合边沿时钟

如下图所示,两个触发器由两个相位相反的时钟信号控制。这会为使用同步复位和使用插入扫描链这样的测试方法带来麻烦,同时也增加确定关键信号的路径的难度。
在这里插入图片描述

  • 用触发器驱动另一个触发器的异步复位端

在下图中,第二级触发器的输出不仅仅只受时钟边沿的影响,这违反了同步设计原理。此外,该电路还包含第二级触发器时钟和复位之间的潜在竞争条件。

在这里插入图片描述

2.推荐的设计技术

  • 避免在设计中出现组合环路

组合环路是数字设计中导致不稳定和不可靠的最常见因素。在同步设计中,所有反馈回路都应包含寄存器。组合环路建立了不含寄存器的直接反馈回路,这违背了同步设计原理。

在HDL语言中,当信号经过若干组合always块产生自身时,或者算术表达式左边的内容也出现在右边时,就会形成组合环路。组合环路对设计是一种冒险,在遇见组合环路时综合工具总是会报错,其是不可综合的。

解决这个问题的简单方法是在组合环路中引入一个触发器或寄存器,以将直接通路打断。如下图,寄存器的输出通过组合逻辑直接控制同一个寄存器的异步输入端。

在这里插入图片描述

  • 避免数字设计中的延迟链

在用两个或多个带有单扇入和单扇出的连续节点产生延迟时,就会形成延迟链。延迟链通常出现在异步设计中以用来解决由其他组合逻辑导致的竞争条件。

延迟链会导致各种各样的设计问题,包括增加设计对操作环境的敏感性,降低设计的可靠度,以及增加将设计移植到不同器件结构上的难度。

  • 避免使用异步脉冲产生器

设计通常要求基于某些事件产生脉冲,设计人员有时使用延迟链产生单个脉冲(脉冲产生器)或一系列脉冲(多振子)。有两种常用的方法可以产生脉冲,但这些技术都是纯异步的,应尽可能避免使用。

异步产生的脉冲宽度常常为综合和布局布线软件带来难题。脉冲宽度可能不适用于所有的PVT环境,并且转移到不同技术节点时脉冲宽度也会变化。除此之外,因为静态时序分析不能用来验证脉冲宽度,所以验证工作会变得困难。

  • 避免使用锁存器

在数字设计中,锁存器用来在新的值到来前保持原来信号的值。避免在所有可能的位置使用锁存器,而应用触发器代替。

锁存器会为设计增加各种各样的问题。虽然锁存器是与寄存器相似的存储器件,但是它们有根本的区别。锁存器是连通模式的,即在数据输入和输出之间存在直接通路。输入端的毛刺能传递到输出端。

如下图所示,如果X和Y信号都变为高,因为锁存器由电平触发,所以将它们同时开启会使电路产生震振荡。

在这里插入图片描述
锁存器常常使得电路不可测,大多数DFT工具和自动测试程序生成器都不能很好的处理锁存器。
在写rtl代码时,忽略if及case中的分句也会形成锁存器,所以应该
1)将条件语句中的分支写全。
2)case语句中记得写default。

  • 避免使用双沿时钟

使用双沿时钟是指在时钟的上升沿和下降沿都传输数据。这种改变使得数据传输在给定的时钟速率下能达到双倍的吞吐率。双沿输出级时钟是一种增加设计最大可能输出速度的有效方法,但是它违反了同步电路的原理并将导致一系列问题。

电路结构如下所示:
在这里插入图片描述

使用双沿时钟会遇到的问题:
1)不对称的时钟占空比会导致违背建立和保持时间。
2)很难确定关键信号的路径。
3)很难使用像插入扫描链这样的设计方法学,因为它要求所有寄存器使用同样的时钟边沿。

在对性能以及速度要求很高的情况下,并且无法承受使用等效同步电路在DFT和验证方面所带来的额外开支时,也可以使用双沿时钟。

3.时钟方案

  • 内部产生的时钟

应尽可能避免在内部产生时钟,其会导致设计功能和时序问题。组合逻辑搭建的时钟产生器会引入毛刺,使得功能出现问题,此外由组合逻辑所导致的延迟也会导致时序方面的问题。

用来产生内部时钟的组合逻辑也会增加时钟线上的延迟。在某些情况下,时钟线上的逻辑延迟会导致时钟偏移比两个寄存器之间的数据路径延迟更大。如果时钟偏移大于数据延迟,就会违背寄存器的时序要求,设计的功能也不会正确。

  • 分频时钟

许多设计需要来自于主时钟的分频时钟。在设计中要保证大多数时钟来自于锁相环(PLL)。使用PLL能避免由异步时钟分频逻辑引起的许多问题。在对主时钟进行分频时,应该始终使用同步计数器或状态机。

此外,设计应该保证总是由寄存器直接产生分频时钟信号。永远不要对计数器或状态机的输出进行解码,然后产生时钟信号;这种实现方式常常会导致毛刺和尖峰脉冲。

  • 行波计数器

行波计数器使用级联寄存器,即每个寄存器的输出引脚连接到下一级寄存器的时钟引脚上。

在这里插入图片描述

因为计数器在各阶段创建行波时钟,所以这种级联会导致问题。这些行波时钟会对STA和综合工具带来麻烦。所以应该尝试避免使用这种结构以减少验证的工作量。

尽管使用行波计数器存在各种挑战和问题,但是在功耗较高的系统中很适合使用这种计数器,因为这样能大量降低由逻辑或SOC引起的峰值功耗。

  • 多路时钟

时钟多路器用于使同一个逻辑功能具有不同的时钟。例如,需要处理多个频率标准的通信应用常常使用多个时钟。

如果能满足以下标准,时钟多路操作就是可接受的:
1)在初始化配置后,时钟多路逻辑就不再改变。
2)在测试时,设计会绕过功能时钟多路逻辑而选择普通时钟。
3)在时钟切换时,寄存器始终处于复位状态。
4)在时钟切换时产生的短暂错误响应没有负面影响。

如果不满足以上条件,就必须使用同步设计以确保寄存器没有违背时序,时钟信号上不出现毛刺同时没有竞争条件或其他麻烦。

  • 同步时钟使能和门控时钟

门控时钟使用使能信号开关时钟,实现对某些门控电路的控制。如下图所示,在时钟关闭时,相应的时钟域就会关闭,其功能会无效。
在这里插入图片描述

门控时钟是减少功耗的有力手段。在时钟被门控关闭后,该时钟网络和其中的寄存器都会停止翻转,因此它们的功耗减少。

然而,由于门控时钟并不是同步设计方案的一部分,因此会显著增加设计时间和验证的工作量。同时,门控时钟会增加时钟偏移并对毛刺敏感,所以会导致设计失败。

4.门控时钟方法学

在传统的同步设计风格中,系统时钟连接到每个寄存器的时钟端。这使得功耗主要由三个部分组成。
1)在每个时钟沿变化的组合逻辑所产生的功耗(由于触发器驱动这些组合逻辑)。
2)由触发器产生的功耗(即使在触发器的输入和内部状态未变化,该功耗依然存在)。
3)设计中时钟树产生的功耗。

对时钟路径进行门控能大幅降低触发器的功耗。门控时钟可以存在于时钟树的根部、末端,或两者之间的任何位置。

由于时钟树几乎消耗了整个芯片功耗的50%,因此最好始终在根部产生或关闭时钟,以使
整个时钟树都关闭,而不是沿时钟树在末端才关闭时钟。

  • 不含锁存器的门控时钟电路

不含锁存器的门控时钟使用一个简单的“与”门或“或”门实现(取决于触发器使用哪个边沿),如下图所示:
在这里插入图片描述
为了避免过早截断时钟脉冲或误产生多个时钟脉冲(或时钟上的毛刺),正确的操作强制要求使能信号从时钟上升沿起到时钟下降沿为止一直保持常量。

这种限制使得在基于单时钟触发器的设计中不适合使用不含锁存器的门控时钟。

  • 基于锁存器的门控时钟电路

基于锁存器的门控时钟风格向设计中加入了一个电平敏感的锁存器,以在时钟活跃沿和不活跃沿之间保持使能信号不变,这样就无需依靠门控电路本身来满足这一要求了,如下图所示:
在这里插入图片描述
由于锁存器能捕捉到使能信号并使它保持到产生完整的时钟脉冲,因此使能信号只需要在时钟上升沿附近保持稳定即可。使用这种技术,每次只需要改变门的一个输入端来打开或关闭时钟,就能保证电路的输出不含任何毛刺或尖峰脉冲。

5.复位信号的设计策略

复位最基本的目的是使SOC进入一个能进行稳定操作的正确状态。

有关同步复位级异步复位优缺点:异步复位同步释放

  • 移除异步复位的问题

移除系统中的异步复位会使芯片进入不稳定的未知状态。在释放复位时必须要注意避免这种情况。在使用同步复位时,复位信号的前沿和尾沿必须远离时钟的有效边沿。

在移除异步复位信号时,有两个潜在问题:
1)违背复位恢复时间。
2)复位移除会在不同时序元件的不同时钟周期内发生。

  • 过滤复位毛刺

异步复位对毛刺很敏感,这就意味着任何满足触发器最小复位脉冲宽度的输入都能引起触发器复位。如果复位线受到毛刺的影响,这就会成为问题。可以通过加入一个数字延时的方法来解决。

6.控制时钟偏移

整个芯片中时钟信号到达时间的差异称为时钟偏移。时序必须满足寄存器建立和保持时间的要求是基本的设计原则,而数据传播延迟和时钟偏移都用于与之相关的计算。

  • 短路径问题

时钟偏移中的短路径问题与触发器的保持时间违背很相似。在两个相邻触发器之间的数据传播延迟比时钟偏移还短时,就会出现问题,如下图所示:
在这里插入图片描述
由于同一个时钟沿到达第二个触发器比新数据要慢,因此第二个触发器在与第一个触发器同样的边沿处,切换为与第一个触发器同样的值。这会使U2在与U1同一个边沿处移位同样的数据,最终导致功能错误。

  • 使时钟偏移最小化

将时钟偏移减至最小值是解决短路径问题的最好方式。将设计中的时钟偏移保持在触发器的最小延迟之下能提高设计对所有短路径问题的可靠性。
以下是一些方法:
1)在数据路径上加入延迟
通过在数据路径上增加延迟而最终使整个数据路径的延迟大于时钟偏移,可以消除短路径问题。
2)时钟反转
将时钟相对于数据反转使用,这样就自动消除了时钟偏移。在发送寄存器接收到时钟沿前,时钟会先驱动接收触发器读入发送值。如下图:
在这里插入图片描述
可以看出,在插入足够多的延迟后,接收触发器会比源触发器先接收到有效时钟沿。这是一种以牺牲建立时间为代价提高保持时间的方法。

3)交替相位时钟
交替使用时钟沿、交替使用时钟相位、行波时钟结构

4)平衡线路长度

设计电路时可以使用平衡线路长度的方式保证低时钟驱动器偏移。除了保持所有时钟线长度相等,也应保证各终端负载相同。这样可以保证线路长度恰当地平衡。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值