新建工程
打開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 Sources和Simulation Sources中都有,而仿真文件只會出現在Simulation Sources文件夾中。設計文件可以用於仿真,也可以用於最終燒寫進開發板,而仿真文件僅用於仿真。

編寫代碼
打開test模塊,編寫代碼實現一個簡單的非門電路如下。
module test(input in,output out);assign out = ~in;endmodule
行為仿真(Behavioral Simulation)與Testbench
為了驗證代碼是否正確,可以對代碼進行行為仿真。我們給上面的test模塊輸入端in接入一個時鍾信號,則輸出端out就會產生一個電平相反的時鍾信號。
行為仿真時,輸入信號可以使用Testbench編寫。
如果直接修改test模塊,在其中添加Testbench代碼,再進行仿真,是一種不太正確的做法。因為test模塊是設計文件,后面可能會直接燒寫進板子。進行仿真時添加了Testbench代碼,之后再燒寫進板子又得刪掉Testbench代碼,這樣容易出現錯誤,而且操作起來也比較麻煩。尤其是接口數量多,內部比較復雜的模塊。
所以我們將Testbench代碼全部寫到仿真文件simu中,並在simu文件中調用test模塊,從而進行仿真。
編寫仿真代碼
在simu模塊中編寫代碼如下。
module simu();// testbench 時鍾信號reg clk = 0;always #10 clk <= ~clk;// 輸出信號wire out;// 調用test模塊test mytest(clk, out);endmodule
代碼說明:
reg clk = 0聲明了一個reg信號,並賦初值為0。always #10 clk <= ~clk為testbench代碼,讓clk每隔10ns翻轉一次,產生周期為20ns的時鍾信號。wire out聲明了一個wire信號,用於連接到test模塊的輸出。test mytest(clk, out)調用了前面寫好的test模塊,其中mytest是模塊名稱,這里的clk和out分別連接了mytest模塊內部的in和out信號。這種寫法類似於面向對象的編程語言中,對象的實例化,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的時鍾信號,而out和clk的電平始終相反,即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即可設置為無符號十進制顯示,如圖。

















