1. 程式人生 > >Vivado 開發流程(手把手教學例項)(FPGA)

Vivado 開發流程(手把手教學例項)(FPGA)

新建工程
開啟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,即可啟動行為模擬。




操作技巧

雙擊圖中右側的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即可設定為無符號十進位制顯示,如圖。


請多多指教!

##### 轉載請註明出處 https://blog.csdn.net/Gentleman_Qin/article/details/80016273 #####