跨时钟域处理

372 阅读3分钟

跨时钟域处理

什么是亚稳态

我:亚稳态指在时钟上升沿进行数据采样时,数据并没有在稳定状态,从而产生了不可预知的采样结果,需要一个决断时间才能稳定下来。 标准答案:触发器无法再某个规定的时间内达到一个可确认的状态。 image.png转载自水印地址博主

亚稳态产生的情形

  1. 只有在异步电路中才能产生亚稳态
  • 同步电路时钟与数据的关系确定,可以保证采样的时机。
  1. 异步复位时
  2. 时钟质量不好,时钟偏移,时钟质量不好

建立时间与保持时间

  1. 建立时间:时钟上升沿来之前,数据保持稳定的最小时间 规定了期间组合逻辑的最大延时
  • 公式:Tcq+Tld < Tperid-Tsu+Tclkdelay
  • Tsu < Tperid-(Tcq+Tld)+Tclkdelay
  • 解决建立时间违例的方法:
    • 降低时钟频率、增大时钟周期
    • 在时钟路径加延时(buffer)、让始终晚点到
    • 更换具有更小器件延时的触发器Tcq更小的
    • 优化组合逻辑,或插入流水线,缩短关键路径
  1. 保持时间:时钟上升沿来之后,数据保持稳定的最小时间
  • 规定了期间组合逻辑的最大延时
  • 公式:Tcq+Tld>Th+Tdelay
  • 解决建立时间违例的方法:
    • 在数据路径上加buffer
    • 更换具有更大器件延时的触发器
    • 优化时钟路径、让始终更早到来

同时发生建立时间与保持时间违例先保证保持时间,建立时间有更多的方法解决

为什么需要

建立时间:因为时钟沿也是需要一定的采样窗口,如果在窗口中数据发生变化电压,不足以使得触发器内部门发生正确的反转,会产生竞争冒险现象,导致输出不稳定。 保持时间:上升沿到达时刻不等于不等于门完全关闭,数据变化还是会影响输出结果。

如何降低亚稳态的影响

  1. 降低时钟频率
  2. 用反应更快的FF(触发器)
  3. 引入同步机制,防止亚稳态的传播
    • 异步信号同步化
    • 采用FIFO对跨时钟域数据通信进行缓冲
    • 对复位电路采用异步复位、同步释放
    • 采用握手机制
  4. 改善时钟质量,用边沿变化快速的时钟信号

同步方法

单bit慢->快时钟

  1. 打两拍,过两级寄存器

多bits慢->快时钟

  1. 异步双端口RAM
  2. FIFO
    • FIFO的深度
      • 与写时钟频率
      • 读时钟频率有关
      • 最差的情况为背靠背传输
      • 读时钟 > 写时钟 深度1即可
      • 写时钟 > 读时钟
      • 明确burst的传输长度
      • 读写效率
      • burst-burst*(CLK_rd * 读效率/CLK_wr*写效率)
      • zhuanlan.zhihu.com/p/166177480
    • 同步FIFO
      • 空满条件判断
      • 多一个地址bit用作空满判断
      • 空:读写地址相同
      • 满:读写地址第一位相反,其他位相同
    • 异步FIFO
      • 读写地址都需同步
      • 多两位进行空满判断
      • 假满假空
      • ctrl模块,产生读写地址,并将地址转换为格雷码
      • 同步模块,将格雷码地址打两拍,传到另一时钟域
      • RAM模块将格雷码地址转换为二进制地址,与自己时钟域地址比较,判断空满
      • 空:读写地址相同
      • 满:第一位相同,第二位相反,其他相同
  3. 格雷码转换
    • 格雷码转二进制
      • 二进制码右移一位异或
    • 二进制转格雷码
      • 第一位不变,其他位为格雷码与高位异或

单bit快->慢时钟

  1. 握手,将快时钟域脉冲信号拉长
  2. 慢时钟域打两拍,再R0&(~R1),找到脉冲
  3. 在快时钟域再打两拍,采到后,反转

多bits快->慢时钟

  1. FIFO(异步FIFO)
  2. RAM(异步双口)