目录

前言

一、原理

二、c(app) 工程创建


前言

MPsoc 最大的特点是集成了4个A53和2个R5,只有异构通信才能发挥他的最大威力。

本文参照其他文档,实现了裸跑的A53和R5 IPI通信。


提示:以下是本篇文章正文内容,下面案例可供参考

一、原理

1.UltraScale+ MPSoC 的ipi通道一共有11条,其中PMU_0~PMU3这4条固定分配给PMU,其余7条可以任意配置给APR(四个A53共用一个通道),RPU,PL,默认配置见上图。

2.IPI通信其实是通道和通道间的通信,每个通道都有自己的GIC号码,某个通道可以和其他通道通信也可以和自己通信。

3.processor通过绑定通道(如默认的APU绑定chl0,RPU0绑定chl1),利用通道间的通信实现processor间通信。

3.1 **注意不仅仅是同一个GIC间的通信**,在PL-390和GIC-400间也可以通信,这对于SGI是无法实现的。

3.2 首先在vivado中配置processor与通道的绑定关系

3.3 vitis导入硬件后会自动生成库文件,其中“xipipsu_g.c”中描述了该整个硬件系统一共启用了多少通道,以及该processor一共绑定了多少通道。

3.4 这里有必要说明下一“XIpiPsu_Config”结构体。

DeviceID:每个processor绑定的每个通道都有一个ID,代码中可根据这个ID查找该通道的所以信息,ID与硬件无关仅仅是一个标识。

BaseAddress:每个通道对应6个Interrupt Register,该值为这组寄存器的首地址。

BitMask:个人感觉每个通道对应一个Mask号码,表明该processor占用(绑定了)该通道。

BufferIndex:每个通道在XPPU中都对应一组IPI Message Buffers,代码可以根据源和目标通道的该序号找到对应buffer首地址,然后根据源消息类型对应到具体的32Byte。详情见“static u32* XIpiPsu_GetBufferAddress()”

IntId:该通道对应的GIC ID号。

TargetCount:该系统中可通信的通道总数。

TargetList:XIpiPsu_Target

Mask:目标通高的Mask码

BufferIndex:目标通高的IPI Message Buffers序号

3.5 函数“XIpiPsu_LookupConfig(DeviceID)”

轮循XIpiPsu_ConfigTable,根据DeviceID找到该通道对应的XIpiPsu_Config结构体,返回结构体指针。

3.6 函数“XScuGic_Connect()”

绑定GIC中断相应函数

3.7 函数“XScuGic_Enable()”

在GIC_400文档中详细说明

3.8 函数“XIpiPsu_WriteMessage()”

这里重点说一下XPPU中 IPI Message Buffers 是如何分布的

         从上图可以看出Buffer是双工的,左侧的512Byte是通道0与其他通道通信的buf分布,这个buf为每个通道分配了request和response buf各32Byte,例如向通道1发请求信息是将msg存放在0xff99_0040,应答通道1则将回复信息填入0xff99_0060;同理右侧的512Byte是通道1与其他通道通信的buf分布,例如向通道0发请求信息是将msg存放在0xff99_0200,应答通道0则将回复信息填入0xff99_0220;

3.9 函数“XStatus XIpiPsu_TriggerIpi(XIpiPsu *InstancePtr, u32 DestCpuMask)”

这里重点说一下 Interrupt Register(UG1085中说的太不明确了,看了源码才搞明白是怎么回事)

         bit0 -> channel 0 mask bit
        bit8 -> channle 1 mask bit
        bit9 -> channle 2 mask bit
        bit16-> channle 3 mask bit
        bit17-> channle 4 mask bit
        bit18-> channle 5 mask bit
        bit19-> channle 6 mask bit
        bit24-> channle 7 mask bit
        bit25-> channle 8 mask bit
        bit26-> channle 9 mask bit
        bit27-> channle 10 mask bit
这6个寄存器分为两组send和receive

* send - TRIG,只支持写操作,向该寄存器写入相应通道的mask位可以触发IPI的IRQ(IRQ routed to RPU and APU GICs),从而中断相应的处理器。

* send - OBS,只支持读操作,用于观测接收方的中断状态

* receive - ISR,读取发送方mask bit 确认是哪个通道发来的数据,写入相应的mask bit清除中断

* receive - IMR,IRQ not generated if status bit is asserted.

* receive - IER,Set IMR = 1

* receive - IDR,Set IMR = 0

二、c(app) 工程创建

* On a terminal window,

change directory to

* <working_dir>/src/tcl

* At the command prompt enter:

* xsct create_vitis.tcl

Zynq UltraScale+ MPSoC IPI 通信相关推荐

  1. ZYNQ UltraScale+ MPSoC OpenAMP 2018.3

    ZYNQ OpenAMP 2018.3 ​ 本文只是对 UG1186 "入门指南"的补充和阐明(适用于 Zynq UltraScale+ MPSoC.) 目录 ZYNQ OpenA ...

  2. Zynq UltraScale+ MPSoC 在linux系统运行R5 裸机程序 remoteproc - R5

    参考文章: ultrascale学习笔记之remoteproc启动R5 ZYNQ UltraScale+ MPSoC Linux + ThreadX AMP玩法 Zynq UltraScale+ MP ...

  3. 【ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介绍

    原创声明: 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处. 适用于板卡型号: AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E ...

  4. Zynq UltraScale + MPSoC示例设计 - 在64位Linux上执行32位应用程序

    目录 官方说明连接:https://china.xilinx.com/support/answers/66636.html 描述 解决方案 官方说明连接:https://china.xilinx.co ...

  5. zynq+linux固化程序,如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计

    原标题:如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计 简介 作者: Alex He (何晔), 赛灵思高级嵌入式应用工程师 这里的 UIO 即 Userspa ...

  6. 米尔电子Zynq UltraScale MPSoC核心板资料介绍

    米尔Zynq UltraScale MPSoC核心板(MYC-CZU3EG)是采用Xilinx新一代Zynq处理器.该核心板是业界最小尺寸Zynq UltraScale 核心板,采用16纳米制程,相比 ...

  7. ultrascale和arm区别_[原创] Avnet Zynq UltraScale+MPSoC系列Ultra96开发方案

    Avnet公司的Ultra96 开发板是基于ARM的Xilinx ZynqUltraScale+™ MPSoC系列产品的满足Linaro 96板指标的开发板,设计者可创建或评估Zynq处理器子系统(P ...

  8. 米尔电子zynq ultrascale+ mpsoc底板外设资源清单分享

    米尔电子推出的国内首款zynq ultrascale+ mpsoc平台核心板(及开发板):MYC-CZU3EG吸引了人工智能.工业控制.嵌入式视觉.ADAS.算法加速.云计算.有线/无线通信等应用行业 ...

  9. Qt成功运行Zynq UltraScale+MPSoC平台上

    Qt交叉编译后aarch64-linux-gnu-成功运行在ZynqUltraScale+MPSoC上-Linux文档类资源-CSDN下载Qt交叉编译后aarch64-linux-gnu-成功运行在Z ...

最新文章

  1. 虚拟键码和扫描码的区别
  2. 惠普宣布WebOS平板和手机,透露电脑计划
  3. 如何打开设计思路,避免不断改稿?只需提前做好这一步
  4. 电脑无法检查计算机更新,赶紧检测下!新买的电脑不能升级Win 11?问题终于找到了...
  5. 入参为字符串用日期对象接收
  6. jQuery DOM操作之查找结点
  7. 你是否有过疑问:为啥损失函数很多用的都是交叉熵(cross entropy)?
  8. 震网病毒这类“精确制导的网络导弹“与传统的网络攻击相比较,有哪些新的特点?
  9. 【微信小程序】针对测试号获取openid报错40125错误的解决方案
  10. PS RGB通道抠图方法
  11. 7-5 换硬币 (20 分)
  12. PS一键飞溅碎片特效的插件
  13. Windows10+MinGW+Codelite完成C++编写平台安装
  14. python骰子游戏分析_两个骰子的Python概率骰子游戏
  15. android教你打造独一无二的图片加载框架
  16. 前美团COO干嘉伟:好的管理,打得、骂得,又哄得
  17. 华尔街日报:郭台铭的“紫禁城”
  18. Java获取12306余票信息(一)
  19. 使用ES文件浏览器通过Android设备访问Win7电脑上的共享文件
  20. 判断图片是否与选择前一致(配合图片选择器使用)

热门文章

  1. TFS30063 您没有权限
  2. Linux系统安装oracle客户端步骤详解
  3. 《2008胡润IT富豪榜》
  4. 指尖轻舞桌面:Slide On Desk - 基本功能与操作方法
  5. 安卓 linux服务器文件夹,安卓手机目录各个文件夹
  6. 分割字符串(每个子串的ASCII码值的和均为水仙花数)
  7. html反编译pug,学html5不得不说的html5shiv.js和pug
  8. vue中使用常用正则表达式
  9. 百分点10周年乔迁新址 数据智能服务更上一层楼
  10. redis之持久化机制