本文配套原码工程已上传至https://download.csdn.net/download/botao_li/10910943
AXI BRAM Controller
PS模块通过axi_bram模块,可以使用AXI接口读写PL内的Block RAM,实现PS与PL之间的数据互联
axi_bram需要与Block Memory Generator模块共同使用,axi_bram将PS的AXI操作转化为bram的控制接口时序
Block Design
建立Vivado工程,并且添加Zynq模块,AXI BRAM Controller模块,Block Memory Generator模块,Utility Vector Logic模块和ILA模块
其中logic用于将低电平复位信号转为高电平接入bram,ila用于在PL中查看bram的接口操作
zynq模块在保持默认的情况下添加uart0,并且指定MIO 18 19,用于与PC串口连接
axi_bram的设置如下图所示
注意:Memory Depth不可设置,因为深度设置是完全由PS的地址分配决定的,默认显示为1024,在Address Editor中修改并且Generate Output Products才可以更新至axi_bram模块内的Memory Depth
经过修改的Address Editor为
32KB地址空间,由于数据总线为32bit即4B,于是axi_bram的深度为32*1024/4=8192
Block Memory Generator在使用BRAM Controller模式也是同样的方式决定深度
打开bram模块,并设置为双口控制,A口与axi_bram连接,B口与PL内的自定义测试模块连接
设置如下
在Sources窗口添加自定义的Verilog模块test,写入如下代码用于与PS配合测试
/*
PS通过0地址控制PL读写BRAM
PS要求PL写操作前将MAX_ADDR地址写为0,然后用MAX_ADDR地址值判断是否写结束
*/
module test(
input clk,
input rst,
output we,
output [31:0] addr,
output [31:0] din,
input [31:0] dout
);
parameter MAX_ADDR = 32'd32764;
reg we = 1'b0;
reg [31:0] addr = 32'd0;
ass