AXI FULL采用READY,VALID 握手通信机制,可支持最大256长度的突发传输,详细内容可参考博客 下面是AXI突发传输读和写的时序图。 读时序: 写时序:
在AXI协议中,数据传输发生在VALID和 READY信号同时为高的时候,如下图所示: 根据这三张图,我们就能编写代码进行测试。 verilog代码(主机)
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2021/03/08 15:26:05
// Design Name:
// Module Name: PL_DDR_Test
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
/*
本程序功能为:从start_addr地址开始处连续读取32个数据至buffer,然后分别将其加1,写回原地址处
*/
module PL_DDR_Test(
//全局信号
input logic ACLK,
input logic ARESETn,
//写地址通道信号
output logic AWVALID,
output logic [31:0]AWADDR,
output logic [7:0]AWLEN,
output logic AWID, //dont care
output logic [2:0]AWSIZE, //dont care
output logic [1:0]AWBURST, //dont care
output logic AWLOCK, //dont care
output logic [3:0]AWCACHE, //dont care
output logic [2:0]AWPROT, //dont care
output logic [3:0]AWQOS, //dont care
output logic AWUSER, //dont care
input logic AWREADY,
//写数据通道信号
output logic [63:0]WDATA,
output logic [7:0]WSTRB,
output logic WLAST,
output logic WUSER, //dont care
output logic WVALID,
input logic WREADY,
//写应答通道信号
output logic BREADY,
input logic BID, //dont care
input logic [1:0]BRESP,
input logic BUSER, //dont care
input logic BVALID,
//读地址通道信号
output logic ARID, //dont care
output logic [31:0]ARADDR,
output logic [7:0]ARLEN,
output logic [2:0]ARSIZE, //dont care
output logic [1:0]ARBURST, //dont care
output logic [1:0]ARLOCK, //dont care
output logic [3:0]ARCACHE, //dont care
output logic [2:0]ARPROT, //dont care
output logic [3:0]ARQOS, //dont care
output logic ARUSER, //done care
output logic ARVALID,
input logic ARREADY,
//读数据通道
output logic RREADY,
input logic RID, //dont care
input logic [63:0]RDATA,
input logic [1:0]RRESP, //dont care
input logic RLAST,
input logic RUSER, //dont care
input logic RVALID
);
assign AWID = 1'b0;
assign AWSIZE = 3'b011;
assign AWBURST = 2'b01;
assign AWLOCK = 1'b0;
assign AWCACHE = 4'b0011;
assign AWPROT = 3'b000;
assign AWQOS = 4'b0000;
assign AWUSER = 1'b1;
assign WUSER = 1'b1;
assign ARID = 1'b0;
assign ARSIZE = 3'b011;
assign ARBURST = 2'b01;
assign ARLOCK = 1'b0;
assign ARCACHE = 4'b0011;
assign ARPROT = 3'b000;
assign ARQOS = 4'b0000;
assign ARUSER = 1'b1;
logic [9:0]wr_cnt;
logic [9:0]rd_cnt;
logic rd_done;
logic wr_done;
logic read_start;
logic write_start;
logic test_start;
logic test_done;
//
logic [31:0]start_addr;
logic [9:0] test_len; //=31,即突发传输长度32
logic [63:0] data_buffer [0:31];
enum {IDLE,READ,WRITE,DONE} State,NextState;
//*************************************************************************//
//test_len
always_ff@(posedge ACLK,negedge ARESETn)
if(!ARESETn)
test_len
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?