0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多核异构中A核与M核通信过程

832065824 来源: 汽车电子嵌入式 2023-10-31 11:09 次阅读

前言

目前域控项目有的采用S32G这类多核异构的芯片,转载一篇分析下多核异构中A核与M核通信过程的文章。

正文

一、 硬件层通信实现原理

二、驱动层Virtio下RPMsg通信实现

三、应用层双核通信实现方式

现在越来越多的产品具有M core和A core的异构架构,既能达到M核的实时要求,又能满足A核的生态和算力。比如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。虽然这些处理器品牌及性能有所不同,但多核通信原理基本一致,都是基于寄存器和中断传递消息,基于共享内存传输数据。

7841ad42-7799-11ee-939d-92fbcf53809c.png

通信过程整体架构说明

一、 硬件层通信实现原理

通过物理内存DDR分配,将硬件层分为了两部分:TXVring Buffer(发送虚拟环状缓冲区)和RXVring Buffer(接收虚拟环状缓冲区);其中M核从TXVring区发送数据,从RXVring区读取接收数据,A核反之。

处理器支持消息传递单元(MessagingUnit,简称MU)功能模块,通过MU传递消息进行通信和协调,M核和A核之间通过寄存器中断的方式传递命令,最多支持4组MU双向传递消息,既可通过中断告知对方数据传递的状态,也可发送最多4字节数据,还可在低功耗模式下唤醒对方,是保证双核通信实时性的重要手段。

下面看下完成了1次从CoreA向CoreB 传递消息的具体过程:

7859f852-7799-11ee-939d-92fbcf53809c.png

寄存器输入输出通信模型

(1)CoreA写入数据;
(2)MU将Tx 空位清0,Rx满位置1;
(3)产生接收中断请求,通知CoreB接收状态寄存器中的接收器满,可以读取数据;
(4)CoreB响应中断,读取数据;
(5)CoreB读完数据后,MU将Rx满位清0,Tx空位置1;
(6)状态寄存器向CoreA生成发送中断请求,告知CoreB读完数据,发送寄存器空。

二、驱动层Virtio下RPMsg通信实现

virtio 是一个通用的 I/O 虚拟化框架,位于设备之上的抽象层,负责前后端之间的通知机制和控制流程,为异构多核间数据通信提供了层的实现。hypervisor 通过他模拟出一系列的虚拟化设备,例如:virtio-net、virtio-blk等,并使得这些设备在虚拟机内部通过 api 调用的方式变得可用。它包含4个部分:前端驱动、后端驱动、 vring 及通信间统一的接口。与其他的模拟 I/O 方式对比, virtio 减少了虚拟机的退出和数据拷贝,能够极大地提高 I/O 性能。计算机中存在不同的总线标准,而 virtio 采用的是 pci 总线(当然也可以用其他总线来实现)。每一个 virtio 设备就是一个 pci 设备。

78661574-7799-11ee-939d-92fbcf53809c.png

virtio前端驱动

virtio 前端驱动位于 Linux 内核中,运行在虚拟机 VM,针对不同类型的设备有不同类型的驱动程序,包括virtio-net、virtio-blk、virtio-pci等,这些驱动程序与后端驱动交互的接口都是统一的。

virtio层

virtio层实现虚拟队列接口,作为前后端通信的桥梁,不同类型的设备使用的虚拟队列数量不同,例如 virtio-net 使用两个虚拟队列,一个用于接收,一个用于发送;virtio-blk 驱动仅使用一个虚拟队列。虚拟队列实际上被实现为跨越客户机操作系统和 hypervisor 的衔接点,可以通过任意方式实现,前提是客户机操作系统和 virtio 后端程序都遵循一定的标准,以相互匹配的方式实现它。

virtio-ring层

virtio-ring 是虚拟队列的具体实现,其中实现了环形缓冲区(ring buffer),用于保存前端驱动和后端处理程序执行的信息,并且它可以一次性保存前端驱动的多次I/O请求,并且交由后端驱动去批量处理,最后实际调用宿主机中设备驱动实现物理上的I/O操作,这样做就可以根据约定实现批量处理而不是客户机中每次I/O请求都需要处理一次,从而提高客户机与 hypervisor 信息交换的效率。

virtio后端驱动

virtio 后端驱动位于 qemu ,后端设备承担的主体功能分为两部分:

virtio后端设备的模拟;

依据virtio协议处理来自虚拟机端发送的请求。

在 QEMU 的实现中, virtio 设备是 QEMU 为虚拟机模拟的 PCI 设备,遵循 PCI-SIG 定义的 PCI 规范,具有配置空间、中断配置等功能;virtio 后端驱动运行在宿主机中,用于实现 virtio 后端操作硬件设备,例如向内核协议栈发送一个数据包完成虚拟机对网络数据的操作。

RPMsg消息框架是Linux系统基于Virtio缓存队列实现的主处理核和协处理核间进行消息通信的框架,当客户端驱动需要发送消息时,RPMsg会把消息封装成Virtio缓存并添加到缓存队列中以完成消息的发送,当消息总线接收到协处理器送到的消息时也会合理地派送给客户驱动程序进行处理。

在驱动层,对A核,Linux采用RPMsg框架+Virtio驱动模型,将RPMsg封装为了tty文件供应用层调用;在M核,将Virtio移植,并使用简化版的RPMsg,因为涉及到互斥锁和信号量,最终使用FreeRTOS完成过程的封装,流程框图如下方所示。

787ade1e-7799-11ee-939d-92fbcf53809c.png

主处理核与协处理核数据传递流程图

(1)Core0向Core1发送数据,通过rpmsg_send函数将数据打包至Virtioavail链表区;
(2)在avail链表寻找共享内存中空闲缓存,将数据置于共享内存中;
(3)通过中断通知Core1数据到来,共享内存由avail链表区变至used区;
(4)Core1收到中断,触发rpmsg的接收回调函数,从used区获取数据所在的共享内存的物理地址,完成数据接收;
(5)通过中断通知Core0数据接收完成,共享内存缓存由used区变为avail区,供下次传输使用。

三、应用层双核通信实现方式

在应用层,对A核可使用open、write和read函数对 /dev下设备文件进行调用;对M核,可使用rpmsg_lite_remote_init、rpmsg_lite_send和rpmsg_queue_recv函数进行调用,不做重点阐述。从整体架构上看,关系如下:

787f3982-7799-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18286

    浏览量

    222167
  • 芯片
    +关注

    关注

    447

    文章

    47797

    浏览量

    409164
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134400
  • 瑞萨
    +关注

    关注

    32

    文章

    22214

    浏览量

    84915
  • 多核异构
    +关注

    关注

    0

    文章

    13

    浏览量

    5422

原文标题:A核与M核异构通信过程解析

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    多核之间用共享全局变量通信的问题,其中一个运行sys/bios 另外几个裸机

    我打算用共享全局变量进行多核通信,其中0运行bios,其余几个裸奔,几个用不同的镜像,但是bios情况下是默认使能了cache缓存的,
    发表于 06-21 05:00

    6678 多核导航器 通信

    您好!        我最近使用6678的多核导航器进行通信,有些地方不明白,想问下各位专家。      我是这么做的,我通过CIC把48事件映射到中断4上,DSP事件48是高优先级队列
    发表于 06-21 06:54

    DM8127启动过程中M3死机

    hi,你好:DM8127是多核包括A8,两个M3和一个DSP,四个核心。我有几块开发板,其中一块开发板总是在加载M3的时候程序会死机。问题
    发表于 04-15 09:12

    创龙带您解密TI、Xilinx异构多核SoC处理器间通讯

    促进进程间通信的模块。通信包括消息传递、流和链接列表。这些模块提供的服务和功能可用于异构多核SoC处理器ARM和DSP核心之间的
    发表于 09-08 09:39

    通信(IPC)解决方案

    ;Processor 1:从Share Memory的指定地址读取消息;Processor 1:处理接收到的消息。总结核间通信广泛应用于TI的多核异构处理器,本文介绍了TI
    发表于 11-03 07:26

    MPU进化,多核异构处理器有多强?

    秒即可传输完成,数据传输效率提升数十倍!同时还避免了串行总线易受EMC干扰的问题,提高了数据传输稳定性,简化了应用编程,可满足用户快速开发的需求。以上就是关于多核异构处理器A
    发表于 11-21 09:45

    A+M通信过程解析

    数据传输效率低,这将严重影响产品的性能;而如果采用高速并口,则占用管脚多,硬件成本将会增加。为解决这一痛点,各大芯片公司陆续推出了兼具AM
    发表于 11-23 15:09

    【玩转多核异构】处理器对共享外设和资源的调配方法

    多核异构CPU,多个内核就如同多个大脑,而外设和内存等资源就如同手足,那么多个大脑该如何控制手足才能保证它们正常有序地运行呢?以NXP i.MX8M Plus处理器的
    发表于 02-07 15:46

    多核异构-双高速率CAN-FD评测

    forlinx_m7_tcm_firmware.bin;放到**/run/media/mmcblk2p1/**目录下。详细操作可看上篇文章《【玩转多核异构M
    发表于 02-17 15:37

    多核异构-M程序的启动、编写和仿真

    文章,小编就将以飞凌嵌入式的OKMX8MP-C开发板为例,为大家介绍多核异构处理器M程序的启动配置、程序编写和实时仿真的过程。飞凌嵌入式O
    发表于 02-21 16:08

    多核异构处理器对共享外设和资源的调配方法

    多核异构CPU,多个内核就如同多个大脑,而外设和内存等资源就如同手足,那么多个大脑该如何控制手足才能保证它们正常有序地运行呢?以NXP i.MX8M Plus处理器的
    发表于 03-10 11:54

    S32G274有没有MA共享的PFE相关的例程或文档?

    使用hif2与PFE模块通信。1、看文档说多核PFE中有Main driver和Secondary driver,但是PFE的MCAL没有相关配置。如何配置二级驱动程序? 2、M
    发表于 03-24 07:48

    Arm+RISC-V双异构前景如何?

    2021航顺HK32MCU新品发布会上,航顺介绍了自主研发的双异构MCU-HK32U1xx9系列产品。Arm Cortex-M3大负责主运算;RISC-V小
    发表于 04-14 10:06

    专用M4F+四A53,异构多核AM62x让工业控制“更实时、更安全”

    Cortex-M4F + Cortex-A53异构多核给工业控制带来何种意义?创龙科技SOM-TL62x工业核心板搭载TI AM62x最新处理器,因其Cortex-
    发表于 06-15 17:18

    专用R5F+双A53,异构多核AM64x让工控“更实时”

    Cortex-R5F + Cortex-A53异构多核, 给工控带来何种意义? 创龙科技SOM-TL64x工业核心板搭载TI AM64x最新工业处理器,因其CortexR5F + 双
    发表于 08-23 15:34