作者:貓叔
延遲約束
對(duì)于延遲約束,相信很多同學(xué)是不怎么用的,主要可能就是不熟悉這個(gè)約束,也有的是嫌麻煩,因?yàn)橛袝r(shí)還要計(jì)算PCB上的走線延遲導(dǎo)致的時(shí)間差。而且不加延遲約束,Vivado也只是在Timing Report中提示warning,并不會(huì)導(dǎo)致時(shí)序錯(cuò)誤,這也會(huì)讓很多同學(xué)誤以為這個(gè)約束可有可無(wú)。

但其實(shí)這種想法是不對(duì)的,比如在很多ADC的設(shè)計(jì)中,輸出的時(shí)鐘的邊沿剛好是數(shù)據(jù)的中心位置,而如果我們不加延遲約束,則Vivado會(huì)默認(rèn)時(shí)鐘和數(shù)據(jù)是對(duì)齊的。

對(duì)于輸入管腳,首先判斷捕獲時(shí)鐘是主時(shí)鐘還是衍生時(shí)鐘,如果是主時(shí)鐘,直接用set_input_delay即可,如果是衍生時(shí)鐘,要先創(chuàng)建虛擬時(shí)鐘,然后再設(shè)置delay。對(duì)于輸出管腳,判斷有沒(méi)有輸出隨路時(shí)鐘,若有,則直接使用set_output_delay,若沒(méi)有,則需要?jiǎng)?chuàng)建虛擬時(shí)鐘。
在本工程中,輸入輸出數(shù)據(jù)管腳的捕獲時(shí)鐘如下表所示:

根據(jù)上表,我們創(chuàng)建的延遲約束如下,其中的具體數(shù)字在實(shí)際工程中要根據(jù)上下游器件的時(shí)序關(guān)系(在各個(gè)器件手冊(cè)中可以找到)和PCB走線延遲來(lái)決定。未避免有些約束有歧義,我們把前面的所有約束也加進(jìn)來(lái)。
# 主時(shí)鐘約束 create_clock -period 25.000 -name clk2 [get_ports clk_in2] # 衍生時(shí)鐘約束 create_generated_clock -name clk_samp -source [get_pins clk_gen_i0/clk_core_i0/clk_tx] -divide_by 32 [get_pins clk_gen_i0/BUFHCE_clk_samp_i0/O] create_generated_clock -name spi_clk -source [get_pins dac_spi_i0/out_ddr_flop_spi_clk_i0/ODDR_inst/C] -divide_by 1 -invert [get_ports spi_clk_pin] create_generated_clock -name clk_tx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT1] create_generated_clock -name clk_rx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT0] # 設(shè)置異步時(shí)鐘 set_clock_groups -asynchronous -group [get_clocks clk_samp] -group [get_clocks clk2] # 延遲約束 create_clock -period 6.000 -name virtual_clock set_input_delay -clock [get_clocks -of_objects [get_ports clk_pin_p]] 0.000 [get_ports rxd_pin] set_input_delay -clock [get_clocks -of_objects [get_ports clk_pin_p]] -min -0.500 [get_ports rxd_pin] set_input_delay -clock virtual_clock -max 0.000 [get_ports lb_sel_pin] set_input_delay -clock virtual_clock -min -0.500 [get_ports lb_sel_pin] set_output_delay -clock virtual_clock -max 0.000 [get_ports {txd_pin {led_pins[*]}}] set_output_delay -clock virtual_clock -min -0.500 [get_ports {txd_pin {led_pins[*]}}] set_output_delay -clock spi_clk -max 1.000 [get_ports {spi_mosi_pin dac_cs_n_pin dac_clr_n_pin}] set_output_delay -clock spi_clk -min -1.000 [get_ports {spi_mosi_pin dac_cs_n_pin dac_clr_n_pin}]
編輯:hfy
-
pcb
+關(guān)注
關(guān)注
4405文章
23878瀏覽量
424359 -
adc
+關(guān)注
關(guān)注
100文章
7511瀏覽量
556001
發(fā)布評(píng)論請(qǐng)先 登錄
MCU 的 3.3V 電源線走線有沒(méi)有問(wèn)題?比如濾波電容的位置、走線長(zhǎng)度這些是不是規(guī)范?
機(jī)房布線,上走線、下走線,哪個(gè)好?
PCB板雙面布局的DDR表底走線居然不一樣
PCB設(shè)計(jì)中的走線寬度與電流管理
到底DDR走線能不能參考電源層啊?
技術(shù)資訊 I Allegro 設(shè)計(jì)中的走線約束設(shè)計(jì)
別蒙我,PCB板上這幾對(duì)高速走線怎么看我都覺(jué)得一樣!
allegro軟件走線命令下參數(shù)不顯示如何解決
PCB Layout 約束管理,助力優(yōu)化設(shè)計(jì)
機(jī)柜配線架的走線方式
PCB上走線的延遲約束
評(píng)論