ZYNQ PS PL 数据交互 Bram

本文详细介绍了在ZYNQ平台上,如何通过AXI接口实现PS(处理器系统)与PL(可编程逻辑)之间的数据交互,重点探讨了AXI DMA和AXI BRAM两种方式。作者提供了一种基于BRAM的自定义IP核实现,通过创建Block Design,展示了PL端写入和PS端读取BRAM数据的过程,并给出了Vitis环境下的PS端程序代码。文章还包含了完整的代码示例和预期的输出效果。
摘要由CSDN通过智能技术生成


前言

关于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文件右
.bd文件左
.bd文件左
自己封装的ip
自己封装的ip,pl写入了512个数据进去,等会ps端读出来。
真双口ram配置
真双口ram配置
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:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值