Xilinx Vivado的使用詳細介紹(3):使用IP核


ilinx Vivado的使用詳細介紹(3):使用IP核

Author:zhangxianhe

IP核(IP Core

Vivado中有很多IP核可以直接使用,例如數學運算(乘法器、除法器、浮點運算器等)、信號處理(FFT、DFT、DDS等)。IP核類似編程中的函數庫(例如C語言中的printf()函數),可以直接調用,非常方便,大大加快了開發速度。

方式一:使用Verilog調用IP

這里簡單舉一個乘法器的IP核使用實例,使用Verilog調用。首先新建工程,新建demo.v頂層模塊。(過程參考上篇文檔)

添加IP核

點擊Flow Navigator中的IP Catalog。

 

選擇Math Functions下的Multiplier,即乘法器,並雙擊。

 

 

將彈出IP核的參數設置對話框。點擊左上角的Documentation,可以打開這個IP核的使用手冊查閱。這里直接設置輸入信號A和B均為4位無符號型數據,其他均為默認值,點擊OK。

 

 

稍后彈出的窗口,點擊Generate。生成的對話框直接點Ok。

 

綜合選項中的Global表示只生成RTL代碼,然后與整個工程一起參與綜合,Out of context per IP表示生成后立即綜合。

調用IP核

選擇IP Sources,展開並選擇mult_gen_0 - Instantiation Template - mult_gen_0.veo,可以打開實例化模板文件。如圖,這段代碼就是使用Verilog調用這個IP核的示例代碼。

 

 

將示例代碼復制到demo.v文件中,並進行修改,最終如下。代碼中聲明了無符號型的4位變量a和b,分別賦初值7、8,作為乘數使用;無符號型的8位變量p,用於保存計算結果。clk為Testbench編寫的周期20ns的時鍾信號;mult_gen_0 Mymult_gen_0 (...)語句實例化了mult_gen_0類型的模塊對象Mymult_gen_0,並將clk、a、b、p作為參數傳入。

 

 1 module demo(
 2 );
 3 reg clk = 0;
 4 always #10 clk = ~clk;
 5 wire [3:0] a = 7;
 6 wire [3:0] b = 8;
 7 wire [7:0] p;
 8 mult_gen_0 Mymult_gen_0 (
 9   .CLK(clk),  // input wire CLK
10   .A(a),      // input wire [3 : 0] A
11   .B(b),      // input wire [3 : 0] B
12   .P(p)      // output wire [7 : 0] P
13 );
14 endmodule

 

行為仿真驗證

以demo為頂層模塊,啟動行為仿真,即可輸出波形。設置a、b、p顯示為無符號十進制(右擊選擇Radix - Unsigned Decimal)。如圖,可以看到a=7, b=8,第一個時鍾上升沿后p = a * b = 56。

 

方式二:框圖(Block Design)中調用IP核

這里舉一個簡單的例子,通過調用乘法器IP核,產生一個能計算平方的新模塊。

創建框圖設計文件

選擇Flow Navigator中的Create Block Design,創建一個框圖設計文件。

 

 

輸入文件名並點擊OK。

 

 添加IP核

通過啟動Add IP 向導來完成,或者可以在程序框圖空白處右擊選擇Add IP..,IP目錄窗口將會出現,顯示在這個設計中添加所有可能的IP。

 

IP核即可被添加進來,可以用導線將其與其他器件連接。

 

雙擊這個IP核符號,可以打開參數設置對話框。點擊左上方的Documentation可以查看IP核的手冊。這里將輸入的A、B均設置為4為無符號型,其他為默認值,點擊OK確認。

 

 

繪制電路

右擊Diagram窗口空白處,選擇Create Port。

 

彈出窗口中,設置端口a為4位輸入信號,並點擊OK。

 

 

將a與A、B都連接起來。

 

 

同樣的方法,添加一個8位輸出端口p,與P連接。

 

 

再添加一個clk時鍾輸入端口,與CLK連接。

 

 

最終結果如圖。

 

 

單擊Tools,選擇單擊Validate Design,檢查程序框圖是否有誤,結果直接點擊Ok。

仿真測試

在源窗格中,選擇系統框圖“system.bd”,右擊並選擇Generate Output Products,默認設置,直接點generate,運行結束后,點擊OK。


在源窗格中,選擇系統框圖“system.bd”,右擊並選擇Create HDL Wrapper,選擇第二項 Let Vivado manage Wrapper and auto-update,選擇第一項和第二項的區別是選擇第一項表示生成的wrapper允許使用者編輯,選擇第二項表示讓Vivado管理wrapper,並自動更新,使用者對wrapper的修改會在重新創建的HDL Wrapper覆蓋。根據自己設計的情況選擇,如果生成的wrapper需要修改則選擇第一項。點擊OK。

 

打開生成的system_1_wrapper.v文件如圖,紅框中的代碼用來調用前面畫好的Block Design模塊。

 

 

在system_1_wrapper.v文件中,添加Testbench代碼即可進行行為仿真。修改代碼如下,給輸入信號a賦初值為8,clk連接到Testbench生成的時鍾信號c上。

 1 module system_wrapper
 2    (a,
 3     clk,
 4     p);
 5   input [3:0]a=8;
 6   input clk;
 7   output [7:0]p;
 8   wire [3:0]a;
 9   wire clk;
10   wire [7:0]p;
11   reg c = 0;
12   always #10 c <= ~c;
13   assign clk = c;
14   system system_i
15        (.a(a),
16         .clk(clk),
17         .p(p));
18 endmodule

 

啟動行為仿真,最終輸出的波形如下。可以看到,在clk的第一個上升沿后,就有 p = a*a = 64,即實現了平方運算。

 

 

調用官方其它IP核,方法一致,有什么問題歡迎指導交流。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM