完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.什么是异构多核SoC处理器顾名思义,单颗芯片内集成多个不同架构处理单元核心的SoC处理器,我们称之为异构多核SoC处理器,比如:
2.异构多核SoC处理器有什么优势相对于单核处理器,异构多核SoC处理器能带来性能、成本、功耗、尺寸等更多的组合优势,不同架构间各司其职,各自发挥原本架构独特的优势。比如:
3.常见核间通信方式要充分发挥异构多核SoC处理器的性能,除开半导体厂家对芯片的硬件封装外,关键点还在于核间通信的软硬件机制设计,下面介绍几种在TI、Xilinx异构多核SoC处理器上常见的核间通信方式。
在异构多核SoC处理器上,OpenCL将其中一个可编程内核视为主机,将其他内核视为设备。在主机上运行的应用程序(即主机程序)管理设备上的代码(内核)的执行,并且还负责使数据可用于设备。设备由一个或多个计算单元组成。比如,在TI AM5728异构多核SoC处理器中,每个C66x DSP都是一个计算单元。 OpenCL运行时,一般包含如下两个组件:
http://downloads.ti.com/mctools/esd/docs/opencl https://training.ti.com/sites/default/files/docs/Introduction_to_OpenCL_slides.pdf
DCE由三部分硬件模块组成,分别为MPU核心、IPU2核心以及IVA-HD硬件加速器,其主要功能如下: MPU:基于ARM用户空间Gstreamer应用,控制libdce模块。libdce模块在ARM RPMSG框架上实现与IPU2的IPC通信。 IPU2:构建DCE server,基于RPMSG框架与ARM实现通信,使用编解码器引擎和帧组件控制IVA-HD加速器。 IVA-HD:实现视频/图像编解码的硬件加速器。
如下为TI异构多核SoC处理器常用的核间通信方式的优缺点比较:
ZYNQ有三种AXI总线: (A)AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输。 (B)AXI4-Lite:(For simple, low-throughput memory-mapped communication.)是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。 (C)AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输,去掉了地址项,允许无限制的数据突发传输规模。 AXI协议的制定是要建立在总线构成之上的。因此,AXI4、AXI4-Lite、AXI4-Stream都是AXI4协议。AXI总线协议的两端可以分为分为主(master)、从(slave)两端,他们之间一般需要通过一个AXI Interconnect相连接,作用是提供将一个或多个AXI主设备连接到一个或多个AXI从设备的一种交换机制。 AXI Interconnect的主要作用是:当存在多个主机以及从机器时,AXIInterconnect负责将它们联系并管理起来。由于AXI支持乱序发送,乱序发送需要主机的ID信号支撑,而不同的主机发送的ID可能相同,而AXI Interconnect解决了这一问题,他会对不同主机的ID信号进行处理让ID变得唯一。 AXI协议将读地址通道、读数据通道、写地址通道、写数据通道、写响应通道分开,各自通道都有自己的握手协议。每个通道互不干扰却又彼此依赖。这是AXI高效的原因之一。 4.IPC核间通信开发下面以创龙AM57x(AM5728/AM5708)评估板源码为例,讲解IPC核间通信开发。 开发环境说明
本小节主要演示MessageQ通信组件的运用。 MessageQ机制
以ex02_messageq例程为例,说明MessageQ机制的使用过程: 例程运行流程图如下: 结合实际代码分析上述流程: ARM: a)创建host消息队列,打开slave消息队列。 b)发送消息至slave消息队列,监听host消息队列,等待返回信息 。 c)发送shutdown消息至slave队列。 DSP: a)创建slave消息队列。 b)监听slave消息队列,并返回消息至host端。 c)接收shutdown消息,停止任务。 内存访问与地址映射问题
DSP:MMU0用于DSP内核,MMU1用于本地EDMA。 IPU:IPUx_UNICACHE_MMU用于一级映射,IPUx_MMU用于二级映射。 rsc_table_dspx.h,rsc_table_ipux.h资源表中,配置了DSP/IPU子系统的映射关系,在固件启动前,该映射关系将会写入寄存器,完成映射过程。 物理地址跟虚拟地址之间的映射关系查看: DSP1:(默认配置mmu1的配置与mmu2的配置是一样的) cat /sys/kernel/debug/omap_iommu/40d01000.mmu/pagetable cat /sys/kernel/debug/omap_iommu/40d02000.mmu/pagetable DSP2:(默认配置mmu1的配置与mmu2的配置是一样的) cat /sys/kernel/debug/omap_iommu/41501000.mmu/pagetable cat /sys/kernel/debug/omap_iommu/41502000.mmu/pagetable IPU1: cat /sys/kernel/debug/omap_iommu/58882000.mmu/pagetable IPU2: cat /sys/kernel/debug/omap_iommu/55082000.mmu/pagetable Resource_physToVirt(UInt32pa,UInt32*da); Resource_virtToPhys(UInt32da,UInt32*pa);
CMA内存,用于存放IPC程序的堆栈,代码以及数据段。 dts文件中,预留了几段空间作为从核的段空间(DDR空间): IPC-demo/shared/config.bld:用于配置段空间的起始地址,以及段大小。 以DSP1为例,说明DMA中的内存映射关系: 通过系统中查看虚拟地址表,左边da(device address)对应的为虚拟地址,右边对应的为物理地址,那么虚拟地址的0x95000000的地址映射到的应该是0x99100002的物理地址。 cat /sys/kernel/debug/omap_iommu/40d01000.mmu/pagetable 共享内存 共享内存:其实是一块“大家”都可以访问的内存。 CMEM是一个内核驱动(ARM),是为了分配一个或多个block(连续的内存分配),更好地去管理内存的申请(一个或多个连续的内存分配block),释放以及内存碎片的回收。 CMEM内存:由linux预留,CMEM驱动管理的一段空间。 arch/arm/boot/dts/am57xx-evm-cmem.dtsi中定义了CMEM,并预留了空间出来作为共享内存(DDR & OCMC空间)。 cmem{}中最大分配的block数量为4个,cmem-buf-pools的数量没有限制。 实际使用上,DSP与IPU访问的都是虚拟地址,所以还要完成虚拟地址到物理地址的映射关系。 dsp1/rsc_table_dsp1.h定义了虚拟地址到物理地址的映射表,虚拟地址(0x85000000)到物理地址0xA0000000的映射,那么在DSP端访问0x85000000的地址时,实际上通过映射访问的物理地址应是0xA0000000。 cat /sys/kernel/debug/omap_iommu/40d01000.mmu/pagetable 实际应用: a)初始化cmem。 b)申请内存空间,并转换为物理地址(msg传输的时候传输的是物理地址,否则传输虚拟地址有不确定性)。 DSP端的处理:接收物理地址,转换为虚拟地址进行操作,发送操作完成的结果。这里DSP需要将地址返回给ARM的话,那应该将虚拟地址转换为物理地址,再传给ARM端。
|
||
相关推荐
|
||
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
654 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2242 浏览 1 评论
771 浏览 0 评论
1530 浏览 1 评论
2276 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:41 , Processed in 0.840786 second(s), Total 66, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号