MPU进化,多核异构处理器有多强?A核与M核通信过程解析

news2025/3/10 15:07:33
内容来源:www.forlinx.com

随着市场对嵌入式设备功能需求的提高,市面上出现了集成嵌入式处理器和单片机的主控方案,以兼顾性能和效率。

在实际应用中,嵌入式处理器和单片机之间需要进行大量且频繁的数据交换,如果采用低速串行接口,则数据传输效率低,这将严重影响产品的性能;而如果采用高速并口,则占用管脚多,硬件成本将会增加。

为解决这一痛点,各大芯片公司陆续推出了兼具A核和M核的多核异构处理器,如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。虽然这些处理器的品牌及性能有所不同,但多核通信原理基本一致,都是基于寄存器和中断传递消息,基于共享内存传输数据

以配电终端产品为例,A核负责通讯和显示等人机交互任务,M核负责采样和保护等对实时性要求较高的任务,双核间交互模拟量、开关量和录波文件等多种信息,A核+M核的方案既满足了传统采样保护功能,又支持多种接口通信及新增容器等功能,符合国家电网现行配电标准。

通信过程整体架构说明

接下来小编将以NXP的i.MX8MP为例,借助飞凌OKMX8MP-C开发板分别从硬件层、驱动层、应用层介绍大致的通信实现流程以及实测效果

1. 硬件层通信实现机制

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

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

寄存器输入输出通信模型

(1)CoreA写入数据;

(2)MU将Tx 空位清0,Rx满位置1;

(3)产生接收中断请求,通知CoreB接收状态寄存器中的接收器满,可以读取数据;

(4)CoreB响应中断,读取数据;

(5)CoreB读完数据后,MU将Rx满位清0,Tx空位置1;

(6)状态寄存器向CoreA生成发送中断请求,告知CoreB读完数据,发送寄存器空。

通过以上步骤,就完成了1次从CoreA向CoreB 传递消息的过程,反之亦然。

2. 驱动层Virtio下RPMsg通信实现

Virtio是通用的IO虚拟化模型,位于设备之上的抽象层,负责前后端之间的通知机制和控制流程,为异构多核间数据通信提供了层的实现

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

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

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

(1)Core0向Core1发送数据,通过rpmsg_send函数将数据打包至Virtioavail链表区;

(2)在avail链表寻找共享内存中空闲缓存,将数据置于共享内存中;

(3)通过中断通知Core1数据到来,共享内存由avail链表区变至used区;

(4)Core1收到中断,触发rpmsg的接收回调函数,从used区获取数据所在的共享内存的物理地址,完成数据接收;

(5)通过中断通知Core0数据接收完成,共享内存缓存由used区变为avail区,供下次传输使用。

3. 应用层双核通信实现方式

在应用层,对A核可使用openwriteread函数对 /dev下设备文件进行调用;对M核,可使用rpmsg_lite_remote_initrpmsg_lite_sendrpmsg_queue_recv函数进行调用,不做重点阐述。

4. 实际使用效果

通过程序实测,M核和A核可以批量传输大数据。同样以配电产品为例——128点采样的录波文件大约为43K,若通过传统的串行总线传输方式,需要数秒才可完成传输

使用i.MX8MP的双核异构通信方案,只需要不到0.5秒即可传输完成,数据传输效率提升数十倍!同时还避免了串行总线易受EMC干扰的问题,提高了数据传输稳定性,简化了应用编程,可满足用户快速开发的需求。

以上就是多核异构处理器中A核与M核通信过程的解析,想要了解具体详细程序实例,可到【飞凌嵌入式官方微信公众号】回复关键词“程序实例”查看

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

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

相关文章

医学图像处理——DeepDrr工具CT生成DRR

医学图像处理——DeepDrr工具CT生成DRR一、DeepDrr工具介绍二、DeepDRR工具使用三、测试DeepDRR工具3.1 测试数据集3.1.1 阿里云数据3.1.2 LIDC-IDRI肺结节dicom数据集3.1.3 LIDC-IDRI肺结节dicom数据集3.2 测试代码四、总结一、DeepDrr工具介绍 它可以将CT数据模拟X射线投影生…

[附源码]SSM计算机毕业设计政府公用车辆管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

VUE全家桶 (Vue-cli、Vue-route、Vuex)学习笔记

Es6 let 是变量2.const 1. 是常量不能修改 创建的时候一定要赋值 要不报错定义的类 里面的属性值可以修改3.对象创建 1.可以先定义const name1; Const a{name}; 输出a的话就是{“name”:1}; 可以直接放进去函数 Const a{ Run(){ }, Set(){ } } 4. 遍历 遍…

【附源码】计算机毕业设计JAVA校园餐厅管理

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

haproxy软件的日志输出到指定文件

默认haproxy的日志是输出到系统syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。 需要修改rsyslog配置,为了便于管…

java包以及权限修饰符

Java包和权限修饰符Java包什么是包?如何导包?IDEA如何自动化导包?Java权限修饰符什么是权限修饰符?权限修饰符的分类和具体作用范围:Java包 什么是包? 1.包是用来分门别类的管理各种不同类的,…

Vue【实战三件套】如何封装网络请求、如何解决跨域问题,如何使用mock模拟后端数据,快来一起来看看吧~

一、如何封装网络请求 1.新建项目 vue create item_12.src下新建文件config.js 什么是开发环境 在一个产品的前端开发过程中,一般来说会经历本地开发、测试脚本、开发自测、测试环境、预上线环境,然后才能正式的发布。对应每一个环境可能都会有所差异&…

IPD-全面认识IPD流程

一、商业实现角度透视IPD流程 基于IPD的商业实现过程包括商业机会—商业计划—商业开发—商业兑现。这个过程适用于所有行业,适用于所有创新型市场化企业,包括贸易型企业、外包解决方案型企业、投资型企业等。 商业机会包括市场管理过程中的市场洞察和机会分析,以及需…

[MQ] MQ的应用场景及Docker安装RabbitMQ

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

PGL图学习之图神经网络GraphSAGE、GIN图采样算法[系列七]

0. PGL图学习之图神经网络GraphSAGE、GIN图采样算法[系列七] 本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5061984?contributionType1 相关项目参考:更多资料见主页 关于图计算&图学习的基础知识概览:前置知识点学…

CEAC之《计算机应用助理工程师》3

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1在子数据表中最多可以嵌套多少级子数据表? A、5级 B、6级 C、7级 D、8级D2在窗…

leetcode-每日一题-1732-找到最高海拔(简单,数学思想)

今天的每日一题很简单就是一个数学思考没啥难度 有一个自行车手打算进行一场公路骑行,这条路线总共由 n 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。 给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i 1 的 净海拔高度…

mmdetection训练得到的权重/checkpoints文件分析

这篇文章对mmdetection训练得到的模型权重,或者说checkpoints文件进行分析,一般模型保存在work-dir文件夹下,具体路径要参考训练用到的config,即配置文件。保存的模型一般是.pt的文件。 .pt模型文件读取方法 这种模型文件可以用…

详解Unity中的Nav Mesh新特性|导航寻路系统 (三)

前言 通过前面两篇的介绍与讲解我们已经对新版NavMesh有了一个基础的了解和使用,本篇我们继续讲解剩余的两个组件NavMeshModifier、NavMeshModifierVolume,这两个组件是主要是用于影响导航网格的生成的。所以内容不是很主要,但也非常重要。 …

dubbo:从零理解及搭建dubbo微服务框架(一)

0.引言 dubbo作为阿里巴巴开源的微服务框架,提供了高性能的RPC调用。同时因为有阿里的背书,在国内市场得到了广泛应用,dubbo的开源工作在2018年2月阿里将项目捐献给apache基金会后,得到了更加广大的发展。 之前我们讲解了spring…

[相向双指针] 167. 两数之和 II - 输入有序数组,15. 三数之和,11. 盛最多水的容器,42. 接雨水

相向双指针 该文结合灵神讲解进行编码:https://www.bilibili.com/video/BV1bP411c7oJ 相向双指针一般用于有序的数组,两个指针分别从头和尾向中间遍历,直到找到满足条件的 ans。 167. 两数之和 II - 输入有序数组 https://leetcode.cn/pr…

声明式查询服务,只需定义,无需实现

1. 概览 在日常开发中,数据查询是最为常见的需求,也是占比最大的一部分。为了降低成本提升开发效率,已经封装了两个组件: 将 QueryObject 与 Spring Data Jpa 进行集成,无需编写实现代码,只需通过注解定义…

大厂永恒敲门砖——Android 系统启动流程详解

正文 AMS 是 Android 中最核心的服务之一,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,它本身也是一个 Binder 的实现类,应用进程能通过 Binder 机制调…

【Java开发】 Spring 04:云服务器 Docker 环境下安装 Redis 并连接 Spring 项目实现简单 CRUD

Redis是目前使用最多的缓存,包括Spring Boot 中我们也是会用Redis做很多事情。它是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库,具备数据持久化、多数据结构存储及数据备份等特点。Redis 和 Mongo 同属于文档型数据…

C++17新特性的使用场景总结

一、简单特性 1. namespace 嵌套 C17使我们可以更加简洁使用命名空间&#xff1a; 2. std::variant 升级版的C语言Union 在C17之前&#xff0c;通常使用Union来定义一个可以存储不同类型的变量&#xff0c;现在可以通过std::variant<T1,T2,...> 来定义一个可以存储不同…