在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

AXI VIP當作master時如何使用?

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

??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.png

再添加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.png

仿真代碼放到文章末尾,代碼中中導入的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.png

運行仿真:

426af2b4-2c12-11ee-a368-dac502259ad0.png

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

427cbecc-2c12-11ee-a368-dac502259ad0.png

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

42b768e2-2c12-11ee-a368-dac502259ad0.png

有同學可能習慣用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





審核編輯:劉清

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

    關注

    14

    文章

    1019

    瀏覽量

    83843
  • VCS
    VCS
    +關注

    關注

    0

    文章

    80

    瀏覽量

    9626
  • AXI總線
    +關注

    關注

    0

    文章

    66

    瀏覽量

    14291
  • BRAM
    +關注

    關注

    0

    文章

    41

    瀏覽量

    11002
  • Vivado
    +關注

    關注

    19

    文章

    815

    瀏覽量

    66705
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

    AXI VIP當作master時如何使用

    AXI VIP當作master時如何使用。 ??新建Vivado工程,并新建block design,命名為:axi_demo 新建
    的頭像 發表于 07-27 09:19 ?1233次閱讀
    <b class='flag-5'>AXI</b> <b class='flag-5'>VIP</b><b class='flag-5'>當作</b><b class='flag-5'>master</b>時如何使用

    使用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.6w次閱讀

    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學習路線,從握手協議開始

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

    AXI VIP 中產生傳輸事務的基本方法

    本系列我想深入探尋 AXI4 總線。不過事情總是這樣,不能我說想深入就深入。當前我對 AXI總線的理解尚談不上深入。但我希望通過一系列文章,讓讀者能和我一起深入探尋 AXI4。
    的頭像 發表于 08-29 14:58 ?1907次閱讀

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

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

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

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

    關于高質量的AMBA(APB/AHB/AXI) VIP的分享

    AMBA VIP 分享
    的頭像 發表于 12-10 20:47 ?3575次閱讀
    關于高質量的AMBA(APB/AHB/<b class='flag-5'>AXI</b>) <b class='flag-5'>VIP</b>的分享
    主站蜘蛛池模板: 亚洲综合激情另类专区 | 伊人久久大香线蕉综合bd高清| 美女免费毛片| 日韩三级免费| 欧美很很干| 午夜伦理片免费观看在线| 6080yy午夜不卡一二三区| 狠狠色狠狠色狠狠五月ady| 伊人网视频在线| 国产精品特黄毛片| 蕾丝视频成人★在线观看| 日韩一级一欧美一级国产| 色妞视频资源在线观看| 欧美精品一区在线看| 久久夜色撩人精品国产| 欧美一级特黄视频| 婷婷午夜影院| 欧美性一区二区三区| 色婷婷基地| 免费观看一级成人毛片| 欧美一级片免费在线观看| 黄网站在线播放| 在线播放国产不卡免费视频| 色婷婷综合久久久久中文一区二区 | 国产大乳孕妇喷奶水在线观看| 日日噜噜夜夜狠狠久久丁香| 亚洲国产成人精品女人久久久| 中国一级特黄特色真人毛片| 亚欧洲乱码专区视频| 永久免费看www色视频| 日本一区二区三区四区在线观看| 日韩日韩| 国产三级自拍视频| 欧美黑人巨大日本人又爽又色| 欧美黑人性色黄在线视频| 欧美一区色| 亚洲日韩色综合视频| 亚洲狠狠婷婷综合久久久久图片| 人与牲动交xx| 美女视频黄a全部| 亚洲 美腿 欧美 偷拍|