ARM采用先进的微控制器总线架构(AMBA),为系统应用提供了3个总线接口并为它们配置不同的工作频率,以适应于不同速度的芯片接入使用。为了方便调试与代码的下载,节省开发设备投入,提供了JTAG接口。为了扩充ARM系统的功能,提供了16个协处理器扩展接口。
ARM微处理器内核可以通过先进的微控制器总线架构(AMBA)来扩展不同体系架构的宏单元及I/O部件。AMBA已成为事实上的片上总线(OCB)标准。AMBA的典型系统结构如图2-1所示。
图2-1 AMBA的典型系统结构
AMBA有先进系统总线(Advanced System Bus,ASB)、先进高性能总线(Advanced High-performance Bus,AHB)和先进外围总线(Advanced Peripheral Bus,APB)3类总线。
● ASB是目前ARM常用的系统总线,用来连接高性能系统模块,支持突发(Burst)方式数据传送。
● AHB不但支持突发方式的数据传送,还支持分离式总线事务处理,以进一步提高总线的利用效率。特别在高性能的ARM架构系统中,AHB有逐步取代ASB的趋势,例如在ARM1020E处理器核中。
● APB为外围宏单元提供了简单的接口,也可以把APB看作ASB的余部。
AMBA通过测试接口控制器(Test Interface Controller,TIC)提供了模块测试的途径,允许外部测试者作为ASB总线的主设备来分别测试AMBA上的各个模块。
AMBA中的宏单元也可以通过JTAG方式进行测试。虽然AMBA的测试方式通用性稍差,但其通过并行口的测试比JTAG的测试代价要低些。
联合测试行动小组(JTAG)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试。JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门测试电路,即集成了测试访问口(Test Access Port,TAP),通过专用JTAG测试工具对内部节点进行测试。目前大多数比较复杂的器件都支持JTAG协议,如ARM、FPGA器件等。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。JTAG接口还常用于实现在系统编程(In-System Programmable,ISP)功能,如对Flash器件进行编程等。
通过JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。
目前ARM公司提供的JTAG接口有14针接口和20针接口两种标准,具体硬件电路和引脚功能请参考其他资料。
ARM的JTAG接口就像单片机的仿真器和编程器(或称烧录器),单片机仿真器和编程器的价格平均都在千元以上,ARM的JTAG接口价格与之相比则非常低廉。仿真器主要用于单片机软硬件的调试,编程器用于将编译好的十六进制或二进制程序烧写在单片机的ROM中。JTAG接口在ARM的裸机程序开发中作用巨大,同时在ARM的Linux操作系统下开发应用必不可少。
在使用ARM公司提供的集成开发环境ADS1.2进行裸机开发应用系统时,PC并行口与ARM的JTAG接口相连,可以进行ARM目标板的软硬件调试。调试完成后,编译好的ARM机器码也要通过JTAG接口下载(烧写)到目标板的Flash存储器中运行。
进行Linux操作系统环境下的应用系统开发时,编译好的引导启动程序(Bootloader)必须通过ARM的JTAG接口下载到ARM芯片外扩的NOR Flash(称“非或”Flash)ROM或NAND Flash(称“非与”Flash)ROM中,其后的操作系统内核、文件系统、应用程序可以通过RS-232接口、USB接口或RJ45网络接口下载到ARM的Flash ROM中。也就是说,Bootloader中已经编写了有关接口的驱动、应用程序才能完成其后的操作。
为了便于片上系统(System on Chip,SoC)的设计,ARM可以通过协处理器(CP)来支持一个通用功能指令集的扩充,通过增加协处理器来增加ARM系统的功能。
在逻辑上,ARM可以扩展16个协处理器(CP0~CP15),其中CP15作为系统控制,CP14作为调试控制器,CP4~CP7作为用户控制器,CP8~CP13和CP0~CP3保留。每个协处理器可有16个寄存器。例如,MMU和保护单元的系统控制都采用CP15协处理器,JTAG调试中的协处理器为CP14,即调试通信通道(Debug Communication Channel,DCC)。
ARM微处理器内核与协处理器接口有以下4类。
1)时钟和时钟控制信号:MCLK、nWAIT、nRESET。
2)流水线跟随信号:nMREQ、SEQ、nTRANS、nOPC、TBIT。
3)应答信号:nCPI、CPA、CPB。
4)数据信号:双向数据信号D[31:0]、输入数据信号DIN[31:0]、输出数据信号DOUT[31:0]。
在协处理器的应答信号中,部分信号说明如下。
● nCPI为ARM微处理器至CPn协处理器的信号,该信号低电平有效代表“协处理器指令”,表示ARM微处理器内核标识了1条协处理器指令,希望协处理器去执行它。
● CPA为协处理器至ARM处理器的内核信号,表示协处理器不存在,目前协处理器无能力执行指令。
● CPB为协处理器至ARM处理器的内核信号,表示协处理器忙,还不能开始执行指令。
协处理器也采用流水线结构,为了保证与ARM微处理器内核中的流水线同步,在每一个协处理器内需有1个流水线跟随器(Pipeline Follower),用来跟踪ARM微处理器内核流水线中的指令。由于ARM的Thumb指令集无协处理器指令,协处理器还必须监视TBIT信号的状态,以确保不把Thumb指令误解为ARM指令。
协处理器也采用Load/Store结构,用指令来执行寄存器的内部操作,从存储器取数据至寄存器或把寄存器中的数据保存至存储器中,以及实现与ARM处理器内核中寄存器之间的数据传送。而这些指令都由协处理器指令来实现。