FPGA时钟周期约束讲解


FPGA时钟周期约束讲解

时间:2025-03-13  作者:Diven  阅读:0

2 时钟周期约束

时钟周期约束是用于对时钟周期的约束,属于时序约束中最重要的约束之一。

本章主要讲解目前主流开发环境Vivado中的时钟约束命令。

a.create_clok

Vivado开发环境中使用create_clock创建时钟周期约束,具体格式如下:

create_clock-name -period -waveform {}[get_ports]

参数名称含义
name时钟名称
Period时钟周期
waveform波形参数,第一个参数为时钟的第一个上升沿时刻,第二个参数为时钟的第一个下降沿时刻
add在同一时刻源上定义多个时钟使用

上述所说的时钟需是主时钟,主时钟有两种情况:一种是时钟由外部时钟源提供,通过硬件引脚引入FPGA,该时钟所对应的时钟为主时钟;另一种是高速收发器GTP的时钟引脚TXOUTCLK和RXOUTCLK,对于7系列FPGA,需要对GTP的两个时钟手动约束;对于UltraScale FPGA,只需对GTP的输入时钟约束即可,Vivado会自动对这两个时钟约束,Vivado软件会自动设置约束。

可以采用借助Tcl脚本方式确定主时钟是否为时钟周期约束的关键。

方式一:运行tcl指令report_clock_networks-name mainclock;

方式二:运行tcl指令check_timing-override_defaults no_clock;

高速收发器的时钟,可以通过以下方式进行约束:

# Define the clocks for the GTX blocks

create_clock -name gt0_txusrclk_i -period 12.8 [get_pinsmgtEngine/ROCKETIO_WRAPPER_TILE_i/gt0_ROCKETIO_WRAPPER_TILE_i/gtxe2_i/TXOUTCLK]
create_clock -name gt2_txusrclk_i -period 12.8 [get_pinsmgtEngine/ROCKETIO_WRAPPER_TILE_i/gt2_ROCKETIO_WRAPPER_TILE_i/gtxe2_i/TXOUTCLK]
create_clock -name gt4_txusrclk_i -period 12.8 [get_pinsmgtEngine/ROCKETIO_WRAPPER_TILE_i/gt4_ROCKETIO_WRAPPER_TILE_i/gtxe2_i/TXOUTCLK]
create_clock -name gt6_txusrclk_i -period 12.8 [get_pinsmgtEngine/ROCKETIO_WRAPPER_TILE_i/gt6_ROCKETIO_WRAPPER_TILE_i/gtxe2_i/TXOUTCLK]

当FPGA系统中有多个主时钟时,且这几个主时钟之间存在确定的相位关系时,需要用到-waveform参数。约束如下。

create_clock -name clk0-period 10.0 -waveform {0 5} [get_ports clk0]
create_clock -name clk1-period 8.0 -waveform {2 8} [get_ports clk1]

约束中的数字的单位默认是ns,若不写wavefrom参数,则默认是占空比为50%且第一个上升沿出现在0时刻。使用report_clocks指令可以查看约束是否生效。