作者:貓叔
延遲約束
對(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)注
4326文章
23170瀏覽量
400142 -
adc
+關(guān)注
關(guān)注
99文章
6534瀏覽量
545831
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論