可以定制VIO的輸入和輸出端口的數(shù)量與寬度,用于和FPGA設計進行連接。由于VIO核與被監(jiān)視和驅動的設計同步,因此應用于設計的時鐘約束也適用于VIO核內(nèi)的元件。當使用這個核進行實時交互時,需要使用Vivado邏輯分析特性。
接下來將介紹VIO的原理及應用,內(nèi)容主要包括設計原理、添加VIO核、生成比特流文件和下載并調(diào)試設計。
設計原理
設計以下源碼的工程,并添加VIO核:
`timescale1ns/1ps
//////////////////////////////////////////////////////////////////////////////////
//Company:
//Engineer:
//
//CreateDate:2021/08/222358
//DesignName:
//ModuleName:top
//ProjectName:
//TargetDevices:
//ToolVersions:
//Description:
//
//Dependencies:
//
//Revision:
//Revision0.01-FileCreated
//AdditionalComments:
//
//////////////////////////////////////////////////////////////////////////////////
moduletop(
inputclk,
inputa,
inputb,
outputreg[5:0]z
);
reg[5:0]z_tmp;
wire[5:0]z_vio;
rega_tmp,b_tmp;
wirea_in,b_in;
wiresel;
wirea_vio,b_vio;
assigna_in=sel?a:a_vio;
assignb_in=sel?b:b_vio;
assignz_vio=z;
vio_0Inst_vio(
.clk(clk),//inputwireclk
.probe_in0(z),//inputwire[5:0]probe_in0
.probe_out0(sel),//outputwire[0:0]probe_out0
.probe_out1(a_vio),//outputwire[0:0]probe_out1
.probe_out2(b_vio)//outputwire[0:0]probe_out2
);
always@(posedgeclk)
begin
a_tmp<=a_in;
?b_tmp<=b_in;
end?
always?@(*)
begin
?z_tmp[0]=a_tmp?&?b_tmp;
?z_tmp[1]=~(a_tmp?&?b_tmp);
?z_tmp[2]=a_tmp?|?b_tmp;
?z_tmp[3]=~(a_tmp?|?b_tmp);
?z_tmp[4]=a_tmp?^?b_tmp;
?z_tmp[5]=a_tmp?~^?b_tmp;
end?
always?@(posedge?clk)
begin
z<=z_tmp;
end?
endmodule
添加VIO后的整體設計如下:
如上圖所示,在該設計中添加一個vio核,該IP提供3個輸出端口,其中probe_out0端口用于選擇進入寄存器a_tmp_reg和寄存器b_tmp_reg的信號。當probe_out0輸出1時,將外部端口a和b提供的信號分別連接到寄存器a_tmp_reg和寄存器b_tmp_reg;當probe_out0輸出0時,將vio輸出端口probe_outl和probe_out2信號連接到寄存器a_tmP_reg和b_tmp_reg。這樣就可以通過vio提供的端口來控制整個FPGA的設計。此外,F(xiàn)PGA設計的最終輸出z可以連接到vio模塊的probe_in0輸入端口。
添jia VIO核
本節(jié)將添加VIO核,主要步驟如下所示。
第一步:用Vivado集成開發(fā)環(huán)境打開需要添加的工程。
第二步:在Vivado主界面左側的“Flow Navigator”窗口中找到并展開PROJECT MANAGER選項。在展開項中,找到并選擇“IP Catalog”選項。
第三步:在Vivado主界面的右側窗口中,彈出“IP Catalog”標簽頁。在該標簽頁的搜索框中輸入“VIO”,則在下面出現(xiàn)“VIO(Virtual Input/Output)”,如圖所示,雙擊“VIO(Virtual Input/Output)”。
第四步:彈出“Customize IP-VIO(VirtualInput/Output)”對話框。
(1)單擊“General Options”標簽,如圖所示,在該標簽頁中,按如下參數(shù)進行設置。
Input ProbeCount:1。
Output ProbeCount:3。
勾選 Enable Input Probe Activity Detectors前面的復選框。
(2)單擊“PROBE_IN Ports(0..0)”標簽,如圖所示,在該標簽頁中,按如下參數(shù)進行設置
(3)單擊“PROBE_OUTPorts(0..2)”標簽,如圖所示,在該標簽頁中,按如下參數(shù)進行設置。
第五步:單擊【OK】按鈕,退出“Customize IP”對話框。
第六步:彈出“Generate Output Products”對話框。
第七步:單擊【Generate】按鈕,退出“Generate Output Products”對話框。
第八步:在“Sources”窗口中,單擊“IP Sources”標簽。在該標簽頁中,可以看到添加了名字為“vio_0”的IP核實例,如圖所示。找到并展開“vio_0”選項。在展開項中,找到并展開“Instatiation Template”選項。在展開項中,選擇并用鼠標左鍵雙擊vio_0.veo,打開其例化模板,如下述代碼所示。
//-----------BeginCuthereforINSTANTIATIONTemplate---//INST_TAG
vio_0your_instance_name(
.clk(clk),//inputwireclk
.probe_in0(probe_in0),//inputwire[5:0]probe_in0
.probe_out0(probe_out0),//outputwire[0:0]probe_out0
.probe_out1(probe_out1),//outputwire[0:0]probe_out1
.probe_out2(probe_out2)//outputwire[0:0]probe_out2
);
第九步:在“Sources”窗口中,單擊“Hierarchy”標簽。在該標簽頁中,找到并展開“Design Sources”選項。在展開項中,找到并用鼠標雙擊top.v文件,按下述代碼修改設計代碼,并添加vio的例化代碼。
`timescale1ns/1ps
//////////////////////////////////////////////////////////////////////////////////
//Company:
//Engineer:
//
//CreateDate:2021/08/222358
//DesignName:
//ModuleName:top
//ProjectName:
//TargetDevices:
//ToolVersions:
//Description:
//
//Dependencies:
//
//Revision:
//Revision0.01-FileCreated
//AdditionalComments:
//
//////////////////////////////////////////////////////////////////////////////////
moduletop(
inputclk,
inputa,
inputb,
outputreg[5:0]z
);
reg[5:0]z_tmp;
wire[5:0]z_vio;
rega_tmp,b_tmp;
wirea_in,b_in;
wiresel;
wirea_vio,b_vio;
assigna_in=sel?a:a_vio;
assignb_in=sel?b:b_vio;
assignz_vio=z;
vio_0Inst_vio(
.clk(clk),//inputwireclk
.probe_in0(z),//inputwire[5:0]probe_in0
.probe_out0(sel),//outputwire[0:0]probe_out0
.probe_out1(a_vio),//outputwire[0:0]probe_out1
.probe_out2(b_vio)//outputwire[0:0]probe_out2
);
always@(posedgeclk)
begin
a_tmp<=a_in;
?b_tmp<=b_in;
end?
always?@(*)
begin
?z_tmp[0]=a_tmp?&?b_tmp;
?z_tmp[1]=~(a_tmp?&?b_tmp);
?z_tmp[2]=a_tmp?|?b_tmp;
?z_tmp[3]=~(a_tmp?|?b_tmp);
?z_tmp[4]=a_tmp?^?b_tmp;
?z_tmp[5]=a_tmp?~^?b_tmp;
end?
always?@(posedge?clk)
begin
z<=z_tmp;
end?
endmodule
第 十 步 :保 存 該 設 計 文 件 。
生成比特流文件
下載并調(diào)試設計
將生成的比特流文件下載到開發(fā)板上的FPGA元器件中,并通過VIO對設計進行監(jiān)控,主要步驟如下所示。
第一步:將JTAG和FPGA板卡鏈接并和PC連接。
第二步:給開發(fā)板上電。
第三步:在“HARDWARE MANAGER”對話框中,單擊【Open target】按鈕,出現(xiàn)浮動菜單。在浮動菜單內(nèi),執(zhí)行菜單命令【AutoConnect】。
第四步:在“Hardware”窗口中,選擇FPGA,單擊鼠標右鍵,出現(xiàn)浮動菜單。在浮動菜單內(nèi),執(zhí)行菜單命令【Program Device】。
第五步:彈出“Program Device”對話框,如圖所示。在該對話框中,選擇合適的“Bit stream file”和“Debug probes files”。
第六步:單擊【Program】按鈕。
第七步:在Vivado主界面右側的窗口中,彈出“hw_vio_l”對話框,如圖所示。在該對話框中,單擊+按鈕。出現(xiàn)浮動菜單。在浮動菜單內(nèi),分別雙擊a_vio、b_vio、sel和z_OBUF[5:0],將其添加到“hw_vio_l”對話框中,如圖所示。
第八步:在圖所示的對話框中,先將sel的“Value”設置為1,此時a_vio和b_vio的值將送給FPGA設計。
第九步:在圖所示的對話框中,將“sel”的“Value”設置為0,此時由開發(fā)板上開關的設置狀態(tài)確定a和b的值,并將其送給FPGA設計。
第十步:關閉并退出設計。
-
FPGA
+關注
關注
1625文章
21620瀏覽量
601239 -
JTAG
+關注
關注
6文章
397瀏覽量
71559 -
代碼
+關注
關注
30文章
4722瀏覽量
68234 -
VIO
+關注
關注
0文章
11瀏覽量
10114
原文標題:【Vivado那些事兒】-VIO原理及應用
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論