Avaota A1搭载的全志T527平台内集成有RISC-V小核心CPU及DSP,与Arm核心一起组成了异构计算的架构。
在异构多处理系统中,主核心和辅助核心的存在旨在共同协作,以实现更高效的任务处理。这种协作需要系统采取一系列策略来确保各个核心能够充分发挥其性能优势,并实现有效的通信和协同工作。这就形成了一种称为异构多处理系统(AMP系统)的架构。
异构系统通讯在硬件上使用的是 MSGBOX,在软件层面上使用的是 AMP 与 RPMsg 通讯协议。其中大核心上基于 Linux 标准的 RPMsg 驱动框架,小核心是基于 OpenAMP 的异构通信框架。
AMP与RPMsg
主核心与辅助核心是完全不同的两个核心,为了最大限度的发挥他们的性能,协同完成某一任务,所以在不同的核心上面运行的系统也各不相同。这些不同架构的核心以及他们上面所运行的软件组合在一起,就成了 AMP 系统 (Asymmetric Multiprocessing System, 异构多处理系统)。
由于两个核心存在的目的是协同的处理,因此在异构多处理系统中往往会形成 Master - Remote 结构。主核心启动后启动从核心。当两个核心上的系统都启动完成后,他们之间就通过 IPC(Inter Processor Communication)方式进行通信,而 RPMsg 就是 IPC 中的一种。
在AMP系统中,两个核心通过共享内存的方式进行通信。两个核心通过 AMP 中断来传递讯息。内存的管理由主核负责。
异构多处理系统的设计需要充分考虑到主核心和辅助核心的异构性质,以及它们之间的通信和协作方式,从而实现任务的高效分配和处理。
AMP 系统在每个通信方向上都有两个缓冲区,分别是 USED 和 AVAIL,这个缓冲区可以按照 RPMsg 中消息的格式分成一块一块链接形成一个环。
当主核需要和从核进行通信的时候可以分为四步:
主核先从USED中取得一块内存
将消息按照消息协议填充
将该内存链接到 AVAIL 缓冲区中(Send)
触发中断,通知辅助核有消息处理
反之,从核需要和主核通信的时候也类似:
从核先从AVAIL中取得一块内存
将消息按照消息协议填充
将该内存链接到 USED 缓冲区中(Send)
触发中断,通知主核有消息处理。
RPMsg协议
既然 RPMsg 是一种信息交换的协议,与TCP/IP类似,RPMsg 协议也有分层,主要分为三层,分别是传输层、MAC层和物理层。
其中 MAC层 的 VirtIO 是一种I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用 I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率。
RPMsg 总线上的消息都具有以下结构,包含消息头和数据两个固定的部分,该消息格式的定义位于drivers/rpmsg/virtio_rpmsg_bus.c中,具体定义如下:
struct rpmsg_hdr {
u32 src;
u32 dst;
u32 reserved;
u16 len;
u16 flags;
u8 data[];
} __packed;
异构计算资源划分
由于DSP的cacheable空间大小只能按照你512MB去划分,而且跳转指令不能超过1G空间,因此对于SRAM、以及DRAM的空间,DSP存在多套地址映射,根据不同的地址段区分cacheable和non-cacheable。
DSP的local sram包括IRAM和DRAM0/1,放在DSP内部,其他主机可以通过DSP的总线接口对该RAM进行访问,而DSP可以通过特定地址(0x0040_0000 - 0x0044_FFFF)对其直接访问,实现最高效率。
AvaotaA1 T527开发板DSP资源划分
AvaotaA1 T527开发板RV资源划分
-End-
本文内容均转载自以下链接
1,https://docs.avaota.fun/avaota-sbc/avaota-a1/hardware/hardware_info