【FPGA开发】ZYNQ中PS与PL交互操作总结、原理浅析、仿真操作

文章目录

  • PL与PS交互综述
  • 交互端口性能&特点(选择方案的凭据)
    • GPIO-AXI_GP
    • DMA-DMAC
    • HP-AXI_HP
    • ACP-AXI_ACP
  • 数据交互实验
    • GP通过BRAM
      • PS为主机,读写BRAM
      • PL作为主机,读写BRAM
    • DMA方式交互

PL与PS交互综述

网络上关于PS PL交互的教程非常多,无论是做开发板的机构出教程还是个人博客。但是该部分内容看起来较为分散,大概一搜,有各种各样的情景:PS和PL谁做主机?需要交互的数据有什么特性?使用哪个总线?不同的场景选用的交互方式也是不尽相同。

那么在进行知识信息筛选、总结的时候,怎样才能尽快过滤冗余信息,提取自己所需的核心内容呢?本文旨在从全局认识PS与PL的数据交互方法,同时也进行一些具体的实操,既对全局有认识,又不钻牛角尖。

图1-1来自UG585,展示了ZYNQ的系统框架,清晰明了,信息密度大。
在这里插入图片描述

PS部分被单独框起来,和PL部分泾渭分明,从左往右看处于PS PL交界处的结构:

  • XADC:内置的ADC,和数据交互没关系。

  • GPIO:注意总线颜色是AXI 32bit总线,PS和PL之间,共4个GP接口,每个方向各有两个,能实现双向的数据传输,和数据交互有关。

  • DMA Sync:DMA同步,看到这是单向的自定义总线,从PL直指PS端的DMA 8 Channel,和数据传输有关。

  • IRQ:中断,PL端可以直指PS端的GIC,也就是PL端可以产生中断信号,和数据交互无关。

  • AES/SHA:可配置的加密有关的接口,和数据传输无关。

  • HP接口:4个AXI接口,PS只能作为从机,该部分直接连接到存储:DDR或者片上存储。

  • ACP:加速器一致性端口,PL端可以直接访问PS的缓存,提供缓存一致性访问,实现低延迟数据传输,和数据交互有关。

PS和PL的交互,无外乎就是用上面加粗的总线,网上一般总结的用DDR、BRAM、DMA、VDMA等,都是这些总线实现的具体手段。只要结合知识点、实操过程,反复的看图1-1,会有数据交互方面的收获的。

交互端口性能&特点(选择方案的凭据)

了解了总体框架后,可以对筛选出的,和数据交互有关的总线进行进一步学习,到这一步,就可以借鉴一些网络分享的琐碎知识点(当然也要结合UG585)

GPIO-AXI_GP

这里给出AXI_GP接口的一些特性,主要和AXI的参数有关,详见下图。
在这里插入图片描述

还有该接口的参数性能,详见下图。

该接口没有任何额外的FIFO缓冲,不像AXI_HP接口有精心设计的FIFO缓冲来提高性能和吞吐量。
这些接口仅用于一般用途,如寄存器的配置,指令等,不适用于高性能、大数据量传输。

注意!:在PL逻辑通信发生之前,必须通过LVL_SHFTR_EN使能PL电平移位器!
在这里插入图片描述

DMA-DMAC

The DMA controller (DMAC),直接内存访问控制器,是控制数据搬运的,其进行数据交互时,还需要和存储介质进行配合。

DMAC使用64bit-AXI主接口,以CPU_2x时钟速率运行,执行DMA数据传输到系统存储器和PL外设,有一个DMA指令集,控制DMA的传输。

这里搬运的内容比较多,详见下图9-3。
在这里插入图片描述

HP-AXI_HP

这四个AXI_HP接口为PL到DDR和OCM存储器提供了高带宽数据路径。

每个接口包括两个FIFO缓冲器,用于读写流量。

在这里插入图片描述
在这里插入图片描述

ACP-AXI_ACP

该接口和cache一致性有关,互联框图如下。
在这里插入图片描述

数据交互实验

GP通过BRAM

PS为主机,读写BRAM

先简单进行一个测试,实现PS往PL写10个数据,用Block Design简单搭建一个仿真环境。

这个结构暂时不需要写一行代码,验证起来十分方便。
在这里插入图片描述
自动分配了4K的地址,如下图。
在这里插入图片描述
到SDK中就可以开始最简单的操作了。

XBram_WriteReg函数是官方的API接口,可以往BRAM中写入数据。
BaseAddress是BRAM的基地址,这个是Block Design地址分配页面决定的,本文的实例中,为0x40000000

RegOffset是地址偏移量,也就是在基地址的肩膀上,偏移多少个寄存器,注意,AXI总线是字节寻址的,映射地址时,按照4字节寻址。

Data:往里写的数据,32bit无符号整型

在这里插入图片描述
掌握这一个函数,就可以进行写数据操作了,这里SDK开Debug,ILA那面也抓信号。

下图为代码抓取结果,可以看到,PS端向PL端的写操作成功,地址间隔为4,数据为0~9共10个数据。
在这里插入图片描述

下面使用类似的方法,把写进去的数据再一个个读出来。

在这里插入图片描述

使用的函数为XBram_ReadReg,在内存中看读取出的数值。

PL作为主机,读写BRAM

DMA方式交互

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文笔记】Large Brain Model (LaBraM, ICLR 2024)

Code: https://github.com/935963004/LaBraM Data: 无 目录 AbstractIntroductionMethodNeural tokenizer training:Pre-training LaBraM: ResultsExperimental setup:Pre-training result:Comparison with SOTA:Pre-t…

推荐几个 VSCode 流程图工具

Visual Studio Code(简称VSCode)是一个由微软开发的免费、开源的代码编辑器。 VSCode 发布于 2015 年,而且很快就成为开发者社区中广受欢迎的开发工具。 VSCode 可用于 Windows、macOS 和 Linux 等操作系统。 VSCode 拥有一个庞大的扩展市…

2024信创数据库TOP30之达梦DM8

近年来,中国信创产业快速崛起,其中数据库作为基础软件的重要组成部分,发挥了至关重要的作用。近日,由DBC联合CIW/CIS共同发布的“2024信创数据库TOP30”榜单正式揭晓,汇聚了国内顶尖的数据库企业及产品,成为…

将网站地址改成https地址需要哪些材料

HTTPS(安全超文本传输协议)是HTTP协议的扩展。它大大降低了个人数据(用户名、密码、银行卡号等)被拦截的风险,还有助于防止加载网站时的内容替换,包括广告替换。 在发送数据之前,信息会使用SSL…

RPC安全可靠的异常重试

当调用方调用服务提供方,由于网络抖动导致的请求失败,这个请求调用方希望执行成功。 调用方应该如何操作?catch异常再发起一次调用?显然不够优雅。这时可以考虑使用RPC框架的重试机制。 RPC框架的重试机制 RPC重试机制&#xff1…

【c++丨STL】priority_queue(优先级队列)的使用与模拟实现

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 一、priority_queue简介 二、priority_queue的使用 构造函数(constructor) empty size top push和pop swap 仿函数的使用 三、prio…

【数据结构】【线性表】【练习】删除链表倒数第n个结点

目录 申明 题目 分析题目信息 解题思路 代码解析 技巧解析:创建虚拟头结点 时间复杂度分析 思考:能否只用一趟扫描实现? 双指针 双指针解题思路 代码解析 申明 该题源自力扣题库19,文章内容(代码&#xff0c…

Ubuntu20.04升级glibc升级及降级的心路历程

想使用pip安装Isaac Sim,无奈此方法只支持 GLIBC>2.34 。使用的是Ubuntu20.04,使用 ldd --version 查看GLIBC版本,如果版本低于 2.34 则需要升级GLIBC,基于此开始了长达一天的尝试。 请注意,升级GLIBC是一个危险操作…

uniapp实现开发遇到过的问题(持续更新中....)

1. 在ios模拟器上会出现底部留白的情况 解决方案: 在manifest.json文件,找到开源码视图配置,添加如下: "app-plus" : {"safearea":{"bottom":{"offset" : "none" // 底部安…

Electron开发构建工具electron-vite(alex8088)添加VueDevTools(VitePlugin)

零、介绍 本文章的electron-vite指的是这个项目👉electron-vite仓库,electron-vite网站 本文章的VueDevTools指的是VueDevTools的Vite插件版👉https://devtools.vuejs.org/guide/vite-plugin 一、有一个用electron-vite创建的项目 略 二、…

机器学习基础05_随机森林线性回归

一、随机森林 机器学习中有一种大类叫集成学习(Ensemble Learning),集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法大致可以分为:Bagging,Boosting 和 Stacking…

Linux驱动开发(9):pinctrl子系统和gpio子系统--led实验

在前面章节,我们有过使用寄存器去编写字符设备的经历了。这种直接在驱动代码中, 通过寄存器映射来对外设进行使用的编程方式,从驱动开发者的角度可以说是灾难。 因为每当芯片的寄存器发生了改动,那么底层的驱动几乎得重写。 那么…

23种设计模式速记法

前言 在软件开发的过程中,设计模式作为解决常见问题的通用模板,一直是开发者的重要工具。尤其是在面临复杂系统架构和需求变化时,设计模式不仅能够提升代码的可复用性和扩展性,还能大大提高团队之间的协作效率。然而,…

IntelliJ+SpringBoot项目实战(十二)--设计项目多模块依赖关系和跨模块调用服务和接口

在非微服务的项目中,一个应用里有多个子系统,例如在一个电商系中,有系统管理子系统、内容管理子系统和电商管理子系统,我们想实现这样的效果: (1)只需要启动一个SpringBoot应用,不需…

MACOS开发、使用常见问题汇总

MACOS常见问题 本文记录使用macos遇到的常见问题,后面会持续更新,觉得有用的可以收藏一下。 打不开xxx.app,因为它来自身份不明的开发者解决方法(开启任何来源) 打开终端(Terminal)程序 拷贝sudo spctl --master-di…

【实用数据】上市公司数字化转型双重差分准自然实验数据(2007-2022年)

测算方式: 参考《管理评论》丁相安(2024)老师研究的做法,企业分批逐步推动自身数字化转型是一个很好的准自然实验,这符合双重差分法的使用情境。 因此,本文使用多时点双重差分模型(&#xff24…

PostgreSQL常用字符串函数与示例说明

文章目录 coalesce字符串位置(position strpos)字符串长度与大小写转换去掉空格(trim ltrim rtrim)字符串连接(concat)字符串替换简单替换(replace)替换指定位置长度(overlay)正则替换(regexp_replace) 字符串匹配字符串拆分split_part(拆分数组取指定位置的值)string_to_array…

一次需升级系统的wxpython安装(macOS M1)

WARNING: The scripts libdoc, rebot and robot are installed in /Users/用户名/Library/Python/3.8/bin which is not on PATH. 背景:想在macos安装Robot Framework ,显示pip3不是最新,更新pip3后显示不在PATH上 参看博主文章末尾 MAC系统…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程配置 二、软件代码 1、软件代码 2、usart.h 3、usart.c 4、rtc.c 三、运行与调试 1、合规的指令 2、proBuffer[0]不是 ‘#’ 或proBuffer[4]不是 ‘;’ 3、指令长度小于5 4、proBuffer[2]或proBuffer[3]至少一个不是数字 5、; 位于proBuffer…

离散数学---概率, 期望

本文根据 MIT 计算机科学离散数学课程整理(Lecture 22 ~ Lecture 24)。 1 非负整数期望性质 用 N 表示非负整数集合,R 是 N 上的随机变量,则 R 的期望可以表示成: 证明: 换一个形式,把每一列…