日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

编写AXI4协议读写BRAM并仿真验证

發(fā)布時(shí)間:2025/3/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写AXI4协议读写BRAM并仿真验证 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前篇博文我們?cè)囼?yàn)了AXI4-Lite協(xié)議讀寫B(tài)RAM,這里我們?cè)囼?yàn)一下完整的AXI4協(xié)議。流程跟AXI4-Lite是一樣的。省略的部分請(qǐng)參考:編寫AXI4-Lite協(xié)議讀寫B(tài)RAM并仿真驗(yàn)證

一. 建立工程

二. 創(chuàng)建塊設(shè)計(jì)

原理圖同AXI4-Lite,不同點(diǎn)在于可以直接拖入三個(gè)IP直接連線,AXI BRAM Controller協(xié)議選擇AXI4。

搭建完成后,需要進(jìn)行封裝。

三. 編寫testbench

axiBram_tb.sv,代碼如下:

/** @Author: Xu XiaoKang* @Email: xuxiaokang_up@qq.com* @Date: 2020-08-03 14:40:33* @LastEditors: xu XiaoKang* @LastEditTime: 2020-08-04 16:40:00* @Filename:* @Description: AXI4 Master*/module axi4Bram_tb ();timeunit 1ns; timeprecision 1ps;logic [14:0] M_AXI_awaddr; logic [7 :0] M_AXI_awlen; logic [2 :0] M_AXI_awsize; logic [1 :0] M_AXI_awburst; logic M_AXI_awlock; logic [3 :0] M_AXI_awcache; logic [2 :0] M_AXI_awprot; logic [3 :0] M_AXI_awqos; logic M_AXI_awvalid; logic M_AXI_awready;logic [31:0] M_AXI_wdata; logic [3 :0] M_AXI_wstrb; logic M_AXI_wlast; logic M_AXI_wvalid; logic M_AXI_wready;logic [1:0] M_AXI_bresp; logic M_AXI_bvalid; logic M_AXI_bready;logic [14:0] M_AXI_araddr; logic [7 :0] M_AXI_arlen; logic [2 :0] M_AXI_arsize; logic [1 :0] M_AXI_arburst; logic M_AXI_arlock; logic [3 :0] M_AXI_arcache; logic [2 :0] M_AXI_arprot; logic [3 :0] M_AXI_arqos; logic M_AXI_arvalid; logic M_AXI_arready;logic [31:0] M_AXI_rdata; logic [1 :0] M_AXI_rresp; logic M_AXI_rlast; logic M_AXI_rvalid; logic M_AXI_rready;logic clk; logic rstn;// 生成時(shí)鐘 localparam CLKT = 2; initial beginclk = 0;forever #(CLKT / 2) clk = ~clk; end// 初始化一些不變的信號(hào) initial beginM_AXI_awlock = 1'b0; // Normal accessM_AXI_awcache = 4'b0000; // 指示內(nèi)存類型M_AXI_awprot = 3'b000; // 非特權(quán)且安全的數(shù)據(jù)訪問(wèn)M_AXI_awqos = 4'b0000;M_AXI_arlock = 1'b0; // Normal accessM_AXI_arcache = 4'b0000; // 指示內(nèi)存類型M_AXI_arprot = 3'b000; // 非特權(quán)且安全的數(shù)據(jù)訪問(wèn)M_AXI_arqos = 4'b0000; endinitial beginrstn = 0;#(CLKT * 5)rstn = 1;// 寫交易M_AXI_awaddr = 15'b000_0000_0000_0000; // 寫入基地址M_AXI_awlen = 8'd10; // 實(shí)際傳輸數(shù)據(jù)量 = awlem + 1M_AXI_awsize = 3'd2; // 每份數(shù)據(jù)占2^2=4字節(jié), 默認(rèn)是數(shù)據(jù)總線寬度M_AXI_awburst = 2'b01; // INCR, 增地址模式M_AXI_awvalid = 1'b1;wait(M_AXI_awready == 1'b1) #(CLKT * 1) M_AXI_awvalid = 1'b0;#(CLKT * 10.5)M_AXI_wdata = 32'd12;M_AXI_wstrb = 4'b1111;M_AXI_wlast = 1'b0;repeat(M_AXI_awlen) beginM_AXI_wvalid = 1'b1;wait(M_AXI_wready == 1'b1)#(CLKT * 1)M_AXI_wdata = M_AXI_wdata + 1'b1;endM_AXI_wlast = 1'b1;wait(M_AXI_wready == 1'b1)#(CLKT * 1)M_AXI_wvalid = 1'b0;M_AXI_wlast = 1'b0;M_AXI_bready = 1'b1;wait(M_AXI_bvalid == 1'b1) #(CLKT * 1) M_AXI_bready = 1'b0;// 讀交易M_AXI_araddr = M_AXI_awaddr;M_AXI_arlen = M_AXI_awlen;M_AXI_arsize = M_AXI_awsize;M_AXI_arburst = M_AXI_awburst;M_AXI_arvalid = 1'b1;wait(M_AXI_arready == 1'b1) #(CLKT * 1) M_AXI_arvalid = 1'b0;M_AXI_rready = 1'b1;wait(M_AXI_rlast == 1'b1) #(CLKT * 1) M_AXI_rready = 1'b0;#(CLKT * 5) $stop; endbram_wrapper bram_wrapper_inst_0 (.*);endmodule

四. 運(yùn)行仿真

使用vivado 2018.3 和 modelsim 10.6e SE-64 聯(lián)合仿真。

可見(jiàn),采用增地址模式,連續(xù)寫入11個(gè)數(shù)據(jù),從機(jī)能正確返回寫響應(yīng)bresp 和 bvalid,對(duì)同一地址的讀取,讀到的數(shù)據(jù)同之前寫入的數(shù)據(jù)相同,故AXI4讀寫B(tài)RAM沒(méi)有問(wèn)題。

完整工程文件我放在了百度云上:

鏈接:https://pan.baidu.com/s/1umudYDadQzcY9pGlvKrofg
提取碼:mpvv

五. 總結(jié)

AXI4相較AXI4-Lite支持連續(xù)寫和連續(xù)讀,當(dāng)需要交互的數(shù)據(jù)量大時(shí),可采用AXI4。另外,如果存儲(chǔ)器件支持同時(shí)讀寫,用AXI4進(jìn)行同時(shí)讀寫也沒(méi)問(wèn)題,讀寫通道是相互獨(dú)立的。

總結(jié)

以上是生活随笔為你收集整理的编写AXI4协议读写BRAM并仿真验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。