I/O約束
I/O約束是必須要用的約束,又包括管腳約束和延遲約束。
管腳約束
管腳約束就是指管腳分配,我們要指定管腳的PACKAGE_PIN和IOSTANDARD兩個(gè)屬性的值,前者指定了管腳的位置,后者指定了管腳對(duì)應(yīng)的電平標(biāo)準(zhǔn)。
在vivado中,使用如下方式在xdc中對(duì)管腳進(jìn)行約束。
set_property -dict {PACKAGE_PIN AJ16 IOSTANDARD LVCMOS18} [get_ports "led[0]" ]
在Vivado規(guī)定,必須要指定管腳電平,不然在最后一步生成比特流時(shí)會(huì)出錯(cuò)。
除了管腳位置和電平,還有一個(gè)大家容易忽略但很容易引起錯(cuò)誤的就是端接,當(dāng)我們使用差分電平時(shí)比如LVDS,在在V6中我們使用IBUFDS來處理輸入的差分信號(hào)時(shí),可以指定端接為TRUE。
IBUFDS #( .DIFF_TERM("TRUE"), // Differential Termination .IOSTANDARD("DEFAULT") // Specify the input I/O standard ) IBUFDS_inst ( .O(O), // Buffer output .I(I), // Diff_p buffer input (connect directly to top-level port) .IB(IB) // Diff_n buffer input (connect directly to top-level port) );
但在Ultrascale中的IBUFDS,卻把端接這個(gè)選項(xiàng)去掉了
IBUFDS #(
.DQS_BIAS("FALSE") // (FALSE, TRUE) ) IBUFDS_inst ( .O(O), // 1-bit output: Buffer output .I(I), // 1-bit input: Diff_p buffer input (connect directly to top-level port) .IB(IB) // 1-bit input: Diff_n buffer input (connect directly to top-level port) );
我們必須要在xdc或I/O Pors界面中,手動(dòng)指定,否則可能會(huì)出錯(cuò)。
筆者之前就采過一個(gè)坑,差分端口輸入,當(dāng)連續(xù)輸入的數(shù)據(jù)為11101111這種時(shí),中間那個(gè)0拉不下來,還是1,同樣也會(huì)發(fā)生在000010000,這樣就導(dǎo)致數(shù)據(jù)傳輸錯(cuò)誤,后來才發(fā)現(xiàn)是端接忘記加。因?yàn)槎私訒?huì)影響信號(hào)的實(shí)際電平,導(dǎo)致FPGA判斷錯(cuò)誤。
當(dāng)綜合完成后,我們可以點(diǎn)擊DRC,進(jìn)行設(shè)計(jì)規(guī)則檢查,這一步可以報(bào)出一些關(guān)鍵問題,比如時(shí)鐘端口未分配在時(shí)鐘引腳上等。
延遲約束
延遲約束用的是set_input_delay和set_output_delay,分別用于input端和output端,其時(shí)鐘源可以是時(shí)鐘輸入管腳,也可以是虛擬時(shí)鐘。但需要注意的是,這個(gè)兩個(gè)約束并不是起延遲的作用,具體原因下面分析。
set_input_delay
這個(gè)約束跟ISE中的OFFSET=IN功能相同,但設(shè)置方式不同。下圖所示即為input delay的約束說明圖。
從圖中很容易理解,
T_inputdelay = Tco + TD
當(dāng)滿足圖中的時(shí)序時(shí),最大延遲為2ns,最小延遲為1ns。
因此,需要加的時(shí)序約束為:
create_clock -name sysclk -period 10 [get_ports clkin] set_input_delay 2 -max -clock sysclk [get_ports Datain] set_input_delay 1 -min -clock sysclk [get_ports Datain] set_output_delay
set_output_delay的用法跟set_input_delay十分相似,這里就不再展開講了。我們上面講set_input_delay的描述中,大家可以看到,這個(gè)約束是告訴vivado我們的輸入信號(hào)和輸入時(shí)鐘之間的延遲關(guān)系,跟下面要講的時(shí)鐘周期約束是一個(gè)原理,讓vivado在這個(gè)前提下去Place and Route。并不是調(diào)節(jié)輸入信號(hào)的延遲,因?yàn)樯磉呌胁簧俚腇PGA工程師在沒用過這個(gè)約束指令之前,都以為這是調(diào)節(jié)延遲的約束。
如果要調(diào)整輸入信號(hào)的延遲,只能使用IDELAY,在V6中,IDELAY模塊有32個(gè)tap值,每個(gè)tap可延遲78ps,這樣總共差不多是2.5ns。
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
603009 -
DRC
+關(guān)注
關(guān)注
2文章
148瀏覽量
36158 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66472
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論