第三章 同步电路与跨时钟电路设计

3.1 亚稳态

同步电路

由统一的全局时钟控制

  • 优点:
    • 保证时序收敛,避免竞争冒险
    • 减少毛刺、噪声影响
  • 缺点:
    • 时钟偏斜 skew
    • 时钟抖动 jitter
    • 时钟树综合,加入大量延迟单元,增加了功耗和面积

异步电路

没有统一的全局时钟,数据传输可在任何时候发生

  • 优点:
    • 模块化
    • 对信号延迟不敏感
    • 没有skew问题
    • 潜在高性能
    • 电磁兼容性
    • 低功耗特性
  • 缺点:
    • 设计复杂
    • 缺少EDA工具的支持
    • 在VLSI中应避免

时钟域

相对于时钟源点而言,即从同一个PLL中产生。

亚稳态

指触发器无法在规定的时间段内达到可确认的状态
无法预测该单元的输出电平,也无法预测何时才能稳定在某个正确的电平上;
在此期间,触发器输出一些中间级电平,或处于振荡状态,并且沿信号通道传播下去

用故障间隔平均时间,衡量亚稳态的影响

$MTBF=\frac{e^{t_{MET}/C_{2}}}{C_{1}f_{CLK}f_{DATA}}$

  • tMET:寄存器从时钟上升沿触发后的时序余量,从源寄存器到目的寄存器的建立时间的余量
  • fCLK:接受时钟域的时钟频率
  • fDATA:数据变化的频率
  • C1和C2:与器件有关的参数,通常固定

tMET=Tsample-Tco-Tdata-Tsu+(TCLK2-TCLK1)

采样时钟周期-输出信号正常-到达下一级寄存器的延迟-下一级寄存器+时钟网络延时

设计中能做的是:减小Tdata(不在两级寄存器间添加任何逻辑)

同步策略

双锁存器电平同步器(实际上是两个触发器)

  • 优点
    • 结构简单,易实现
  • 缺点
    • 增加了两级触发器的延迟
  • 适用条件
    • 仅能降低,不能避免

3.2 单bit信号的跨时钟域传输电路

慢到快——边沿检测同步器

将慢时钟域的一个脉冲信号搬移并缩小到快时钟域一个周期的信号
  • 适用条件
    • 输入数据宽度 > 一个接受时钟周期 + 一个同步触发器的hold时间
    • 两个同步周期宽度最安全
    • 慢时钟域的脉冲足够保持到被快时钟的同步器拿到

快到慢——脉冲同步器

将快时钟域的一个单时钟宽度的脉冲取出,并搬移到慢时钟域中的一个单时钟宽度的脉冲
  • 适用条件
    • 输入脉冲的最小间隔必须等于两个同步器周期
      • 快到慢,输入脉冲过近,则输出脉冲宽度大于一个时钟宽度
      • 慢到快,输入脉冲过近,则不能检测到每个脉冲

三种同步器比较

类型应用输入输出适用条件
电平检测同步电平信号
慢到快
电平电平输入信号保持两个接受时钟周期宽度
同步后,输入信号恢复无效状态
边沿检测慢到快电平/脉冲脉冲输入信号保持两个接受时钟周期宽度
脉冲检测同步单周期脉冲信号
快到慢
脉冲脉冲输入脉冲至少间隔两个接受时钟周期
三种同步器比较

结绳法

  • 原理:将单脉冲延长
  • 利用脉冲:
    • 边沿作为时钟
    • 电平作为选择器、异步复位或置位
  • 关键点:何时结束,回到等待采样的状态
    • 利用采集到的脉冲,做异步复位、置位
    • 利用采集到的脉冲再次结绳,做握手响应信号
  • 总结:
    • 适用范围广,适合任何时钟域的过渡,解决快到慢转换的问题
    • 实现复杂、效率不高,对于高性能设计慎用

1 数据的边沿作为时钟

Din_ClkA作为数据(0->1),FF1输出1,等待ClkB采样;
ClkB采样后FF4输出1,若Din_ClkA为0,复位等待下一次采样。

将快时钟信号的脉冲延长,等到满时钟同步采样后再结绳,还原为原来的脉冲周期宽度。

在慢时钟采样快时钟,结绳法适合采样数据较少(脉冲间隔较大)的控制信号。

Ta>3Tb,即等待3个ClkB时钟后完成复位,才允许下一个输入脉冲

2 数据作为异步复位信号

将触发器的输出展宽为单周期的输出

3 利用握手协议

总结

  • 慢到快:考虑亚稳态
  • 快到慢:考虑亚稳态,和慢时钟的采样速率问题

3.2a 多bit指示信号跨时钟域

  • 合并成1个信号
  • 若不能合并,如译码信号:增加一个控制信号,当稳定后通知接受时钟域开始采样

3.2b 多bit数据流跨时钟域

数据流相对于指示信号:连续性(背靠背)传输;具有较高传输速率。

  • SRAM
  • FIFO
    • 先进先出的存储结构
    • 没有外部读写地址线
    • 读写指针自动加1完成
    • 用途
      1. 异步FIFO解决跨时钟域数据传输
      2. 不同宽度的数据接口进行匹配(8bit->16bit)

3.3 FIFO空满信号生成机制与深度设计方法

  • 宽度N:一次操作的数据位数
  • 深度M:可以存储M个N位数据
  • 满标志:FIFO已满或将要满时,阻止写操作造成溢出(overflow)
  • 空标志:FIFO已空或将要空时,阻止读操作造成无效数据的读出(underflow)
  • 读时钟:时钟到来时进行读操作
  • 写时钟:时钟到来时进行写操作
The block diagram for FIFO style #1

空满信号生成机制

读写指针第一次相等→FIFO空;
读写指针第二次相等→FIFO满,写指针已经折回(wrapped around);

解决方法:在地址中添加额外位(extra bit)
对于2^n深度的FIFO,需要(n+1)位宽度的地址

使用两级同步器仅能同步单比特信号
为了解决跨时钟域多比特传输(地址),将二进制地址转化为格雷码

格雷码特点:

  • 相邻数值仅一位变化(降低亚稳态传递的概率)
  • 是一种循环码,最大和最小也只有1位不同

与二进制转换方法:

gray→bin,最左第二位与相邻左侧XOR,作为当前位,最左第一位不变
bin→gray,最右与相邻左侧XOR,作为当前位,最左第一位不变

格雷码如何判断空满:

空:地址完全相等(包括MSB的extra bit)
满:MSB不相等,此高位不相等,其余位完全相等

如何设计FIFO深度

考虑满足负载最高的时刻
即最坏情况,背靠背传输,
最长连续数据brust_length,brust_time = brust_length/wclk

depth=brust_length – data_num_read

一般化

  • 读wclk,速率A/B
  • 写 rclk,速率X/Y
  • depth = brust_length – brust_time * rclk * X/Y

3.4 FIFO知识点总结

读写指针

2^n深度,格雷码作为地址满足消除亚稳态的要求

非2^n深度:

  • 偶数:基于最接近的格雷码修改
  • 奇数:自行设计逻辑电路或查找表
  • 无特殊需求,简化设计,使用最接近2^n,浪费一定空间,但简化设计复杂度

亚稳态

无法消除,只能降低。
分析格雷码作为地址失效后,地址同步出错(仅1位)。
保证功能正确,在不是真正空的时候产生空标志,但不会空读。

打两拍已经能够避免亚稳态传播

满不一定真满,将要满,小于等于;空不一定真空,快要空,大于等于。保守设计。

整个FIFO 分为:写时钟域、读时钟域、跨时钟域、存储器。

3.5 同步复位异步释放电路设计

复位电路:使电路进入初始状态或其他预知状态

时序电路,双稳态电路,必须有复位信号

  • 同步复位
    • 有利于仿真
    • 有利于时序分析,确保综合出同步时序电路,一般fmax较高
    • 滤除高于时钟频率的毛刺
    • 复位信号有效时长 > 时钟周期,需要考虑时钟偏斜、组合逻辑路径延迟、复位延迟等因素
    • 通常目标库中 DFF 只有异步复位端口,同步复位在数据输入端插入组合逻辑,资源消耗增加
  • 异步复位
    • 使用目标库DFF,节省资源
    • 设计简单
    • 识别方便
    • 复位信号释放(release)时,若在时钟周期附近,易产生亚稳态
    • 容易受到毛刺影响

解决方法:异步复位,同步释放

  • 异步复位:复位信号不需要和时钟同步。快速复位,复位信号一旦有效,电路即处于复位状态
  • 同步释放:复位信号取消时,和时钟同步。即使复位信号小于时钟周期也能捕捉到。有明确的释放时序和组口的恢复时间。

3.6 状态机概述与分类

一种对具有逻辑顺序或时序规律的描述方式

  • 从状态变量入手,确定状态转换关系
  • 从电路输出入手,回溯状态输入及其对应转换关系

基本要素:状态、输出、输入

描述方式:状态转换图、状态转换表、HDL语言

什么是好的状态机(FSM)

  • 安全(完备):不会进入死循环、不会进入非预知的状态,full case
  • 速度快
  • 面积小
  • 易于维护

一段式(应避免)

在同一个always中,描述状态的同步转移、状态输出和输入条件

3.7 两段式与三段式状态机的电路设计结构与分析

两段式

  • 一个always用同步时序描述状态转移
  • 一个always用组合逻辑描述状态转移条件

其输出采用组合逻辑,易产生毛刺

状态转移后的次态(next state)和输出(output)都对当前状态进行判断(current state)

三段式

与两段式区别,采用同步时序逻辑,对 next state 进行判断,寄存FSM输出。

  • 同步寄存器输出
  • 消除组合逻辑易产生毛刺的隐患
  • 有利于时序路劲分组
  • 在FPGA/CPLD上应用更佳

n段指特定FSM建模方式,不是单纯指always块的数量

一段式两段式三段式
推荐不推荐推荐最推荐
简洁冗长最简洁简洁
always123
时序约束不利于利于利于
组合逻辑输出noyesno
综合与布局布线不利于利于利于
可靠可维护最高
代码风格规范性较随意规范规范

小测验

作业

参考

Clifford E. Cummings – Simulation and Synthesis Techniques for Asynchronous FIFO Design

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注