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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

AXI VIP當(dāng)作master時(shí)如何使用?

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

??AXI接口雖然經(jīng)常使用,很多同學(xué)可能并不清楚Vivado里面也集成了AXI的Verification IP,可以當(dāng)做AXI的master、pass through和slave,本次內(nèi)容我們看下AXI VIP當(dāng)作master時(shí)如何使用。

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

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

新建axi vip,參數(shù)設(shè)置如下,第一個(gè)參數(shù)設(shè)置為Master,其他都保持默認(rèn),當(dāng)然如果可以根據(jù)自己的實(shí)際需求作改動,比如id位寬,數(shù)據(jù)位寬等等。

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

仿真代碼放到文章末尾,代碼中中導(dǎo)入的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

運(yùn)行仿真:

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

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

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

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

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

有同學(xué)可能習(xí)慣用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





審核編輯:劉清

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

    關(guān)注

    14

    文章

    1014

    瀏覽量

    83591
  • VCS
    VCS
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    9581
  • AXI總線
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    14244
  • BRAM
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    10936
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    804

    瀏覽量

    66222
收藏 人收藏

    評論

    相關(guān)推薦

    AXI VIP設(shè)計(jì)示例 AXI接口傳輸分析

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

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

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

    如何使用AXI VIPAXI4(Full)主接口中執(zhí)行驗(yàn)證和查找錯(cuò)誤

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

    AXI VIP當(dāng)作master時(shí)如何使用

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

    使用JTAG到AXI Master無法調(diào)試設(shè)計(jì)的解決辦法?

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

    求大佬分享uart2axi_master_intf程序源碼

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

    如何使用Xilinx AXI VIP對自己的設(shè)計(jì)搭建仿真驗(yàn)證環(huán)境的方法

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

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

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

    Xilinx AXI Interconnect

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

    串口轉(zhuǎn)axi主機(jī)總線接口

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

    AXI學(xué)習(xí)路線,從握手協(xié)議開始

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

    AXI VIP 中產(chǎn)生傳輸事務(wù)的基本方法

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

    使用AXI VIP的幾個(gè)關(guān)鍵步驟及常見功能

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

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

    關(guān)于VIP的好處,估計(jì)就不用我安利了,引用最近S家的一句廣告語,“擁有VIP,無懼芯片設(shè)計(jì)挑戰(zhàn)”。而在當(dāng)今的芯片領(lǐng)域,用的最多的可能還是標(biāo)準(zhǔn)總線APB/AHB/AXI等。提到VIP,估
    的頭像 發(fā)表于 12-06 14:58 ?1793次閱讀

    LogiCORE JTAG至AXI Master IP核簡介

    LogiCORE JTAG至AXI Master IP核是一個(gè)可定制的核,可生成AXIAXI總線可用于處理和驅(qū)動系統(tǒng)中FPGA內(nèi)部的AXI信號。AXI總線接口協(xié)議可通過IP定制Viva
    的頭像 發(fā)表于 10-16 10:12 ?1036次閱讀
    LogiCORE JTAG至<b class='flag-5'>AXI</b> <b class='flag-5'>Master</b> IP核簡介