【精品博文】vivado 多周期路径设置
设置多周期路径约束的目的:放松该路径时序要求,便于优先满足其他路径的布线,也有可能减少编译时间。默认情况下,VIVADO时序分析对应的是单个时钟周期。对于一些特定的逻辑路径显得不太合适,过于严格了。
最常用的情况就是,如果应用中的数据可以在多于一个时钟周期在接收端稳定,那么Xilinx就推荐使用多周期约束来放松时序的要求。
在VIVADO设计中,利用set_multicycle_path 指令来完成多周期约束设置,以此来设置相对于源时钟或者目的时钟的多个周期。
set_multicycle_path 命令的语法格式如下所:
set_multicycle_path <path_multiplier> [-setup|-hold] [-start|-end]
[-from <startpoints>] [-to <endpoints>] [-through <pins|cells|nets>]
默认情况下,setup的路径的多周期,是相对于接收端的时钟,如果需要修改setup的相对时钟为源时钟,需要用到-start选项
类似的,hold的多周期设置默认情况下是相对于源时钟而言的。如果需要修改为hold多周期相对于目的时钟,需要使用end选项。
需要注意的是,多周期设置中setup选项不仅仅会改变setup的时序关系,它也会影响hold的时序关系(通常是绑定在setup的) 。如果需设定hold回到原始状态,就需要set_multicycle_path 命令的-hold选项。
举例说明(同时钟域下的多个周期设置分析)
如上图所示:常规的单周期情况下的setup和hold检查规则如下
Setup check
T Datapath(max) < TCLK (t=Period) - T Setup
Hold check:
T Datapath(min) > TCLK (t=0) + T Hold
在同源时钟情况下,如下图状况下
可以设定多周期为2:et_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D],那么就把setup检查的捕获沿延时至第二个捕获沿分析(第一个捕获沿无动作),相应的hold
也延时一个周期。如下图所示为设置前后的时序分析变化,
实际上hold的这种变化是不需要的,所以xilinx推荐利用命令更改会原始状态(set_multicycle_path 1 -hold -end -from [get_pins data0_reg/C] \-to [get_pins data1_reg/D]
), 加上此命令后,如下图所示
注意在同源时钟情况下,源时钟和目的时钟一样,所以可以不需要使用-end, -start选项