虛擬輸入輸出(Virtual Input Output,VIO)核是一個(gè)可定制的IP核,它可用于實(shí)時(shí)監(jiān)視和驅(qū)動(dòng)內(nèi)部FPGA的信號(hào),如圖所示。
可以定制VIO的輸入和輸出端口的數(shù)量與寬度,用于和FPGA設(shè)計(jì)進(jìn)行連接。由于VIO核與被監(jiān)視和驅(qū)動(dòng)的設(shè)計(jì)同步,因此應(yīng)用于設(shè)計(jì)的時(shí)鐘約束也適用于VIO核內(nèi)的元件。當(dāng)使用這個(gè)核進(jìn)行實(shí)時(shí)交互時(shí),需要使用Vivado邏輯分析特性。
接下來(lái)將介紹VIO的原理及應(yīng)用,內(nèi)容主要包括設(shè)計(jì)原理、添加VIO核、生成比特流文件和下載并調(diào)試設(shè)計(jì)。
設(shè)計(jì)原理
設(shè)計(jì)以下源碼的工程,并添加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后的整體設(shè)計(jì)如下:
如上圖所示,在該設(shè)計(jì)中添加一個(gè)vio核,該IP提供3個(gè)輸出端口,其中probe_out0端口用于選擇進(jìn)入寄存器a_tmp_reg和寄存器b_tmp_reg的信號(hào)。當(dāng)probe_out0輸出1時(shí),將外部端口a和b提供的信號(hào)分別連接到寄存器a_tmp_reg和寄存器b_tmp_reg;當(dāng)probe_out0輸出0時(shí),將vio輸出端口probe_outl和probe_out2信號(hào)連接到寄存器a_tmP_reg和b_tmp_reg。這樣就可以通過(guò)vio提供的端口來(lái)控制整個(gè)FPGA的設(shè)計(jì)。此外,F(xiàn)PGA設(shè)計(jì)的最終輸出z可以連接到vio模塊的probe_in0輸入端口。
添jia VIO核
本節(jié)將添加VIO核,主要步驟如下所示。
第一步:用Vivado集成開(kāi)發(fā)環(huán)境打開(kāi)需要添加的工程。
第二步:在Vivado主界面左側(cè)的“Flow Navigator”窗口中找到并展開(kāi)PROJECT MANAGER選項(xiàng)。在展開(kāi)項(xiàng)中,找到并選擇“IP Catalog”選項(xiàng)。
第三步:在Vivado主界面的右側(cè)窗口中,彈出“IP Catalog”標(biāo)簽頁(yè)。在該標(biāo)簽頁(yè)的搜索框中輸入“VIO”,則在下面出現(xiàn)“VIO(Virtual Input/Output)”,如圖所示,雙擊“VIO(Virtual Input/Output)”。
第四步:彈出“Customize IP-VIO(VirtualInput/Output)”對(duì)話框。
(1)單擊“General Options”標(biāo)簽,如圖所示,在該標(biāo)簽頁(yè)中,按如下參數(shù)進(jìn)行設(shè)置。
Input ProbeCount:1。
Output ProbeCount:3。
勾選 Enable Input Probe Activity Detectors前面的復(fù)選框。
(2)單擊“PROBE_IN Ports(0..0)”標(biāo)簽,如圖所示,在該標(biāo)簽頁(yè)中,按如下參數(shù)進(jìn)行設(shè)置
(3)單擊“PROBE_OUTPorts(0..2)”標(biāo)簽,如圖所示,在該標(biāo)簽頁(yè)中,按如下參數(shù)進(jìn)行設(shè)置。
第五步:?jiǎn)螕簟綩K】按鈕,退出“Customize IP”對(duì)話框。
第六步:彈出“Generate Output Products”對(duì)話框。
第七步:?jiǎn)螕簟綠enerate】按鈕,退出“Generate Output Products”對(duì)話框。
第八步:在“Sources”窗口中,單擊“IP Sources”標(biāo)簽。在該標(biāo)簽頁(yè)中,可以看到添加了名字為“vio_0”的IP核實(shí)例,如圖所示。找到并展開(kāi)“vio_0”選項(xiàng)。在展開(kāi)項(xiàng)中,找到并展開(kāi)“Instatiation Template”選項(xiàng)。在展開(kāi)項(xiàng)中,選擇并用鼠標(biāo)左鍵雙擊vio_0.veo,打開(kāi)其例化模板,如下述代碼所示。
//-----------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”標(biāo)簽。在該標(biāo)簽頁(yè)中,找到并展開(kāi)“Design Sources”選項(xiàng)。在展開(kāi)項(xiàng)中,找到并用鼠標(biāo)雙擊top.v文件,按下述代碼修改設(shè)計(jì)代碼,并添加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
第 十 步 :保 存 該 設(shè) 計(jì) 文 件 。
生成比特流文件
下載并調(diào)試設(shè)計(jì)
將生成的比特流文件下載到開(kāi)發(fā)板上的FPGA元器件中,并通過(guò)VIO對(duì)設(shè)計(jì)進(jìn)行監(jiān)控,主要步驟如下所示。
第一步:將JTAG和FPGA板卡鏈接并和PC連接。
第二步:給開(kāi)發(fā)板上電。
第三步:在“HARDWARE MANAGER”對(duì)話框中,單擊【Open target】按鈕,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),執(zhí)行菜單命令【AutoConnect】。
第四步:在“Hardware”窗口中,選擇FPGA,單擊鼠標(biāo)右鍵,出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),執(zhí)行菜單命令【Program Device】。
第五步:彈出“Program Device”對(duì)話框,如圖所示。在該對(duì)話框中,選擇合適的“Bit stream file”和“Debug probes files”。
第六步:?jiǎn)螕簟綪rogram】按鈕。
第七步:在Vivado主界面右側(cè)的窗口中,彈出“hw_vio_l”對(duì)話框,如圖所示。在該對(duì)話框中,單擊+按鈕。出現(xiàn)浮動(dòng)菜單。在浮動(dòng)菜單內(nèi),分別雙擊a_vio、b_vio、sel和z_OBUF[5:0],將其添加到“hw_vio_l”對(duì)話框中,如圖所示。
第八步:在圖所示的對(duì)話框中,先將sel的“Value”設(shè)置為1,此時(shí)a_vio和b_vio的值將送給FPGA設(shè)計(jì)。
第九步:在圖所示的對(duì)話框中,將“sel”的“Value”設(shè)置為0,此時(shí)由開(kāi)發(fā)板上開(kāi)關(guān)的設(shè)置狀態(tài)確定a和b的值,并將其送給FPGA設(shè)計(jì)。
第十步:關(guān)閉并退出設(shè)計(jì)。
-
FPGA
+關(guān)注
關(guān)注
1643文章
21967瀏覽量
614263 -
JTAG
+關(guān)注
關(guān)注
6文章
403瀏覽量
72933 -
代碼
+關(guān)注
關(guān)注
30文章
4887瀏覽量
70266 -
VIO
+關(guān)注
關(guān)注
0文章
11瀏覽量
10326
原文標(biāo)題:【Vivado那些事兒】-VIO原理及應(yīng)用
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何使用One Spin檢查AMD Vivado Design Suite Synth的結(jié)果


AMD Vivado Design Suite IDE中的設(shè)計(jì)分析簡(jiǎn)介

Vivado Design Suite用戶指南:邏輯仿真

TCAN1051HGV VIO管腳作用是什么?
一種降低VIO/VSLAM系統(tǒng)漂移的新方法

Xilinx_Vivado_SDK的安裝教程

每次Vivado編譯的結(jié)果都一樣嗎

Vivado使用小技巧

Vivado編輯器亂碼問(wèn)題

Vivado 2024.1版本的新特性(2)


深入了解基于CANoe的VIO系統(tǒng)應(yīng)用

評(píng)論