1. 程式人生 > >Vivado 的IP:Global 和 Out-Of-Context選項問題

Vivado 的IP:Global 和 Out-Of-Context選項問題

        在Vivado定製IP的時候,或者在IP Catalog中雙擊一個IP,不論該IP是我們自己新增到工程的自定義IP,還是Vivado自己帶的IP,選擇"Customize IP"後都會彈出如下圖所示的框框。可以看到一種叫做”Global”,一種叫”Out of Context (OOC)”。 

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

Out-Of-Context (OOC) 即脫離上下文


    OOC選項是Vivado給我們的預設選項,在OOC模式下,Vivado將會把生成的IP當成一個單獨的模組來進行綜合,生成.dcp (design checkpoint)檔案,工程要用到IP的時候,只需從.dcp檔案中解析出對應IP的網表文件即可,而不需對IP進行重新綜合,這樣的方式可以加快綜合的速度;而Gobal選擇則是每次工程綜合的時候,IP核都會和工程一起綜合,綜合時間很長,也不會產生.dcp檔案。OOC同時會使用一個只在OOC模式下有用的約束檔案“_ooc.xdc”。 除了生成.dcp檔案,OOC還會生成一個以”stub.v”結尾的HDL檔案,是當前IP設計的一個黑盒檔案,只有輸入輸出埠,工程呼叫這個的時候實際上是在解析.dcp中的網表文件,進而繼續綜合和佈局佈線。

OOC的優勢
    通過綜合實現某個模組的快速迭代,不用綜合系統的其餘部分,整個設計的迭代更快了;
利於系統其餘部分的快速迭代,如果某部分確定穩定不變了,可以對這個模組進行OOC綜合操作,保留這個綜合版本,這樣就可以方便迭代其餘部分;
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));


參考:

http://www.sohu.com/a/129575422_292853 關於高阻態和OOC(out of context)綜合方式