本文通過一個(gè)簡單的例子,介紹Vivado 下的仿真過程。主要參考了miz702的教程,同時(shí)也參考了Xilinx的ug937,? xapp199.。
我的軟件平臺(tái)是Vivado 2015.4, 硬件平臺(tái)是黑金的AC7010, Zynq 7000, 其實(shí)與平臺(tái)關(guān)系不大。
本文分為四部分:工程的建立,測(cè)試代碼,仿真圖形輸出,更復(fù)雜點(diǎn)的例子。
工程和源碼下載鏈接: 鏈接:http://pan.baidu.com/s/1gflHSdH 密碼:fpi5
1:工程的建立:
打開Vivado 軟件,并點(diǎn)擊新建工程, New Project,并點(diǎn)擊Next
出現(xiàn)如圖界面, 輸入工程名和路徑,我這里是qim
點(diǎn)擊Next ,出現(xiàn)選擇工程類型的界面, 選擇RTL Project, 并且選擇 Do not specify sources at this time.
選擇硬件平臺(tái), 我是這么選擇的:
點(diǎn)擊確定,出現(xiàn)Summary 窗口,點(diǎn)擊Finish, 工程就建立完成了。
2:代碼的導(dǎo)入或輸入:
本例子有2個(gè)源文件:待測(cè)試的verilog 文件, 測(cè)試文件。
右鍵點(diǎn)擊Design Source ,選擇Add Source
這里添加的設(shè)計(jì)源文件,并點(diǎn)擊Next
你是選擇添加還是新建,你有源代碼文件,你可以選擇Add? Files, 但我這是新建
新建文件名和路徑,添加也一樣。你要選擇verilog 文件類型
出現(xiàn)了這樣一個(gè)對(duì)話框,目錄和文件名。
出現(xiàn)這樣一個(gè)對(duì)話框,ok 就可以,
再這樣,Yes, 添加估計(jì)不是這樣的,
好了,文件出現(xiàn)在這里了
基本同樣的操作,在simulate source 這里添加測(cè)試文件testbench.v 文件,不再復(fù)雜圖示了。
好的,添加或新建2個(gè)文件后,這樣的效果。
如果你是新建,你就需要輸入源代碼,或者copy 這里,去本文開頭介紹的地方下載源文件好了。我這源代碼是從xapp.pdf 里copy 過來的。
測(cè)試代碼也是輸入,或copy,最好是下載
shift_reg.v 文件的內(nèi)容:
`timescale 1ns / 1ps
module shift_reg (clock, reset, load, sel, data, shiftreg);
input clock;
input reset;
input load;
input [1:0] sel;
input [4:0] data;
output [4:0] shiftreg;
reg [4:0] shiftreg;
always @ (posedge clock)
begin
?if (reset)
?? shiftreg = 0;
?else if (load)
?? shiftreg = data;
?else
? case (sel)
?? 2'b00 : shiftreg = shiftreg;
?? 2'b01 : shiftreg = shiftreg << 1;
?? 2'b10 : shiftreg = shiftreg >> 1;
?? default : shiftreg = shiftreg;
? endcase
end
endmodule
這是一個(gè)移位寄存器的例子,load=1 的時(shí)候 shiftreg=data, sel =0, 不動(dòng)作, =1 左移, =2 ’b10 右移
testbench.v 代碼如下:
`timescale 1ns / 1ps
?module testbench; // declare testbench name
? reg clock;
? reg load;
? reg reset;? // declaration of signals
? wire [4:0] shiftreg;
? reg [4:0] data;
? reg [1:0] sel;
?? // instantiation of the shift_reg design below
? shift_reg dut(.clock (clock),
.load (load),
.reset (reset),
.shiftreg (shiftreg),
?????????????? .data (data),
.sel (sel));
?? //this process block sets up the free running clock
? initial begin
? clock = 0;
? forever #50 clock = ~clock;
? end
? initial begin// this process block specifies the stimulus.
??? reset = 1;
??? data = 5'b00000;
??? load = 0;
??? sel = 2'b00;
?? #200
??? reset = 0;
??? load = 1;
?? #200
??? data = 5'b00001;
?? #100
??? sel = 2'b01;
??? load = 0;
?? #200
??? sel = 2'b10;
?? #1000 $stop;
? end
?initial begin// this process block pipes the ASCII results to the
//terminal or text editor
? $timeformat(-9,1,"ns",12);
? $display("?? Time Clk Rst Ld SftRg Data Sel");
? $monitor("%t %b %b %b %b %b %b", $realtime,
?????? clock, reset, load, shiftreg, data, sel);
?end
?endmodule
3: 仿真過程:
仿真設(shè)置:點(diǎn)擊主菜單 Flow->Simulation Settings
或者界面左邊Project Manager 下的Simulation Settings
出現(xiàn)如下設(shè)置界面,并設(shè)置好,注意箭頭地方是否一致,或者設(shè)置一致。
設(shè)置好之后, Flow->Run Simulation 或者左邊直接點(diǎn)擊,選擇 Run Behavioral Simulation, 就是最上的那個(gè)選擇。
這個(gè)時(shí)候出現(xiàn)如下界面:
能出現(xiàn)如下界面基本就是成功了,有時(shí)候你的代碼有錯(cuò)誤,就會(huì)報(bào)錯(cuò)。我開始的時(shí)候就是這樣,也不知道怎么檢查錯(cuò)誤。后來發(fā)現(xiàn)如果這樣,可以點(diǎn)擊綜合,Run Synthesis, 可以指示錯(cuò)誤代碼信息,方便排除, 如果你直接用下載的代碼,應(yīng)該不會(huì)錯(cuò)誤。
怎么說成功了呢?圖都沒顯示,不急,單點(diǎn)選擇Untitled ,就是上圖紅箭頭的地方,就會(huì)出現(xiàn)圖形了。
但是上圖還是沒有波形,點(diǎn)擊下圖Zoom Fit, 出現(xiàn)密集的波形,你再點(diǎn)其上面的放大,縮小,就能看到波形了。
波形還不是很好看,可以點(diǎn)右上角的全圖顯示,shiftreg也可以點(diǎn)開, 這樣你可以看到移位效果了。
好了,通過這個(gè)例子有了仿真的感覺了吧。
4:更復(fù)雜一點(diǎn)的例子
上面例子很簡單,操作也沒什么復(fù)雜,很多功能還不能展示。下面我們來個(gè)復(fù)雜一點(diǎn)的。 分別添加下載的文件, Divider_Multiple.v? Divider_Multiple_TB.v , 添加后效果如下:
我們需要仿真設(shè)置, Simulation Settings, 在對(duì)話框里,有個(gè)選擇Simulation top Module name 的地方,點(diǎn)擊就出現(xiàn)以下選擇對(duì)話框:
這次我們選擇Divider_Multiple_TB
這是一個(gè)多次分頻的程序,2,3,4,8分頻,還有1hz 信號(hào),波形比較多樣一點(diǎn)。
我們要顯示內(nèi)部數(shù)據(jù),點(diǎn)擊uut, 紅箭位置, 這是Objects 窗口多了很多變量,就是紅框里的
選擇下面3個(gè)變量div_cnt1, pos_cnt, neg_cnt。 怎么選多個(gè)呢? 用CTRL 還有shift, 選好后,鼠標(biāo)右鍵Add to Wave Window, 這樣就添加到波形圖了,但還是沒有波形顯示。
點(diǎn)擊 Run ->Run For , 或者工具條Run For , 你就看到有波形了
如果要復(fù)位再重放, 你就需要保存設(shè)置參數(shù)。波形圖左邊快捷工具條里選擇 Save Waveform Configuration, 或者CTRL + S 或者File -> Save Waveform Configuration
就出現(xiàn)保存配置對(duì)話框。 下次就使用你剛才的設(shè)置。
還可以添加分界線,右鍵顯示點(diǎn)擊 New Divider,開始分界線在下面,你可以拖到任何地方,看起來比較方便一點(diǎn),特別是信號(hào)多一點(diǎn)的時(shí)候。
還有分組功能, 控制進(jìn)制顯示, 模擬顯示功能,顏色控制,需要慢慢體驗(yàn)或者學(xué)習(xí)。這些在ug937 里有介紹。
這里也就是帶你入門vivado 仿真。
評(píng)論
查看更多