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

文章來源:http://www.paincker.com/vivado-basic-usage-3


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

調用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 mul(...)語句實例化了mult_gen_0類型的模塊對象mul,並將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 mul (
  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

可以直接搜索需要的IP核,雙擊確認。

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

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

繪製電路

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

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

aAB都連接起來。

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

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

最終結果如圖。

仿真測試

右擊框圖設計文件design_1,選擇Create HDL Wrapper

選擇第二項並點擊OK

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

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

  1. wire [3:0]a = 8;
  2. wire clk;
  3. wire [7:0]p;
  4. reg c = 0;
  5. always #10 c <= ~c;
  6. assign clk = c;

Simulation Sources文件夾下,設置design_1_wrapper.v爲行爲仿真的頂層文件(右擊,選擇Set as Top)。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章