Xilinx Vivado的使用詳細介紹(1):創建工程、編寫代碼、行為仿真


Xilinx Vivado的使用詳細介紹(1):創建工程、編寫代碼、行為仿真

Author:zhangxianhe

新建工程

打開Vivado軟件,直接在歡迎界面點擊Create New Project,或在開始菜單中選擇File - New Project即可新建工程。

 

 

點擊Next;

輸入工程名稱和路徑。

 

 

選擇RTL Project,勾選Do not specify sources at this time(這樣可以跳過添加源文件的步驟,源文件可以后面再添加)。

 

直接選擇Boards,然后選擇Zedboard Zynq Evaluation and Development Kit 硬件開發包。

 

點擊Next,再點擊Finish,項目新建完成

 

添加Verilog設計文件(Design Source

在Project Manager窗口中,右擊選擇Design Sources,在空白處或任意文件夾上右擊,選擇Add Sources。

 

選擇Add or Create Design Sources,點擊Next。

點擊Create File按鈕,彈出的小窗口中輸入文件名,點擊OK。

 

可以一次性新建或添加多個文件,最后點擊Finish。

 

 

稍后會彈出定義模塊的窗口,也就是剛剛添加的test文件。可以在這里設置test模塊的輸入輸出端口;或者直接點擊OK,稍后再自行編寫。

 

點擊OK后,如果彈出下面窗口直接點擊Yes。

test文件和對應的模塊即創建完成,如下圖。

 

添加Verilog仿真文件(Simulation Source

操作和上一步添加Verilog設計文件基本一致,唯一的區別是選擇Add or Create Simulation Sources。新建一個名為simu的仿真文件。

 

 

設計文件新建完成后,在Design Sources和Simulation Sources中都有,而仿真文件只會出現在Simulation Sources文件夾中。設計文件可以用於仿真,也可以用於最終燒寫進開發板,而仿真文件僅用於仿真。

 

編寫代碼                                                                                              

打開設計test模塊,編寫代碼實現一個如下。

 1 module Test(a,b,c,d,e);// 模塊接口
 2        input [5:0] a; // 輸入信號a
 3        input [5:0] b; // 輸入信號b
 4        input [5:0] c; // 輸入信號c
 5        input [5:0] d; // 輸入信號d
 6        output[7:0] e; // 求和輸出信號
 7        wire [6:0]outa1,outa2; // 定義輸出網線型
 8        assign e = outa2+outa1; // 把兩部分輸出結果合並
 9 /*
10 通常,我們模塊的調用寫法如下:
11 被調用的模塊名字- 自定義的名字- 括號內信號
12 這里比如括號內的信號,.ina(ina1)
13 這種寫法最常用,信號的順序可以調換
14 */
15        adder myadder1 (.ina(a),.inb(b),.outa(outa1));
16        // 調用adder 模塊,自定義名字為myadder1
17        adder myadder2 (.ina(c),.inb(d),.outa(outa2));
18        // 調用adder 模塊,自定義名字為myadder2
19 endmodule
20        //adder 子模塊
21 module adder(ina,inb,outa );// 模塊接口
22        input [5:0] ina; // ina-輸入信號
23        input [5:0] inb; // inb-輸入信號
24        output [6:0] outa; // outa-輸入信號
25        assign outa = ina + inb; // 求和
26       // 模塊結束
27 endmodule

 

行為仿真(Behavioral Simulation)與Testbench

為了驗證代碼是否正確,可以對代碼進行行為仿真。行為仿真時,輸入信號可以使用Testbench編寫。

如果直接修改test模塊,在其中添加Testbench代碼,再進行仿真,是一種不太正確的做法。因為test模塊是設計文件,后面可能會直接燒寫進板子。進行仿真時添加了Testbench代碼,之后再燒寫進板子又得刪掉Testbench代碼,這樣容易出現錯誤,而且操作起來也比較麻煩。尤其是接口數量多,內部比較復雜的模塊。

所以我們將Testbench代碼全部寫到仿真文件simu中,並在simu文件中調用test模塊,從而進行仿真。

編寫仿真代碼

在simu模塊中編寫代碼如下:

 1 module simu();
 2        reg [5:0] a;
 3        reg [5:0] b;
 4        reg [5:0] c;
 5        reg [5:0] d;
 6        wire[7:0] e;
 7        reg [5:0] i; //中間變量
 8        // 調用被仿真模塊模塊
 9 Test myTest (.a(a), .b(b),.c(c),.d(d),.e(e));
10 initial begin // initial是仿真用的初始化關鍵詞
11 a=0;b=0;c=0;d=0; // 必須初始化輸入信號
12 for(i=1;i<31;i=i+1) begin
13               #10 ;
14               a = i;
15               b = i;
16               c = i;
17               d = i;
18        end // 給是輸入信號a 賦值
19 end
20 initial begin
21        $monitor($time,,,"%d + %d + %d + %d ={%d}",a,b,c,d,e); // 信號打印輸出
22        #500 $finish;
23 end
24 endmodule

代碼說明:

Test myTest (.a(a), .b(b),.c(c),.d(d),.e(e))調用了前面寫好的Test模塊,其中myTest是模塊名稱, Test為類名,而myTest為對象名稱。同樣,Verilog中調用模塊時,可以實例化多個Test對象。

行為仿真

右擊simu模塊,選擇Set as Top,將simu模塊設置為仿真時的頂層模塊。頂層模塊類似於C編程時的入口函數,即main函數。main`函數可以調用其他子函數;類似的,頂層模塊可以調用其他模塊。(或保持默認設置,即如果沒有將仿真模塊設置為頂層文件時,執行此操作)。

在Flow Navigator窗口中點擊Run Simulation - Run Behavioral Simulation;或者在菜單中選擇Flow - Run Simulation - Run Behavioral Simulation,即可啟動行為仿真。

 

稍后Behavioral Simulation窗口打開,即可看到輸出的仿真波形。

 

操作技巧

雙擊圖中右側的Untitled 2標簽,可以最大化仿真波形窗口。在波形窗口按住Ctrl鍵並滾動鼠標滾輪,可以橫向縮放波形;按住Shift並滾動鼠標滾輪,可以橫向平移波形。

 

 

在Behavioral Simulation窗口中的Scopes子窗口,根據模塊調用關系選中myTest,在右側的Objects窗口即可看到test模塊中所有的信號。右擊信號,選擇Add To Wave Window,可將波形添加到右側的仿真波形窗口,保存仿真文件,再次仿真時就可以看到該信號的波形。

 

對於一些輸出數字信號波形的情況,例如讓reg [7:0] sine_out輸出正弦波,仿真后右擊信號,選擇Waveform Style - Analog,即可以波形的形式查看信號。如圖顯示的就是正弦波信號(注意這里信號本身還是數字信號,並不是模擬信號,只是用軟件顯示出了其幅值隨時間變化的波形)。

 

 

對於多位信號例如wire [7:0] p,默認使用二進制形式顯示,可以根據需要修改。例如右擊選擇Radix - Unsigned Decimal即可設置為無符號十進制顯示,如圖。

 

如有疑問,請聯系447574829@qq.com,歡迎FPGA愛好者。

之前,詳細寫了一系列關於Vivado SDK FPGA的教程。這個系列會不斷更新,歡迎訂閱查看。

 

 


免責聲明!

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



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