仔细观察

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

这一章主要讲了同步电路设计要注意的一些事项以及时钟和复位的问题。首先是要避免的一些写法

1. 同步设计要避免的问题

1.1 避免使用行波计数器

所谓的行波计数器指的就是用触发器来驱动后续的触发器的时钟输入端了,电路结构如下

image

这种设计主要存在的问题就是触发器存在时钟-数据延迟,这种结构会累加这种延迟,相当于增加了时钟偏移,使电路出现错误

image

1.2 门控时钟

image

同样也是会导致时钟偏移,特别是门控时钟和非门控时钟在一个时钟线上。毕竟比别的触发器多了一层逻辑门,自然要慢一些。

1.3 双边沿

指的是同时使用上升沿和下降沿进行采样

image

这种不是不能用,而是会导致一些问题。

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

image

这种设计导致第二级触发器的输出受时钟和第一级触发器的输出影响。

2. 推荐的设计

2.1 避免组合环路

组合环路指的是组合逻辑形成一个环路,这样可能会导致死循环,正确的方法是环路中间插入寄存器,或者避免出现组合环路。书中提到有的综合工具会对这种代码报错,这一点我没有试验过。还有一种情况值得注意,如下图

image

如果一个带异步复位的触发器的输出经过组合逻辑后驱动本触发器的异步复位端同样也会产生组合环路。

2.2 避免延迟链

延迟链(delay chains)指的是用两个或多个单扇入单扇出的节点来产生延时。这种延迟链的延迟时间依赖于工作环境,是不可取的。常用的做法是用反相器串联来增加延迟。(这里我也有问题,反相器不就是单扇入单扇出的吗?)

2.3 避免异步脉冲产生器

有两种常见的异步脉冲产生器

  • 将一个触发器的信号接到一个逻辑门的两个输入端,其中一个增加一个延迟链来调整两个信号到达的时间
  • 寄存器的输出经过延迟后驱动本寄存器的异步复位端

这两种方法第一种用了延迟链,第二种可能会产生组合环路,总之就是不能使用这种性能未知并且会随环境产生变化的延迟链。书中提了一种同步脉冲产生电路如下

image

其实这个电路更像是上升沿检测电路

2.4 避免使用锁存器

不规范的代码风格容易在设计中引入锁存器。锁存器对电平敏感并且在使能状态下输入输出是透明的,这样也加大了毛刺传输的概率,并且锁存器也不利于时序分析。如果一个变量未能在 always 语句的所有可能执行条件下被赋值就会形成锁存器,因为没有被赋值暗含着“需要保持值”这层意思。

2.5 避免使用双沿时钟

双沿时钟可以在给定的时钟下达到两倍的数据吞吐率,但是也会伴随着一些问题,例如

  • 不对称的时钟占空比导致违反建立时间和保持时间
  • 难以确定关键路径

还是重新强调,不是不能用,而是用的时候要谨慎。

3. 时钟

时钟是同步电路最重要的全局信号,设计时要特别注意时钟的问题。这一节说了一些时钟的相关问题。

3.1 内部时钟

尽量不要使用内部时钟。所谓的内部时钟就是有内部的电路产生的时钟,这种时钟可能会有毛刺等问题使得电路的功能产生错误。

3.2 分频时钟

还是一句话,优先使用 PLL 时钟而不是内部时钟。使用分频器也要由寄存器进行输出。

3.3 多路时钟

简单来说就是某个电路有多个时钟接入,通过 mux 进行选择使用哪一个

image

这种电路其实也是在时钟线上引入了组合逻辑,但是在一些特定的情况下是可以使用的

  • 不会频繁切换时钟,或者一次工作确定某个时钟后不会再改变
  • 测试时会绕过 mux
  • 时钟切换时寄存器处于复位状态
  • 时钟切换所产生的短暂错误不影响整体的功能

4. 门控时钟方法学

门控时钟就是在电路不需要工作时关闭时钟。这一节主要说了一些门控时钟的种类

4.1 不含锁存器的门控时钟单元

这种门控时钟指的是直接用与门或者或门(取决有有效沿)来产生门控时钟。这种门控时钟要求使能信号从时钟活跃沿到不活跃沿之间必须要保持常量,即不能把正在工作的时钟截断,如下图所示

image

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

在门控时钟中加入锁存器可以防止时钟工作时使能信号关闭。这种门控时钟的电路如下所示

image

这个电路产生的时钟是高电平有效的。当 clk 是低电平时,GATED_CLK 自然是低电平,此时锁存器是透明的。假设当 CLK 上升沿到来时 EN 仍处于有效状态,则此有效状态将被保持,也就是说即使 EN 又拉低了此时门控时钟依也是处于使能状态,波形图如下

image

注意如果需要的时钟是下降沿有效则锁存器应该改为高电平使能并且逻辑门也要换成或门

5. 复位信号

复位信号的作用是使电路在上电后能进入一个复位状态以继续工作。使用同步复位还是异步复位,是否所有的触发器都添加复位信号等都是要考虑的问题。

5.1 同步复位

同步复位就是复位信号只有在时钟沿到来时才起作用。例如下面的电路

image

同步复位可能存在的一个问题就是综合工具无法分辨复位信号和其他数据信号,因为从功能上看确实是没有去别的,导致综合出我们不想要的结果,例如下面的电路

image

从逻辑功能上看这两个电路都是一样的,但是问题是如果 load 信号为 x 的话,第二个电路将出现未知态并且此时复位信号也会失去作用而第一个电路不会。两者间的区别就是第二个电路的复位信号“远离”了寄存器。这一点可以通过添加综合命令来指定综合工具尽量将复位信号拉近寄存器(综合命令我还没有去查,总之就是一些会被综合工具识别的注释)。

同步复位的优点是

  • 保证电路是完全的同步电路
  • 综合出更小的触发器
  • 可以过滤掉复位信号的毛刺等

当然同步复位也有缺点

  • 可能需要脉冲展宽器来保证复位信号出现在有效时钟沿
  • 复位信号是否能被外部引脚有效的控制,因为可能会与一些 x 出现
  • 同步复位需要时钟才能生效,如果时钟处于关闭状态则没办法进行复位

5.2 异步复位

异步复位就是复位信号有效时直接重置寄存器,复位端直接接到寄存器上。使用异步复位具有很多优点

  • 保证数据路径是干净的。因为复位信号不作为普通的数据输入而是直接作为寄存器的一个端口
  • 不需要时钟也可以复位

但是使用异步复位也有一些问题

  • 复位是异步的,当复位信号释放时如果恰好处在时钟沿的有效端附近则可能会导致寄存器进入亚稳态
  • 复位信号可能会有毛刺等,产生假复位
  • 复位树的时序需要调整以保证复位信号在一个时钟周期内释放

5.3 异步复位释放的问题

异步复位的释放会有很多的问题

  • 违反复位恢复时间(reset recovery time)。复位恢复时间指的是从复位信号释放到时钟信号到达有效沿之间的时间。恢复时间过短的话可能会引起亚稳态等问题
  • 不同寄存器的复位信号释放时间不同。由于传输延迟等影响不同寄存器的复位信号的释放时间会有错不同从而引发错误

5.4 异步复位信号同步器

为了解决异步复位信号的释放问题,书中提到了下面的复位信号同步器

image

假设复位信号是低电平有效。当复位信号拉低时自然有第二级寄存器输出 0 到复位树使系统处于复位状态,假设在任意时刻复位信号释放,则高电平需要两个时钟周期后才会到达复位树,并且第二级一开始 D 和 Q 端都是 0,因此不存在亚稳态的问题。

5.5 控制时钟偏移

时钟偏移指的是时钟到达不同的寄存器之间的时间差,如下图所示

image

首先说一下短路径(short path)问题,短路径问题发生的原因是两级寄存器之间数据的传递延时小于两者间的是时钟偏移,如下图所示

image

由于 CLK2 和 CLK1 间的偏移太大,当 CLK2 的上升沿到来时第一级寄存器当前周期的采样值已经到达,这样就导致了数据的丢失。这一段的时序分析图如下

image

\[T_{ck2}+T_{hold2}>T_{cq1}+T_{rdq1} \]

时就会产生短路径问题。解决段路径问题最好的方法就是减小时钟偏移,初次之外书中还介绍了几种降低短路径问题的方法,但是在平常的设计里我没有见过类似的应用,这里就不写了。

posted on 2022-01-10 16:13  注意看  阅读(760)  评论(0编辑  收藏  举报