概述
話說網(wǎng)表約束中的CLOCK_DEDICATED_ROUTE、MARK_DEBUG和DONT_TOUCH,在實(shí)際工程中常常都可能遇上。MARK_DEBUG和DONT_TOUCH在設(shè)計(jì)和調(diào)試中可能常常要用到,CLOCK_DEDICATED_ROUTE偶爾能夠應(yīng)應(yīng)急。而這里要介紹的LOCK_PINS,筆者至今沒有碰過,估計(jì)大家在實(shí)踐中恐怕也很難有機(jī)會(huì)或必要用上它。但誰知道呢?存在即是合理,相信Xilinx把這樣一個(gè)非常底層的約束搬上臺(tái)面,也一定有它的用場,本著萬一哪天能夠應(yīng)應(yīng)急的想法,我們也來了解一下這個(gè)LOCK_PINS的使用吧。
原理探究
網(wǎng)表約束LOCK_PINS約束的對象是Xilinx FPGA器件中LUT物理輸入端口和邏輯輸入端口的映射關(guān)系。關(guān)于LUT結(jié)構(gòu),大家可以參考Xilinx的ug474文檔,該文檔詳細(xì)介紹了Artix-7系列FPGA器件的邏輯資源。當(dāng)然,文檔中對于LUT的結(jié)構(gòu)描述中,只提及輸入端口,并沒有所謂物理輸入端口和邏輯輸入端口的概念。筆者認(rèn)為,ug474所涉及的LUT結(jié)構(gòu)的輸入端口,其實(shí)是包括邏輯輸入端口和物理輸入端口的,它們之間的連接也是可以布線算法的需要進(jìn)行靈活調(diào)整的。
如圖所示,LUT6中的物理輸入端口有A1~A6,邏輯輸入端口有I0~I5。在邏輯輸入端口和物理輸入端口之間,存在著一塊布線池(官方?jīng)]有這方面的介紹,筆者根據(jù)自己的理解進(jìn)行描述,僅供參考)。
也就是說,物理輸入端口和邏輯輸入端口并不是固定I0-A1、I1-A2……這樣規(guī)規(guī)矩矩的成對連接的,它們的一一對應(yīng)關(guān)系是可以根據(jù)布線需要進(jìn)行調(diào)整的。之所以提供這樣的配對靈活性,我相信很大程度上是基于最優(yōu)化外部輸入接口(即連接到I0~I5的走線)的布線而設(shè)計(jì)的。而一旦進(jìn)行工程的布局布線后,LUT的邏輯輸入端口和物理輸入端口之間的一一對應(yīng)關(guān)系便會(huì)被固定下來。當(dāng)然了,此時(shí),作為設(shè)計(jì)者的你,基于某些特定的優(yōu)化目的,可以通過網(wǎng)表約束LOCK_PINS來鎖定某對或某幾對邏輯和物理輸入端口的映射關(guān)系??梢哉f,LOCK_PINS約束相當(dāng)?shù)讓樱瑢τ谒^的特定的優(yōu)化目的,筆者只在ug903文檔中找到“物理輸入端口A5和A6是最快的LUT輸入端口,所以可以使用LOCK_PINS將時(shí)序關(guān)鍵路徑約束到該端口上”這樣的描述。而筆者在ug474中并沒有找到Artix-7的LUT有類似的描述。當(dāng)然,或許ug903的這個(gè)描述是針對其它某個(gè)FPGA系列器件的LUT。不管怎樣,大家先有個(gè)概念,知道有這么回事,將來真遇到類似這么細(xì)節(jié)的問題時(shí),可以快速在這個(gè)方向上做進(jìn)一步的探索,免去“眾里尋他千百度”的力氣。
工程實(shí)踐
好了,原理說明白了,接著就動(dòng)手實(shí)踐一把。以《Verilog邊碼邊學(xué)》教程的sim_201工程為例,打開工程后,保證工程已經(jīng)做過編譯,然后點(diǎn)擊IMPLEMENTATION->Open Implemented Design->Schematic,打開原理視圖。
此時(shí),可以在Netlist界面下展開具體的網(wǎng)表,找一個(gè)信號(hào)進(jìn)行實(shí)踐。當(dāng)然了,實(shí)際應(yīng)用中,需要哪個(gè)信號(hào),可能是根據(jù)具體的需要而定的,這里我們只是為了實(shí)踐一下如何使用LOCK_PINS約束,所以就隨便找到如圖所示的uut_m_image_capture->Nets下的i_image_sensor_href_IBUF這個(gè)信號(hào)。
在i_image_sensor_href_IBUF信號(hào)上右鍵單擊,在彈出菜單中再單擊Schematic選項(xiàng)。
此時(shí)可以看到,Schematic(2)定位到了i_image_sensor_href_IBUF信號(hào)在原理圖中的位置。由于該信號(hào)連接的r_fifo_wren_i_1這個(gè)LUT有5個(gè)輸入端口,因此我們可以繼續(xù)雙擊r_fifo_wren_i_1這個(gè)LUT查看它所有的輸入端口。
r_fifo_wren_i_1的所有5個(gè)輸入端口如圖所示。
當(dāng)我們把鼠標(biāo)停留在LUT的某個(gè)邏輯輸入端口上,就可以看到該邏輯輸入端口的相關(guān)信息。如圖所示,I1的信息中顯示,它所對應(yīng)的BEL pin,即物理輸入端口是A2。這是默認(rèn)FPGA布局布線的結(jié)果。
此時(shí)可以在r_fifo_wren_i_5這個(gè)LUT上右鍵單擊,彈出菜單中再點(diǎn)擊Cell Properties…打開它的屬性信息進(jìn)行查看。
在屬性的Cell Pins頁面中,可以看到Name(即LUT邏輯輸入端口)、BELPin(即LUT物理輸入端口)以及Net(實(shí)際設(shè)計(jì)中布線信號(hào)的網(wǎng)絡(luò)名稱)之間的映射關(guān)系。
此時(shí),我們可以在Tcl Console中輸入以下腳本并回車運(yùn)行,使用LOCK_PINS約束將I1和A6映射在一起,也就是I1不再和A2連接,A6也不再和I0連接。
set_property LOCK_PINS I1:A6 [get_celluut_m_image_capture/r_fifo_wren_i_1]
好奇的你或許想知道腳本中g(shù)et_cell后接的一串路徑名稱從何而得?如圖所示,在屬性的General頁面中Name一欄,就是目標(biāo)LUT的名稱uut_m_image_capture/r_fifo_wren_i_1。
在約束后,I1一定與A6連接在一起了,至于I0和A2是否會(huì)連接在一起,或者會(huì)不會(huì)因?yàn)槲覀兊募s束而打亂了其它邏輯輸入端口和物理輸入端口之間的映射關(guān)系,就由Vivado的算法自己決定了。
如圖所示,對于當(dāng)前的實(shí)例,最終I1與A6連接在一起,而I0則連接到了A5,而不是A2。大家不用覺得奇怪,因?yàn)槲覀冎患s束了I1和A6,其它邏輯和物理端口之間任何的連接映射關(guān)系都是有可能出現(xiàn)的。
與時(shí)序約束一樣,網(wǎng)表約束LOCK_PINS雖然是物理約束,但本質(zhì)上也是約束設(shè)計(jì),在Tcl Console中運(yùn)行后,需要點(diǎn)擊Save Constrains保存到.xdc約束腳本中才會(huì)最終生效。
如果我們要約束多對LUT邏輯和物理端口的映射關(guān)系,則可以運(yùn)行類似如下的腳本。
set example_lut[get_cells uut_m_image_capture/r_fifo_wren_i_1]
set_property LOCK_PINS {I0:A5 I1:A2} $example_lut
get_property LOCK_PINS $example_lut
如圖所示,以上腳本將I0和A5、I1和A2分別映射連接在一起了。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21738瀏覽量
603464 -
端口
+關(guān)注
關(guān)注
4文章
965瀏覽量
32082 -
約束
+關(guān)注
關(guān)注
0文章
82瀏覽量
12733 -
網(wǎng)表
+關(guān)注
關(guān)注
0文章
15瀏覽量
7649
原文標(biāo)題:物理約束實(shí)踐:網(wǎng)表約束LOCK_PINS
文章出處:【微信號(hào):FPGA快樂學(xué)習(xí),微信公眾號(hào):FPGA快樂學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論