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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO

發(fā)布時間:2025/3/13 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一. 模塊功能與應用場景

模塊功能:AXI4-Lite協(xié)議主機,從FWFT FIFO(首字直通FIFO)中不斷讀取數(shù)據(jù),寫入到一段地址中。

應用場景:DDR讀寫,BRAM讀寫等AXI接口的存儲器件讀寫。

二. 模塊框圖與使用說明

參數(shù)列表:

參數(shù)名說明
TARGET_SLAVE_BASE_ADDR目標從機基地址
TARGET_SLAVE_MAX_ADDR目標從機最大地址
ADDR_WIDTH地址寬度,根據(jù)需要任意設置
DATA_WIDTH數(shù)據(jù)寬度,32/64
RD_CHECK_EN讀檢查使能,0/1

接口列表:

接口名說明
m_axi_xxx以m_axi_開頭的表示axi-Lite協(xié)議主機的接口信號
fwft_fifo_xxx共三個,組成首字直通FIFO的讀接口
single_burst_wr_finish單次突發(fā)完成
error_flagerror_flag為錯誤指示信號,用來指示有錯誤發(fā)生
write_resp_error寫響應錯誤
read_resp_error讀響應錯誤
rdata_notequal_wdata_error讀數(shù)據(jù)不等于寫數(shù)據(jù)

將模塊封裝為IP后,顯示的模塊IP框圖:

模塊IP參數(shù)配置界面:

三. 模塊代碼

略。見六.工程分享。

四. testbench

/** @Author : Xu Dakang* @Email : xudaKang_up@qq.com* @Date : 2021-05-09 11:04:28* @LastEditors : Xu Dakang* @LastEditTime : 2021-12-12 15:40:37* @Filename : TryAXI4Lite_tb.sv* @Description : testbench of myAXI4LiteMaster */module myAXI4LiteMaster_blockRW_tb ();timeunit 1ns; timeprecision 10ps;localparam DIN_WIDTH = 32;logic FIFO_WRITE_full; logic [DIN_WIDTH-1 : 0]FIFO_WRITE_wr_data; logic FIFO_WRITE_wr_en; logic error_flag; logic m_axi_aclk; logic m_axi_aresetn; logic rdata_notequal_wdata_error; logic read_resp_error; logic single_burst_wr_finish; logic write_resp_error;axi4Lite_blockRW_sys_wrapper axi4Lite_blockRW_sys_wrapper_inst(.*);// 生成時鐘 localparam CLKT = 2; initial beginm_axi_aclk = 0;forever #(CLKT / 2) m_axi_aclk = ~m_axi_aclk; end// 導入輸入波形文件 路徑需要修改 string din_path = "F:/Onedrive/VivadoPrj/myAXI4LiteMaster_blockRW_useFIFO/myAXI4LiteMaster_blockRW_useFIFO.srcs/sim_1/new/sin.txt";localparam DATA_NUM = 10000; // 數(shù)據(jù)量, 也就是txt文件的行數(shù), 如果此參數(shù)大于數(shù)據(jù)行數(shù), 讀取到的內(nèi)容為不定態(tài) logic [DIN_WIDTH-1 : 0] din_wave_data [DATA_NUM]; // 讀取輸入波形數(shù)據(jù) initial begin$readmemb(din_path, din_wave_data, 0, DATA_NUM-1); // vivado讀取txt文件 end//++ 寫FIFO ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ int cnt; always_ff @(posedge m_axi_aclk, negedge m_axi_aresetn) beginif (~m_axi_aresetn)cnt <= 0;else if (single_burst_wr_finish)cnt <= cnt + 1;elsecnt <= cnt; endlogic start; logic FIFO_WRITE_wr_en_temp; always_ff @(posedge m_axi_aclk, negedge m_axi_aresetn) beginif (~m_axi_aresetn)FIFO_WRITE_wr_en_temp <= 1'b0;else if (start || single_burst_wr_finish)FIFO_WRITE_wr_en_temp <= 1'b1;elseFIFO_WRITE_wr_en_temp <= 1'b0; endassign FIFO_WRITE_wr_en = FIFO_WRITE_wr_en_temp && ~FIFO_WRITE_full;assign FIFO_WRITE_wr_data = din_wave_data[cnt]; //-- 寫FIFO ------------------------------------------------------------// 控制復位,仿真開始和結(jié)束 initial beginm_axi_aresetn = 0;#(CLKT * 10) m_axi_aresetn = 1;wait(~FIFO_WRITE_full) start = 1;#(CLKT) start = 0;wait(cnt == 5000);#(CLKT * 10) $stop; endendmodule

五. 仿真驗證

仿真工具:Vivado 2021.2 Simulator。

Block Design如下圖,注意分配BRAM的地址,更加選擇的器件,有個最大值,且協(xié)議主機模塊的地址要與分配的地址保持一致;調(diào)試時使能RD_CHECK_EN。

仿真波形:寫數(shù)據(jù)和讀數(shù)據(jù)沒有問題。

六. 工程分享

AXI4LiteMaster_blockRW_useFIFO_Vivado2021.2工程分享:

鏈接:https://pan.baidu.com/s/1pMLVXw1URcthGT2Uv9QHxw
提取碼:dcq6

注意,需要修改testbench中的sin文件路徑才能得到正確的仿真結(jié)果。

總結(jié)

以上是生活随笔為你收集整理的Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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