VIVADO时序约束及STA基础

一、前言

  无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计环节。在FPGA设计中,可以在综合后和实现后进行STA来查看设计是否能满足时序上的要求。本文阐述基本的时序约束和STA操作流程。内容主要来源于《Vivado从此开始》这本书,我只是知识的搬运工。

二、时序约束与XDC脚本

  时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序约束。Vivado使用SDC基础上的XDC脚本以文本形式约束。以下讨论如何进行最基本时序约束相关脚本。

1 时序约束首要任务是创建主时钟,主时钟即为时钟引脚进入时钟信号或高速收发器生成时钟。[create_clock]

  create_clock -name clk_name -period N -waveform {pos_time neg_time} [get_ports port_name] (划线部分可选)

  创建两个异步的主时钟:

  create_clock -name clk_a -period 10 [get_ports clk_a]

  create_clock -name clk_b -period 15 [get_ports clk_b]

  set_clock_groups -asynchronous -group clk_a -group clk_b

  当两个主时钟是异步关系,它们生成时钟同样是异步关系:

  set_clock_groups -asynchronous -group [get_clocks clk_a -include_generated_clocks] \

  -group [get_clocks clk_b -include_generated_clocks]

  差分时钟仅约束P端口:

  create_clock -name clk -period 10 [get_ports clk_p]

  高速收发器生成时钟作为主时钟:

  create_clock -name gt0_txclk -period 8  [get_pins GT0/.../TXOUTCLK]

  有一种特殊情况无需与具体引脚绑定,即创建虚拟时钟。该约束用于设定输入/输出延迟。需要创建虚拟时钟的场景是输入FPGA的数据由FPGA内部产生时钟采样,如串口通信。

  create_clock -name clk_v -period 5

2 创建主时钟后,需要约束生成时钟:[create_generated_clock]

  生成时钟分为两种。由PLL MMCM等专用时钟单元生成产生的时钟信号,Vivado会自动产生相关约束。还有一种是自定义生成时钟,一般为逻辑分频得到。

  时钟源是时钟端口:

  create_generated_clock -name clk_div -source [get_ports clk] -divide_by 2 [get_pins rega/Q] 意思是在rega单元的Q引脚上的时钟信号clk_div是由clk经过2分频得到的生成时钟。

  时钟源是引脚:

  create_generated_clock -name clk_div -source [get_pins rega/C] -divide_by 2 [get_pins rega/Q]

  除了使用-divide_by -multiply_by表示主时钟和生成时钟的频率关系,也可以用 -edges实现更精确的表达:

  create_generated_clock -name clk_div -source [get_pins rega/C] -edges {1 3 5} [get_pins rega/Q]

  相移关系使用-edge_shift命令描述。

  该约束命令还常用于重命名时钟信号:

  create_generated_clock -name clk_rename [get_pins clk_gen/.../CLKOUT0]

3 创建时钟组:[set_clock_groups]

  a. 异步时钟情况:

  set_clock_groups -asynchronous -group clk_a -group clk_b  clk_a和clk_b是异步时钟。

  b. 物理互斥情况:

  create_clock -name clk_a -period 10 [get_ports clk]

  create_clock -name clk_b -period 8 [get_ports clk] -add

  create_clock -name clk_c -period 5 [get_ports clk] -add

  set_clock_groups -physically_exclusive -group clk_a -group clk_b -group clk_c

  该种情况仅是为了观察clk引脚时钟信号周期依次为10ns 8ns和5ns时,时序是否收敛。因此这三个时钟物理上不同时存在。

  c. 逻辑互斥情况:

  set_clock_groups -logically_exclusive\

  -group [get_clocks -of [get_pins clk_core/.../CLKOUT0]] -group [get_clocks -of [get_pins clk_core/.../CLKOUT1]]

  clkout0和clkout1送入到BUFGMUX中,后续根据sel信号确定选择哪一个作为工作时钟。此时clkout0和clkout1同时存在电路中,但仅有一个会作为后续电路工作时钟,因此逻辑上互斥。

  特殊用法:当asynchronous 的group只有一个,说明改组内时钟是同步的,但与其他所以时钟异步。

4 设置伪路径:[set_false_path]

  设置伪路径后,不再对特殊路径进行时序分析。特殊路径如测试逻辑、添加同步电路后的跨时钟域路径等。在两个时钟域之间应该相互设置为set_false:

  set_false_path -from [get_clocks clk_a] -to [get_clocks clk_b]

  set_false_path -from [get_clocks clk_b] -to [get_clocks clk_a]

5 常用时钟相关命令:

  report_clocks:查看创建的所有时钟

   report_property [get_clocks <clk_name>]:查看时钟clk_name的属性

  report_clock_network:查看时钟的生成关系网络

  report_clock_interaction:查看时钟交互关系

  其中最后一项非常重要,经常被用于查看异步时钟域之间的路径是否安全。若存在不安全路径,需要添加同步、握手或FIFO后,设置为异步时钟组或false_path。

  键入该命令后,会生成时钟交互矩阵。对角线是每个时钟内部路径,其他非黑色部分即为存在对应两个时钟的跨时钟域路径。红色部分是非安全路径,若不处理会产生亚稳态。

三、查看时序报告(STA)

  本节以一个有很多时序问题的工程为例进行讲解。在综合后即可打开时序概要查看时序报告。

  打开后有如下界面:

  其中Design Timing Summary是时序概况,包括最大延迟分析、最小延迟分析以及脉冲宽度三个部分。其中WNS或WHS为负数,说明当前设计无法满足建立时间或保持时间要求,也就是说数据无法被稳定采样。

  Clock Summary内的信息与使用report_clocks TCL脚本调出来的信息相似,包含了全部已创建的时钟信号。Check Timing部分则包含了未被约束的部分,我们可以根据该部分信息进一步添加必要的约束。Intra-Clock Paths和Inter-Clock Paths则分别描述了同步和异步电路时序路径的裕量参数。

  点击WNS或WHS后的数值可以直接找到时序裕量最差的路径:

  双击路径信息所在行任意位置,界面会跳转到该路径的详细信息界面:

  四类时序路径中,除了FPGA输入端口到输出端口这一特殊情况外,其他时序路径均由源时钟路径、数据路径和目的时钟路径三部分构成。上表中各项的具体解释见官方文档UG908.

  本文说明了时序约束和STA的关系,基本时序约束情形及相应的XDC脚本。之后简单介绍了如何在VIVADO中查看时序报告来分析时序问题。后续会以网络通信中常见的RGMII接口设计实例阐述I/O延迟约束部分。

原文地址:https://www.cnblogs.com/moluoqishi/p/10655539.html

时间: 2024-10-12 12:22:38

VIVADO时序约束及STA基础的相关文章

FPGA基础知识7(从芯片手册获取参数FPGA时序约束--“CMOS Sensor接口时序约束”)

需求说明:FPGA基本知识 内容       :如何确定时序约束数值 来自       :时间的诗 来源:http://www.61ic.com/Technology/embed/201304/48186.html FPGA工程的功能框图如图所示.上电初始,FPGA需要通过IIC接口协议对摄像头模块进行寄存器初始化配置.这个初始化的基本参数,如初始化地址和数据存储在一个预先配置好的FPGA内嵌ROM中.在初始化配置完成后,摄像头就能够持续输出RGB标准的视频数据流,FPGA通过对其相应的时钟.行

Tcl与Design Compiler (十)——其他的时序约束选项(一)

本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 之前讲了基本的时序路径约束,现在我们来看一下其他的约束,然后通过实战来讲解一些其他的约束.实战中也没有前面的"理论"中的约束类型,但是可以通过实战来了解其他的约束.本文的具体内容是: ·多时钟同步约束 ·门控时钟的约束 (实战:) ·正负边沿触发器的约束 ·输入输出延时的非默认约束 ·输入输出有多个路径驱动(类

FPGA开发全攻略——时序约束

原文链接: FPGA开发全攻略连载之十二:FPGA实战开发技巧(5) FPGA开发全攻略连载之十二:FPGA实战开发技巧(6)(原文缺失,转自:FPGA开发全攻略—工程师创新设计宝典) 5.3.3 和FPGA接口相关的设置以及时序分析5.3.3.1 使用约束文件添加时序约束 一般来讲,添加约束的原则为先附加全局约束,再补充局部约束,而且局部约束比较宽松.其目的是在可能的地方尽量放松约束,提高布线成功概率,减少ISE 布局布线时间.典型的全局约束包括周期约束和偏移约束.在添加全局时序约束时,需要根

FPGA 时序约束(altera timequest)

1 好的时序约束可以指导布局布线工具进行权衡,获得最优的器件性能,使设计代码最大可能的反映设计者的设计意图. 2 TimeQuest 是Altera 在6.0 版的软件中加入的具备ASIC 设计风格的静态时序分析(STA)工具.采用Synopsys Design Constraints(SDC)文件格式作为时序约束输入. 3 TimeQuest所做的就是建立时间和保持时间的检查.对于异步信号就是恢复时间和移除时间.此外还有多周期约束. 4 时序检查的目的就是确认信号跳变发生在"信号跳变抵达窗口&

Tcl与Design Compiler (十一)——其他的时序约束选项(二)

本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 前面介绍的设计都不算很复杂,都是使用时钟的默认行为作为电路的约束,都存在有路径给你约束,即信号的变化要在一个时钟周期内完成,并达到稳定值,以满足寄存器的建立和保持的要求.此外进行可测性设计(design for test)时,为了提高测试的覆盖率,我们经常使用多路(multiplex,简称mux)传输电路的控制时钟,使电路的时钟信号可以由输入端直接

nios中SDRAM时序约束的方法

SDRAMS时序约束十分重要,没有时序约束时,由于数据管脚到时钟的边沿延时不一致,容易导致数据采样出错, 最终导致软件无法加载,很常见的就是在软件下载的过程中找不到chip id. 下面这个方法新手可以参考学习一下! 这里主要是讲了一下时钟的约束, 主要参考特权同学的,链接如下: http://wenku.baidu.com/link?url=Tk1bi1nx0xCp9sp6QIGlpoCtTFzjmwO28-t_mR9L-3Y0nLgEX8y1qR7OBUbtFOBq8K7zELY-PM9Dt

Timequest静态时序分析(STA)基础

Setup Slack Hold Slack Recovery&Removal Recovery: The minimum time an asynchronous signal must be stable BEFORE clock edgeRemoval  : The minimum time an asynchronous signal must be stable AFTER clock edge I/O Analysis Analyzing I/O performance in a s

Xilinx FPGA编程技巧之常用时序约束详解

1.   基本的约束方法 为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取.最普遍的三种路径为: 输入路径(Input Path),使用输入约束 寄存器到寄存器路径(Register-to-Register Path),使用周期约束 输出路径(Output Path),使用输出约束 具体的异常路径(Path specific exceptions),使用虚假路径.多周期路径约束 1.1.  输入约束Input Constraint OFFSET IN约束限定了输入数据和输入时钟边沿的

Xilinx ISE的时序约束

使用Synplify Pro加时序约束.综合完毕后,可以在ISE中进行布局.布线.需要用.ucf文件指定布局布线的时钟约束.前者可以比后者小. 早期的ISE,两个约束可以继承.现在用的高版本,反而需要分别指定,否则会忽略掉. 将综合(Synthesis)的频率提高,将布局布线(Place & route)的频率降低,可以提高性能指标.以后者为性能依归.