vivado之时序约束(一)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vivado之时序约束(一)相关的知识,希望对你有一定的参考价值。

参考技术A 1.输入端口到FPGA内部时序单元的路径

2.FPGN内部时序单元间的路径

3. FPGA部序单元.到输出端口的路径

单元计时弧-单元输入引脚和输出引脚之间的计时弧。网络定时弧- 驱动器(输出引脚)和负载(输入引脚)之间的网络(线)的定时弧。 

起点- 所有输入端口/引脚或时序单元的时钟端口/引脚都被视为起点。

终点- 顺序单元的所有输出端口/引脚或 D 引脚都被视为终点。

这里 就是setup time, 就是那个hold time。setup time和hold time对于一个触发器来说是固定的参数。也就是说要完成一次正常的数据锁存,数据必须要在setup time和hold time的时候保持稳定。在实际的电路当中一个触发器的运行周期必须满足:

                                                                                             

这里只有 (传输延时)是可变的,与具体的电路结构设计有关。 传输的延时越短,FPGA可运行的时钟速率就越高。

检验 Setup是否满足要求,这边引入setup slack概念,只要setup slack的直大于零即setup检查满足要求,其计算公式如下:

     setup slack = data required time - data arrival time

其中:

data required time = destination clock edge time + destination clock path delay - clock uncertainty- setup time

data arrival time    = source clock edge time + source clock path delay + clock to output time + data path delay

公式代入可得到:

setup slack = ( destination clock edge time - source clock edge time) +(destination clock path delay - source clock path delay) - clock uncertainty - setup time - clock to output time - data path delay

                   =  +( - )- -   -  - 

在 Setup检查中source clock一定超前于destination clock.

、 可以通过时序约束确定其值, , 是时序单元的属性值,( - )在布局布线后其值也能确定,剩下 对 影响最大,一个设计Setup检查中的关键路径往往是 值最大的一条路径,影响其值有很多原因,如逻辑级数过多,扇出导致布线延时过大.

 setup slack = data arrival time -  data required time

其中:

data required time = destination clock edge time + destination clock path delay + clock uncertainty + setup time

data arrival time    = source clock edge time + source clock path delay + clock to output time + data path delay

公式代入可得到:

setup slack = ( source clock edge time - destination clock edge time) + (source clock path delay - destination clock path delay) - clock uncertainty - setup time + clock to output time + data path delay

                   =   

        与Setup检查不同,在Hold检查下destination clock超前于source clock.在Setup检查中,Tdestination to source的值选取destination clock和l source clock相差最小的情况下进行分析;而Hold检查中 Tsource to destination的值选取所有Setup关系分别进行分析,每一种 Setup关系对应有两种情况,然后选取所有情况中 的值大于计算对应的 :

        a.取 Setup关系的前一个destination clock沿

        b.取 Setup关系的destination clock沿

Vivado进行时序分析,对时钟的约束是必不可少的,设计中的时钟可分为一下几种:

Primary Clocks主时钟;

Generated Clocks衍生时钟;

Virtual Clocks 虚拟时钟。

1 Primary Clocks

主时钟一般是FPGA外部芯片如品振提供的时钟,通过FPGA引脚输入。Vivado进行时序分析时,以主时钟的源端点作为延时计算起始点Ons 点)。主时钟的约束命令如下:

create_clock -name <clock_name> -period <period> -waveform <rise_time> <fall_time>[get_ports <input_port>]

2 Generated Clocks

衍生时钟是由设计内部产生,一般由时钟模块MMCM or PL或者逻辑产生,并且对应有一个源时钟,源时钟可以是系统的主时钟或者另外一个衍生时钟。约束衍生时钟时,除了定义周期,占空比,还需要指明与源时钟的关系。通过create_generated_clock命令约束衍生时钟,命令如下:

create_generated_clock -name<generated clock name> -source <master clock source pin or port> -divide_by <div_factor> <pin_or_port>

3 Virtual Clocks

虚拟时钟是在FPGA设计不存在的时钟,但是FPGA与板上的其它芯片间有数据交互,属于FPGA 内部时序单元到输出端口的路径。芯片上的时钟并不是由FPGA提供,Vivado在进行这部分时序分析时并不知道芯片的时钟,因此需要定义一个虚拟时钟,然后约束输出端口的output delay。

约束虚拟时钟的命令也是create_clock,但是其不需要指定-source,如下指令:

create_clock -period 100.000 -name SCLK -waveform 0.000 50.000

Vivado操作之时序约束介绍

目录

一、前言

二、时序约束界面

三、时序约束介绍

四、参考


一、前言

       任何一个FPGA工程都需要设置相关的时序约束,下面将介绍Vivado中如何进行时序约束操作以及各种约束的使用方法。

二、时序约束界面

        在一个工程运行到IMPLEMENTATION后,进入到左侧的Flow Navigator窗口,点击IMPLEMENTION下的Edit Constraints,右侧会出现Timing Constraints窗口,即可添加时序约束

        左侧Clocks目录下点击任意一个时钟类型进行选定,双击右侧空白处将弹出对应类型时钟约束设置界面,下图示例为Set Clock Sense的设置

    

        也可使用Constraints Wizard,将弹出设置时序约束的引导窗口。

三、时序约束介绍

        通过时序约束界面添加设置中可看到,时序约束可分为6大类:Clocks,Inputs,Outputs,Assertions,Exceptions,Others,本文主要介绍其中常用的时序约束

Clocks:主要关于时钟源相关的约束;

Inputs/Outputs:设置外部芯片到FPGA的时钟源输入延时,FPGA信号输出到外部芯片的输出延时

Assertions:设置数据路径检查以及总线偏斜

Exceptions:设置一些时序路径例外的约束

Others:除上述几类之外的时钟约束

3.1 Clocks

3.1.1 Create Clock

        Create Clock约束为创建时钟源信号,即外部传入到FPGA的时钟信号,Clock name即为设置时钟名称,Waveform中Period为时钟周期,Rise at和Fall at为时钟上升沿,下降沿的时钟位置,Fall at减去Rise at即为时钟信号的占空比。

        Source Objects是将该时钟信号约束的对象,可设置到I/O Port,Cell pins,Nets上,对于设置的对象,可在Options上输入搜查条件查找,Results中展示搜索结果,在Results中选定对象,点击右移图标即移入到Selected及时选定了约束对象

        设定后同时在Create Clock窗口的Command将显示自动生成对应的约束命令,再保存生成的文件。

        在Constraints中可以看到生成的约束文件time_constraints.xdc,文件内容为约束命令

3.1.2 Create Generated Clock(生成时钟)

        生成时钟Generated Clock是在以Create Clock中的时钟为主时钟,生成新的时钟,优点是主时钟变化时,Generated Clock自动同步更新,一般是在时钟频率很低且扇出小时才建议使用生成时钟,原因是生成时钟一般由组合逻辑和时序逻辑生成,相对质量差。生成可以是主时钟的分频时钟或者倍频时钟,占空比可以设置。如下图

         也可以通过时钟边沿来设置生成时钟,设置界面如下图

对应的命令为create_generated_clock -name gen_clk -source [get_pins clk_IBUF_BUFG_inst/O] -edges 1 3 4 -edge_shift 2.0 0.0 1.0 -add -master_clock [get_clocks  "*"] [get_pins shiftr_reg[13]/C]

含义解释:-edge 1,3,4即生成时钟的第1个上升沿位置,第1个下降沿位置,第2个上升沿位置分别对应源时钟的第1,3,4个变化边沿,-edge_shift的3个值为在源时钟基础上的偏移。假设源时钟clk周期为10ns,占空比为50%,从0时刻开始,统计了边沿变化的数目,-edge 1,3,4如中间波形所示,对应了clk第1,3,4的边沿;Generate clk即为各个边沿的偏移值,分别是0+2,10+0,15+1,即为Generate clk的波形。

3.1.3 Set Clock Uncertainty

        Set Clock Uncertainty可以设置时钟网络的Skew,Clock Skew为时钟偏斜,表示同一时钟或生成时钟到达不同触发器存在时差,Uncertainty applies to 可设置setup,hold,setup/hold;simple uncertainty可以设置到不同的Objects,设置Objects对象可以是Clocks,Cell pins,I/O Ports;Interclock uncertainty只能设置Clocks间的skew

设置格式如下图所示

3.1.4 Set Clock Groups

        Vivado在进行时序分析时,默认所有时钟都是同步的,工程实际使用中,会存在一些时钟为异步时钟,此时当做同步时钟进行分析导致结果不准确,通过设置时钟组可以让工具不进行时序分析,下图中设置clk1 gen_clk1和clk2 gen_clk2为异步时钟组,组间的任何两个时钟间都不会进行时序分析。

        同时,除了选项asynchronous,也可以设置为logically exclusive和physically exclusive,

区别是如果两组时钟不能同时存在,则使用-physically exclusive,如果是两组时钟逻辑分析上不存在交互路径,则使用-logically exclusive

3.1.5 Set Input Delay/Set output Delay

        设置端口或者pin上时钟的输入或输出时延值.

3.2 Exceptions

        添加时序例外路径约束可减少编译时间,降低约束的调试难度以及阻止工具优化掉一些需要的信号,常用的时序例外约束Set minimum Delay/Set maximum Delay,Set Multicycle Path,Set False Path.

3.2.1 Set minimum Delay/Set maximum Delay

         设置某些路径的最大时延或最小时延,对象可以是Cell pins,Cells,clocks,I/O port,通常使用场景如下:

1)对某些时序路径实施过约束

2)代替多周期路径约束

3)对异步跨时钟域进行set_max_

设定path delay值后,设置起点start points,中间路径Through points,终点End Points即可

3.2.2 Set Multicycle Path

        设计中存在一些发起沿到捕获沿的周期非单个周期,如果按单个周期进行分析,可能出现时序违例的情况,也不符合实际工程需求,Specify path multiplier设置周期数,然后再设置起点和终点

        其他Options中参数含义,-setup表示建立时间需要的周期,-hold表示保持时间需要回调的时钟周期个数,-end表示已目的时钟作为基准周期,-start表示以源时钟作为基准周期

3.2.3 Set False Path

        Set False Path的作用类似Set Clock Group,对于设置了该约束的路径不会进行时序分析,主要是针对一些路径的电路功能不会发生或者路径不需要时序约束;

        常见的一些可设置False的路径:

        1)通过双触发器同步的跨时钟域路径

        2)只在上电时工作的寄存器对应的电路

        3)异步复位电路

        4)只在测试时使用的路径

设置界面如下图,设定起点终点,也可添加中间路径,

                Options中可设置Setup/Hold,Rise/Fall

四、参考

1、书籍《Vivado 从此开始》 高亚军

以上是关于vivado之时序约束(一)的主要内容,如果未能解决你的问题,请参考以下文章

如何对vivado时序约束有个很好得理解

VIVADO时序约束及STA基础

vivado 2017需要注册吗

VIVADO的XDC怎么实现LOC约束

vivado的综合与实现策略怎样设置

VIVADO 进阶