PS和PL使用BRAM进行数据交互

这篇具有很好参考价值的文章主要介绍了PS和PL使用BRAM进行数据交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

BRAM(Block RAM)是 PL 部分的存储器阵列,PS 和 PL 通过对 BRAM 进行读写操作,来实现数据的交互。在 PL 中,通过输出时钟、地址、读写控制等信号来对 BRAM 进行读写操作。而在 PS 中,处理器并不需要直接驱动 BRAM 的端口,而是通过 AXI BRAM 控制器来对 BRAM 进行读写操作。AXI BRAM 控制器是集成在 Vivado 设计软件中的软核,可以配置成 AXI4-lite 接口模式或者 AXI4 接口模式。

AXI4 接口模式的 BRAM 控制器支持的数据位宽为 32 位、64 位、128 位、512 位和 1024 位,而 AXI4-Lite接口仅支持 32 位数据位宽。PS 通过 AXI4-Lite 接口访问 BRAM,当使能 ECC 选项时,ECC 允许 AXI 主接口检测和纠正 BRAM 块中的单位和双位错误。AXI BRAM 控制器作为 AXI 总线的从接口,和 AXI 主接口实现互联,来对 BRAM 进行读写操作。针对不同的应用场合,该 IP 核支持单次传输和突发传输两种方式。

任务:

PS 将串口接收到的数据写入 BRAM,然后从 BRAM 中读出数据,并通过串口打印出来;与此同时,PL 从 BRAM 中同样读出数据,并通过 ILA 来观察读出的数据与串口打印的数据是否一致。下面是系统框图

pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档

PS 端的 M_AXI_GP0 作为主端口,与 PL 端的 AXI BRAM 控制器 IP 核和 PL 读 BRAM IP (pl_bram_rd)通过 AXI4 总线进行连接。其中,AXI 互联 IP(AXI Interconnect)用于连接 AXI 存储器映射(memory-mapped)的主器件和从器件;AXI BRAM 控制器作为 PS 端读写 BRAM 的 IP 核;PL 读BRAM IP 核是我们自定义的 IP 核,实现了 PL 端从 BRAM 中读出数据的功能,除此之外,PS 端通过 AXI总线来配置该 IP 核读取 BRAM 的起始地址和个数等。本实验中,我们将自定义的IP核替换成AXI BRAM IP核。

本次实验创建的BRAM是双端口RAM,两个端口均连接AXI BRAM控制器

二、硬件设计

pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档

接着我们调用一个双端口RAM

pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档
pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档
pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档

综合后的连线图

pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档

三、SDK验证

工程代码

#include <stdio.h>
#include "xil_io.h"
#include "xparameters.h"
#include "xbram.h"

#define BRAM_CTRL_0_BASE      XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR//用于写入数据,操作A端口的AXI总线基地址
#define BRAM_CTRL_1_BASE      XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR//用于读数据,操作B端口的AXI总线基地址
char test_string[]="test ps pl bram string\n";
int main()
{
    int num,str_len;
    int str_rev;
    xil_printf("application start \n");
    str_len=strlen(test_string);//计算写入长度
    //通过控制axi_bram_ctrl_0像双端口ram写入test_string
    for( num=0; num<str_len; num++ )
    {
        XBram_WriteReg(BRAM_CTRL_0_BASE , num*4, test_string[num]);
    }

    //通过控制axi_bram_ctrl_1读出写入的数据
   for( num=0; num<str_len; num++ )
   {
       str_rev = XBram_ReadReg( BRAM_CTRL_1_BASE, num*4);
       xil_printf( "ADDR:%x DAT:%c\n",XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR + num*4,str_rev);
   }

    xil_printf("test over!\n");

    return 0;
}

调试如下

pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档

地址高位是42开头的文章来源地址https://www.toymoban.com/news/detail-787400.html

pl写bram,ps读bram,FPGA,fpga开发,Powered by 金山文档

到了这里,关于PS和PL使用BRAM进行数据交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ZYNQ7000 PL与PS交互(一): PL到PS中断的使用与实现

    ZYNQ7000 PL与PS交互(一): PL到PS中断的使用与实现

    翻译以xilinx用户手册ug585,知道ZYNQ7000有几类中断即可。 PS基于ARM架构,使用了两个Cortex-A9处理器和GIC PL390中断控制器。中断结构与CPU密切相关,并接收来自IO外设和可编程单元PL的中断请求。 本章主要信息: 私有、共享和软件中断。 GIC功能介绍 中断优先级和处理 1.1.1 Zynq 中

    2024年04月15日
    浏览(8)
  • FPGA----UltraScale+系列的PS侧与PL侧通过AXI-HP交互(全网唯一最详)附带AXI4协议校验IP使用方法

    FPGA----UltraScale+系列的PS侧与PL侧通过AXI-HP交互(全网唯一最详)附带AXI4协议校验IP使用方法

    1、之前写过一篇关于ZYNQ系列通用的PS侧与PL侧通过AXI-HP通道的文档,下面是链接。 FPGA----ZCU106基于axi-hp通道的pl与ps数据交互(全网唯一最详)_zcu106调试_发光的沙子的博客-CSDN博客 大家好,今天给大家带来的内容是,基于AXI4协议的采用AXI-HP通道完成PL侧数据发送至PS侧(PS侧数

    2024年02月13日
    浏览(5)
  • ZYNQ PS与PL通过AXI-LITE连接,在Linux下直接读写PL的物理地址,实现PS与PL的交互

    ZYNQ PS与PL通过AXI-LITE连接,在Linux下直接读写PL的物理地址,实现PS与PL的交互

    ZYNQ开发,如果PL与PS的交互方式仅为AXI-Lite总线的话,在Linux下可以通过直接访问PL的寄存器物理地址来实现PS-PL的数据交互。 测试代码的PC开发平台为Ubuntu18.04,QT5。 ZYNQ为7020,并移植了Linux系统和Ubuntu16.04的最小系统。 将PL的程序封装成IP核,通过AXI-LITE与PS连接,对外是18个寄

    2024年04月10日
    浏览(10)
  • FPGA的PS还有什么PL是什么意思

    FPGA的PS还有什么PL是什么意思

    在FPGA中 PS: 处理系统 (Processing System) :就是与FPGA无关的ARM的SOC的部分。 PL: 可编程逻辑 (Progarmmable Logic) : 就是FPGA部分。之所以叫PL,而不是叫FPGA,用英文简写可能便于理解区分,或者显得比较专业吧(/滑稽脸) 对于ZYNQ,,就是两大功能块,PS 部分和 PL部分, ARM的SOC部分,

    2024年02月11日
    浏览(6)
  • PL读不到PS写入DDR的数据

    1、背景 平台:ZYNQ7020 CPU0的设置默认,CPU1工程bsp设置 -DUSE_AMP=1 ,PL以AXI接口访问DDR。 CPU1往DDR中写数据后用 Xil_DCacheFlushRange 函数将数据回写到DDR,但是随后PL在DDR中读不到相关数据。 把CPU1中的相关代码放到CPU0中运行,PL能读到DDR中的相关数据。 2、原因分析 CPU1工程bsp中设置

    2024年02月06日
    浏览(9)
  • zynq 使用AXI_dma 传输==pl到ps,linux驱动开发,应用层处理DMA数据

    zynq 使用AXI_dma 传输==pl到ps,linux驱动开发,应用层处理DMA数据

    在使用zynq输出处理时,会使用到pl和ps的数据传输,可供使用的方案有多种,由于我们的数据量较大打算,因此使用用以下两种方案处理: 1.使用pl直接写ddr3, 2.使用dma, 本次详细介绍使用axi_dma如何将pl的数据在linux应用层接收数据并处理,以及遇到的问题 fpga工程,我们使用

    2024年02月03日
    浏览(7)
  • ZYNQ通过AXI DMA实现PL发送连续大量数据到PS DDR

    ZYNQ通过AXI DMA实现PL发送连续大量数据到PS DDR

    硬件:ZYNQ7100 软件:Vivado 2017.4、Xilinx SDK 2017.4   ZYNQ PL 和 PS 的通信方式有 AXI GPIO、BRAM、DDR等。对于数据量较少、地址不连续、长度规则的情况,BRAM 比较适用。而对于传输速度要求高、数据量大、地址连续的情况,比如 ADC,可以通过 AXI DMA 来完成。 1、硬件设计 1.1 ZYNQ7

    2024年02月04日
    浏览(11)
  • PS和PL共享DDR

    PS和PL共享DDR

    本文中,在SDK中先采用helloworld模板来检查整个工程是否创建成功,得到正确的结果后,再加入PS操作DDR的代码(用的是ZCU102)。本文主要描述整个设计的流程,过程容易忘记,所以记录,也方便自己之后查看,如有不对,请各位提出宝贵建议! 1.创建工程 指定工程名和存放位

    2023年04月08日
    浏览(10)
  • zynq pl访问ps ddr

    zynq pl访问ps ddr

    在 xilinx mpsoc 平台上进行 Linux 软件开发,不可避免的会涉及到 PS 与 PL 之间的数据交互。这个 系列 介绍一种 基于 DDR 的信息交互方式 。 这篇文章首先介绍下 如何从系统中“偷”内存 。 交互流程: PS 写入数据到 DDR 中,使用中断通知 PL,PL 从协商好的 DDR 中读取数据; PL 写

    2024年02月01日
    浏览(7)
  • zynq板上PS端给PL端复位

    最近接触zynq板-zcu104,记录一些实验笔记。 LED闪烁 在vivado中新建一个工程,命名为led-test。添加top.v文件。 其中,top模块接入zcu104开发板的clk_300_p/n信号,通过clock wizard转换为单端始终clock,接入到led闪烁模块led.v 其中,led模块通过一个24bit的计数器,经过相等间隔厚,让led灯

    2024年02月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包