Introduction
BlackBox是FPGA設計中一個重要的技巧,不過覺得Xilinx的文檔沒有很好地將它講清楚。
BlackBox的主要想法就是把設計的某一個子模塊單獨綜合,綜合的結果作為一個黑盒子子模塊,上層設計不再對這個模塊進行優化,只能看到它的端口。
How To
要讓XST實現BlackBox,其實非常簡單,將一個子模塊單獨綜合后,會得到ngc文件或者edif文件。在使用這個網表時,在子模塊的描述文件中只要包含端口信息而不要實現的信息(這個文件通常稱為wrapper),這樣XST就會自動尋找project目錄下的網表文件了。不過HDL文件和網表文件的文件名得相同。
如果網表文件不在project目錄中,就要在Translate的Search Macro Path屬性中填寫尋找的路徑,多條路徑可以以|分割。如果使用命令行,則添加多個 -sd
Simple Example
頂層文件top.v/vhd,子模塊是ngc格式的網表module.ngc,子模塊有一個僅描述了端口的wrapper文件module.v/vhd.
HDL中不用包括任何blackbox屬性。綜合器會自動加上的。
在Reference的頁面中有for vhdl和verilog的詳細例子。敬請參閱。
Note
- 說到wrapper,因為綜合工具綜合時其實是不讀ngc/edif網表的(分析時序除外),子模塊的端口完全是靠wrapper告訴綜合器的。而ngc/edif的網表是在translate(NgdBuild)的時候才將所有的網表組合為一個ngd文件的。
- 生成用于子模塊的ngc網表時,要在XST屬性中選擇不添加IO Buffer。否則最后使用的時候由于這些不該有的buffer會在Translate的時候報錯。
Reference
Xilinx BlackBox Example