【【萌新的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核中 去读数据

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习