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

news2024/11/25 18:46:36

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1090486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据分析/开发项目实战班

大数据分析/开发项目实战班采用新型教学模式,让学生“学有所用,学能所用”,角色演练开展项目式教学,将产业项目与教学知识结合,突出学生的主体性,打破传统教学壁垒。 大数据分析/开发项目实战班介绍&#x…

ubuntu下yolov6 tensorrt模型部署

文章目录 ubuntu下yolov6 tensorrt模型部署一、Ubuntu18.04环境配置1.1 安装工具链和opencv1.2 安装Nvidia相关库1.2.1 安装Nvidia显卡驱动1.2.2 安装 cuda11.31.2.3 安装 cudnn8.21.2.4 下载 tensorrt8.4.2.41.2.5 下载仓库TensorRT-Alpha并设置 二、从yolov6源码中导出onnx文…

Linux高性能服务器编程 学习笔记 第十三章 多线程编程

早期Linux不支持线程,直到1996年,Xavier Leroy等人开发出第一个基本符合POSIX标准的线程库LinuxThreads,但LinuxThreads效率低且问题多,自内核2.6开始,Linux才开始提供内核级的线程支持,并有两个组织致力于…

【灵动 Mini-G0001开发板】+Keil5开发环境搭建+ST-Link/V2程序下载和仿真+4颗LED100ms闪烁。

我们拿到手里的是【灵动 Mini-G0001开发板】 如下图 我们去官网下载开发板对应资料MM32G0001官网 我们需要下载Mini—G0001开发板的库函数与例程(第一手学习资料)Keil支持包, PCB文件有需要的,可以自行下载。用户指南需要下载&a…

在Mission Planner上校准外置GPS罗盘

环境 windows 11 pixhawk 2.4.8 GPS M8N Mission Planner 1.3.80 前提 已经校准pixhawl自带的加速度计 根据提示,转动pixhawk,按空格键进行下一个步骤,成功后提示success 校准GPS罗盘 pixhawk飞控支持使用双罗盘(也就是内置…

【LeetCode热题100】--394.字符串解码

394.字符串解码 思路: 定义两个栈,用于存放数字和字符如果是遇到’[,则数字和字母进栈如果遇到’],则出栈,并拼接成一个字符串注意考虑多个数字在一起的情况 class Solution {public String decodeString(String s) …

MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队

背景 在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-index merge(索引合并)导致数据库死锁。 定义 index merge(索引合并):该数据库查询优化的一种技术&#xff0…

每日leetcode_775全局倒置与局部倒置

每日leetcode_755全局倒置与局部倒置 记录自己的成长,加油。 题目出处:775. 全局倒置与局部倒置 - 力扣(LeetCode) 题目 题目简要: 全局倒置:左边的大于右边的(不需要紧挨着) 局部…

Chrome插件精选 — 网页截图插件

Chrome实现同一功能的插件往往有多款产品,逐一去安装试用耗时又费力,在此为某一类型插件记录下比较好用的一款或几款,便于节省尝试的时间和精力。 捕捉网页截图 - FireShot 下载地址 (访问密码: 8276) Fireshot是一款浏览器插件&#xff0c…

2023.09全国青少年软件编程(scratch图形化)等级考试试卷(一级)

2023年9月全国青少年软件编程 scratch图形化 等级考试试卷(一级) 第 1 题 下列哪项内容是不可以修改的?( ) A:角色名称 B:造型名称 C:舞台名称 D:背景名称 第 2 题…

11款新编程工具!

导读作为一名开发人员,对于工具的需求是一直都有的。工具使得开发人员只需要关注那些重要的事情就可以了,因此工作也更有效率,生活也更轻松了。对于开发人员来说,由于很难找到更好的替代方案,因此只能一直使用那些熟悉…

Oracle update 关联更新优化方法

关联更新顾名思义就是指,更新的数据从关联的表中获取并update到目标表。并且该SQL将会是一个天然的嵌套循环。有两种优化思路解决: 1、PLSQL 根据rowid更新 是否需要加order by rowid的考量: 如果buffer cache足够大,能够放得下要…

PyTorch 深度学习之卷积神经网络(基础篇)Basic CNN(九)

0. Revision: Fully connected Neural Network 全连接 1. Convolution Neural Network 保留空间信息 1.1 Convolution Convolution-Single Input Channel 单通道 数乘 3 input Channels 3通道 N input Channels N input Channels and M output channel M 个卷积核 1.2 conv…

jmeter性能测试过程中遇到的问题及解决方法

问题1 如何在大并发测试下,让登录或者后续接口只执行一次? 分析 这个问题网上的答案其实很多,但是大多不靠谱。 比如推荐使用仅一次控制器,但是仅一次控制器对线程组无效;比如推荐跨线程组调用,但是这样…

让ChatGPT等模型学会自主思考!开创性技术“自主认知”框架

ChatGPT、百度文心一言、Bard等大语言模型展现出了超强的创造能力,加速了生成式AI的应用进程。但AI模型只能基于训练数据执行各种任务,无法像人类一样利用生活知识、过往经验用于复杂的推理和决策。 例如,在玩游戏时,人类可以利用…

mysql中的几种排名函数

mysql中的排名函数 mysql里面的排名函数&#xff0c;涉及有以下几个&#xff1a; rank()、dense_rank()、row_number() 1、rank() 函数 RANK() OVER (PARTITION BY <expression>[{,<expression>...}]ORDER BY <expression> [ASC|DESC], [{,<expression…

如何用 ChatGPT 的 Advanced Data Analysis 帮你采集数据?

&#xff08;注&#xff1a;本文为小报童精选文章&#xff0c;已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 想采集网页数据却不会写 Python 爬虫&#xff1f;不会就不会吧&#xff0c;ChatGPT 会就可以了 &#x1f602; 问题描述 朋友最近遇到了一点儿…

thinkphp6 获取url路径中的应用名、控制器名、操作名

如果使用了多应用模式&#xff0c;可以通过下面的方法来获取当前应用 app(http)->getName(); 获取当前控制器 Request::controller(); 获取当前操作 Request::action(); 请求信息 ThinkPHP6.0完全开发手册 看云 ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上…

Ansible基础及模块

Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作&#xff0c;使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作 Ansible是基于模块工作的&#xff0c;它…

JZ64 求1+2+3+...+n

JZ64 求123…n //实例化对象时会自动调用构造函数 class Solution { public:class Sum{public://每调用一次构造函数 _sum加等一个数Sum(){_sum _i;_i;}};//Solution类的成员函数int Sum_Solution(int n){_i 1;_sum 0;//数n是几 我就构造几个对象//构造几个对象就会调用…