[轉]Xilinx Vivado的使用詳細介紹(1):創建工程、編寫代碼、行為仿真、Testbench
新建工程
打開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
即可設置為無符號十進制顯示,如圖。
[轉]Xilinx Vivado的使用詳細介紹(1):創建工程、編寫代碼、行為仿真、Testbench