FPGA中的时钟域问题
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中的时钟域问题的更多相关文章
- 基于FPGA的跨时钟域信号处理——专用握手信号
在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信.异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同 ...
- 【转】关于FPGA中建立时间和保持时间的探讨
时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...
- FPGA中亚稳态相关问题及跨时钟域处理
前言 触发器输入端口的数据在时间窗口内发生变化,会导致时序违例.触发器的输出在一段时间内徘徊在一个中间电平,既不是0也不是1.这段时间称为决断时间(resolution time).经过resolut ...
- FPGA跨时钟域处理方法
文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...
- FPGA基础学习(3) -- 跨时钟域处理方法
文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...
- FPGA跨时钟域握手信号的结构
FPGA跨时钟数据传输,是我们经常遇到的问题的,下面给出一种跨时钟握手操作的电路结构.先上图 先对与其他人的结构,这个结构最大的特点是使用 req 从低到高或者高到低的变化 来表示DIN数据有效并开始 ...
- 三叔学FPGA系列之一:Cyclone V中的时钟资源
之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...
- 跨时钟域设计【一】——Slow to fast clock domain
跨时钟域设计是FPGA设计中经常遇到的问题,特别是对Trigger信号进行同步设计,往往需要把慢时钟域的Trigger信号同步到快时钟域下,下面是我工作中用到的慢时钟域到快时钟域的Verilog HD ...
- 异步FIFO跨时钟域亚稳态如何解决?
跨时钟域的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟域的,写指针是属于写时钟域的,而异步FIFO的读写时钟域不同,是异步的,要是将读时钟域的读指针与写时钟域 ...
- FPGA中亚稳态——让你无处可逃
1. 应用背景 1.1 亚稳态发生原因 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery ti ...
随机推荐
- java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现
前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...
- 【Unity3D】Bloom特效
1 Bloom 特效原理 Bloom 特效是指:将画面中较亮的区域向外扩散,造成一种朦脓的效果.实现 Bloom 特效,一般要经过 3 个阶段处理:亮区域检测.高斯模糊.Bloom 合成. 本 ...
- Swoole从入门到入土(15)——WebSocket服务器[初步接触]
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.换句话说,Websocket让web可以与服务端实现长连接. 在Swoole中,通过内置的 WebSock ...
- thinkphp集成editormd一系列实战
介绍 最近php搞了个博客,需要集成markdown编辑器(富文本的太low了,效率也低),用的是时下比较火的editormd,除了基本的文档编辑我这里还实现了几个自己的需求: 使用ctrl-v实现将 ...
- Elasticsearch系列之-windows安装和基础操作
ElasticSearch安装 安装JDK环境 因为ElasticSearch是用Java语言编写的,所以必须安装JDK的环境,并且是JDK 1.8以上 官网:https://www.oracle.c ...
- 【Docker】.Net Core 结合Nlog集成ELK框架(Elasticsearch , Logstash, Kibana) (五)
之前有项目有用过ELK做过日志架构,不过是非docker形式安装的,今天来探究一下ELK的容器化技术 Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动 ...
- 【LeetCode回溯算法#12】二叉树的直径,树形dp的前置内容(使用dfs)
二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 . 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 .这条路径可能经过也可能不经过根节点 root . 两节点之间路径的 长度 由它们 ...
- 【八股cover#4】OS Q&A与知识点
OS Q&A与知识点 重点知识 进程 概念 我们编译的代码可执行文件只是储存在硬盘的静态文件,运行时被加载到内存,CPU执行内存中指令,这个运行的程序被称为进程. 进程是对运行时程序的封装 ...
- 【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
问题描述 在App Service for Linux环境中,部署Django应用,访问应用页面时候,出现css.js等静态资源文件加载失败问题. 浏览器Console提示的错误消息为: Refuse ...
- book 电子书转换 在线工具
https://convertio.co/download/911d3a3f39db0b2e39ed6e3c8acb31f6be786a/ Convertio