当前位置:   article > 正文

【时序约束与分析】_spi时序约束

spi时序约束


通过时许约束告诉 FPGA 工具(如 Vivado\Quartus),进行合理分配资源,保证 FPGA 系统基本性能要求得以实现。

一. 路径约束

路径可分为时钟路径和数据路径,数据路径需要满足建立时间和保持时间要求,从时钟到寄存器的时序路径约束。

1.1 虚假路径约束

set_false_path -from [get_port reset ] -to [all_register]
  • 1
  • CLKA 和 CLKB 需要从两个时钟方向都做约束:
set_false_path -from [get_clocks CLKA ] -to [get_clocks CLKB]
set_false_path -from [get_clocks CLKB ] -to [get_clocks CLKA]
  • 1
  • 2
  • 同样可以对 pins 和 ports 约束,如:
set_false_path -from [get_pins u_dp_ctrl/vh_erro/C ] -to [get_pins u_dp_ctrl/utt_ght_led/fd_reg[0]/D]
set_false_path -from [get_clocks ctrl_clk ] -to [get_clocks -of_objects [get_pins clk_wiz_0/inst/mmcm_adv_inst/CLKOUT2]]
  • 1
  • 2

1.2 最大最小延时约束

set_max_delay -from[get_pins lcd_dt/lcd_clt_reg/C] -to [get_pins {u_ddr3_cache/diff_clk1/dpf_reg[0]/D}] 20.0
set_min_delay -from[get_pins lcd_dt/lcd_clt_reg/C] -to [get_pins {u_ddr3_cache/diff_clk1/dpf_reg[0]/D}] 2.0
set_max_delay -from[get_ports rst_n] -to [get_ports led] 40.0
set_min_delay -from[get_ports rst_n] -to [get_ports led] 1.0
  • 1
  • 2
  • 3
  • 4

二. 主时钟及虚拟时钟约束

2.1 主时钟约束

  • 引脚输入主时钟约束
create_clock -name Gclk -period 50 -waveform{0 25} [get_ports fpga_Gclk]
  • 1
  • 引脚输出主时钟约束
create_clock -name rxclk -period 6.667 [get_ports GT0/RXOUTCLK]
  • 1
  • 硬件原语输出主时钟约束
    对于硬件原语的输出时钟,可直接将输出节点作为主时钟节点;对于 BUF产生的时钟,推荐以 BUF 前的节点作为主时钟。
  • 差分信号主时钟约束
    (可对其差分时钟的正端约束即可)
create_clock -name sysclk -period 3.33 [get_ports sysclk_p]
  • 1

2.2 虚拟时钟约束

  • 系统同步接口虚拟时钟约束
create_clock -period 10.0 -name VIDEO_CLK -waveform { 0.00 5.00} [get_port v_clk]
  • 1
  • 时钟抖动(一般只用于约束主时钟,不用于衍生时钟)
    以下两种时钟抖动约束,都会作为时钟不确定性的一部分。
set_system_jitter sysclk 0.1
set_input_jitter clkin_1 0.2
  • 1
  • 2
  • 时钟不确定性
    Simple uncertainty 主要针对同步时钟的主时钟;Interclock uncertainty 主要针对异步时钟,需要分别约束源时钟和目标时钟。
set_clock_uncertainty -setup -form [get_clocks clk0] -to [get_clocks clk1] 0.500
set_clock_uncertainty 0.200 [get_clocks CLK_50M]
  • 1
  • 2
  • 时钟延时约束(时钟相位偏移)
set_clock_latency 2.500 [get_clocks V_CLK]
  • 1

注意:对于很多与时钟相关的 IP,Clocking Wizard 可自动配置 MMCM和 PLL 产生的时钟管理单元,无需手动添加主时钟约束。

三. 衍生时钟约束

  • 以 HDMI 输出时钟为例
create_generated_clock -name VH_CLK -source [get_pins clk_wiz_0/clk_out1] -multiply_by 1 [get_ports vh_clk]
  • 1

3.1 分频时钟约束

create_clock -name fpga_Gclk -period 10 [get_ports fpga_Gclk]
create_generated_clock -name div_clk -source [get_pins fpga_Gclk] -multiply_by 2 [get_ports vh_clk]
create_generated_clock -name div_clk1 -source [get_pins REGA/C] -multiply_by 2 [get_ports REGA/Q]
  • 1
  • 2
  • 3

3.2 倍频时钟约束

create_generated_clock -name div6_11_clk -source [get_pins mmcm0/clkin1] -multiply_by 6 divide_by 11 [get_ports mmcm0/clkout]
  • 1

四. IO 接口约束

4.1 输入接口约束

  • 以 JTAG 输入时钟为主时钟,约束最大和最小延时输入约束
create_clock -name jtag_clk -period 10 [get_ports clk0]
set_input_delay -clock jtag_clk -max 5 [get_ports d_clk]
set_input_delay -clock jtag_clk -min 2 [get_ports d_clk]
  • 1
  • 2
  • 3
  • 指定同步时钟和参考时钟的输入引脚约束
set_input_delay -clock jtag_clk -reference_pin [get_clocks jtag_clk_IBUF_BUFG_inst/0] [get_ports reset]
  • 1
  • 时钟沿同步延时约束
set_input_delay -clock clk_ddr -max 2 [get_clocks {ddr_clkin[0] ddr_clkin[1] ddr_clkin[2] ddr_clkin[3]} ] -clock_fall -add_delay
  • 1

4.2 以 SPI 输入接口为例

  • 首先是输入时钟约束
create_generated_clock -name SPI_CLK -source [get_pins clk_wiz_0/clk_out1] -multiply_by 1 [get_ports spi_clk]
  • 1
  • 然后是输入信号约束
set_input_delay -clock [get_clocks SPI_CLK] -max 8 [get_ports spi_mio]
set_input_delay -clock [get_clocks SPI_CLK] -min 3 [get_ports spi_mio
  • 1
  • 2

4.3 输出接口约束

  • 与输入接口相同
create_clock -name jtag_clk -period 10 [get_ports clk0]
set_output_delay -clock jtag_clk 5 [get_ports dout_c]
  • 1
  • 2

4.4 以 HDMI 为例

  • 衍生时钟约束
create_generated_clock -name VH_CLK -source [get_pins axi_clkgen_0/clkin1] -multiply_by 6 divide_by 55 -invert [get_ports vh_clk]
  • 1
  • 输出数据约束
set_output_delay -clock [get_clocks VH_CLK] -max 1.8 [get_ports {{ vh_d[0] vh_d[1] vh_d[2] vh_d[3] vh_d[4] vh_d[5] vh_d[6] vh_d[7]} vh_sync vh_hync vh_de }]
set_output_delay -clock [get_clocks VH_CLK] -min 0.6 [get_ports {{ vh_d[0] vh_d[1] vh_d[2] vh_d[3] vh_d[4] vh_d[5] vh_d[6] vh_d[7]} vh_sync vh_hync vh_de }]
  • 1
  • 2

五. 多周期约束

  • 同频多周期约束,-setup 的多周期约束值比-hold 的多周期约束值大 1 个 cycle。
    (一般同频不使用-start/-end,即默认为-setup)
set_multicycle_path 4 -setup -form [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 3 -hold -form [get_pins data0_reg/C] -to [get_pins data1_reg/D]
  • 1
  • 2

慢时钟域到快时钟域,设为-end:

set_multicycle_path -setup -end -form [get_pins data0_reg/C] -to [get_pins data1_reg/D] 4
set_multicycle_path -hold -end -form [get_pins data0_reg/C] -to [get_pins data1_reg/D] 3
  • 1
  • 2

六. 时序例外约束

例外约束包括多周期约束、虚假路径约束、最大最小延时约束。

================================================
补充:
IP核例化生成的文件中包含了xdc以固定引脚分配,xdc为read_only mode,用{} 设置引脚约束为空。后面的引脚约束就是自定义后的。

set_property PACKAGE_PIN {} [get_ports RX0_P]
set_property PACKAGE_PIN {} [get_ports RX1_P]

set_property PACKAGE_PIN Y2 [get_ports RX0_P]
set_property PACKAGE_PIN W4 [get_ports RX1_P]
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/722537
推荐阅读
相关标签
  

闽ICP备14008679号