当前位置:   article > 正文

【FPGA】Xilinx Vivado时序约束——时钟约束_vivado中约束文件

vivado中约束文件

约束文件

Vivado目前支持的约束文件为Xilinx Design Constraints(XDC),是由SDC格式转换过来的,是一种tcl语言,主要包括时钟约束、管脚约束以及一些配置约束,最常用到的就是时钟约束以及管脚约束。vivado生成的时钟约束以及管脚约束文件都为.xdc格式,一般建立两个文件,一个作为时钟约束,一个作为管脚约束。

时钟约束

为了获得最佳精度的最大定时路径覆盖范围,必须适当地定义时钟。推荐时钟约束顺序如下

## Timing Assertions Section
# Primary clocks
# Virtual clocks
# Generated clocks
# Clock Groups
# Bus Skew constraints
# Input and output delay constraints
## Timing Exceptions Section
# False Paths
# Multicycle Paths
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

主要可以分为同步时钟约束以及异步时钟约束。
1.Primary clocks
Primary clocks是通过输入端口或千兆收发器输出引脚(例如,恢复时钟)进入设计的板时钟。指令为 create_clock,举例如下:create_clock -period 10 [get_ports sysclk],此处约束了一个周期10ns,管脚名称为sysclk的时钟,属于异步时钟定义指令。
2.Virtual clocks
Virtual clocks是一种在设计中没有物理连接到任何网表元素的时钟,必须在输入和输出延迟约束使用之前定义。虚拟时钟主要是用在I/O输入输出约束上,用来代表与fpga相连的外部器件的时钟。比如源同步输入时,就可以通过创建虚拟时钟进行输入最大最小延迟约束。这是一般不常使用,举例如下:create_clock -name clk_virt -period 10,定义一个名称为clk_virt,周期为10ns的虚拟时钟。
3.Generated clocks
generated clocks是指从PLL生成的时钟,或者由程序分频产生的时钟。指令为create_generated_clock ,举例如下:
create_clock -name clkin -period 10 [get_ports clkin]
create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 [get_pins REGA/Q],属于同步时钟约束,一般不常使用,容易造成过度约束。
4.Clock Groups
set_clock_groups命令禁用您识别的时钟组之间的时间分析,而不是同一组内的时钟之间的时间分析。时钟之间的两个方向上的时间被忽略。set_false_path constraint只是忽略一个方向,举例如下:set_clock_groups -name async_clk0_clk1 -asynchronous -group {clk0 usrclk itfclk} -group {clk1 gtclkrx gtclktx},约束后不再分析异步时钟之间的时序,常用于异步时钟之间的约束。
5.Bus Skew constraints
系统抖动是由电源噪声、电路板噪声或系统的任何额外抖动引起的整体抖动,使用set_system_jitter 指令可以对时钟抖动进行约束,举例如下:set_input_jitter [get_clocks -of_objects [get_ports clkin]] 0.1,约束时钟抖动范围在+/-100 ps。
6.Input and output delay constraints
set_input_delay命令指定输入端口上相对于设计接口上的时钟边缘的输入路径延迟,举例如下:

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 4 [get_ports DIN]
set_output_delay -clock sysClk 1 [get_ports DOUT]

在端口DIN和DOUT之间的组合路径上设置了5 ns (10 ns - 4 ns - 1 ns)的约束。
7. False Paths
设置伪路径,用于异步时钟之间的约束,约束时候只是一端路径,约束时候一般成对使用,举例如下:

set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]

定义了CLKA以及CLKB的伪路径。
9.Multicycle Paths
Multicycle Paths约束一般常用于同步时钟,最常见的例子是逻辑路径需要多个时钟周期才能使数据在端点稳定。举例如下

set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 1 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

C寄存器与D寄存器之间定义了一个多周期的约束。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/465012
推荐阅读
相关标签
  

闽ICP备14008679号