Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO
生活随笔
收集整理的這篇文章主要介紹了
Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一. 模塊功能與應用場景
模塊功能:AXI4-Lite協(xié)議主機,從FWFT FIFO(首字直通FIFO)中不斷讀取數(shù)據(jù),寫入到一段地址中。
應用場景:DDR讀寫,BRAM讀寫等AXI接口的存儲器件讀寫。
二. 模塊框圖與使用說明
參數(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_flag | error_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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xilinx Platform Cabl
- 下一篇: 数据通信的基本概念