1. 程式人生 > >[轉]Xilinx Vivado的使用詳細介紹(1):創建工程、編寫代碼、行為仿真、Testbench

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

always 選擇器 資料 多個 sign bench 通過 output tar

新建工程

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

技術分享圖片

點擊Next

技術分享圖片

輸入工程名稱和路徑。

技術分享圖片

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

技術分享圖片

根據自己的開發板選擇器件型號,可以直接通過型號進行搜索,例如Basys3開發板上的芯片型號為xc7a35tcpg236-1。如果不了解或者暫時不寫進開發板,可以隨便選一個型號,後面需要的時候再修改。

技術分享圖片

點擊Finish,項目新建完成。

技術分享圖片

添加Verilog設計文件(Design Source)

Project Manager窗口中,選擇Source子窗口,在空白處或任意文件夾上右擊,選擇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 SourcesSimulation Sources中都有,而仿真文件只會出現在Simulation Sources文件夾中。設計文件可以用於仿真,也可以用於最終燒寫進開發板,而仿真文件僅用於仿真。

技術分享圖片

編寫代碼

打開test模塊,編寫代碼實現一個簡單的非門電路如下。

  1. module test(
  2. input in,
  3. output out
  4. );
  5. assign out = ~in;
  6. endmodule

行為仿真(Behavioral Simulation)與Testbench

為了驗證代碼是否正確,可以對代碼進行行為仿真。我們給上面的test模塊輸入端in接入一個時鐘信號,則輸出端out就會產生一個電平相反的時鐘信號。

行為仿真時,輸入信號可以使用Testbench編寫。

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

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

編寫仿真代碼

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

  1. module simu(
  2. );
  3. // testbench 時鐘信號
  4. reg clk = 0;
  5. always #10 clk <= ~clk;
  6. // 輸出信號
  7. wire out;
  8. // 調用test模塊
  9. test mytest(clk, out);
  10. endmodule

代碼說明:

  • reg clk = 0聲明了一個reg信號,並賦初值為0。
  • always #10 clk <= ~clk為testbench代碼,讓clk每隔10ns翻轉一次,產生周期為20ns的時鐘信號。
  • wire out聲明了一個wire信號,用於連接到test模塊的輸出。
  • test mytest(clk, out)調用了前面寫好的test模塊,其中mytest是模塊名稱,這裏的clkout分別連接了mytest模塊內部的inout信號。這種寫法類似於面向對象的編程語言中,對象的實例化,test為類名,而mytest為對象名稱。同樣,Verilog中調用模塊時,可以實例化多個test對象。

更多Testbench的寫法請上網搜索相關資料。

行為仿真

右擊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並滾動鼠標滾輪,可以橫向平移波形。

如圖,可以看出clk為周期20ns的時鐘信號,而outclk的電平始終相反,即test模塊中的非門工作正確。

技術分享圖片

Behavioral Simulation窗口中的Scopes子窗口,根據模塊調用關系選中mytest,在右側的Objects窗口即可看到test模塊中所有的信號(包括內部信號,即沒有寫到模塊聲明語句module(a,b,c)括號中的信號)。

右擊信號,選擇Add To Wave Window,可將波形添加到右側的仿真波形窗口,保存仿真文件,再次仿真時就可以看到該信號的波形。

技術分享圖片

技術分享圖片

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

技術分享圖片

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

技術分享圖片

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