ARM+DSP系统MMU在射频一致性测试仪表的实现
2014-06-01陈发堂郭丽强
陈发堂 郭丽强
(重庆邮电大学通信与信息工程学院,重庆 400065)
0 引言
随着计算技术的高速发展,虚拟化在存储系统中扮演着日益重要的角色。目前,越来越多的处理器集成了内存管理单元(memory management unit,MMU),用于为虚拟化提供支持[1]。以ARM处理器流水结构和DSP处理器强大的数据处理能力相结合的非对称双核架构[2],既能保持算法的灵活性,又能提供强大的处理能力。ARM负责外围接口及外围存储设备和子处理器(DSP)的配置和控制,DSP则负责算法加速。DSP的算法代码作为ARM端OS文件系统的一个文件存在,通过应用程序进行DSP程序的下载和DSP芯片的控制[3]。
以往的文献大多只介绍传统单核MMU的应用和研究,相关成熟的研究成果不再详述,本文重点介绍双核系统MMU及其在具体环境中与不同技术方案的对比分析。
1 射频一致性测试仪表简介
TD-LTE射频一致性测试仪表主要是针对LTE终端和网络端的射频测试,通过硬件方面的射频开关设备和软件方面的完整测试软件,实现TD-LTE和TDSCDMA互操作条件下的射频测试功能。射频一致性测试仪表硬件平台整体架构如图1所示。图1中,C6A8168为ARM+DSP双核架构,其中 ARM负责MAC层之上的协议栈代码的处理,DSP部分处理完成MAC层和L1C调度的处理等。FPGA芯片则负责完成层算法的硬件加速、基带数据借口控制等。各芯片之间通过外围接口进行数据交互。各射频测功能模块与FPGA芯片相连。
本双核系统中,ARM为主处理器,DSP为辅处理器,主处理器负责辅处理器的电源域控制、复位控制以及入口点的设置等。双核系统通过各自MMU,实现虚拟地址和物理地址间的映射,以便对存储系统进行数据交互,处理器间通过邮箱中断或硬件自旋锁实现通信。两个处理器采用了不同的MMU,以管理各自的存储系统,实现虚拟地址和物理地址间的转换和读写访问。由系统MMU结构图可知,在对存储设备(包括外存和内存)进行访问时,各处理器通过对应的MMU系统互连总线进行数据的交互,MMU经过地址间的翻译后由系统互连总线实现进程或CPU对存储设备的数据交互。
图1 系统整体架构图Fig.1 Overall system architecture
2 ARM端MMU
ARM端引入了存储管理单元。MMU主要是在L1和L2内存系统范围内进行虚拟地址到物理地址间的转换和外存的属性、访问权限控制等,其中MMU通过一系列的虚拟物理地址的映射和旁路转换缓冲(translation lookaside buffer,TLB)[4-5],提供一个精确的内存访问控制机制。ARM与DSP的MMU总体架构如图2所示。
图2 双核系统MMU架构Fig.2 Architecture of dual core MMU system
2.1 MMU在内存访问中的作用
在非安全模式下,ARM端存储系统分为三级,分别为 PL0、PL1、PL2,MMU 则负责完成所有相对应的三级存储系统的控制。每个级别对应的存储系统控制是由不同的抽象MMU提供的,各个MMU提供独立的不同的控制。但是在安全模式下,只有一个存储系统控制的级别,出于TD-LTE系统的需求,各级存储系统需要在安全状态模式下行使虚拟地址和物理地址之间的转换与访问权限的控制。
MMU中页表遍历硬件系统是在翻译表中查询所需地址变换条目的过程,查询开始的级别是根据系统所采用的翻译表格式的不同而定的。当系统采用短地址描述符翻译表格式时,从第一级开始查询,否则从第一级或第二级开始。此次查询由硬件自动完成,这会消耗很大一部分时间;同时,为了获得更好的虚拟地址到物理地址间的映射,一个地址转换就需要对翻译表进行多次访问,从而影响了MMU的工作效能。为了解决这个问题,需要采用TLB机制。
2.2 地址变换过程
基于TD-LTE系统的需求和双核系统ARM处理器MMU的特点,在介绍地址变换过程前,需要事先说明翻译表基地址较以往的不同点。翻译表基地址用于存放翻译表在存储设备中的地址,传统地址翻译表只有一个,本文不再详细介绍。本系统中有两个基地址,在非安全模式下第三级存储翻译系统中只有一个基地址,在第一级和第二级存储系统的第二翻译段也是一个翻译地址。在安全和非安全模式下第一、二级存储系统的第一段翻译中有两个翻译表基地址(也可以使用一个),第一个地址存放的基地址是对应于整个地址空间的前半部分,第二个地址存放的值是相对应的地址空间的后半部分。以一个以大页为单位的地址翻译过程为例,详细分析具体的地址翻译过程。
2.2.1 一级页表地址变换过程
MMU所实现的一级地址变换过程如图3所示。协处理器CP15中C2寄存器存放变换页表的基地址,该虚拟地址被分为二级三部分:第一级页表索引,第二级页表索引和大页页表索引。在第一级页表翻译时,CP15的寄存器C2的位[31∶14]与第一级页表索引结合为第一级翻译页表址的高30位和低两位数据位00,由于本页表是以大页为单位的地址变换,所以从该条目地址中可得到一个指向二级页表的指针[5]。
图3 地址翻译过程Fig.3 Address translation process
2.2.2 二级页表地址变换过程
二级页表地址变换过程与一级过程基本相似,如图3所示,不同的是输出的地址描述符中高16位数据与虚拟地址中的页表索引结合形成所需的地址[5],即物理地址。
图3中地址描述符中的属性控制着被映射存储区的内存属性(例如是否被ARM和DSP共享,是否属于安全模式等)和访问权限。MMU做完映射后的存储区域在被ARM处理器或DSP处理器访问时是否需要进行权限检查是根据ARM协处理器中的域控制器和地址描述符中相应的域控制位而定的,而相对储存区的访问权限则由该地址描述符中AP[2∶0]决定。双核系统MMU中的多位地址描述符用来配置对应的存储器能否为双核所共享,不同于传统单核处理器MMU。
本双核系统内置了ICaches(指令Cache)、DCaches(数据Cache)和Write buffer(写高速缓存),操作时需要用到描述符中的C位和B位。ICaches一般在MMU开启后使用,此时描述符的C位用来表示一段内存是否可以被Cache。ICaches开启后,CPU每次取指时都会先在ICaches中查看是否能找到所用指令,而不管C是0还是1。如果找到所用指令,则称为Cache命中,找不到则称为Cache丢失。ICaches被开启后,CPU取指有如下三种情况:Cache命中且C为1时,从ICaches中取指,返回CPU;Cache丢失且C为1时,CPU从主存中取指,并且把指令高速缓存到Cache中;C为0时,CPU从主存中取指。对于DCaches,与ICaches相似,Write buffer中的内容也是被废弃不用的。往C位(CP15协处理器中寄存器1的第二位)写1,启动DCaches;写 0,停止 DCaches。Write buffer和 DCaches紧密结合,没有专门的控制来开启和停止它。与ICaches不同,DCaches功能必须在MMU开启之后才能被使用。DCaches被开启后,CPU每次读写数据时都会事先在DCaches中查看是否能找到所要的数据,不管C是0还是1。如果找到了所需数据,则称为Cache命中,找不到则称为Cache丢失。
2.3 高速缓存的清除和使无效
MMU中所使用的高速缓存包括原理和目的都是和传统的高速缓存类似的,理论上也可以不用高速缓存,但是TD-LTE系统对数据处理的速度要求较高。考虑到开启了MMU后虚拟地址到物理地址之间的转换时需要多次访问内存,大大降低了CPU的性能,所以应该开通高速缓存,但是开通后双核系统需要对缓存进行各种处理,这就需要花费时间。因此,在MMU功能实现中有以下两个方案可选。
第一个方案:不开通高速缓存,这样无论指令和数据的读取都要访问内存,双核处理器的强大数据处理和控制性能得不到发挥,但是可以节省对缓存的各种处理时间。
第二个方案:开通高速缓存。开通高速缓存功能后,系统需要花费时间去做相应的处理,如清除和使无效以及缓存错误处理等。由示波器观察所需时间可知,开启缓存后,数据读写的速度成倍提升。所以在TD-LTE系统中选择第二个方案。
使能缓存前需要通过清除和使无效两个操作保证高速缓存中内容和主存中内容的一致性,否则高速缓存的内容就是之前的旧数据。清除是指把已经写入高速缓存中的而未写入主存的数据写入主存;使无效是指高速缓存停止其功能。传统嵌入式处理器的MMU关于高速缓存的清除和使无效是通过简单ARM协处理器指令完成的,例如:
仅此一条指令便可以把数据缓存和指令缓存全部清除和使无效,但是由于TD-LTE系统要求具有ARM+DSP双核系统,这就使得高速缓存的清除和使无效机制变得很复杂。
清除和使无效机制有两种,一是由虚拟地址实现,二是由Cache Line和Cache Way实现。由于第一种实现方式的效率不符合TD-LTE系统需求,所以本系统采用第二种方式。但是该方式需要对高速缓存的具体结构有清晰的了解。高速缓存中的基本存储单位是Cache Line,所有不同序号的Cache Line组成高速缓存中的Cache Way,所有不同 Cache Way的相同 Cache Line组成Cache Set。先以Cache Way为第一层循环,再以Cache Set中的Cache Line为基本单位进行清除和使无效操作。双重循环之后,系统中大小为32 kB的高速缓存便可被清除和使无效,这一点是与ARM核处理器所属的架构相关的。
3 DSP处理器MMU
当双核系统启动时,系统在对ARM和DSP进行最简单的初始化后,ARM作为主处理器先启动,DSP此时被禁止而进入到复位模式。ARM启动完成后配置DSP处理器退出复位状态,待DSP初始化完成后DSP端MMU才算进入到可以使能的环境。
DSP端处理器MMU的功能和功能原理与ARM端MMU基本相似,但是在功能和控制的方式上有很大区别。在控制方面,ARM中MMU主要是通过ARM系统协处理器配合完成对MMU的使能等控制;在功能方面,翻译表和页表遍历硬件系统都可以选择使能与否,DSP端MMU翻译表中地址描述符必须要定义相对应存储区的存储格式(大小端)的选择与配置(大小端可以配置为基于存储器的大小端或基于访问端的大小端);在访问大小上,DSP端MMU可选择8位、16位和32位。
DSP端MMU在第一级描述符和第二级描述符中都要定义相对应存储区的大小段选择、访问大小等。不同于ARM端的MMU,DSP端MMU有两个时钟域。这两个时钟域分别负责系统互连总线的数据访问及访问控制。一个输入时钟通过两个时钟使能信号控制两个时钟域的开启与否。
4 测试结果与分析
以上介绍了双核MMU的不同点,其需要注意的地方也很多,例如在页表、缓存等都配置好后,使能MMU时必须注意使能MMU指令的虚拟地址要和其物理地址一样,否则系统会报错。因为假设使能MMU的指令物理地址为Addr_ph,根据映射关系它的虚拟地址为Addr_vr,没有启动MMU时CPU发出的地址都是物理地址,CPU会在地址Addr_ph取出使能MMU的指令,执行后再发出的指令地址便为虚拟地址。由于处理器的流水线结构,故下一次应该从地址(虚拟)Addr_vr+4处取得,但是此时PC寄存器存放的原Addr_ph+4并没有改变,即CPU所执行的指令的地址仍为Addr_ph+4,但是此时Addr_ph+4已经成为非法地址。使能MMU时PC跳转示意图如图4所示。
图4 使能MMU时PC跳转示意图Fig.4 Soft reset of PC when the MMU is enabled
图4中,“→”右侧为使能MMU指令的下一条指令取址的跳转情况。由于处理器的流水线结构,PC寄存器应该按照箭头所示取指令,但此时PC已经存放了Addr_ph+4,且该地址在使能MMU后为非法地址。为了防止类似问题出现,需要保证使能MMU的指令及其附近指令的虚拟地址和物理地址必须相同,即等价映射[6-7]。
以上MMU设计已通过代码实现,在负责实现TDLTE射频一致性测试仪表启动代码重映射时,把系统0地址映射为RAM中存放启动代码的位置,以便系统顺利启动。启动完成后通过双核芯片外围接口GPIO接收中断,中断顺利跳转到经过MMU映射的中断向量表,再配置可提高系统内存效率的功能,MMU的实现达到了LTE测试仪要求。
5 结束语
在嵌入式系统中,MMU是提高整体性能不可或缺的一部分[7],在ARM+DSP双核系统中也起着相同的作用。针对TD-LTE系统的需求,本文在考虑了硬件和软件两方面特征后,设计并实现了双核MMU。这两种MMU在双核非对称架构系统的内存管理中有较高的参考价值。以上启动过程已经实现为程序代码,并在Code Composer Studio 5.2中顺利经过编译调试和测试板验证,所得结果均与理论值一致。双核系统在保证具有较强的稳定性前提下,满足了国家重大科技专项“TD-LTE射频一致性测试仪表”对包括硬件和软件在内的系统需求并得到了应用。
[1]王华斌,夏清泉,李希然.内存管理单元MMU虚拟化代价研究[J].哈尔滨商业大学学报,2012(28):67-70.
[2]蒋建春,曾索华,岑明.一种基于异构双处理器嵌入式操作系统架构[J].计算机应用,2008,28(10):2686 -2689.
[3]基于 ARM+DSP进行应用开发[EB/OL].[2011-07-16].http://www.cnblogs.com/just4fun/archive/2011/07/16/2108223.html.
[4]王庆民,刘福岩.ARM MMU虚拟地址转换研究[J].机械工程与自动化,2007(1):44 -46.
[5]Lee J H H,Park S B B,Shin D D.A selective filter-bank TLB system embedded processor MMU for low power[C]∥Low Power Electronic and Design,Processor of the 2003 International Symposium on Digital Object Identifier,2003:312 -317.
[6]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003:179-180.
[7]Lee Y H,Jeong W,Ahn S.Shared tag for MMU and cache memory[C]∥Semiconductor Conference,1997.