可编程逻辑
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指令可以查看约束是否生效。
全部0条评论
快来发表一下你的评论吧 !