FPGA设计时序约束十三、Set_Data_Check

目录

一、序言

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

FPGA设计时序约束十三、Set_Data_Check_第1张图片

 

设置界面中需设置单data端口检查值Data Check Value,检查类性The Value applies to,关联的clock,关联引脚From,约束引脚对象to,对于引脚也可指定上升沿或下降沿,默认是上升沿和下降沿都可以。

FPGA设计时序约束十三、Set_Data_Check_第2张图片

 

约束from/to的对象,只能为I/O port或cell pins

FPGA设计时序约束十三、Set_Data_Check_第3张图片

 

2.3 命令语法

命令格式

set_data_check [‑from ] [‑to ] [‑rise_from ] [‑fall_from ] [‑rise_to ] [‑fall_to ] [‑setup] [‑hold] [‑clock ] [‑quiet] [‑verbose] 

参数含义

FPGA设计时序约束十三、Set_Data_Check_第4张图片

 

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

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

FPGA设计时序约束十三、Set_Data_Check_第5张图片

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的违例。

FPGA设计时序约束十三、Set_Data_Check_第6张图片

 

    再看对应的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

FPGA设计时序约束十三、Set_Data_Check_第7张图片

 

将set_data_check约束移除,时序报告中setup,hold都只有一条,符合预期

FPGA设计时序约束十三、Set_Data_Check_第8张图片

 

四、参考资料

用户手册:ug903-vivado-using-constraints-en-us-2022.2.pdf

链接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt 

提取码:mylt   

你可能感兴趣的:(FPGA所知所见所解,fpga开发,时序约束,set_data_check,vivado,时序分析,STA,数据检查)