FPGA时序分析与时序约束(三)——I/O接口约束

        为了准确地对设计中的外部时序上下文进行建模,必须提供输入和输出端口的时序信息。因此要进行输入输出延时约束,延迟约束用的是set_input_delayset_output_delay,分别用于input端和output端,其时钟源可以是时钟输入管脚,也可以是虚拟时钟。

一、输入接口约束

set_input_delay -clock -reference_pin -clock_fall -rese -max -add_delay
  • -clock用于指定约束引脚的同步时钟(源时钟),为同步时钟的名称,可以是主时钟或虚拟时钟;
  • -reference_pin用于指定延时值的参考时钟,为参考时钟名称;可选项,若不指定该选项则默认参考时钟为-clock指定的同步时钟;
  • -clock_fall指定输入延时约束取值相对于同步时钟的下降沿;可选项,若不指定则默认为-clock_rise;
  • -rise指定约束信号相对时钟边沿的关系是上升沿,也可以用-fall指定为下降沿;
  • -max表示设定最大延时值,也可以用-min设置最小延时值;若不指定-max或-min。则输入延时值同时用最大和最小延时值的时序分析路径;
  • 指定将应用到目标输入引脚的延时值,有效值为大于或等于0的浮点数,默认为1.0;
  • 用于指定约束的目标输入引脚名称。

以主时钟为同步时钟的输入引脚约束

        首先定义输入引脚为CLK0的主时钟sysCLK,然后约束了-max和-min值同2ns的输入延时约束

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 2 [get_ports DIN]

以虚拟时钟为同步时钟的输入引脚约束

        首先定义虚拟时钟clk_port_virt,然后约束了-max和-min值同2ns的输入延时约束

create_clock -name clk_port_virt -period 10
set_input_delay -clock clk_port_virt 2 [get_ports DIN]

指定最大和最小延时值得输入引脚约束

        首先定义输入引脚为CLK0的主时钟sysCLK,然后约束了-max和-min值分别为4ns和1ns的输入延时约束

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 4 [get_ports DIN]
set_output_delay -clock sysClk 1 [get_ports DOUT]

参考时钟下降沿的输入引脚约束

        对输入引脚DIN进行约束,指定其相对同步时钟clk1下降沿后2ns的输入延时

set_input_delay -clock_fall -clock clk1 2 [get_ports DIN]

同时指定同步时钟和参考时钟的输入引脚约束

        对输入引脚reset进行约束,指定其同步时钟为wbCLK,相对参考时钟wbCLK_IBUF_BUFG_inst/O上升沿后2ns的输入延时值

set_input_delay -clock wbCLK 2 -reference_pin [get_pin wbCLK_IBUF_BUFG_inst/0] [get_ports reset]

多组参考组合的输入引脚约束

        对输入时钟引脚DDR_CLK_IN做主时钟约束,命名为clk_ddr,以clk_ddr作为同步时钟,对输入数据引脚DDR_IN分别做同步时钟上升沿和下降沿的输入延时约束,并分别指定其输入延时的最大值和最小值。

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_input_delay -clock clk_ddr -max 2.1 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -max 1.9 [get_ports DDR_IN] -clock_fall -add_delay
set_input_delay -clock clk_ddr -min 0.9 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -min 1.1 [get_ports DDR_IN] -clock_fall -add_delay

二、输出接口约束

        set_output_delay命令用于指定输出数据引脚相对于其时钟沿的路径延时。通常输出延时值包含了数据信号从FPGA引脚到外部芯片的板级延时、外部芯片的建立时间和保存时间等。输出延时值可以是正值或负值。

        set_output_delay以-max和-min参数分别表示约束的最大值和最小值,最大值用于建立时间检查,最小值用于保持时间检查。

        set_output_delay约束命令的语法与set_input_delay相似:

set_output_delay -clock -reference_pin -clock_fall -rese -max -add_delay
  • -clock用于指定约束引脚的同步时钟(源时钟),为同步时钟的名称,可以是主时钟或虚拟时钟;
  • -reference_pin用于指定延时值的参考时钟,为参考时钟名称;可选项,若不指定该选项则默认参考时钟为-clock指定的同步时钟;
  • -clock_fall指定输入延时约束取值相对于同步时钟的下降沿;可选项,若不指定则默认为-clock_rise;
  • -rise指定约束信号相对时钟边沿的关系是上升沿,也可以用-fall指定为下降沿;
  • -max表示设定最大延时值,也可以用-min设置最小延时值;若不指定-max或-min。则输入延时值同时用最大和最小延时值的时序分析路径;
  • 指定将应用到目标输入引脚的延时值,有效值为大于或等于0的浮点数,默认为1.0;
  • 用于指定约束的目标输入引脚名称。

以主时钟为同步时钟的输出引脚约束

        对输出引脚DOUT进行输出延时约束,首先定义主时钟sysCLK,然后约束了-max和-min值同6ns的输出延时约束

create_clock -name sysClk -period 10 [get_ports CLK0]
set_output_delay -clock sysClk 6 [get_ports DOUT]

以虚拟时钟为同步时钟的输出引脚约束

         对输出引脚DOUT进行输出延时约束,首先定义虚拟时钟clk_port_virt,然后约束了-max和-min值同6ns的输入延时约束

create_clock -name clk_port_virt -period 10
set_output_delay -clock clk_port_virt 6 [get_ports DOUT]

同时指定时钟上升沿和下降沿的输出引脚约束

         对DDR数据端口DDR_DOUT进行输出延时约束,参考时钟为主时钟clk_ddr。在约束中输出数据引脚DDR_OUT在时钟clk_ddr的上升沿和下降沿同时需要采样,所以使用-clock_fall -add -delay选项额外指定下降沿的输出延时(无-clock_fall -add -delay选项默认为上升沿的输出延时约束)

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_output_delay -clock clk_ddr -max 2.1 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -max 1.9 [get_ports DDR_OUT] -clock_fall -add_delay
set_output_delay -clock clk_ddr -min 0.9 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -min 1.1 [get_ports DDR_OUT] -clock_fall -add_delay

FPGA时序分析与约束(13)——I/O接口约束-CSDN博客

参考文献:

《FPGA时序约束与分析》
《正点原子FPGA静态时序分析与时序约束》 
《Intel Quartus Prime Standard Edition用户指南: Timing Analyzer》
《Vivado Design Suite User Guide: Using Constraints(UG903)》
《Vivado Design Suite 用户指南: 设计分析与收敛技巧 (UG906)》

你可能感兴趣的:(#,FPGA时序分析与约束,fpga开发,嵌入式硬件,FPGA,时许约束,时许分析)