vivado 寄存器输出到寄存器输入 建立时间_Vivado时序约束篇——时钟约束

2023-11-02

68e747123c21d63af659ac5e5280b2e9.png

    此系列文章为在学校时的笔记总结,主要记录总结Xilinx Vivado工具中的时序约束。

f60bf6e826d237e3b35f66aca71756a2.png

7f367c1e213d40b74a3e603961c809f7.png

主时钟(primary clock)

e9aa7db29effe4f3314283da5c16d2d0.png

    主时钟应首先被定义,因为其他时序约束往往以主时钟为参照标准。主时钟的定义往往应定义在输入端口,而不是clock buffer的输出端口。如下图所示:

973a4c4d1a172947501d98f0ae1f3aaf.png

     针对主时钟进入时钟专用单元,则对主时钟输入端进行约束,时钟专用单元输出时钟将以主时钟作为树根节点进行约束调整。     针对差分时钟信号输入,主时钟约束应在差分时钟正相端进行约束,而不是在正反相上均进行约束,以避免错误的CDC路径。    约束原语:
create_clock -name -period  -waveform {} [get_ports ]
f1d67e761418cf220c1836f39bbf27c4.png 7f367c1e213d40b74a3e603961c809f7.png

虚拟时钟

e9aa7db29effe4f3314283da5c16d2d0.png      虚拟时钟并没有连接到任何物理线网。虚拟时钟同样使用create_clock命令定义,但不定义源(get_port)。     虚拟时钟往往用于在下列情景中指定输入输出延迟约束 :
  • 外部IO参考时钟并不是设计中的时钟
  • I/O路径参考时钟来源于FPGA内部派生时钟,但内部派生时钟与主时钟的频率关系并不是整数倍。
  • 仅针对I/O指定不同的jitter和latency
  • 虚拟时钟必须在用于约束I/O延迟之前被定义。
    示例:
create_clock -name clk_virt -period 10
f1d67e761418cf220c1836f39bbf27c4.png 7f367c1e213d40b74a3e603961c809f7.png

衍生时钟(generated clock)

e9aa7db29effe4f3314283da5c16d2d0.png

     衍生时钟是设计中由时钟生成模块(MMCM,PLL等)或用户逻辑所产生的时钟模块。衍生时钟可衍生于主时钟或其他衍生时钟。衍生时钟衍生于其控制时钟(master clock),在进行约束时,并不是对衍生时钟的周期或波形做约束,而是描述时钟衍生单元如何对控制时钟(master clock)的转换。

    控制时钟和主时钟的关系可以是:

  • 简单的时钟分频

  • 简单的时钟倍频

  • 分频与倍频的组合以获取一个非整数的频率变换(通常由MMCM和PLL)完成。

  • 移相或相位反转

  • 占空比转换

  • 上述的组合

    约束原语:
create_generated_clock

     简单二分频示例:           d9cabe716f2122ac2f81c12b1b9f95a7.png

create_clock -name clkin -period 10 [get_ports clkin]#1 采用主时钟作为master clockcreate_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2\[get_pins REGA/Q]#2 采用REGA的clock引脚作为源。create_generted_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2\[get_pins REGA/Q]#3 使用-edges作为选项create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -edges {1,3,5}

    对于占空比改变或相移的约束:使用-edge_shift

   -edge_shift不能与如下列命令同时使用:-divide_by -multiply_by -invert。

    示例:

be59842e63fdf90186da6b4f5e70712d.png   
create_clock -name clkin -period 10 [get_ports clkin]create_generated_clock -name clkshift -source [get_pins mmcm0/CLKIN] -edges{1 2 3}\-edge_shift {2.5 0 2.5} [get_pins mmcm0/CLKOUT]

    -edge_shift的值可以是正数也可以是负数。

    -multiply_by和divide_by可同时使用以产生非整数倍频/分频。

create_generated_clock -name \-source \-multiply_by \-divide_by \
     衍生时钟路径上组合逻辑的约束:-combinational;     示例:     假定master_clock驱动一个基于寄存器的二分频时钟电路和一个二选一驱动器的时钟选择器用于选择master和二分频时钟,对于主时钟到衍生时钟有时序路径也有组合路径,对于组合逻辑路径可以进行-combinational约束。
create_generated_clock -name clkout -source [get_pins mmcm0/CLKIN] -combinational [get_pins MUX/O]
f1d67e761418cf220c1836f39bbf27c4.png 7f367c1e213d40b74a3e603961c809f7.png

自动衍生时钟

e9aa7db29effe4f3314283da5c16d2d0.png

    在定义了master_clock后,对于Clock modifying Blocks所输出产生的时钟,VIVADO可以自动进行约束。

    对于7系列设备,CMB包含MMCM/PLL,BUFR,PHASER。对于UltraScale系列,CMBS包含MMCM/PLL*,BUFGGT/BUFGCE_DIV,GT*_COMMON/GT*_CHANNEL/IBUFDS_GET3,BITSLICE_CONTROL/RX*_BITSLICE,ISERDESE3。

    衍生时钟的重命名:

create_generated_clock -name new_name [-source master_pin] [-master_clock master_clk] source_object
     newname和sourceobject必须被制定。sourceobject指衍生时钟的对象(CMB output pin,GT output pin for UltraScale等)。当有多个时钟传递至source pin时应制定-source和-master_clock。     If any of the -edges/-edge_shift/-divide_by/-multiply_by/-combinational/-duty_cycle /-invert options is passed to the create_generated_clock command, the generated clock is not renamed. Instead a new generated clock is created with the specified characteristics.     自动衍生的时钟重命名只能在它的发源处重命名,不能经过任何原语器件。主时钟和用户定义的时钟不能被重命名。

    The auto-derived clocks can be renamed at any time inside the XDC, even after they have been referenced by some timing constraints。

    时钟重命名可以在XDC文件中任何地方重命名。 f1d67e761418cf220c1836f39bbf27c4.png 7f367c1e213d40b74a3e603961c809f7.png

时钟组

e9aa7db29effe4f3314283da5c16d2d0.png

    默认情况下,vivado分析各时钟下所有的路径(除非制定或使用clock group 或false path约束)。

    时钟组约束set_clock_groups将关断指定的时钟组之间的时序分析,但并不关断时钟组内各时钟之间的时钟约束。set_false_path约束是单向的,但set_clock_group时序分析忽略是双向的。

    set_clockgroups在至少有两个有效非空时钟组时才有效。可以使用schematic viewer,clock_network_report观察决定哪些时钟不能一块儿分析。

    对于异步时钟和不可预测时钟(unexpandable clocks,在1000个内时钟沿无法对齐),可采用set_clock_groups进行约束(set_clock_groups优先级比常规的时序例外高,若想分析两个异步时钟之间的的一些路径则不应该使用时钟组约束,应只使用timeing_exceptions)。

    示例:

    主时钟clk0经由MMCM产生usrclk和itfclk。第二个主时钟clk1有GTP恢复产生并由MMCM 产生时钟gtclkrx和gtclktx。

通过-asynchronous创建异步时钟组set_clock_groups -name async_clko_clk1 -asynchronous -group {clk0 usrclk itfclk} \-group {clk gtclkrx,gtclktx}也可通过get_clocks -include_generated_clocks去动态的追踪衍生时钟:set_clock_groups -name async_clk0_clk1 -asynchronous \-group [get_clocks -include_generated_clocks clk0]\-group [get_clocks -include_generated_clocks clk1]
f1d67e761418cf220c1836f39bbf27c4.png 7f367c1e213d40b74a3e603961c809f7.png

排外性时钟组(exclusive clock groups)

e9aa7db29effe4f3314283da5c16d2d0.png

    有些设计模块中根据工作模式的不同通过BUFGMUX和BUFGCTRL实现多个时钟的切换,这种时钟称为排外性时钟,时钟不会同时存在。可通过-logically_exclusive或-physically_exclusive进行约束。

    示例:

    MMCM产生时钟clk0,clk1,两者通过一个BUFGMUX产生时钟clkmux驱动整个设计。

    默认情况下,vivado会分析clk0和clk1之间的路径,即使两者不会同时存在于设计中。可进行如下约束:

set_clock_groups -name exclusive_clk0_clk1 -physically_exclusive \-group clk0 -group clk1

    在FPGA中,-logically_exclusive和-physically_exclusive没有差别,仅在ASIC中有区别。

f1d67e761418cf220c1836f39bbf27c4.png 7f367c1e213d40b74a3e603961c809f7.png

Clock Latency,Jitter,and Uncertainty

e9aa7db29effe4f3314283da5c16d2d0.png     片内的时钟延迟由vivado自动计算,可通过set_clock_latency约束片外时钟延时(用于源同步信号中的源时钟)     示例:
# Minimum source latency value for clock sysClk (for both Slow and Fast corners)set_clock_latency -source -early 0.2 [get_clocks sysClk]# Maximum source latency value for clock sysClk (for both Slow and Fast corners)set_clock_latency -source -late 0.5 [get_clocks sysClk]
    时钟抖动分为input jitter(源时钟本身属性)和system jitter(电源噪声、板级噪声及其他额外系统抖动造成)。通过set_input_jitter、set_system_jitter可分别对input jitter和system jitter进行约束。system jitter 是对全部时钟的约束。 ecf7ddd6f10c49facfb83ee258f0b47e.png

THE END

016b82d8df25748991d767d89b1c1efe.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vivado 寄存器输出到寄存器输入 建立时间_Vivado时序约束篇——时钟约束 的相关文章

  • Ubuntu 中vi下方向键变成ABCD, backspace无法删除字符的解决办法

    转载自 https blog csdn net sunzz pku article details 40581881 在linux中安装完VIM后 发现在insert模式下 按下四个方向键在屏幕中会输出ABCD这样的字符 并且Backspa
  • Java学习笔记 --- IDEA

    一 IDEA介绍 1 IDEA全称IntelliJ IDEA 2 在业界被公认为最好的Java开发工具 3 IDEA是JetBrains公司的产品 总部位于捷克的首都布拉格 4 除了支持Java开发 还支持HTML CSS PHP MySQ
  • Sonar 配置代码扫描规则 与 质量配置,设置各个语言默认的扫描规则

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 配置代码扫描规则 质量配置 设置各个语言默认的扫描规则 代码规则设置 如果认为有些扫描规则太严格了 可以把它 挂起 以后再构建的代码扫描项目时就不会再使用本规则 例如挂起J
  • electron-14版后remote废除

    文章目录 前言 安装与配置 前言 Electron最近的版本变迁比较频繁 在升级到14 0 0版本后 废除了很多旧有的API 而其中最主要的就是remote模块从旧有的模块里抽出 变成了一个需要新安装的模块 electronic remot
  • Android升级到7.0使得webview加载页面为空白页

    前段时间 公司一哥们把他的手机拿给我看 问到公司的软件加载进去是空白页 等了好久也是空白 我也为是网络出现了问题 排查没问题啊 看看是不是缓存问题 又是清缓存 又是卸载重装 结果还是空白页面 想了一下是不是系统问题 问他有没有更新过系统 结
  • Android:RecyclerView 的使用,有这一篇就够了

    谨以文章记录学习历程 如有错误还请指明 RecyclerView 简介 首先 可以理解 RecyclerView 是 ListView 的升级版 更加灵活 同时由于封装了 ListView 的部分实现 导致其使用更简单 结构更清晰 从名字
  • 金融数据时间序列分析——模型准确率过高怎么办

    多少年后 小f想起了自己还是刚刚出道的小萌新时候犯的一个错误 当时模型的准确率贼高 高的离谱 就像下面这种情况 precision recall f1 score support 1 1 1 1 1934 0 1 1 1 535 1 1 1
  • LoadStdProfileSettings -- 加载MRU

    如何为自己的应用程序加入最近文件列表功能呢 最简单的方法就是在你新建工程的时候选择包含最近文件列表功能 也就是在 MFC AppWizard 的第 4 步的时候使 How many files would you like on your
  • 06.RabbitMQ重试机制

    RabbitMQ重试机制 补偿机制 在消费中如果发生异常了 RabbitMQ会使用补偿机制 重试 如果消息没消费成功 会一直重复发送 直到消费成功为止 我们以之前的P2P例子为例 Component RabbitListener queue
  • antd中Form.Item无法获取到对应的表单值解决

    antd中Form Item无法获取到对应的表单值解决 前言 问题代码示例 解决 前言 本文章讲的解决方案只是其中一种 无法获得对应表单的原因有很多 只能在今后的道路上慢慢采坑然后避免 问题代码示例 import React Compone
  • Retrofit中的注解原理项目实战

    今天我们来聊聊这个最近很火的网络请求库retrofit 在此基础上会延伸出一些列的知识点 现在关于retrofit的文章很多 我之所以写这篇文章的原因在于 8月份负责假设新客户端底层的过程中首次尝试使用该库 并取得非常不错的效果 不到20天
  • 计算机视觉最新技术:YOLOv8等前沿算法推荐!

    计算机视觉最新技术 YOLOv8等前沿算法推荐 计算机视觉是人工智能领域中的一个重要方向 它涉及到图像 视频等多媒体形式的信息处理 而随着人工智能技术的不断发展 计算机视觉领域也不断涌现出新的算法和模型 其中 YOLOv8等一系列算法被认为
  • 初识springcloud(微服务)

    1 微服务的定义 microservice 1 多个微服务开发的依然是一个完整的应用 2 微服务都会独立运行在一个独立的进程里面 3 微服务之间通常会采用轻量级的通信机制来进行通信 比如http https socket netty dub
  • python 视频流分析,通过ffmpeg管道将视频输出流到Python脚本中进行分析。如何导入python?...

    我正在与其他库一起编写一个脚本 它需要RGB24格式的帧或图像 为了提高兼容性 我决定允许外部管道将帧流式传输到这个程序中 每次在代码中使用更改设备或源代码可能会变得乏味 使用解析器简单地指定源代码会导致语法错误 示例 ffmpeg f d
  • python如何更新包

    python如何更新包 更多python视频教程请到菜鸟教程https www piaodoo com Python安装新包 pip是很好用的安装工具 pip list 可以查询所有已安装的包和版本 怎么知道本地安装包的版本是否有可以更新的
  • Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt

    概要 Python 使用 paho mqtt 库 利用阿里云物联网平台的设备证书 productKey deviceName deviceSecret 自动合成 userName passWord 以MQTT通信协议接入阿里云物联网平台 并
  • IPFS搭建私有网络

    87条消息 IPFS 节点搭建 躺在家里不干活的博客 CSDN博客 ipfs节点搭建 一 安装go ipfs 1 下载 下载地址https gitee com wang ya nan go ipfs releases wget https
  • Hadoop Spark 常见问题【一】

    Spark 1 RDD 数据集拆分 数据存储在内存或者磁盘 多分区 失效自动重构 转换操作构造 2 RDD俩种依赖 窄依赖 父RDD中的分区最多只能被一个子RDD的一个分区使用 和宽依赖 子RDD依赖于所有父RDD 3 spark 角色 1
  • APS高级计划排程系统和生产排产系统

    一 什么是APS系统 高级计划与排程APS Advanced Planning and Scheduling 是指在考虑生产资源约束的前提下 通过优化方法 为生产加工任务精确安排生产资源和计划生产时间 使生产及时完成 并使资源充分利用 AP

随机推荐

  • 【WebRTC 02】从摄像头获取视频以及切换分辨率和视频源

    上一节中我们已经搭建出了用于操作的环境 这一节我们要实现的一个小目标 就是将电脑摄像头拍到的内容实时显示到网页上 同时我们一起学习下原理 并做一些小拓展 文章目录 操作环境 实现效果 几个概念 HTML5中的Audio和Video API
  • C++项目练手:矩阵类的功能实现

    C 项目练手 矩阵类的功能实现 C 课程设计 矩阵类的相关功能实现 矩阵简述 实数矩阵是由一个按照长方阵列排列的实数集合 除数据外 两个实数矩阵可以进行加法和乘法运算 一个矩阵也可以和一个实数相乘 得到一个新的矩阵 请基于抽象出的矩阵的属性
  • JavaScript进阶之高阶函数(Higher-order function)

    你还在以为 map reduce filter 是高阶函数吗 高阶函数听上去很让人不明觉厉 但其实也并没有什么特别厉害的地方 只是网上的定义一直让我们有点模糊而已 接下来我们来详细讲讲 首先是定义 查自百度百科 定义 在数学和计算机科学中
  • 二进制安装docker

    二进制安装docker文档 建模部署 docker安装 下载docker 因rpm包安装依赖较多 选择二进制安装 下载地址如下 https download docker com linux static stable x86 64 创建d
  • 区域生长

    转自 https blog csdn net qq 37764129 article details 81227091 注 本程序只能做图像分割 结果图是转自原作者的 暂时没实现该功能 1 理论基础 区域生长算法的基本思想是将有相似性质的像
  • 称重问题递归解法

    用天平称重时 我们希望用尽可能少的砝码组合称出尽可能多的重量 如果只有5个砝码 重量分别是1 3 9 27 81 则它们可以组合称出1到121之间任意整数重量 砝码允许放在左右两个盘中 本题目要求编程实现 对用户给定的重量 给出砝码组合方案
  • 【小沐学NLP】Python实现中文、英文分词

    NLP开发系列相关文章编写如下 1 小沐学NLP Python实现词云图 2 小沐学NLP Python实现图片文字识别 3 小沐学NLP Python实现中文 英文分词 4 小沐学NLP Python实现聊天机器人 ELIZA 5 小沐学
  • win10 提供管理员权限才能删除文件夹

    计算机管理员帐户 也就是我们熟知的 Administrator 拥有可执行影响其他用户操作的权限 由于win10专业版刚发布 很多用户不知道怎么取得管理员权限 接下来小编就跟大家分享启用管理员权限的方法 1 打开win10专业版的开始菜单中
  • 手把手教你--JAVA微信支付(H5支付)

    概述 之前说过 有时间把微信支付的H5支付讲解下 一直拖了半年时间 最近的项目正好又温习了支付功能 趁着热乎 抓紧起来 微信的H5支付 相对公众号支付 容易了跟多 很多相似的东西 也有不同之处 这里只介绍H5支付的关键点 其他内容请先去看我
  • linux系统编程:线程同步-信号量(semaphore)

    线程同步 信号量 semaphore 生产者与消费者问题再思考 在实际生活中 只要有商品 消费者就可以消费 这没问题 但生产者的生产并不是无限的 例如 仓库是有限的 原材料是有限的 生产指标受消费指标限制等等 为了进一步 解决好生产者与消费
  • Go(1)之基本使用

    Go 1 之基本使用 Author Once Day Date 2023年1月8日 漫漫长路 有人对你微笑过嘛 参考文档 Go程序设计语言 Go 语言教程 菜鸟教程 runoob com Go 语言教程 w3cschool 1 概述 Go语
  • C语言(Head First C)-6_2:结构、联合与位字段:结构更新、联合、枚举和位字段

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 6 2 结构 联合与位字段 结构更新 联合 枚举和位字段 如何更新结构 结构就是把一组绑在一起的变量当做一条数据处理 我们已经学会了创建结构对象 并使用点表示法访问结
  • 【微信小程序地理位置权限】wx.getLocation申请教程+申请素材

    为进一步规范开发者调用涉用户信息相关接口或功能 保障用户合法权益 平台将对如下地理位置相关接口调用实行准入开通 wx getLocation wx onLocationChange wx chooseAddress wx chooseLoc
  • 解决:Oops internal error 40343 occured.Further work is not possible and IDA will close (打开文件出现40343错误)

    问题 IDA pro打开文件出现40343错误 解决方法 换一个安装目录或者重新软件 修改文件名名称 不能是中文 测试 最后修改了文件夹名称为全英文就可以 打开了 希望对大家有所帮助谢谢大家观看
  • 数字时代的抉择,金蝶 EBC 的破局

    今年 10 月 Gartner 发布了企业在 2021 年需要关注的重要战略科技趋势 其中 可组装的企业 一词引起热议 Gartner 认为原本为了提高效率而建立的静态业务流程很脆弱 在疫情的冲击下容易变得支离破碎 因此企业应具有不断重组与
  • 5.28 深圳活动|Jina AI 生态助力云原生场景下的 AIGC 应用开发

    亚马逊云科技 Community Day 将于 5 月 28 日 在深圳南山区海德酒店 11 楼举办 Jina AI 软件工程师付杰将带来 Jina AI 生态助力云原生场景下的 AIGC 应用开发 的主题演讲 Community Day
  • 数据探索(数据特征分析)④—Python分布分析、对比分析、统计量分析、期性分析、贡献度分析、相关性分析

    Python介绍 Unix Linux Window Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分析工具安装及简单使用 Numpy Scipy Matplotlib Panda
  • 1080T、2080T、4070T显卡的深度学习性能测试和结论

    本文更新地址 4070Ti 4090显卡的深度学习性能测试和结论 哔哩哔哩 先说结论 4070T显卡FP32的训练和推理速度跟3090应该基本类似 但由于显存12G偏低 4070T不太适合如今的深度学习模型训练 新手列外 大部分模型都能训练
  • NP完全性理论与近似算法

    一 NP完全性理论 1 在图灵机计算模型中 移动函数 是单值的 即对于Q Tk中的每一个值 当它属于 的定义域时Q T L R S k 中只有唯一的值与之对应 称这种图灵机为确定性图灵机 简记为DTM Deterministic Turin
  • vivado 寄存器输出到寄存器输入 建立时间_Vivado时序约束篇——时钟约束

    此系列文章为在学校时的笔记总结 主要记录总结Xilinx Vivado工具中的时序约束 主时钟 primary clock 主时钟应首先被定义 因为其他时序约束往往以主时钟为参照标准 主时钟的定义往往应定义在输入端口 而不是clock bu