在Vivado TCL命令窗口中可以通過調用write_edif命令將用户自定義模塊封裝成.edf網表文件(類似ISE裏的.ngc文件),但是當自定義模塊中包含ngc時,編譯時會報錯,提示有未定義的黑盒。
那麼如何將包含XIlinx IP或ngc的用户模塊封裝成網表文件呢,下面將給出詳細步驟

1. 將待封裝模塊設置為top層

如下圖所示,待封裝模塊為abc,則選中abc後右鍵,選擇“Set as Top”,

vite 添加對less所有文件支持_#fpga開發

2. I/O Buffers設置

設置Settings–>綜合 synthesis–>選項options下拉至最後一項:More Options,將其值設置為:

-mode out_of_context

vite 添加對less所有文件支持_#fpga開發_02


-mode out_of_context表示在該級不插入任何I/O BUFFERs,該選項類似ISE裏在相應設置處不勾選I/O BUFFERs。另外還可以在選項options中找到“-flatten_hierarchy”,將層級結構設置為“full”,層級結構則可設置“-ierarchy”選項為“full”:“全”該選項指示工具把層級全面變平,只剩下頂層,保護IP的層級結構不被其他用户清楚查看。

3. 綜合

運行綜合synthesis,完成綜合後,打開綜合設計open synthesized design

4. 生成僅包含IO端口信息的empty module

打開綜合設計open synthesized design後,在TCL命令窗口執行如下命令:
2017.4之前版本:

write_verilog -mode port F:/FPGA/abc_stub.v

2018.1之後版本:

write_verilog -mode synth_stub F:/FPGA/abc_stub.v

其中F:/FPGA/替換為要存放的路徑,如未指明路徑,則將存放到工程文件所在路徑下。

5. 生成edf文件

劃重點了,分兩條:

1、若不含Xilinx IP則可通過如下命令生成edf文件:
write_edif F:/FPGA/abc.edf
2、若含Xilinx IP則需通過如下命令生成edf文件:
write_edif -security_mode all F:/FPGA/abc.edf

6. 新工程中網表文件調用

將上述生成的abc_stub.v和abc.edf添加到新工程中即可。

再劃重點了:若出現如下錯誤時“Cell ‘’ of type ‘<cell type"’ has undefined contents and is considered a black box.The contents of this cell must be defined for opt_design to complete successfully.”

以下是解決方案,親測通過改文件名可以解決。

vite 添加對less所有文件支持_#fpga開發_03

7. 帶Xilinx IP的另外一種網表封裝方式(不推薦)

上述步驟3後,在tcl命令窗口中執行如下命令:

write_verilog -force abc_stub.v

該命令會將待封裝模塊中所有源碼、IP都寫入一個文件中,然後在新工程中僅需添加該文件即可。