Vivado使用技巧(23):綜合執行與OOC

FPGADesigner發表於2018-08-25

建立綜合執行

一個“執行(run)”是指定義和配置設計在綜合過程中的各方面,包括:使用 的Xilinx器件、應用的約束集、啟動單個或多個綜合的選項、控制綜合引擎結果的選項。點選Flow選單中的Create Funs,或在Design Runs視窗中:
這裡寫圖片描述
點選工具欄中的+,即可開啟新建執行視窗:
這裡寫圖片描述
選擇Synthesis,點選Next,開啟配置綜合執行的視窗:
這裡寫圖片描述
設定名稱、約束集、器件和策略,如果希望該執行為啟用狀態,則選中Make Active。執行的預設名稱為synth_1、synth_2等等。點選Next彈出啟動執行視窗:
這裡寫圖片描述
Launch directory選擇啟動執行的目錄;Number of jobs設定了可以同時啟動多少個執行(run);Generate scripts only表示僅生成執行指令碼(Windows下為bat檔案,Linux下為sh檔案);Do not launch now只會儲存先前的設定,暫時不會啟動執行。執行的相關情況都顯示在Design Runs視窗中。
這裡寫圖片描述
該視窗顯示了工程中所有的綜合和實現執行,進行配置、管理和啟動。一個綜合執行可以包含多個實現執行,視窗中報告了相關的執行狀態(not started、in progress、complete或out-of-date)。修改原始檔、約束或工程設定都會導致狀態變為out-of-date。

雖然可以有多個綜合和實現執行,但是都只能有一個為active狀態,所有 的報告顯示的都是active執行的相關資訊。比如Project Summary視窗中的編譯、資源等總結資訊都屬於當前狀態為active的執行。選擇一個執行,右鍵->Make Active可以設定活躍狀態。

同樣,Flow Navigator和Flow選單中的Run Synthesis也是啟動狀態為Active的執行。如果需要啟動其它執行,只能通過Design Runs視窗。


使用OOC綜合技術

OOC(Out-of-context)是Vivado提供的一項技術,選擇將HDL物件當作一個隔離模組執行,完成自底向上的綜合流程。OOC具有如下特點:

  • 底層的OOC模組相對於頂層模組獨立執行,並且擁有自己的約束集合;
  • 執行了OOC模組之後,再執行頂層模組綜合時可以直接呼叫OOC綜合結果,而不需要重新執行一次綜合(除非修改了RTL設計或約束)。

由於不需要每次綜合時都執行整個設計,這項技術可以大大減少頂層模組的綜合執行時間。IP核就是典型的採用OOC技術的代表,配置好IP核後可以選擇綜合模式為global(與頂層設計一起綜合)或Out-of-context(作為獨立模組綜合),最好的做法就是選擇後者,以減少整體設計的綜合執行時間。

選擇需要新增到OOC執行的模組,右鍵->Set As Out-Of-Context for Synthesis,彈出如下視窗:
這裡寫圖片描述
其中Clock Constraint File必須建立一個新的XDC檔案或在下拉選單中選擇一個已經存在的XDC檔案,該約束檔案中要有該模組時鐘訊號的相關約束。點選OK後,該模組會出現在Design Runs視窗的Out-of-Context Module Runs目錄中,還有Compile Order視窗的Block Sources目錄中。

當執行了OOC綜合後,會產生底層模組的綜合網表和存根檔案(stub檔案)。存根檔案僅描述了底層模組的輸入和輸出,在綜合頂層模組時,通過存根檔案來呼叫底層模組,模組內部當作黑盒子看待。執行實現時,Vivado會將OOC模組的綜合網表插入到頂層網表中,從而完成設計。


匯入網表檔案

可以通過例項化低層次網表或第三方網表來手工構造一個自底向上的設計流程。但需要知道,Vivado綜合工具不會綜合和優化網表,因此XDC約束和綜合屬性也不會對匯入的網表產生作用。事實上,Vivado綜合時既不會讀取也不會修改網表中的內容。可以按照如下流程完成相關處理:

  1. 建立低層次網表:建立一個工程,以要匯入的網表作為頂層模組,將Settings->Synthesis->More Options設定為**-mode out_of_context**。這樣綜合時不會為該模組產生I/O快取器。綜合後,在Tcl控制檯輸入write_edif name.edf。
  2. 設計中例項化低層次網表:頂層設計需要將低層次模組作為黑盒子例項化,類似於前面提到的stub檔案。因此需要建立一個Verilog/VHDL檔案,僅定義網表的埠,訊號名稱必須與網表中的埠名稱完全匹配。
  3. 組合為完整設計:當建立了OOC模式的低層次網表,並且在頂層設計中正確地例項化後,將第一步匯出的edif網表新增到工程中。綜合後,Vivado會將網表合併到頂層設計中。

Vivado IP和第三方綜合工具

大多數Xilinx釋出的IP核採用IEEE P1735進行加密,只有Vivado綜合工具才支援對IP核的綜合,第三方綜合工具不能綜合Vivado中的IP核。如果想把Vivado中的IP核在第三方綜合工具中例項化,可以參考如下步驟:

  1. 在Managed IP工程中(Vivado首頁->Tasks->Manage IP)建立並配置好IP核。
  2. 生成IP核的輸出檔案,包括綜合設計檢查點(DCP檔案)。Vivado會建立一個stub檔案(*_stub.v/*_stub.vhd),該檔案會包含一些指令阻止從該檔案中推斷出I/O快取器。根據使用的第三方綜合器可能需要修改此檔案。
  3. 使用Vivado綜合帶有stub檔案的Xilinx IP核。
  4. 使用第三方綜合工具產生的網表和Xilinx IP核的DCP檔案一起執行實現步驟。

相關文章