侵权投诉

XDC时钟约束的三种基本语法

2020-01-30 17:29 次阅读

XDC介绍

SDC、XDC跟 Vivado Tcl 的关系如下图所示。

XDC时钟约束的三种基本语法

XDC的基本语法可以分为时钟约束、I/O约束以及时序例外约束三大类。根据Xilinx的UltraFast设计方法学中Baseline部分的建议(UG949中有详细介绍),对一个设计进行约束的先后顺序也可以依照这三类约束依次进行。本文对可以在帮助文档中查到的基本XDC语法不做详细解释,会将重点放在使用方法和技巧上。

时钟约束

时钟约束必须最早创建,对7系列FPGA来说,端口进来的主时钟以及GT的输出RXCLK/TX CLK都必须由用户使用create_clock自主创建。而衍生时钟则分为以下两类:

MMCM/PLL/BUFR的输出时钟都可以由Vivado自动推导,无需用户创建。若用户仅希望改变衍生钟的名字,其余频率等都由工具自动推导,则只需写明三个option,其余不写即可:create_generated_clock [-name arg] [-source args] [-master_clock arg] 工具不能自动推导出衍生钟的情况,包括使用寄存器和组合逻辑搭建的分频器等,必须由用户使用create_generated_cl ock来创建。

I/O约束

在设计的初级阶段,可以不加I/O约束,让工具专注于满足FPGA内部的时序要求。当时序要求基本满足后,再加上I/O约束跑实现。

XDC中的I/O约束有以下几点需要注意:

① 不加任何I/O约束的端口时序要求被视作无穷大。

② XDC中的set_input_delay / set_output_delay对应于UCF中OFFSET IN / OFFSET OUT,但视角相反。OFFSET IN / OFFSET OUT是从FPGA内部延时的角度来约束端口时序,set_input_de lay / set_output_ delay则是从系统角度来约束。

③ 典型的I/O时序,包括系统同步、源同步、SDR和DDR等等,在Vivado图形界面的XDC templates中都有示例。2014.1版后还有一个Timing Constraints Wizard可供使用。

时序例外约束

时序例外约束包括set_max_delay/set_min_delay ,set_multicycle_path,set_false_path等,这类约束除了要满足XDC的先后顺序优先级外,还受到自身优先级的限制。一个总的原则就是针对同一条路径,对约束目标描述越具体的优先级越高。不同的时序例外约束以及同一约束中不同条件的优先级如下所示:

XDC时钟约束的三种基本语法

举例来说,依次执行如下两条XDC,尽管第二条最后执行,但工具仍然认定第一条约束设定的15为clk1到clk2之间路径的max delay值。

再比如,对图示路径依次进行如下四条时序例外约束,优胜者将是第二条。但如果再加入最后一条约束,false path的优先级最高,会取代之前所有的时序例外约束。

XDC时钟约束的三种基本语法

高效的时钟约束

约束最终是为了设计服务,所以要用好XDC就需要深入理解电路结构和设计需求。接下来我们就以常见FPGA设计中的时钟结构来举例,详细阐述XDC的约束技巧。

时序的零起点

用create_clock定义的主时钟的起点即时序的“零起点”,在这之前的上游路径延时都被工具自动忽略。所以主时钟创建在哪个“点”很重要,以下图所示结构来举例,分别于FPGA输入端口和BUFG输出端口创建一个主时钟,在时序报告中体现出的路径延时完全不同,很明显sysclk_bad的报告中缺少了之前一段的延时,时序报告不可信。

XDC时钟约束的三种基本语法

XDC时钟约束的三种基本语法

时钟定义的先后顺序

时钟的定义也遵从XDC/Tcl的一般优先级,即:在同一个点上,由用户定义的时钟会覆盖工具自动推导的时钟,且后定义的时钟会覆盖先定义的时钟。若要二者并存,必须使用 -add 选项。

XDC时钟约束的三种基本语法

XDC时钟约束的三种基本语法

上述例子中BUFG的输出端由用户自定义了一个衍生钟clkbufg,这个衍生钟便会覆盖此处原有的sysclk。此外,图示BUFR工作在bypass模式,其输出不会自动创建衍生钟,但在BUFR的输出端定义一个衍生钟clkbufr,并使用-add 和 -master_clock 选项后,这一点上会存在sysclk和clkbufg两个重叠的时钟。如下的Tcl命令验证了我们的推论。

XDC时钟约束的三种基本语法

不同于UCF约束,在XDC中,所有的时钟都会被缺省认为是相关的,也就是说,网表中所有存在的时序路径都会被Vivado分析。这也意味着FPGA设计人员必须通过约束告诉工具,哪些路径是无需分析的,哪些时钟域之间是异步的。

如上图所示,两个主时钟ssclkin和sysclk由不同的端口进入FPGA,再经由不同的时钟网络传递,要将它们设成异步时钟,可以使用如下约束:

XDC时钟约束的三种基本语法

其中,-include_generated_clocks 表示所有衍生钟自动跟其主时钟一组,从而与其它组的时钟之间为异步关系。不加这个选项则仅仅将时钟关系的约束应用在主时钟层面。

重叠(单点多个)时钟

重叠时钟是指多个时钟共享完全相同的时钟传输网络,例如两个时钟经过一个MUX选择后输出的时钟,在有多种运行模式的设计中很常见。

如下图所示,clk125和clk250是clkcore_buf的两个输入时钟,不约束时钟关系的情况下,Vivado会对图示路径做跨时钟域(重叠时钟之间)分析。这样的时序报告即便没有违例,也是不可信的,因为clk125和clk250不可能同时驱动这条路径上的时序元件。这么做也会增加运行时间,并影响最终的实现效果。

XDC时钟约束的三种基本语法

XDC时钟约束的三种基本语法

如果clk125和clk250除了通过clkcore_buf后一模一样的扇出外没有驱动其它时序元件,我们要做的仅仅是补齐时钟关系的约束。

XDC时钟约束的三种基本语法

在很多情况下,除了共同的扇出,其中一个时钟或两个都还驱动其它的时序元件,此时建议的做法是在clkcore_buf的输出端上创建两个重叠的衍生钟,并将其时钟关系约束为-physically_exclusive 表示不可能同时通过。这样做可以最大化约束覆盖率,也是ISE和UCF中无法做到的。

XDC时钟约束的三种基本语法

其它高级约束

时钟的约束是XDC的基础,熟练掌握时钟约束,也是XDC约束技巧的基础。其它高级约束技巧,包括复杂的CDC(Clock Domain Crossing)约束和接口时序(SDR、DDR、系统同步接口和源同步接口)约束等方面还有很多值得注意的地方。

收藏 人收藏
分享:

评论

相关推荐

Vivado中运行时出现visual c++运行错误该如何解决

Vivado中运行时出现visual c++运行错误的解决办法Win10系统中运行Vivado一直好....
的头像 OpenFPGA 发表于 10-21 14:56 90次 阅读
Vivado中运行时出现visual c++运行错误该如何解决

VIVADO中时序报告中WNS、WHS、TNS、THS有什么含义

VIVADO中时序报告中WNS,WHS,TNS,THS含义运行“report_timing”或“re....
的头像 OpenFPGA 发表于 10-21 14:32 159次 阅读
VIVADO中时序报告中WNS、WHS、TNS、THS有什么含义

为什么vivado2016调用MIG ip核会收到严重警告呢

为什么vivado2016调用MIG ip核会收到严重警告呢?这个critical warning会有影响吗,要怎么解决呢?...
发表于 10-18 09:41 0次 阅读

Vivado中XDC文件的约束顺序

很对人在使用Vivado时喜欢使用多个约束文件对整个工程进行约束,同时Vivado允许设计者使用一个....
的头像 OpenFPGA 发表于 10-13 16:56 1084次 阅读

Vivado设计套件有何作用

Vivado设计套件有何作用? Verilog HDL是什么? STM32按内核架构分为哪些? ...
发表于 10-11 07:22 0次 阅读

使用Vivado License Manager时Vivado的错误信息

Vivado License Manager在使用Vivado License Manager时,如....
的头像 FPGA交流平台 发表于 09-12 15:15 527次 阅读

verilog语言如何给一个数组赋值呢,新手求助,感谢各位大佬!

给定一组数据,比如1024个8位数据,需要在后续调用,因此希望定义一个位宽为8,个数1024的数组,但是因为实际需求不能用$readmem...
发表于 09-09 18:22 1170次 阅读

Vivado调用Questa Sim或ModelSim仿真小技巧

Vivado调用Questa Sim或ModelSim仿真中存在的一些自动化问题的解决方案。 Viv....
的头像 FPGA之家 发表于 09-02 10:12 492次 阅读
Vivado调用Questa Sim或ModelSim仿真小技巧

如何追溯同一时钟域内partial false path的来源

随着设计复杂度和调用IP丰富度的增加,在调试时序约束的过程中,用户常常会对除了自己设定的约束外所涉及....
的头像 算法与数据结构 发表于 08-23 11:31 2019次 阅读
如何追溯同一时钟域内partial false path的来源

小鸟科技借助Xilinx Kintex® FPGA打造高性价比4K60无损分布式解决方案

赛灵思FPGA平台出色的性能和简洁易用的 Vivado™开发工具,助力小鸟科技将业界领先的专业音视频....
发表于 08-20 14:22 754次 阅读
小鸟科技借助Xilinx Kintex® FPGA打造高性价比4K60无损分布式解决方案

在Vitis中把Settings信息传递到底层的Vivado

本篇文章来自赛灵思高级工具产品应用工程师 Hong Han. 本篇博文将继续介绍在Vitis中把Se....
的头像 算法与数据结构 发表于 08-13 14:35 2023次 阅读

基本的时序约束和STA操作流程

一、前言 无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计....
的头像 麻辣软硬件 发表于 08-10 09:33 724次 阅读
基本的时序约束和STA操作流程

vivado点击xsetup.exe没有反应如何解决

1、vivado点击xsetup.exe没有反应 原因1:vivado安装文件存放路径过长 解决方法....
的头像 麻辣软硬件 发表于 08-09 18:11 831次 阅读

在Vivado中Block Design如何改名称?

在一个Demo中找到一个工程叫petalinux_sd,我将它另存为My_Work,可是其中的Block Design仍然叫petalinux_sd,其顶层文件仍...
发表于 08-06 16:04 101次 阅读

Vivado中综合,实现,编程和调试工程可能会出现的问题及解决方案

Xilinx公司的IDE(集成开发环境) Vivado用处广泛,学会使用Vivado对FPGA的学习至关重要,这里以PRX100-D开发板为例...
发表于 07-31 09:09 1010次 阅读

vivado有哪几种常用IP核?如何去调用它们

vivado三种常用IP核的调用当前使用版本为vivado 2018.3vivado的IP核,IP核(IP Core):Vivado中有很多IP核可以直接...
发表于 07-29 06:07 101次 阅读

教大家在Vivado中FFT IP调配置及应用

01 FFT简介 快速傅里叶变换 (Fast Fourier Transform,FFT), 即利用....
的头像 FPGA之家 发表于 07-23 14:29 451次 阅读
教大家在Vivado中FFT IP调配置及应用

Vivado HLS实现OpenCV图像处理的设计流程与分析

本文通过对OpenCV中图像类型和函数处理方法的介绍,通过设计实例描述在vivadoHLS中调用OpenCV库函数实现图像处理的几个...
发表于 07-08 08:30 2222次 阅读

vivado高层次综合HLS定义及挑战

HLS高阶综合(highlevelsynthesis)在被广泛使用之前,作为商业技术其实已经存在了20多年。设计团队对于这项技术可以说呈现出两...
发表于 07-06 08:00 2121次 阅读

STM32是什么?按内核架构可分为哪几种产品?

Vivado是什么? Verilog HDL是什么? STM32是什么?按内核架构可分为哪几种产品? ...
发表于 07-05 06:13 0次 阅读

为什么不用2017.4或者2018.3呢?最稳定的vivado版本是哪一种?

很多开发人员都经历过使用不稳定开发环境导致奇怪问题的经历,为了避免大家重走冤枉路,集众多开发工程师智慧,寻找最稳定的viva...
发表于 06-24 09:31 303次 阅读

浅析Vivado在非工程模式下的FPGA设计流程

参考:UG892 UG835 Vivado集成开发工具为设计者提供了非工程模式下的FPGA设计流程。....
的头像 OpenFPGA 发表于 06-19 10:52 607次 阅读
浅析Vivado在非工程模式下的FPGA设计流程

如何在Vivado下设置BITSTREAM配置信息

首先我们看一下如何在Vivado下设置BITSTREAM配置信息。这可以在综合之后进行。借助如下操作....
的头像 FPGA交流平台 发表于 06-15 14:26 697次 阅读
如何在Vivado下设置BITSTREAM配置信息

Vivado的XDC设置输出延时问题

Vivado 的XDC设置输出延时 Vivado 的XDC设置输出延时,用于输出伴随时钟和数据的,数....
的头像 电子发烧友网工程师 发表于 06-09 17:28 678次 阅读
Vivado的XDC设置输出延时问题

如何用Python实现Vivado和ModelSim仿真自动化?

芯片设计从RTL代码一直到最后流片的GDSII文件,都是文本文件,因此,掌握文本分析处理语言是集成电....
的头像 FPGA开源工作室 发表于 05-03 10:06 490次 阅读
如何用Python实现Vivado和ModelSim仿真自动化?

详细分析Verilog编写程序测试无符号数和有符号数的乘法

有符号数的计算在 Verilog 中是一个很重要的问题(也很容易会被忽视),在使用 Verilog ....
的头像 FPGA之家 发表于 05-02 10:48 878次 阅读
详细分析Verilog编写程序测试无符号数和有符号数的乘法

使用matlab产生待滤波信号并编写testbench进行仿真分析

本讲使用matlab产生待滤波信号,并编写testbench进行仿真分析,在Vivado中调用FIR....
的头像 Hx 发表于 04-27 18:18 822次 阅读
使用matlab产生待滤波信号并编写testbench进行仿真分析

解析Vivado如何调用DDS的IP进行仿真

本次使用Vivado调用DDS的IP进行仿真,并尝试多种配置方式的区别,设计单通道信号发生器(固定频....
的头像 Hx 发表于 04-27 16:33 1226次 阅读
解析Vivado如何调用DDS的IP进行仿真

浅析Vivado的IP核DDS使用方式及注意事项

vivado提供了DDS IP核可以输出正余弦波形,配置方法如下
的头像 Hx 发表于 04-27 15:52 1318次 阅读
浅析Vivado的IP核DDS使用方式及注意事项

关于Vivado三种常用IP核的调用详细解析

vivado的IP核,IP核(IP Core):Vivado中有很多IP核可以直接使用,例如数学运算....
的头像 Hx 发表于 04-27 15:45 1953次 阅读
关于Vivado三种常用IP核的调用详细解析

关于Vitis使用教程详解

首先是安装,本教程分两个主要的平台(WIN10和Ubuntu)给出安装教程和源文件。
的头像 OpenFPGA 发表于 04-26 10:02 2436次 阅读
关于Vitis使用教程详解

Vivado设计流程分析 Vivado HLS实现OpenCV的开发流程

作者:Harvest Guo来源:Xilinx DSP Specilist 本文通过对OpenCV中....
发表于 04-23 11:32 3891次 阅读
Vivado设计流程分析 Vivado HLS实现OpenCV的开发流程

关于Vivado版本升级导致的IP锁定的俩种解决办法浅析

打开旧版本的vivado工程后,会弹出如下图窗口要求用户选择(图1)。如果用户需要重新修改工程的话,....
的头像 Hx 发表于 04-21 16:20 1004次 阅读
关于Vivado版本升级导致的IP锁定的俩种解决办法浅析

如何用Xilinx官方例程和手册学习IP核的使用方法详细解析

在FPGA开发过程中不可避免的要使用到一些IP,有些IP是很复杂的,且指导手册一般是很长的英文,仅靠....
的头像 Hx 发表于 04-21 16:09 2620次 阅读
如何用Xilinx官方例程和手册学习IP核的使用方法详细解析

如果FPGA配置失败的应对措施解析

都知道FPGA的启动方式有很多种,比如JTAG、SPI,BPI,SeletMAP,Serial等等吧....
的头像 Hx 发表于 04-21 15:49 466次 阅读
如果FPGA配置失败的应对措施解析

Vivado生成、固化烧录文件

Vivado生成、固化烧录文件方法说明。
发表于 04-21 11:08 159次 阅读

详解Vivado与Modelsim关联方法及器件库编译

在vivado中设置modelsim(即第三方仿真工具)的安装路径。在vivado菜单中选择“Too....
的头像 FPGA之家 发表于 04-15 10:10 982次 阅读
详解Vivado与Modelsim关联方法及器件库编译

浅析Vivado中增量编译与设计锁定方法与验证

所谓增量实现,更严格地讲是增量布局和增量布线。它是在设计改动较小的情形下参考原始设计的布局、布线结果....
的头像 Hx 发表于 04-14 12:01 582次 阅读
浅析Vivado中增量编译与设计锁定方法与验证

Xilinx_Vivado_zynq7000入门笔记

Xilinx_Vivado_zynq7000入门笔记说明。
发表于 04-08 11:48 217次 阅读

浅谈如何在Vivado中更改自定义的Interface方法

因为 BD 中连线太多,所以想自定义下 interface 简化连线,定义好了一个 interfac....
的头像 电子发烧友网工程师 发表于 03-30 15:49 1110次 阅读
浅谈如何在Vivado中更改自定义的Interface方法

Vivado设计流程指导说明

Vivado 设计分为 Project Mode 和 Non-project Mode 两种模式,一....
发表于 03-25 14:39 149次 阅读

Vivado设计流程指导手册

Vivado 设计分为 Project Mode 和 Non-project Mode 两种模式,一....
发表于 03-22 11:39 195次 阅读
Vivado设计流程指导手册

Vivado中xilinx_BRAM IP核使用

Vivado2017.2 中BRAM版本为 Block Memory Generator Speci....
发表于 03-10 06:15 217次 阅读
Vivado中xilinx_BRAM IP核使用

【Vivado那些事】Vivado下头文件使用注意事项

并不局限于Vivado一种EDA。头文件主要使用“文件包括”处理,所谓"文件包含"处理是一个源文件可....
发表于 03-07 06:01 143次 阅读
【Vivado那些事】Vivado下头文件使用注意事项

Vivado 开发教程(四) 行为仿真

本文介绍如何在教程(三)基础上, 关联ELF输出文件并使用vivado对系统进行行为仿真。
发表于 03-01 10:25 232次 阅读
Vivado 开发教程(四) 行为仿真

【Vivado那些事】Vivado下怎么查看各子模块的资源占用?

完成Implementation后,在Vivado IDE左侧的Flow Navigator点击Op....
发表于 02-24 07:41 248次 阅读
【Vivado那些事】Vivado下怎么查看各子模块的资源占用?

正则表达式在Vivado约束文件(xdc)中的应用(转)

我在xdc文件中匹配目标的时候,在可行的情况下更倾向于使用正则表达式。本文就介绍一下我常使用的正则表....
发表于 02-23 07:21 153次 阅读
正则表达式在Vivado约束文件(xdc)中的应用(转)

Vivado生成bit流失败,怎么解决?

使用Vivado Runs基础结构时(例如,launch_runs Tcl命令),请将此命令添加到.....
发表于 02-20 06:02 527次 阅读
Vivado生成bit流失败,怎么解决?

FPGA之选择多个jobs能加快实现速度么?

在用Vivado对工程编译时,会弹出下面的对话框: 备注:虽然FPGA不能叫编译,但很多工程师为了方....
的头像 OpenFPGA 发表于 02-11 11:33 584次 阅读
FPGA之选择多个jobs能加快实现速度么?

Vivado 开发教程(一) 创建新硬件工程

本文主要介绍如何使用Vivado 开发套件创建硬件工程。
发表于 02-02 07:13 186次 阅读
Vivado 开发教程(一) 创建新硬件工程

Vivado:查看各模块资源占用情况方法

在vivado中 ,如何查看各个模块的资源占用情况呢?方法如下:
发表于 02-01 06:42 485次 阅读
Vivado:查看各模块资源占用情况方法

Vivado硬件平台更新后Vitis工程如何快捷更新

Vivado硬件平台更新后Vitis工程如何快捷更新
发表于 01-28 09:28 396次 阅读
Vivado硬件平台更新后Vitis工程如何快捷更新

Vivado中xilinx_courdic IP核(求exp指数函数)使用

由于Verilog/Vhdl没有计算exp指数函数的库函数,所以在开发过程中可利用cordic IP....
发表于 01-27 07:21 197次 阅读
Vivado中xilinx_courdic IP核(求exp指数函数)使用

Vivado 开发教程(三) 在SDK中创建应用工程

本文介绍如何导出硬件平台, 并启动SDK开发应用程序及板级支持包(BSP)。
发表于 01-25 07:29 224次 阅读
Vivado 开发教程(三) 在SDK中创建应用工程

Vivado IDDR与ODDR原语的使用

在数据的传输过程中,我们经常可以碰见双沿传输数据到FPGA,或者FPGA传输双沿数据给外部芯片,最常....
发表于 01-25 07:07 405次 阅读
Vivado IDDR与ODDR原语的使用

【Vivado那些事】如何查找官网例程及如何使用官网例程

有的时候需要查找一些官网的例程进行学习和参考,但是总感觉无从下手,今天就教大家怎么利用官网和Viva....
发表于 01-23 07:00 186次 阅读
【Vivado那些事】如何查找官网例程及如何使用官网例程

【ZYNQ Ultrascale+ MPSOC FPGA教程】第九章Vivado下按键实验

按键是FPGA设计当中最常用也是最简单的外设,本章通过按键检测实验,检测开发板的按键功能是否正常,并....
的头像 FPGA技术专栏 发表于 01-22 09:46 1139次 阅读
【ZYNQ Ultrascale+ MPSOC FPGA教程】第九章Vivado下按键实验

【ZYNQ Ultrascale+ MPSOC FPGA教程】第五章Vivado下PLL实验

PLL(phase-locked loop),即锁相环。是FPGA中的重要资源。由于一个复杂的FPG....
的头像 FPGA技术专栏 发表于 01-22 09:41 2254次 阅读
【ZYNQ Ultrascale+ MPSOC FPGA教程】第五章Vivado下PLL实验

Vivado之ILA详解

集成逻辑分析仪 (Integrated Logic Analyzer :ILA) 功能允许用户在 F....
发表于 01-22 07:52 1330次 阅读
Vivado之ILA详解

在vivado中可能用到的约束方法和面对timing问题的解决办法

create_clock:和其他FPGA EDA tool一样,在vivado中timing约束越全....
发表于 01-12 17:31 1071次 阅读
在vivado中可能用到的约束方法和面对timing问题的解决办法