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 ...
随机推荐
- 玩转 CMS2
玩转 CMS2 上篇研究了样式.请求.evn.mock,感觉对效率的提升没有太明显作用. 比如某个工作需要2天,现在1天可以干完,这就是很大的提升. 提高效率的方法有代码复用.模块化.低代码工具. 目 ...
- 如何在Windows上使用Git创建一个可执行脚本?
长话短说,今天介绍如何在windows上使用Git上创建一个可执行的shell脚本. 首先我们要知道windows上Git新添加的文件权限是:-rw-r--r--(对应权限值是644),而通常创建的s ...
- Nacos搭建单机实例
Nacos是阿里开源的微服务架构组件,既可以用作服务注册中心,也可用作配置中心. 虽然Nacos的官方文档也有关于如何部署的说明,但是个人觉得不够详细和连续,故本文将阐述在单机环境实际搭建Nacos环 ...
- 【LeetCode哈希表】前k个高频词,利用哈希表+vector进行排序操作
前k个高频词 https://leetcode.cn/problems/top-k-frequent-words/ 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词. ...
- 【Azure 应用服务】部署Azure Web App时,是否可以替换hostingstart.html文件呢?
问题描述 当成功创建一个Web App时,通过高级工具(Kudu)可以查看 Web App的根目录(wwwroot)中有一个默认的文件(hostingstart.html).它就是应用服务的默认页面. ...
- 【Azure 存储服务】App Service 访问开启防火墙的存储账号时遇见 403 (This request is not authorized to perform this operation.)
问题描述 需要 App Service 访问开启防火墙的存储账号.存储账号中设置为允许选中的VNET访问,同时允许了信任的Azure服务的访问,但是仍然报错 "403 (This reque ...
- SSH原理与实践(二)
主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在上一篇文章[ssh原理与实践(一)]中我们详细介绍了SSH两种 ...
- MySQL基础篇快速记忆和查询
查询 语法: SELECT 标识选择哪些列 FROM 标识从哪个表中选择 去重(Distinct) 在SELECT语句中使用关键字DISTINCT去除重复行 SELECT DISTINCT depar ...
- [.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造
上一章我们说道,如果要使各模块之间解耦,使得各自独立成服务,首先要解除各个模块之间的引用关系. 还记得上一章我们的小项目吗 ?们回到之前的代码上来,当前的项目架构如下图: 这次的任务是将它改造成 ...
- 利用Nginx正向代理实现局域网电脑访问外网
引言 在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的.这时候,可以借助 Nginx 来搭建一个正向代理服务器,实现局域网内电脑通过 Nginx ...