1. 程式人生 > >Vivado IP的兩種綜合方式:Global 和 Out-Of-Context

Vivado IP的兩種綜合方式:Global 和 Out-Of-Context

在最新的Vivado的版本中,定製IP的時候,會有一個綜合方式的選擇,如下圖所示。可以看到一種叫做”Global”,一種叫”Out-Of-Context (OOC)”。從字面意思上來理解,”Out-Of-Context”是“脫離上下文”的意思。”Global”即全域性。



Global synthesis

如果選擇的是全域性綜合選項,那IP生成的檔案將會和其他的使用者檔案一起進行綜合,這也就意味著,每一次使用者檔案被修改後,IP都會跟著一起綜合一遍。

Out-Of-Context (OOC)

OOC選項是Vivado給我們的預設選項,在OOC模式下,Vivado將會把生成的IP當成一個單獨的模組來進行綜合,生成.dcp (design checkpoint)檔案。同時會使用一個只在OOC模式下有用的約束檔案“_ooc.xdc”。
除了生成.dcp檔案,OOC還會生成一個以”stub”結尾的HDL檔案,是當前IP設計的一個黑盒檔案,其實就是隻有輸入輸出埠,沒有其他內容,如下圖所示是一個FIFO IP的”char_fifo_stub.v”例項。這個檔案的作用就是跟著工程中的其他檔案一起進行綜合過程


這裡寫圖片描述
最後,在”implementation”階段,OOC生成的.dcp檔案中的網表文件將和其他設計檔案綜合後生成的網表文件一起。




總之,兩種綜合方式的flow看上圖。

OOC的優勢
  1. 通過綜合實現某個模組的快速迭代,不用綜合系統的其餘部分,整個設計的迭代更快了;
  2. 利於系統其餘部分的快速迭代,如果某部分確定穩定不變了,可以對這個模組進行OOC綜合操作,保留這個綜合版本,這樣就可以方便迭代其餘部分;
  3. OOC將會產生”_sim_netlist.v” 或者 “_sim_netlist.vhdl”模擬檔案,如果我們在使用只支援某種語言的模擬器,而IP不提供該語言的RTL檔案,我們就可以直接用這些模擬檔案進行IP模擬。
關於高阻態和OOC(out of context)綜合方式

如果設計中存在三態(高阻態),OOC綜合操作就會受到影響,FPGA僅支援I/O輸出埠的高阻態,在器件內部是不允許的,如果你使用OOC綜合方式,Vivado工具並不知道某個具體的訊號是連線I/O輸出還是在器件內部進行連線,最後,綜合工具會將這個高阻訊號轉換為某個邏輯值,而不是最為高阻態進行綜合。

舉個例子,下面的程式碼就會帶來不好的影響:

assign my_signal = enable?din1:1’bz;

通過OOC方式綜合後,my_signal訊號值就不會是高阻值Z了, Vivado會選擇不保留三態。如果my_signal訊號只連線到外部輸出I/O呢?即能夠使用OOC方式對這部分模組進行綜合,同時保留三態。
滿足上述需求的方式就是在RTL中例項化一個三態快取(buffer)。

OBUF u1(.l(din1), .T(n_enable), .O(my_signal));
參考資料
  1. Vivado Design Suite User Guide: Designing with IP (UG896) - Xilinx
  2. http://www.sohu.com/a/129575422_292853