本文針對(duì)Vivado中實(shí)現(xiàn)的邏輯鎖定和增量編譯進(jìn)行的工程實(shí)例介紹,文中有對(duì)應(yīng)工程的下載地址。友情提示:(1)增量編譯只允許修改當(dāng)前工程不超過5%的時(shí)候才有效,一般應(yīng)用于較大工程添加修改chipscope監(jiān)測(cè)信號(hào)使用;(2)邏輯模塊鎖定不是解決時(shí)序問題的最終辦法,僅用來確認(rèn)某些FPGA管腳的時(shí)序問題,實(shí)際中常常采用原語例化BUFG之類的處理模塊來解決,而內(nèi)部模塊的時(shí)序問題還是需要必須認(rèn)真的修正的!
Quartus的邏輯鎖定
該部分引用本公眾號(hào)上一篇時(shí)序約束文章中的內(nèi)容,在Quartus中采用邏輯鎖定的辦法來解決FPGA和外部接口的時(shí)序問題,也就是輸入輸出的寄存Rxd/Txd的寄存器到外部器件寄存器的時(shí)序問題。
GMII接收數(shù)據(jù)路徑分析
Tpcb是外部PCB板上數(shù)據(jù)的延時(shí),Tdata_i是數(shù)據(jù)的輸入延時(shí),Gmii_rx_interface相當(dāng)于Rxd進(jìn)入FPGA后的第一個(gè)寄存器模塊(可以專門寫一個(gè)接口模塊,將Rxd數(shù)據(jù)打一拍,用于接收數(shù)據(jù))。如果Gmii_rx_interface距離接口Rxd較遠(yuǎn),Tdata_i的路徑較長,布局布線時(shí)Rxd的八根線時(shí)延相差可能就比較大,所以我們應(yīng)讓這個(gè)模塊放在距離Rxd接口較近的地方。
Quartus軟件中有一個(gè)LogicLock(物理分區(qū))功能,把Gmii_rx_interface模塊建立成一個(gè)LogicLock分區(qū)但并不對(duì)分區(qū)位置和大小進(jìn)行固定,然后重新編譯工程。布局布線后就可以在chipplaner工具中看到這個(gè)分區(qū)的位置,如下圖所示(放大可以看清),Gmii_rx_interface模塊距離Rxd接口位置很遠(yuǎn),布局布線時(shí),輸入信號(hào)要繞很長一段距離才會(huì)到達(dá)輸入的寄存器,資源占用很多時(shí),Rxd的8根數(shù)據(jù)線長度不一,很容易造成時(shí)序問題。
未固定分區(qū)位置時(shí)布局布線結(jié)果
把Gmii_rx_interface模塊分區(qū)移動(dòng)到Rxd接口附近進(jìn)行固定然后重新編譯工程,布局布線后該邏輯分區(qū)就會(huì)在Rxd接口附近,從而保證輸入數(shù)據(jù)接口進(jìn)入FPGA的第一個(gè)寄存器的時(shí)延在一定范圍內(nèi),保證時(shí)序要求。
采用LogicLock后,GMII寄存器接口位置
Vivado設(shè)計(jì)鎖定與增量編譯
1、研究目標(biāo)
希望把之前驗(yàn)證過的模塊固定在fpga上某個(gè)位置,然后再在這個(gè)基礎(chǔ)上添加其它代碼再進(jìn)行增量編譯,不會(huì)影響之前已經(jīng)固定好的模塊。
2、設(shè)計(jì)鎖定與增量編譯方法
為了實(shí)現(xiàn)對(duì)模塊的布局(place)、布線(route)的鎖定,僅適用增量編譯是不夠的,因?yàn)樵隽烤幾g的本質(zhì)目的是為了實(shí)現(xiàn)編譯時(shí)間的縮短,還需要引入設(shè)計(jì)鎖定,設(shè)計(jì)鎖定的TCL命令是:
lock_design–level routing
下面舉例說明具體的操作方法。
(1)建立工程:建立一個(gè)工程,走完綜合實(shí)現(xiàn)的流程,如圖1所示,該工程將作為樣例工程(工程名:incre_compile_demo),將該工程備份一份(工程名:initial_project,后面對(duì)比要用到這個(gè)工程);
圖1 建好的工程
(2)找到dcp文件:增量編譯需要有一個(gè)參考文件,這個(gè)參考文件是“參考設(shè)計(jì)”實(shí)現(xiàn)之后生成的,后綴是“.dcp”,該文件的路徑一般在“..\project_1\project_1.runs\impl_1”路徑下,如圖2所示,新建一個(gè)文件夾(名字是dcp_file),將該文件復(fù)制到其中,如圖3所示;
圖2 dcp文件
圖3 新建文件夾,復(fù)制dcp文件
(3)鎖定設(shè)計(jì):前面說道,簡單的增量編譯是不能保證模塊固定在某個(gè)位置的,為了實(shí)現(xiàn)這一點(diǎn),需要對(duì)設(shè)計(jì)進(jìn)行鎖定,方法是,打開一個(gè)新的Vivado界面,然后打開dcp_file文件夾下的dcp文件(注意選擇“open checkpoint”),如圖4所示;打開后,在TCL Console中輸入命令:“l(fā)ock_design –level routing”,點(diǎn)擊左上角保存,如圖5所示,做完這一步后,設(shè)計(jì)就鎖定好了,dcp文件就可以用了;
圖4 vivado打開dcp界面
圖5 鎖定設(shè)計(jì)并保存
(4)增量編譯:
1)修改代碼,將頂層模塊(test_compare.v)line263-line266注釋取消,保存,如圖6所示;
圖6 改代碼
2)在主界面菜單欄處,點(diǎn):Flow> Create Runs;
3)選both,點(diǎn)next,如圖7所示;
圖7 選both
4)勾選make active,點(diǎn)next,如圖8所示;
圖8 make active
5)選Do notlaunch now,點(diǎn)next,如圖9所示;
圖9 Do not launch now
6)完成后如圖10所示;
圖10 新的run已建好
7)在impl_2右鍵,選擇“Set Incremental Compile”,選擇步驟(3)中準(zhǔn)備好的dcp文件,示意圖如圖11所示(注意這只是一個(gè)示意圖,圖中選的文件不是步驟(3)準(zhǔn)備好的那個(gè)文件)
8)開始綜合、實(shí)現(xiàn),完成增量編譯過程。
圖11 選擇參考dcp文件
3、正確性驗(yàn)證
怎么證明增量編譯后,原始設(shè)計(jì)成功鎖定了呢?我們來做一個(gè)對(duì)照實(shí)驗(yàn)。
樣本1:原始工程,名稱是: initial_project;
樣本2:增量編譯工程,名稱是: incre_compile_demo;
樣本3:原始工程復(fù)制一份出來,不進(jìn)行增量編譯,直接修改代碼(見圖6),重新綜合實(shí)現(xiàn),名稱是:modify_project。
打開三個(gè)工程,之后open implemented design,選取幾個(gè)模塊,觀察其在FPGA上的位置,發(fā)現(xiàn)樣本1和樣本2位置完全一樣,而樣本3和前兩個(gè)樣本不一樣,說明設(shè)計(jì)鎖定是成功的,如圖12、13、14所示。
圖12 樣本1位置觀察
圖13 樣本2位置觀察
圖14 樣本3位置觀察
上述實(shí)例工程百度網(wǎng)盤下載鏈接:
鏈接:https://pan.baidu.com/s/1EuRnBF3aPR3YFrBMCl2e-Q
提取碼:v1tr
Vivado下如何鎖定設(shè)計(jì)的模塊的布局布線
Xilinx官方論壇上也有相關(guān)問題的回答。
https://forums.xilinx.com/t5/Vivado/Vivado%E4%B8%8B%E5%A6%82%E4%BD%95%E9%94%81%E5%AE%9A%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%9D%97%E7%9A%84%E5%B8%83%E5%B1%80%E5%B8%83%E7%BA%BF/td-p/885693。
Vivado下如何鎖定設(shè)計(jì)模塊的布局布線
問題:
我現(xiàn)在設(shè)計(jì)了一個(gè)延時(shí)模塊,應(yīng)用后需要把該模塊的布局和布線全部鎖定,然后在別的項(xiàng)目中直接調(diào)用?,F(xiàn)在布局沒有問題??梢酝ㄟ^約束文件來鎖定,就是布線不能大范圍鎖定,否則應(yīng)用時(shí)會(huì)失敗。我已經(jīng)嘗試過增量編譯(調(diào)用DCP文件)的功能,發(fā)現(xiàn)在增量編譯中布局布線并不是全部不變的,個(gè)別走線也是會(huì)變的。請(qǐng)問有辦法把布線也固定下來嗎?(Tool: Vivado17.3 Device: K7)
回答1:如果你用的是Ultrascale/Ultrascale+ , 我覺得PR是個(gè)不錯(cuò)的選擇,你的目標(biāo)模塊可以放在靜態(tài)部分,只占據(jù)很小的一塊面積,剩下大塊的動(dòng)態(tài)部分.但是7系列有很多primitive不能放在動(dòng)態(tài),靜態(tài)的部分包含的邏輯過多,剩下供你修改的邏輯偏少,不太適合目前的應(yīng)用場景.
回答2:關(guān)于鎖定某一個(gè)net的布線路徑,請(qǐng)參考以下步驟:
打開跑完布局布線的工程,Open Implemented Design
找到你要鎖定布線的net,選中,右鍵菜單點(diǎn)擊Fixed Routing,如下圖所示:
3. Tcl Console里面會(huì)打印出一些命令,然后在Tcl Console里面敲命令:write_xdc
4. 打開導(dǎo)出的xdc,在最下面的部分會(huì)有所有元件的位置鎖定以及FIXED_ROUTE,示例如下:
5. 另外還需注意的是,負(fù)載中有LUT的話需要將LUT的輸入pin也鎖住。以下圖的LUT2為例,在其property窗口中找到Cell pins,信號(hào)是連到LUT2的I0端,映射到BEL pin是A3。
因此上述導(dǎo)出的位置鎖定約束中還有一個(gè)LOCK_PINS的設(shè)置:
set_property LOCK_PINS {I0:A3} [get_cells clk_gen_i0/rst_meta_i_1]
6. 將這部分有關(guān)鎖定的約束拷貝到你工程的約束文件中,重新跑implementation,這條線會(huì)按照原先的結(jié)果布。
溫馨提示:
我們并不建議完全鎖死某個(gè)模塊的所有布線,當(dāng)合入的工程比較復(fù)雜,用到的布線資源較密集時(shí),工具沒有靈活性去調(diào)整和優(yōu)化,有很大的概率會(huì)布線失敗。
劃分靜態(tài)區(qū)和動(dòng)態(tài)區(qū)
除了上述的邏輯鎖定方法之外,Xilinx 的FPGA還提供了靜態(tài)區(qū)和動(dòng)態(tài)區(qū)的劃分也可以實(shí)現(xiàn)邏輯的鎖定。只不過靜態(tài)區(qū)占據(jù)了大多數(shù)的空間,動(dòng)態(tài)區(qū)是可以隨意修改的小部分空間。
FPGA提供了現(xiàn)場編程和重新編程的靈活性,無需通過改進(jìn)的設(shè)計(jì)進(jìn)行重新制造。部分重配置(PR)進(jìn)一步提高了這種靈活性,允許通過加載部分配置文件(通常是部分BIT文件)來修改操作FPGA設(shè)計(jì)。在完整的BIT文件配置FPGA之后,可以下載部分BIT文件以修改FPGA中的可重配置區(qū)域,而不會(huì)影響在未重新配置的設(shè)備部分上運(yùn)行的應(yīng)用程序的完整性。
部分可重構(gòu)的基本前提
如圖所示,通過下載幾個(gè)部分BIT文件A1.bit,A2.bit,A3.bit或A4.bit中的一個(gè)來修改在重新配置塊A中實(shí)現(xiàn)的功能。 FPGA設(shè)計(jì)中的邏輯分為兩種不同的類型,可重構(gòu)邏輯和靜態(tài)邏輯。 FPGA塊的灰色區(qū)域表示靜態(tài)邏輯,標(biāo)記為Reconfig Block“A”的塊部分表示可重配置邏輯。靜態(tài)邏輯仍然有效,并且不受加載部分BIT文件的影響。可重配置邏輯由部分BIT文件的內(nèi)容替換。
為什么在單個(gè)FPGA器件上動(dòng)態(tài)地對(duì)多個(gè)硬件進(jìn)行時(shí)間復(fù)用的能力是有利的。這些包括:
?減小實(shí)現(xiàn)給定功能所需的FPGA器件尺寸,從而降低成本和功耗
?為應(yīng)用可用的算法或協(xié)議選擇提供靈活性
?實(shí)現(xiàn)設(shè)計(jì)安全性的新技術(shù)
?提高FPGA容錯(cuò)能力
?加速可配置計(jì)算
除了減小尺寸,重量,功耗和成本之外,部分重配置還可以實(shí)現(xiàn)沒有它的新型FPGA設(shè)計(jì)。
更詳細(xì)介紹請(qǐng)參考官方文檔:
UG909:Design Considerations and Guidelines for 7 Series and Zynq Devices
有關(guān)部分可重構(gòu)部分的內(nèi)容請(qǐng)繼續(xù)關(guān)注我們的公眾號(hào)后續(xù)內(nèi)容,通過ICAP實(shí)現(xiàn)對(duì)單個(gè)LUT的在線實(shí)時(shí)修改,敬請(qǐng)期待。
實(shí)現(xiàn)不同模塊的物理隔離
我們還可以通過Xilinx分區(qū)技術(shù),來實(shí)現(xiàn)不同模塊布局布線在同一塊FPGA芯片的不同位置,中間可以用隔離柵欄來隔離開。
使用CLB平鋪的水平和垂直隔離柵欄的PlanAhead工具視圖
通過Xilinx分區(qū)技術(shù),可以在單個(gè)FPGA中開發(fā)出包含多個(gè)隔離功能的安全可靠的單芯片解決方案。在使用FPGA設(shè)計(jì)技術(shù)和編碼樣式時(shí),只需對(duì)開發(fā)流程進(jìn)行適度修改即可實(shí)現(xiàn)安全或安全關(guān)鍵的解決方案。 IDF開發(fā)要求設(shè)計(jì)人員在設(shè)計(jì)過程中更早地考慮布局規(guī)劃,以確保在邏輯,路由和I / O緩沖器(IOB)中實(shí)現(xiàn)適當(dāng)?shù)母綦x。除了早期布局規(guī)劃之外,開發(fā)流程是基于分區(qū)的(即,用戶希望隔離的每個(gè)功能必須處于其自己的層次結(jié)構(gòu)級(jí)別)。從這里開始,設(shè)計(jì)師可以采用兩種方法中的一種。如果設(shè)計(jì)者希望確保不會(huì)發(fā)生不必要的冗余優(yōu)化,則必須獨(dú)立于其他分區(qū)來合成和實(shí)現(xiàn)每個(gè)隔離的功能。實(shí)現(xiàn)每個(gè)分區(qū)后,設(shè)計(jì)將合并為扁平FPGA設(shè)計(jì),以進(jìn)行器件配置。如果設(shè)計(jì)者希望使用其他技術(shù)來防止這種優(yōu)化,他們可以合成完整的設(shè)計(jì),同時(shí)小心維護(hù)至少一個(gè)層次結(jié)構(gòu),使得IDF約束可以應(yīng)用于需要隔離的每個(gè)分區(qū)。雖然這種流程要求FPGA設(shè)計(jì)人員脫離傳統(tǒng)的FPGA開發(fā)流程,但分區(qū)方法確實(shí)具有一定的優(yōu)勢(shì)。如果隔離分區(qū)在設(shè)計(jì)周期的后期需要更改,則僅修改該特定功能,而其余分區(qū)保持不變。
上圖示例設(shè)計(jì)包括兩個(gè)冗余高級(jí)加密標(biāo)準(zhǔn)(AES)加密模塊,其輸出發(fā)送到比較器(COMPARE)塊,以及用于緩沖和隔離數(shù)據(jù)和鍵輸入的I / O(INOUT)模塊。冗余AES加密模塊,比較功能和I / O(INOUT)模塊都在一個(gè)FPGA中實(shí)現(xiàn)隔離。該設(shè)計(jì)可以通過位于其中一個(gè)AES引擎上的按鈕注入錯(cuò)誤。由比較塊驅(qū)動(dòng)的LED指示AES模塊的輸出何時(shí)不匹配。
另外,在Zynq-7000系列FPGA內(nèi)部帶有ARM硬核的FPGA內(nèi)部也是實(shí)現(xiàn)了PS部分(ARM硬核)和PL部分(FPGA部分)的隔離。如下圖:
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603384 -
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120363 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66537
原文標(biāo)題:Vivado設(shè)計(jì)鎖定與增量編譯(附工程)
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論