【【萌新的SOC学习之基于BRAM的PS和PL数据交互实验】】

萌新的SOC学习之基于BRAM的PS和PL数据交互实验

基于BRAM的PS和PL的数据交互实验

先介绍 AXI BRAM IP核控制器的简介

AXI BRAM ip核 是xilinx提供的一个软核 这个ip核被设计成 AXI的一个从机接口 用于AXI互联的集成

系统的主设备和本地的RAM进行通信 (我们可以通过这个IP核 和本地的RAM进行通信)

这个IP核支持单次或是突发的传输

概述部分 :

AXI BRAM的ip核 可以配置成单端口或是双端口 和 BRAM进行通信 通过的是AXI4或是AXI4_Lite 接口

AXI BRAM 也支持 ECC 数据纠错功能 这个功能我们平时很少会去用

我们来看系统框图

也可以将左边配置成AXI4接口 这样它读写的传输速度会快于 AXI4_lite

实验任务 : 本章的实验任务是 PS 将串口接收到的数据写入 BRAM,然后从 BRAM 中读出数据,并通过串口打印出来;与此同时,PL 从 BRAM 中同样读出数据,并通过 ILA 来观察读出的数据与串口打印的数据是否一致。

系统框图

我们看的PS端的UART这就是 我们利用串口来进行打印的部分

我们需要在PL端添加一个BRAM的ip核

我们还需要添加一个AXI BRAM Controller (AXI BRAM控制器 这个控制器完成对BRAM的读写操作

这个控制器是 PS端添加的 PS端正是 通过了这样的一个控制器才完成了对BRAM的读写操作的

而我们的PL是怎么从BRAM读出数据呢 我们需要添加一个自定义的IP核 pl_bram_rd这个IP核的目的就是从BRAM中读出数据

究竟是哪个地址读数据 读多少 都是根据我们AXI4 接口来控制的

开始搭建

搭建完成的框图

我们观察系统框图以及自己创建的IP核我们会发现

对于这个自定义的IP核 我们添加了一个与BRAM交互的RAM端口

我们的这个RAM端口,可以传输单字节或者多字节的数据

因为RAM端写数据是32位的( 31_24 , 23_16 , 15_8 , 7_0 )

我们的写控制信号是4bit 正好控制 这32位的四个数据

output wire ram_clk , //RAM时钟

input wire 31:0 ram_rd_data, //RAM中读出的数据

output wire ram_en , //RAM使能信号

output wire 31:0 ram_addr , //RAM地址

output wire 3:0 ram_we , //RAM读写控制信号

output wire 31:0 ram_wr_data, //RAM写数据

output wire ram_rst , //RAM复位信号,高电平有效

自定义IP之后封装 再添加 进行连接

接下来我们来编写c代码

c代码目的是先来接收串口的数据, 接收到数据后 把数据写进BRAM内, 写完之后再把它读出来

我们可以通过串口,来比较写入的和打印的值是否一致

同时我们也要对自定义的ip核进行操作 确定什么时候读 读什么

我们接下来就用的这两个对BRAM进行读写

第一个数据是basedaaress 基地址 第二个数据是相对于base address 的偏移量 第三个是data 也就是我们真正需要写入的数据了

对于我们自定义的ip核 有两个代码 -两个功能

朝自定义IP核 写数据 朝自定义IP核中 去读数据

相关推荐
zyf1044163 小时前
暑期实践日志 Day48:复盘大纲与知识点对照表,系统汇总整理成果
学习·计算机网络·剪辑·暑期实践·课题任务
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(61):CFGM——用粗到细的记忆落地贯通经验采集、知识蒸馏与在线纠错
论文阅读·人工智能·学习·开源·github
边境悍匪4 小时前
蜗牛学苑 Java 智能体学习 Day33|AOP 面向切面编程、日志技术思维导图复盘
学习
我是你的开心果7785 小时前
ai全栈软件开发day21(第四阶段喽)
人工智能·学习
网络工程小王5 小时前
【LLM开发实验】FastAPI 学习笔记
数据库·笔记·学习·mysql·fastapi
醉舞经阁半卷书15 小时前
量化交易基础之python库学习
学习
youm20036 小时前
【学习笔记】认识NoSQL——非关系型数据库
笔记·学习·nosql
传奇开心果编程6 小时前
【Rust入门知识点学与练】第11课:HashMap 键值对集合
开发语言·学习·rust
约克36 小时前
商水约克中央空调商用工程的行业洞察与落地要点
学习
王的宝库7 小时前
Linux 性能优化入门
linux·学习