2020.04.02更新:
最近正好用到了这个,贴个能用的代码帮助大家理解吧。该代码已通过仿真测试,可以与Xilinx的AXI BRAM Controller一起使用。
该模块的主要功能是利用AXI4协议对内存进行先写后读的反复操作。代码如下:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 01/7/2020 10:41:11 AM
// Design Name:
// Module Name: AXI_read_write
//
module AXI_read_write #(
parameter integer UPPER_WIDTH = 8,
parameter integer DATA_WIDTH = 64
)
(
//==========input===============//
M_AXI_ACLK ,
M_AXI_ARESETN ,
M_AXI_awready ,
M_AXI_arready ,
M_AXI_rdata ,
M_AXI_wready ,
M_AXI_rlast ,
M_AXI_rvalid ,
M_AXI_bvalid ,
//==========output===============//
M_AXI_awvalid ,
M_AXI_arvalid ,
M_AXI_wdata ,
M_AXI_rready ,
M_AXI_wlast ,
M_AXI_wvalid ,
M_AXI_awaddr ,
M_AXI_araddr ,
M_AXI_bready
);
//port--------------------------------------
input wire M_AXI_ACLK ;
input wire M_AXI_ARESETN ;
input wire M_AXI_awready ;
input wire M_AXI_arready ;
output reg M_AXI_awvalid ;
output reg M_AXI_arvalid ;
// input wire [1:0] M_AXI_BRESP;
// input wire [1:0] M_AXI_RRESP;
input wire [DATA_WIDTH-1:0] M_AXI_rdata;
output reg [DATA_WIDTH-1:0] M_AXI_wdata;
input wire M_AXI_wready ;
input wire M_AXI_rlast ;
input wire M_AXI_rvalid ;
//---------------------------
output reg M_AXI_rready ;
output reg M_AXI_wlast ;
output reg M_AXI_wvalid ;
output reg [UPPER_WIDTH-1:0] M_AXI_awaddr;
// output reg [7:0] M_AXI_AWLEN = 8'b0;
// output reg [2:0] M_AXI_AWSIZE = 3'b011;//8 byte
//----------------------