FPGA中的时钟域问题

一、时钟域的定义

所谓时钟域,就是同一个时钟驱动的区域。这里的驱动,是指时钟刷新D触发器的事件,体现在verilog中就是always的边沿触发信号。单一时钟域是FPGA的基本组成部分,但是随着设计规模扩大,多时钟域的设计是必要的。维持庞大的单时钟域对时钟源的要求是极为苛刻的。数字电路系统一般采用时钟分区和时钟网络来保证时钟到达每个单元的时间基本一致,但是,随着设计规模的扩大,时钟网络也变得极为复杂,且同步效果变差。所以,进行多时钟域设计是必要的。

二、Altera中PLL的时钟管理

Altera中可以使用PLL将输入时钟分为多个时钟域,以便实现不同时钟域的驱动。门控时钟也可以产生不同的时钟域(虽然不推荐,但是在简单的设计中是可以实现的)。在TimeQuest中默认所有时钟都是关联的,对于无数据交换的时钟域,需要设置伪路径来满足时序条件。对于PLL的输出时钟,可以使用多周期路径约束,就是对输入时钟约束后对PLL所有输出时钟进行约束。

三、单比特信号跨时钟域

(1)跨时钟域(CDC)技术

在不同的时钟域之间设计需要使用CDC技术,其难点在于EDA工具无法发现这个问题,STA进行独立的时钟域分析,需要伪路径或者多周期路径实现关联后才能实现跨时钟域的分析。这就要求设计者在设计之初就很好的考虑这个问题。

(2)亚稳态及其危害

时钟边沿前有建立时间,后有保持时间,一旦违反两个要求之一,就发生时序违规。违规的后果就是产生亚稳态,即电平处于逻辑0和1之间的状态,可能产生逻辑错误。亚稳态持续的时间和具体的时钟有关。

(3)亚稳态的解决方法1-双触发

在跨时钟域的设计中,有两种情况:

保证数据精确识别,牺牲部分数据;

保证数据完整识别,牺牲部分时间。

两种情况都需要同步器。常用的同步器就是两级级联寄存器。第一级寄存器将采样变化数据的信号缓存,有第二级寄存器读出亚稳态的信号。实际上,亚稳态并没有由于同步器消除,只不过降低了亚稳态出现逻辑错误的可能。

(4)三级触发器

亚稳态出现错误的间隔时间(MTBF)是对同步器性能的描述。故障间隔时间越长,同步效果越好。使用三级触发器要比二级触发器的效果要好。

(5)如何同步快速信号到慢速信号

前面的多级触发器同步器可以有效处理从低速信号传输到高速信号,但是对于高速信号传输到低速信号,则需要其他的结构实现同步。

1️⃣开环方案,即将高速信号展宽,大于低速信号的1.5倍为好。该方案无需握手,是用于时钟频率固定且信号可分析的设计中。

2️⃣闭环方案,将时钟域之间做成握手通信模型,优势在于保证信号采样正确,缺点在于时间等待长,需要信号保持足够长的时间。

四、多比特信号跨时钟域

(1)融合多比特信号为单比特信号

某些多比特信号之间存在关联性,使用单比特信号即可满足设计的要求。这时候对信号进行融合,可以有效地保证信号的稳定性。

(2)多周期路径规划

就是加入同步信号,保证数据完整读取的时机是正确的,进而确保数据完整。是一个单向握手模型。

五、使用fifo处理多比特跨时钟域信号

异步fifo支持不同周期的时钟写入和读取,可以将多比特信号暂存后在读取,保证数据完整。使用异步fifo需要考虑写入速率、读取速率和最大序列尺寸。

六、多时钟域设计分区

设计分区,就是将不同时钟域划分为不同的区域,分别进行时序分析。同步器单独作为一个分区,不做时序分析(存在时序违规,但是可以自我调整的模块)。这样可以加快时序分析的效率和时序报告的明确性。

分区后的时序分析也是基于这个方案的,注意在设计时忽略同步器的路径时序。

七、门控时钟行波时钟的处理

(1)行波时钟和门控时钟

行波时钟:寄存器驱动的时钟

门控时钟:组合逻辑生成的时钟

(2)处理原则

尽量不适用衍生时钟,使用PLL锁相环或者数字锁相环实现时钟产生。

实在使用了就尽量不要有跨派生时钟域的数据同步。

Altera器件出现保持时间问题可以利用软件自动布线延时来保证保持时间的合理。

Altera中可以使用ALTCLKCTRL这类的时钟处理IP实现时钟的派生,可以避免派生时钟的时序问题。

FPGA中的时钟域问题的更多相关文章

  1. 基于FPGA的跨时钟域信号处理——专用握手信号

    在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信.异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同 ...

  2. 【转】关于FPGA中建立时间和保持时间的探讨

      时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...

  3. FPGA中亚稳态相关问题及跨时钟域处理

    前言 触发器输入端口的数据在时间窗口内发生变化,会导致时序违例.触发器的输出在一段时间内徘徊在一个中间电平,既不是0也不是1.这段时间称为决断时间(resolution time).经过resolut ...

  4. FPGA跨时钟域处理方法

    文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...

  5. FPGA基础学习(3) -- 跨时钟域处理方法

    文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...

  6. FPGA跨时钟域握手信号的结构

    FPGA跨时钟数据传输,是我们经常遇到的问题的,下面给出一种跨时钟握手操作的电路结构.先上图 先对与其他人的结构,这个结构最大的特点是使用 req 从低到高或者高到低的变化 来表示DIN数据有效并开始 ...

  7. 三叔学FPGA系列之一:Cyclone V中的时钟资源

    之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...

  8. 跨时钟域设计【一】——Slow to fast clock domain

    跨时钟域设计是FPGA设计中经常遇到的问题,特别是对Trigger信号进行同步设计,往往需要把慢时钟域的Trigger信号同步到快时钟域下,下面是我工作中用到的慢时钟域到快时钟域的Verilog HD ...

  9. 异步FIFO跨时钟域亚稳态如何解决?

    跨时钟域的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟域的,写指针是属于写时钟域的,而异步FIFO的读写时钟域不同,是异步的,要是将读时钟域的读指针与写时钟域 ...

  10. FPGA中亚稳态——让你无处可逃

    1. 应用背景 1.1         亚稳态发生原因 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery ti ...

随机推荐

  1. java 从零开始手写 RPC (02)-netty4 实现客户端和服务端

    说明 上一篇代码基于 socket 的实现非常简单,但是对于实际生产,一般使用 netty. 至于 netty 的优点可以参考: 为什么选择 netty? http://houbb.github.io ...

  2. 【Unity3D】AudioSource组件

    1 简介 ​ 1)AudioSource 与 AudioListener 简介 ​ AudioSource(音频源)组件用于控制播放 AudioClip(音频片段),能够控制 2D 和 3D(距离越远 ...

  3. Rollup的基本使用

    Rollup的基本使用 rollup.js是一个模块打包工具,可以使项目从一个入口文件开始,将所有使用到的模块文件都打包到一个最终的发布文件中,Rollup极其适合构建一个工具库,Vue.js源码就是 ...

  4. Js模块化导入导出

    Js模块化导入导出 CommonJs.AMD.CMD.ES6都是用于模块化定义中使用的规范,其为了规范化模块的引入与处理模块之间的依赖关系以及解决命名冲突问题,并使用模块化方案来使复杂系统分解为代码结 ...

  5. Spring Boot图书管理系统项目实战-11.检索图书

    导航: pre:10.借还统计 next: 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 2.1 index.html <!D ...

  6. Flink本地模式安装和使用

    Flink官方主页:https://flink.apache.org/ . 安装部署 不同版本的Flink对JDK版本要求不尽相同,需要根据具体的Flink版本要求先安装好JDK环境. 通常,在Fli ...

  7. 【LeetCode双指针】合并两个有序数组,从后向前遍历

    合并两个有序数组 https://leetcode.cn/problems/merge-sorted-array/ 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m ...

  8. 【Azure 云服务】Cloud Service Worker Role Workerrole突然停机,查看Events发现 Defrag Error (0x8900002D)

    问题描述 Cloud Service Worker Role Workerrole突然停机,查看Events,发现是错误源为 Defrag. 错误消息: The volume Windows was ...

  9. magic book

    magic book.md body { font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFo ...

  10. SQL SERVER——高可用技术概述

    自从SQL Server 2005以来,微软已经提供了多种高可用性技术来减少宕机时间和增加对业务数据的保护,而随着SQL Server 2008,SQL Server 2008 R2,SQL Serv ...