目录
一、序言
二、Set Data Check
2.1 基本概念
2.2 设置界面
2.3 命令语法
三、工程示例
3.1 工程代码
3.2 约束设置
3.3 时序报告
四、参考资料
通常进行时序分析时,会考虑触发器上时钟信号与数据信号到达的先后关系,从而进行setup,hold分析。同样地,我们也可以对两个数据信号进行类似的setup和hold关系检查。对于这类检查,有专门的约束命令,即set_data_check,可以对两个终点设置最大和最小要求时间检查,最终结果体现在设计的时序路径上,该约束只是用于检查时序的目的,不会影响布局布线。
set data check通常用于控制信号与数据信号间的时序关系检查,类似于常见的setup和hold关系检查。在set data check约束中,from是设置相关联的引脚,类比setup/hold中的时钟信号clk,to设置约束的引脚,类比setup/hold中的数据引脚。时序分析即是比较两个信号到达两个终点的时间。
进入Timing Constraints界面,在左侧Others栏中选中Set Data Check,右侧即显示Set Data Check
设置界面中需设置单data端口检查值Data Check Value,检查类性The Value applies to,关联的clock,关联引脚From,约束引脚对象to,对于引脚也可指定上升沿或下降沿,默认是上升沿和下降沿都可以。
约束from/to的对象,只能为I/O port或cell pins
命令格式
set_data_check [‑from ] [‑to ] [‑rise_from ] [‑fall_from ] [‑rise_to ] [‑fall_to ] [‑setup] [‑hold] [‑clock ] [‑quiet] [‑verbose]
参数含义
1、以对从引脚A_IN到引脚C_IN进行一个setup的检查,A_IN是相关联的引脚,C_IN是被约束的引脚,即C_IN上的信号需早于A_IN上的信号2ns到达
set_data_check -from A_IN -to C_IN -setup 2.0
设计中以两个触发器输出到一个LUT2的两个输入引脚为例,对LUT2的两个输入引脚设置set_data_check约束检查
module set_data_check(d1,d2,clk,rst,out);
input d1,d2,clk,rst;
output out;
reg ff1,ff2;
always@(posedge clk)
begin
if(!rst)
ff1<=0;
else
ff1<=d1;
end
always@(posedge clk)
begin
if(!rst)
ff2<=0;
else
ff2<=d2;
end
assign out=ff1&ff2;
endmodule
综合网表连接图如下图所示
约束文件,set_data_check约束中setup,hold约束都设置了,即LUT2上I1端口的信号要早于I0信号至少0.3ns到达,并且在I0到达后至少要维持0.2ns。还需对out端口设置set_output_delay约束,否则无时序路径进行分析。
create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
set_output_delay -clock [get_clocks *] 0.500 [get_ports -filter { NAME =~ "*" && DIRECTION == "OUT" }]
set_data_check -setup -from [get_pins out_OBUF_inst_i_1/I0] -to [get_pins out_OBUF_inst_i_1/I1] 0.300 -clock [get_clocks *]
set_data_check -hold -from [get_pins out_OBUF_inst_i_1/I0] -to [get_pins out_OBUF_inst_i_1/I1] 0.200 -clock [get_clocks *]
时序报告结果中,setup中有一条ff2_reg/C到out_OBUF_inst_i_1/I1的路径,查看详细信息,可看到在目标时钟到达的路径上有一条LUT2标注有set_data_check的路径,时延值即为约束的0.3ns,-0.3即表示在原有基础上还需提前0.3ns到达。但此种条件会到导致setup违例0.437ns,说明该条目录上自身就存在0.137ns的违例。
再看对应的hold检查,hold路径中多了一条ff2_reg/C到out_OBUF_inst_i_1/I1的路径,再看详细的路径时延,在目的时钟到达时延中,有一个LUT标注了hold_data_check,该路径时延值增加了0.2ns,即为约束set_data_check中hold的0.2ns,表示信号到达后时延值需再维持0.2ns
将set_data_check约束移除,时序报告中setup,hold都只有一条,符合预期
用户手册:ug903-vivado-using-constraints-en-us-2022.2.pdf
链接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt
提取码:mylt