<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

AXI VIP當作master時如何使用

傅里葉的貓 ? 來源:傅里葉的貓 ? 2023-07-27 09:19 ? 次閱讀

??AXI接口雖然經常使用,很多同學可能并不清楚Vivado里面也集成了AXI的Verification IP,可以當做AXI的master、pass through和slave,本次內容我們看下AXI VIP當作master時如何使用。

??新建Vivado工程,并新建block design,命名為:axi_demo

4168dc3c-2c12-11ee-a368-dac502259ad0.png

新建axi vip,參數設置如下,第一個參數設置為Master,其他都保持默認,當然如果可以根據自己的實際需求作改動,比如id位寬,數據位寬等等。

418272c8-2c12-11ee-a368-dac502259ad0.pngimage-20230726185112648

再添加AXI BRAM Controller和Block Memory Generator:

41bc2fd6-2c12-11ee-a368-dac502259ad0.png

地址分配如下:0xc000_0000

41cd63e6-2c12-11ee-a368-dac502259ad0.png

生成ip的各種文件:

41e31a1a-2c12-11ee-a368-dac502259ad0.png

新建仿真的tb_top文件,需要注意,文件類型是system verilog。

420b9f80-2c12-11ee-a368-dac502259ad0.pngimage-20230726185756796

仿真代碼放到文章末尾,代碼中中導入的axi_demo_axi_vip_0_0_pkg,就是下面axi vip的component_name再加上后綴_pkg,后面的mst_agent也是component_name加上后綴 _mst_t

importaxi_demo_axi_vip_0_0_pkg::*;
axi_demo_axi_vip_0_0_mst_tmst_agent;
4232e388-2c12-11ee-a368-dac502259ad0.pngimage-20230726190026270

運行仿真:

426af2b4-2c12-11ee-a368-dac502259ad0.pngimage-20230726190219346

將axi vip的M-AXI添加到波形窗口中:

427cbecc-2c12-11ee-a368-dac502259ad0.pngimage-20230726190445127

可以看到,我們一開始向地址0xc0001000寫入0x12345678,又發起一次讀操作,可以將該數據讀出。

42b768e2-2c12-11ee-a368-dac502259ad0.pngimage-20230726190702883

有同學可能習慣用vcs來仿真,下篇文章我們再用vcs+verdi來仿真vivado的axi vip。

`timescale1ns/1ps

importaxi_vip_pkg::*;
importaxi_demo_axi_vip_0_0_pkg::*;

moduletb_top();

bitclk;
bitaresetn;

//usedinAPIandparitalrandomizationfortransactiongenerationanddatareadbackfromdriver
axi_transactionwr_transaction;//Writetransaction
axi_transactionrd_transaction;//Readtransaction

xil_axi_uintmtestWID;//WriteID
xil_axi_ulongmtestWADDR;//WriteADDR
xil_axi_len_tmtestWBurstLength;//WriteBurstLength
xil_axi_size_tmtestWDataSize;//WriteSIZE
xil_axi_burst_tmtestWBurstType;//WriteBurstType
xil_axi_uintmtestRID;//ReadID
xil_axi_ulongmtestRADDR;//ReadADDR
xil_axi_len_tmtestRBurstLength;//ReadBurstLength
xil_axi_size_tmtestRDataSize;//ReadSIZE
xil_axi_burst_tmtestRBurstType;//ReadBurstType
xil_axi_lock_tmtestLOCK;//LOCKvalueforWRITE/READ_BURSTtransaction
xil_axi_cache_tmtestCacheType=3;//CacheTypevalueforWRITE/READ_BURSTtransaction
xil_axi_prot_tmtestProtectionType=3'b000;//ProtectionTypevalueforWRITE/READ_BURSTtransaction
xil_axi_region_tmtestRegion=4'b000;//RegionvalueforWRITE/READ_BURSTtransaction
xil_axi_qos_tmtestQOS=4'b000;//QOSvalueforWRITE/READ_BURSTtransaction
xil_axi_data_beatdbeat;//DatabeatvalueforWRITE/READ_BURSTtransaction
xil_axi_user_beatusrbeat;//UserbeatvalueforWRITE/READ_BURSTtransaction
xil_axi_data_beat[255:0]mtestWUSER;//WuservalueforWRITE/READ_BURSTtransaction
xil_axi_data_beatmtestAWUSER='h0;//AwuservalueforWRITE/READ_BURSTtransaction
xil_axi_data_beatmtestARUSER=0;//AruservalueforWRITE/READ_BURSTtransaction
xil_axi_data_beat[255:0]mtestRUSER;//RuservalueforWRITE/READ_BURSTtransaction
xil_axi_uintmtestBUSER=0;//BuservalueforWRITE/READ_BURSTtransaction
xil_axi_resp_tmtestBresp;//BrespvalueforWRITE/READ_BURSTtransaction
xil_axi_resp_t[255:0]mtestRresp;//RrespvalueforWRITE/READ_BURSTtransaction

bit[63:0]mtestWData;//WriteData
bit[8*4096-1:0]Wdatablock;//Writedatablock
xil_axi_data_beatWdatabeat[];//Writedatabeats

bit[63:0]mtestRData;//ReadData
bit[8*4096-1:0]Rdatablock;//Readdatablock
xil_axi_data_beatRdatabeat[];//Readdatabeats


initialbegin
aresetn=1'b0;
clk=1'b0;
#100ns;
aresetn=1'b1;
end

always#10clk<=?~clk;

axi_demo?u_dut(
????.aclk_0???????(clk?????),
????.aresetn_0????(aresetn?)
);

axi_demo_axi_vip_0_0_mst_t??????????????mst_agent;

initial?begin
????mst_agent?=?new("master?vip?agent",u_dut.axi_vip_0.inst.IF);
????mst_agent.start_master();???????????????//?mst_agent?start?to?run
????mtestWID?=?$urandom_range(0,(1<<(0)-1));?
????mtestWADDR?=?'hc000_1000;//$urandom_range(0,(1<<(32)-1));
????mtestWBurstLength?=?0;
????mtestWDataSize?=?xil_axi_size_t'(xil_clog2((32)/8));
????mtestWBurstType?=?XIL_AXI_BURST_TYPE_INCR;
????mtestWData?=?'h12345678;//$urandom();
????$display("mtestWDataSize?=?%d",?mtestWDataSize);
????//single?write?transaction?filled?in?user?inputs?through?API?
????single_write_transaction_api("single?write?with?api",
?????????????????????????????????.id(mtestWID),
?????????????????????????????????.addr(mtestWADDR),
?????????????????????????????????.len(mtestWBurstLength),?
?????????????????????????????????.size(mtestWDataSize),
?????????????????????????????????.burst(mtestWBurstType),
?????????????????????????????????.wuser(mtestWUSER),
?????????????????????????????????.awuser(mtestAWUSER),?
?????????????????????????????????.data(mtestWData)
?????????????????????????????????);
??????????????????????????????????
????mtestRID?=?$urandom_range(0,(1<<(0)-1));
????mtestRADDR?=?mtestWADDR;
????mtestRBurstLength?=?0;
????mtestRDataSize?=?xil_axi_size_t'(xil_clog2((32)/8));?
????mtestRBurstType?=?XIL_AXI_BURST_TYPE_INCR;
????
????$display("mtestRDataSize?=?%d",?mtestRDataSize);
????//single?read?transaction?filled?in?user?inputs?through?API?
????single_read_transaction_api("single?read?with?api",
?????????????????????????????????.id(mtestRID),
?????????????????????????????????.addr(mtestRADDR),
?????????????????????????????????.len(mtestRBurstLength),?
?????????????????????????????????.size(mtestRDataSize),
?????????????????????????????????.burst(mtestRBurstType)
?????????????????????????????????);
end

??task?automatic?single_write_transaction_api?(?
????????????????????????????????input?string?????????????????????name?="single_write",
????????????????????????????????input?xil_axi_uint???????????????id?=0,?
????????????????????????????????input?xil_axi_ulong??????????????addr?=0,
????????????????????????????????input?xil_axi_len_t??????????????len?=0,?
????????????????????????????????input?xil_axi_size_t?????????????size?=xil_axi_size_t'(xil_clog2((32)/8)),
????????????????????????????????input?xil_axi_burst_t????????????burst?=XIL_AXI_BURST_TYPE_INCR,
????????????????????????????????input?xil_axi_lock_t?????????????lock?=?XIL_AXI_ALOCK_NOLOCK,
????????????????????????????????input?xil_axi_cache_t????????????cache?=3,
????????????????????????????????input?xil_axi_prot_t?????????????prot?=0,
????????????????????????????????input?xil_axi_region_t???????????region?=0,
????????????????????????????????input?xil_axi_qos_t??????????????qos?=0,
????????????????????????????????input?xil_axi_data_beat?[255:0]??wuser?=0,?
????????????????????????????????input?xil_axi_data_beat??????????awuser?=0,
????????????????????????????????input?bit?[63:0]??????????????data?=0
????????????????????????????????????????????????);
????axi_transaction???????????????????????????????wr_trans;
????$display("single_write_transaction_api?size?=?%d",?size);
????wr_trans?=?mst_agent.wr_driver.create_transaction(name);
????wr_trans.set_write_cmd(addr,burst,id,len,size);
????wr_trans.set_prot(prot);
????wr_trans.set_lock(lock);
????wr_trans.set_cache(cache);
????wr_trans.set_region(region);
????wr_trans.set_qos(qos);
????wr_trans.set_data_block(data);
????mst_agent.wr_driver.send(wr_trans);???
??endtask??:?single_write_transaction_api?
?
??task?automatic?single_read_transaction_api?(?
????????????????????????????????????input?string?????????????????????name?="single_read",
????????????????????????????????????input?xil_axi_uint???????????????id?=0,?
????????????????????????????????????input?xil_axi_ulong??????????????addr?=0,
????????????????????????????????????input?xil_axi_len_t??????????????len?=0,?
????????????????????????????????????input?xil_axi_size_t?????????????size?=xil_axi_size_t'(xil_clog2((32)/8)),
????????????????????????????????????input?xil_axi_burst_t????????????burst?=XIL_AXI_BURST_TYPE_INCR,
????????????????????????????????????input?xil_axi_lock_t?????????????lock?=XIL_AXI_ALOCK_NOLOCK?,
????????????????????????????????????input?xil_axi_cache_t????????????cache?=3,
????????????????????????????????????input?xil_axi_prot_t?????????????prot?=0,
????????????????????????????????????input?xil_axi_region_t???????????region?=0,
????????????????????????????????????input?xil_axi_qos_t??????????????qos?=0,
????????????????????????????????????input?xil_axi_data_beat??????????aruser?=0
????????????????????????????????????????????????);
????axi_transaction???????????????????????????????rd_trans;
????$display("single_read_transaction_api?size?=?%d",?size);
????rd_trans?=?mst_agent.rd_driver.create_transaction(name);
????rd_trans.set_read_cmd(addr,burst,id,len,size);
????rd_trans.set_prot(prot);
????rd_trans.set_lock(lock);
????rd_trans.set_cache(cache);
????rd_trans.set_region(region);
????rd_trans.set_qos(qos);
????mst_agent.rd_driver.send(rd_trans);???
??endtask??:?single_read_transaction_api

endmodule

責任編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    7843

    瀏覽量

    148936
  • 參數
    +關注

    關注

    11

    文章

    1411

    瀏覽量

    31585
  • AXI
    AXI
    +關注

    關注

    1

    文章

    126

    瀏覽量

    16326

原文標題:Xilinx AXI VIP使用教程

文章出處:【微信號:傅里葉的貓,微信公眾號:傅里葉的貓】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AXI VIP設計示例 AXI接口傳輸分析

    賽靈思 AXI Verification IP (AXI VIP) 是支持用戶對 AXI4 和 AXI4-Lite 進行仿真的 IP。它還可
    發表于 07-08 09:24 ?1410次閱讀

    如何將AXI VIP添加到Vivado工程中

    在這篇新博文中,我們來聊一聊如何將 AXI VIP 添加到 Vivado 工程中,并對 AXI4-Lite 接口進行仿真。隨后,我們將在仿真波形窗口中講解用于AXI4-Lite 傳輸事
    發表于 07-08 09:27 ?1778次閱讀

    如何使用AXI VIPAXI4(Full)主接口中執行驗證和查找錯誤

    AXI 基礎第 2 講 一文中,曾提到賽靈思 Verification IP (AXI VIP) 可用作為 AXI 協議檢查工具。在本次第4講中,我們將來了解下如何使用它在
    發表于 07-08 09:31 ?2214次閱讀

    使用JTAG到AXI Master無法調試設計的解決辦法?

    我根據以下快速拍攝視頻完成了我的設計:http://www.xilinx.com/video/hardware/using-jtag-to-axi-master-in-vivado.html在視頻
    發表于 08-12 09:16

    求大佬分享uart2axi_master_intf程序源碼

    求大佬分享uart2axi_master_intf程序源碼
    發表于 02-22 06:43

    如何使用Xilinx AXI VIP對自己的設計搭建仿真驗證環境的方法

    使用Vivado生成AXI VIPAXI Verification IP)來對自己設計的AXI接口模塊進行全方位的驗證(如使用VIP
    發表于 10-09 16:08

    AXI 總線交互分為 Master / Slave 兩端

    在 AMBA 系列之 AXI 總線協議初探 中,了解到 AXI 總線交互分為 Master / Slave 兩端,而且標準的 AXI 總線支持不同的位寬,既然是總線,那么必須要支持總線
    的頭像 發表于 02-08 11:44 ?1.3w次閱讀

    Xilinx AXI Interconnect

    在 AMBA 系列之 AXI 總線協議初探 中,了解到 AXI 總線交互分為 Master / Slave 兩端,而且標準的 AXI 總線支持不同的位寬,既然是總線,那么必須要支持總線
    發表于 02-23 06:57 ?45次下載
    Xilinx <b class='flag-5'>AXI</b> Interconnect

    串口轉axi主機總線接口

    uart2axi_master_intf程序源碼:/**************************************************** Module Name
    發表于 12-28 20:04 ?14次下載
    串口轉<b class='flag-5'>axi</b>主機總線接口

    利用axi_master接口指令端的幾個靜態參數的優化技巧

    本文給大家提供利用axi_master接口指令端的幾個靜態參數的優化技巧,從擴展總線接口數量,擴展總線位寬,循環展開等角度入手。最核心的優化思想就是以資源面積換取高帶寬的以便并行計算。
    的頭像 發表于 07-01 09:39 ?1110次閱讀

    AXI學習路線,從握手協議開始

    AXI master的全面討論變得困難。我還沒有(還)想出如何簡化材料來寫一篇關于如何構建通用 AXI master器的帖子,這已經夠難了——通常來說,尋址就是那么難。
    發表于 07-29 11:27 ?1034次閱讀

    使用AXI VIP的幾個關鍵步驟及常見功能

    使用Vivado生成AXI VIPAXI Verification IP)來對自己設計的AXI接口模塊進行全方位的驗證(如使用VIP
    的頭像 發表于 10-08 16:07 ?4328次閱讀

    一些高質量的AMBA(APB/AHB/AXI) VIP分享

    關于VIP的好處,估計就不用我安利了,引用最近S家的一句廣告語,“擁有VIP,無懼芯片設計挑戰”。而在當今的芯片領域,用的最多的可能還是標準總線APB/AHB/AXI等。提到VIP,估
    的頭像 發表于 12-06 14:58 ?1284次閱讀

    AXI VIP當作master時如何使用?

    ?AXI接口雖然經常使用,很多同學可能并不清楚Vivado里面也集成了AXI的Verification IP,可以當做AXImaster、pass through和slave,本次內
    的頭像 發表于 07-27 09:16 ?1031次閱讀
    <b class='flag-5'>AXI</b> <b class='flag-5'>VIP</b><b class='flag-5'>當作</b><b class='flag-5'>master</b>時如何使用?

    LogiCORE JTAG至AXI Master IP核簡介

    LogiCORE JTAG至AXI Master IP核是一個可定制的核,可生成AXIAXI總線可用于處理和驅動系統中FPGA內部的AXI信號。AXI總線接口協議可通過IP定制Viva
    的頭像 發表于 10-16 10:12 ?560次閱讀
    LogiCORE JTAG至<b class='flag-5'>AXI</b> <b class='flag-5'>Master</b> IP核簡介
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>