0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Vivado之VIO原理及應用

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2021-09-23 16:11 ? 次閱讀

虛擬輸入輸出(Virtual Input Output,VIO)核是一個可定制的IP核,它可用于實時監(jiān)視和驅動內(nèi)部FPGA信號,如圖所示。

48641394-0fe5-11ec-8fb8-12bb97331649.png

可以定制VIO的輸入和輸出端口的數(shù)量與寬度,用于和FPGA設計進行連接。由于VIO核與被監(jiān)視和驅動的設計同步,因此應用于設計的時鐘約束也適用于VIO核內(nèi)的元件。當使用這個核進行實時交互時,需要使用Vivado邏輯分析特性。

接下來將介紹VIO的原理及應用,內(nèi)容主要包括設計原理、添加VIO核、生成比特流文件和下載并調試設計。

設計原理

設計以下源碼的工程,并添加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后的整體設計如下:

48770274-0fe5-11ec-8fb8-12bb97331649.png

如上圖所示,在該設計中添加一個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)”。

48a63846-0fe5-11ec-8fb8-12bb97331649.png

第四步:彈出“Customize IP-VIO(VirtualInput/Output)”對話框。

(1)單擊“General Options”標簽,如圖所示,在該標簽頁中,按如下參數(shù)進行設置。

48d131ae-0fe5-11ec-8fb8-12bb97331649.png

Input ProbeCount:1。

Output ProbeCount:3。

勾選 Enable Input Probe Activity Detectors前面的復選框。

(2)單擊“PROBE_IN Ports(0..0)”標簽,如圖所示,在該標簽頁中,按如下參數(shù)進行設置

48e223ec-0fe5-11ec-8fb8-12bb97331649.png

(3)單擊“PROBE_OUTPorts(0..2)”標簽,如圖所示,在該標簽頁中,按如下參數(shù)進行設置。

48f1c478-0fe5-11ec-8fb8-12bb97331649.png

第五步:單擊【OK】按鈕,退出“Customize IP”對話框。

第六步:彈出“Generate Output Products”對話框。

第七步:單擊【Generate】按鈕,退出“Generate Output Products”對話框。

第八步:在“Sources”窗口中,單擊“IP Sources”標簽。在該標簽頁中,可以看到添加了名字為“vio_0”的IP核實例,如圖所示。找到并展開“vio_0”選項。在展開項中,找到并展開“Instatiation Template”選項。在展開項中,選擇并用鼠標左鍵雙擊vio_0.veo,打開其例化模板,如下述代碼所示。

492d2dce-0fe5-11ec-8fb8-12bb97331649.png

//-----------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

第 十 步 :保 存 該 設 計 文 件 。

生成比特流文件

下載并調試設計

將生成的比特流文件下載到開發(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”。

49538564-0fe5-11ec-8fb8-12bb97331649.png

第六步:單擊【Program】按鈕。

第七步:在Vivado主界面右側的窗口中,彈出“hw_vio_l”對話框,如圖所示。在該對話框中,單擊+按鈕。出現(xiàn)浮動菜單。在浮動菜單內(nèi),分別雙擊a_vio、b_vio、sel和z_OBUF[5:0],將其添加到“hw_vio_l”對話框中,如圖所示。

497dded6-0fe5-11ec-8fb8-12bb97331649.png

49b9002e-0fe5-11ec-8fb8-12bb97331649.png

第八步:在圖所示的對話框中,先將sel的“Value”設置為1,此時a_vio和b_vio的值將送給FPGA設計。

第九步:在圖所示的對話框中,將“sel”的“Value”設置為0,此時由開發(fā)板上開關的設置狀態(tài)確定a和b的值,并將其送給FPGA設計。

第十步:關閉并退出設計。

編輯:jq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1624

    文章

    21538

    瀏覽量

    600461
  • JTAG
    +關注

    關注

    6

    文章

    394

    瀏覽量

    71518
  • 代碼
    +關注

    關注

    30

    文章

    4694

    瀏覽量

    68078
  • VIO
    VIO
    +關注

    關注

    0

    文章

    11

    瀏覽量

    10100

原文標題:【Vivado那些事兒】-VIO原理及應用

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Vivado編輯器亂碼問題

    ,但是在Vivado里面打開用sublime寫的代碼之后,經(jīng)常出現(xiàn)中文亂碼,讓人很不舒服。究其原因就是一般來說第三方的編輯器是采用utf8的編碼方式,而vivado的text editor不是這種方式。
    的頭像 發(fā)表于 10-15 17:24 ?158次閱讀
    <b class='flag-5'>Vivado</b>編輯器亂碼問題

    Vivado 2024.1版本的新特性(2)

    從綜合角度看,Vivado 2024.1對SystemVerilog和VHDL-2019的一些特性開始支持。先看SystemVerilog。
    的頭像 發(fā)表于 09-18 10:34 ?410次閱讀
    <b class='flag-5'>Vivado</b> 2024.1版本的新特性(2)

    Vivado 2024.1版本的新特性(1)

    Vivado 2024.1已正式發(fā)布,今天我們就來看看新版本帶來了哪些新特性。
    的頭像 發(fā)表于 09-18 10:30 ?551次閱讀
    <b class='flag-5'>Vivado</b> 2024.1版本的新特性(1)

    基于CANoe的VIO系統(tǒng)應用測試方案介紹#CANoe #VTHiL

    VIO
    北匯信息POLELINK
    發(fā)布于 :2024年09月11日 09:23:20

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

    VIO System是Vector推出的一款適用于前期單板級測試使用的硬件系統(tǒng),不僅可以進行總線通訊測試,也可以同時進行I/O信號測試,可以讓工程師在ECU或者傳感器開發(fā)前期就發(fā)現(xiàn)問題,能夠盡早排查解決,極大降低了人力物力開發(fā)成本。
    的頭像 發(fā)表于 09-01 16:21 ?2822次閱讀
    深入了解基于CANoe的<b class='flag-5'>VIO</b>系統(tǒng)應用

    AD7682的VIO用什么地做參考,數(shù)字地還是模擬地?

    AD7682請問VIO的參考地是與VDD一樣,用模擬地GND,還是數(shù)字地DGND
    發(fā)表于 05-21 06:44

    使用P4和Vivado工具簡化數(shù)據(jù)包處理設計

    電子發(fā)燒友網(wǎng)站提供《使用P4和Vivado工具簡化數(shù)據(jù)包處理設計.pdf》資料免費下載
    發(fā)表于 01-26 17:49 ?0次下載
    使用P4和<b class='flag-5'>Vivado</b>工具簡化數(shù)據(jù)包處理設計

    如何禁止vivado自動生成 bufg

    Vivado中禁止自動生成BUFG(Buffered Clock Gate)可以通過以下步驟實現(xiàn)。 首先,讓我們簡要了解一下什么是BUFG。BUFG是一個時鐘緩沖器,用于緩沖輸入時鐘信號,使其更穩(wěn)
    的頭像 發(fā)表于 01-05 14:31 ?1709次閱讀

    Vivado時序問題分析

    有些時候在寫完代碼之后呢,Vivado時序報紅,Timing一欄有很多時序問題。
    的頭像 發(fā)表于 01-05 10:18 ?1649次閱讀

    VIVADO安裝問題解決

    vivado出現(xiàn)安裝問題剛開始還以為是安裝路徑包含中文空格了,重裝的注意了一下,發(fā)現(xiàn)還是這個問題。。。。后來又一頓操作猛如虎,終于發(fā)現(xiàn)了問題。出這個問題的原因是vivado壓縮包解壓的路徑包含中文了把解壓文件放到不含中文的地方,再重新安裝,安裝路徑也不能含中文。然后。。。
    發(fā)表于 12-22 10:56 ?0次下載

    VIVADO軟件使用問題總結

    【關鍵問題?。。。≈匾。?!】VIVADO會在MESSAGE窗口出提示很多錯誤和警告信息!
    的頭像 發(fā)表于 12-15 10:11 ?1637次閱讀
    <b class='flag-5'>VIVADO</b>軟件使用問題總結

    AD7982的VREF與VDD/VIO之間是否有時序要求?

    你好, AD7982的VREF與VDD/VIO之間是否有時序要求?手冊里沒查到。 在目前我們的設計中,VREF(5V)先于VDD(2.5V)和VIO(2.5V)上電,不知是否會有問題。謝謝。
    發(fā)表于 12-14 06:44

    Xilinx VIO介紹和應用場景

    在以往的項目中,要控制FPGA內(nèi)部某個信號的值,往往是通過配置寄存器來實現(xiàn)的。其實Xilinx還提供了一個叫VIO的core,可以動態(tài)改變FPGA內(nèi)部某個信號的值,但是一直沒有用過,一來對于以前的項目來說,沒有應用場景,通過寄存器就可以配置了;二來感覺這個東西不是很“實用”。
    的頭像 發(fā)表于 12-11 18:26 ?1930次閱讀
    Xilinx <b class='flag-5'>VIO</b>介紹和應用場景

    使用Vivado高層次綜合(HLS)進行FPGA設計的簡介

    電子發(fā)燒友網(wǎng)站提供《使用Vivado高層次綜合(HLS)進行FPGA設計的簡介.pdf》資料免費下載
    發(fā)表于 11-16 09:33 ?0次下載
    使用<b class='flag-5'>Vivado</b>高層次綜合(HLS)進行FPGA設計的簡介

    低成本單板級HIL測試系統(tǒng)解決方案VIO System說明

    嵌入式軟件的HIL測試需要復雜的測試系統(tǒng)及完整的ECU硬件,這導致通常只能在開發(fā)流程的后期階段進行測試。全新推出的低成本解決方案VIO System,使得在開發(fā)前期不僅可以進行總線通訊測試,也可以同時進行I/O信號測試。
    的頭像 發(fā)表于 11-02 17:08 ?600次閱讀
    低成本單板級HIL測試系統(tǒng)解決方案<b class='flag-5'>VIO</b> System說明