FPGA设计时序约束十三、Set_Data_Check

2023-12-23 23:39:31

目录

一、序言

二、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

2.1 基本概念

???set data check通常用于控制信号与数据信号间的时序关系检查,类似于常见的setup和hold关系检查。在set data check约束中,from是设置相关联的引脚,类比setup/hold中的时钟信号clk,to设置约束的引脚,类比setup/hold中的数据引脚。时序分析即是比较两个信号到达两个终点的时间。

2.2?设置界面

进入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

?

2.3?命令语法

命令格式

set_data_check [?from <args>] [?to <args>] [?rise_from <args>] [?fall_from <args>] [?rise_to <args>] [?fall_to <args>] [?setup] [?hold] [?clock <args>] [?quiet] [?verbose] <value>

参数含义

?

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

三、工程示例

3.1 工程代码

设计中以两个触发器输出到一个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

综合网表连接图如下图所示

3.2 约束设置

约束文件,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 *]

3.3?时序报告

????时序报告结果中,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? ?

文章来源:https://blog.csdn.net/zyp626/article/details/135175549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。