前言
关于zynq PS PL 数据交互的方式,本文搭建了一个基于Bram的数据交互方式
以下是本篇文章正文内容,下面案例可供参考
一、ZYNQ数据交互方式
AXI DMA
AXI DMA 主要进行大批量的数据交换,有两种模式Direct Register Mode和Scatter/Gather Mode,前者为传统的DMA方式,目标地址,源地址,长度,就可以完成一次连续的读/写,后者可以完成复杂一点读/写操作,按照设定的规则跳着读/写一段地址。
AXI BRAM
AXI BRAM主要进行少量的数据交换,与PL端例化双口RAM大小有关,本生借助AXI control ip 与PS端实现读/写,PL端读/写主要通过双口RAM的另一个口进行读/写,注意点在于,因为要满足AXI control ip的要求所以双口ram要设置成32bit的模式,考虑到PS PL读写不能冲突,所以直接双口ram设置成真双口ram。
网上及主流教程Bram的教程都是直接用两个AXI总线完成的,基本上都是PS控制的为主,本文主要不同之处在于搭建pl端读写的自制ip与ps端进行数据交互。
二、Create Block Design
1.创建硬件工程
截图如下(示例):
.bd文件右
.bd文件左
自己封装的ip,pl写入了512个数据进去,等会ps端读出来。
真双口ram配置
ram接口位宽配置
2.封装的ip代码
代码如下:
module Bram_rw_control(
input clk,
input rst_n,
output [31:0] addra ,
output clka ,
output [31:0] dina ,
input [31:0] douta ,
output ena ,
output rsta ,
output[3:0] wea
);
//wire [31:0] addra;
//wire clka ;
//wire [31:0] dina ;
//wire [31:0] douta;
reg rsta_reg;
reg ena_reg;
assign ena = ena_reg ;
assign rsta = rsta_reg ;
reg [3:0] wea_reg= 4'd0000;
//wire [3:0] wea ;
reg [31:0] addra_reg = 'd0;
reg [31:0] dina_reg = 'd0;
reg [31: