当前位置: 首页 > news >正文

FPGA项目开发之同步信号和亚稳态

FPGA项目开发之同步信号和亚稳态

让我们从触发器开始,所有触发器都有一个围绕活动时钟沿的建立(setup time)和保持窗口(hold time),在此期间数据不得更改。如果该窗口中的数据实际发生了变化,则触发器的输出将进入不确定状态,这既不是逻辑 0 也不是逻辑 1。在定义的恢复时间(recovery time)后,触发器输出将恢复为逻辑 0 或逻辑 1。

2046c7bf03df74f5f385528c96f6ad4d.png

每个系列器件的建立和保持时间以及恢复时间都是独一无二的,这些信息通常在数据表或应用说明中定义。一般来说,当我们设计 FPGA 满足时序约束时,我们不必过于担心它们,因为 Vivado 会尽量满足约束中定义的性能。

然而,当我们有异步信号进入到 FPGA 或多个彼此异步的时钟域时,我们就需要仔细考虑设计,以确保我们不会违反建立和保持时间并导致亚稳态。当然,无论哪种情况,我们都无法阻止亚稳态事件的发生,但我们可以确保我们的设计不会因为亚稳态事件的发生而出现不正确的数据。

当然,很明显的一个情况就是输入信号与内部时钟是异步的,在同一个时钟域中的构成还不是很清楚。我们可以使用一些简单的规则;如果时钟是公共时钟的整数除法,我们就在同一个时钟域中。如果时钟是非整数除法,它们不在同一个时钟域中,或者来自不同的源(即使它们具有相同的时钟频率)

在将信号同步到 FPGA 或不同的时钟域时,有多种设计可供选择。在xilinx fpga中,最好的方法是使用xilinx参数化宏,创建这些宏的目的是解决 CDC / Synchronization问题。XPM 提供了一个范围宏,包括

  • 单静态同步器(Single Static Synchroniser)——经典的单比特触发器同步器

  • 脉冲数据同步器(Pulse Data Synchroniser)——将脉冲从一个域传输到下一个域

  • 数据总线(Data Bus)——多路复用器、FIFO、握手和基于格雷码的传输

在 Vivado 中,我们现在很容易地在 IP Integrator 中实现 XPM 结构,以使 CDC crossing可见。

7e0626a3834753fb38c56106f3aa2c68.png

需要仔细考虑使用哪种结构,例如,不要尝试使用单个位同步器同步多个数据位,因为不能保证传输的数据对齐,从而导致数据损坏。还需要注意recombination,这是两个或多个静态信号跨越时钟域并在逻辑功能中重组的地方。由于亚稳态恢复,同步器中的延迟会导致下游逻辑受到影响。

尽管我们在设计中尽最大努力减轻 CDC,但我们是人类,我们也会犯错,因此我们可以使用内置的 Vivado 选项来报告设计中出现的 CDC。

综合完成后,我们可以运行 CDC 报告,无需等待 place 和 root 完成。

在 TCL 控制台中运行命令report_cdc – 有很多选项可用于写出文件、分析特定路径或创建豁免。

dc3ff5c8471eea74aa746c41c468d70e.png

这将显示设计中的所有时钟域交叉以及是否存在任何不安全或未知的交叉。在上面的示例中,可以看到有 6 个不安全和几个未知。如果我们使用选项 -details 运行命令,我们将看到报告的所有路径。单击不安全或未知的路径将打开关注的路径以供我们检查。

8dbd081bf1275bf43f8d39ff9c347e6f.png

选择路径后,我们可以打开我们关注路径的示意图查看器。在这种情况下的问题是复位是由不同的时钟生成的。

329c8b03c26c3020cbca1953f01f3c75.png

知道这一点后,我们可以通过更新设计,例如:纠正错误、插入必要的同步结构或纠正约束以更新路径来纠正问题。

12450eb5bb942751cc797a327223be5f.jpeg

FPGA项目开发之 7 系列 FPGA 高级 SelectIO 逻辑资源

610a7e911b1738e46a52a913181c1c65.jpeg

FPGA项目开发之时钟规划


相关文章:

  • python 2024-9
  • [数据集][目标检测]无人机识别检测数据集VOC+YOLO格式6986张1类别
  • 37拼购:电商新风尚,共享双赢的购物革命
  • 如何使用 ONNX 结合 GPU 加速推理(CUDA 与 cuDNN 简明指南)
  • mosh java 2.4 inheritance继承
  • Vue3如何查看项目是否安装了vue-router路由依赖,及安装方法
  • [ai笔记12] chatGPT技术体系梳理+本质探寻
  • VL817-Q7 USB3.0 HUB芯片 适用于扩展坞 工控机 显示器
  • FL Studio Producer Edition2024中文进阶版Win/Mac
  • 广和通发布基于MediaTek T300平台的RedCap模组FM330系列及解决方案
  • 代码随想录算法训练营|day42
  • 【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征
  • 微信公众号对接流程说明
  • React 快速上手
  • FPGA学习之状态机
  • 一些名词 需要注意
  • 读书笔记|指数型函数对算法的影响实际应用-day3
  • STM32F103 + lwIP1.4.1 + ENC28J60 + RT-Thread-v3.1.3
  • 工欲善其事必先利其器(Windows)
  • 学生党用什么蓝牙耳机好?学生党性价比高的蓝牙耳机推荐
  • springboot框架中如何整合mybatis框架?
  • 三、Zabbix — 自定义监控
  • Java_IO流01:IO流原理及流的分类
  • Python 基础
  • vue 模块化开发
  • 物联网毕设 -- 智能厨房检测系统
  • Small RTOS51 学习笔记(6)如何切换任务(上)
  • 【笔试题】【day7】
  • 【算法 | 实验6-1】n*n的网格,从左上角开始到右下角结束遍历所有的方块仅一次,总共有多少种不同的遍历路径
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • 《uni-app》一个非canvas的飞机对战小游戏实现-requestAnimationFrame详解
  • Centos7安装Docker搭建Pikachu靶场