0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vivado使用教学设计技巧

Xilinx赛灵思官微 来源:djl 作者:周丽娜 2019-07-24 17:10 次阅读

Xilinx 的新一代设计套件Vivado中引入了全新的约束文件XDC,在很多规则和技巧上都跟上一代产品ISE中支持的UCF大不相同,给使用者带来许多额外挑战。Xilinx工具专家告诉你,其实用好XDC很容易,只需掌握几点核心技巧,并且时刻牢记:XDC的语法其实就是Tcl语言。

XDC的优势

XDC是Xilinx Design Constraints的简写,但其基础语法来源于业界统一的约束规范SDC(最早由Synopsys公司提出,故名Synopsys Design Constraints)。所以SDC、XDC跟Vivado Tcl的关系如下图所示。

Vivado使用教学设计技巧

XDC的主要优势包括:
统一了前后端约束格式,便于管理;
可以像命令一样实时录入并执行;
允许增量设置约束,加速调试效率;
覆盖率高,可扩展性好,效率高;
业界统一,兼容性好,可移植性强;

XDC在本质上就是Tcl语言,但其仅支持基本的Tcl语法如变量、列表和运算符等等,对其它复杂的循环以及文件I/O等语法可以通过在Vivado中source一个Tcl文件的方式来补充。(对Tcl话题感兴趣的读者可以参考作者的另一篇文章《Tcl在Vivado中的应用》)

XDC与UCF的最主要区别有两点:

XDC可以像UCF一样作为一个整体文件被工具读入,也可以在实现过程中被当作一个个单独的命令直接执行。这就决定了XDC也具有Tcl命令的特点,即后面输入的约束在有冲突的情况下会覆盖之前输入的约束(时序例外的优先级会在下节详述)。另外,不同于UCF是全部读入再处理的方式,在XDC中,约束是读一条执行一条,所以先后顺序很重要,例如要设置IO约束之前,相对应的clock一定要先创建好。

UCF是完全以FPGA的视角看问题,所以缺省认为所有的时钟之间除非预先声明是同步的,否则就视作异步而不做跨时钟域时序分析;XDC则恰恰相反,ASIC世界的血缘背景决定了在其中,所有的时钟缺省视作全同步,在没有时序例外的情况下,工具会主动分析每一条跨时钟域的路径。

XDC的基本语法

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

时钟约束

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

MMCM/PLL/BUFR的输出时钟都可以由Vivado自动推导,无需用户创建。若用户仅希望改变衍生钟的名字,其余频率等都由工具自动推导,则只需写明三个option,其余不写即可:create_generated_clock [-name arg] [-source args] [-master_clock arg]

工具不能自动推导出衍生钟的情况,包括使用寄存器和组合逻辑搭建的分频器等,必须由用户使用create_generated_clock来创建。

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_delay / 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的先后顺序优先级外,还受到自身优先级的限制。一个总的原则就是针对同一条路径,对约束目标描述越具体的优先级越高。不同的时序例外约束以及同一约束中不同条件的优先级如下所示:

Vivado使用教学设计技巧

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

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

Vivado使用教学设计技巧

高效的时钟约束

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

时序的零起点

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

Vivado使用教学设计技巧

Vivado使用教学设计技巧

时钟定义的先后顺序

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

Vivado使用教学设计技巧

Vivado使用教学设计技巧

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

同步时钟和异步时钟

Vivado使用教学设计技巧

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

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

Vivado使用教学设计技巧

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

重叠(单点多个)时钟

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

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

Vivado使用教学设计技巧

Vivado使用教学设计技巧

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

Vivado使用教学设计技巧

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

Vivado使用教学设计技巧

其它高级约束

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66550
  • 时钟约束
    +关注

    关注

    0

    文章

    15

    浏览量

    6022
收藏 人收藏

    评论

    相关推荐

    Vivado 实现

    先给大家简单快速地介绍一下 Vivado 集成设计环境,即 IDE。当打开 Vivado 工程后,会有一个工程概要,向您介绍工程的设置、警告和错误信息以及工程的一般状态。
    发表于 04-25 09:00 6743次阅读

    谁有vivado教学视频?

    vivado的基础教程视频谁有啊
    发表于 04-14 21:58

    Vivado 2017.1和Vivado 2016.4性能对比分析

    此篇文章里,我们将通过使用InTime来检验Vivado 2017.1和Vivado2016.4之间的性能对比。 概要:分别进行了3个Vivado 2017.1对Vivado2016.
    的头像 发表于 07-04 11:23 1w次阅读
    <b class='flag-5'>Vivado</b> 2017.1和<b class='flag-5'>Vivado</b> 2016.4性能对比分析

    Vivado获取License的步骤教程

    无论此刻你是一个需要安装Xilinx Vivado工具链的入门菜鸟,还是已有license过期的Vivado老铁,今儿咱就借着这篇文章,把学习「Vivado如何获取License」这档子事儿给说通透咯~ 手把手教程,分三部分讲述
    的头像 发表于 07-03 09:54 6w次阅读
    <b class='flag-5'>Vivado</b>获取License的步骤教程

    vivado设计套件资料

    vivado设计套件资料
    发表于 10-31 09:49 44次下载
    <b class='flag-5'>vivado</b>设计套件资料

    Tcl在Vivado中的基础应用

    Xilinx的新一代设计套件Vivado相比上一代产品ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言XDC以及脚本语言Tcl的引入则成为了快速掌握
    发表于 11-18 03:52 4944次阅读
    Tcl在<b class='flag-5'>Vivado</b>中的基础应用

    xilinx Vivado工具使用技巧

    Vivado Design Suite中,Vivado综合能够合成多种类型的属性。在大多数情况下,这些属性具有相同的语法和相同的行为。
    发表于 05-02 10:13 4089次阅读

    关于Vivado 2019.1的Dashboard功能详解

    关于Vivado Dashboard的功能可阅读这篇文章(Vivado 2018.3这个Gadget你用了吗)Vivado 2019.1的Dashboard功能进一步增强。
    的头像 发表于 06-12 14:49 8382次阅读
    关于<b class='flag-5'>Vivado</b> 2019.1的Dashboard功能详解

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

    Vivado License Manager在使用Vivado License Manager时,如果通过如下图所示方式指定license的路径时,要保证路径仅包含ASCII字符而没有中文字
    的头像 发表于 09-12 15:15 5933次阅读

    【FPGA Vivado】基于 FPGA Vivado 的流水灯样例设计

    【流水灯样例】基于 FPGA Vivado 的数字钟设计前言模拟前言Vivado 设计流程指导手册——2013.4密码:5txi模拟
    发表于 12-04 13:21 26次下载
    【FPGA <b class='flag-5'>Vivado</b>】基于 FPGA <b class='flag-5'>Vivado</b> 的流水灯样例设计

    如何升级Vivado工程脚本

    Vivado可以导出脚本,保存创建工程的相关命令和配置,并可以在需要的时候使用脚本重建Vivado工程。脚本通常只有KB级别大小,远远小于工程打包文件的大小,因此便于备份和版本管理。下面把前述脚本升级到Vivado 2020.2
    发表于 08-02 10:10 1850次阅读

    用TCL定制Vivado设计实现流程

    今天推出Xilinx已发布的《Vivado使用误区与进阶》系列:用TCL定制Vivado设计实现流程。
    的头像 发表于 05-05 09:44 1082次阅读
    用TCL定制<b class='flag-5'>Vivado</b>设计实现流程

    vivado仿真流程

    vivado开发软件自带了仿真工具,下面将介绍vivado的仿真流程,方便初学者进行仿真实验。
    的头像 发表于 07-18 09:06 4494次阅读
    <b class='flag-5'>vivado</b>仿真流程

    Vivado设计套件用户:使用Vivado IDE的指南

    电子发烧友网站提供《Vivado设计套件用户:使用Vivado IDE的指南.pdf》资料免费下载
    发表于 09-13 15:25 14次下载
    <b class='flag-5'>Vivado</b>设计套件用户:使用<b class='flag-5'>Vivado</b> IDE的指南

    Vivado使用小技巧

    有时我们对时序约束进行了一些调整,希望能够快速看到对应的时序报告,而又不希望重新布局布线。这时,我们可以打开布线后的dcp,直接在Vivado Tcl Console里输入更新后的时序约束。如果调整
    的头像 发表于 10-24 15:08 337次阅读
    <b class='flag-5'>Vivado</b>使用小技巧