ARM CPU
在初步了解PreSoCes功能后,就来看看嵌入式系统的核心ARM CPU,在这里以ARM Core S3C4510元件为说明。为何要学ARM CPU呢?因嵌入式系统是软、硬体的整合,它有BISO、Device driver,能不了解CPU吗?又加上如未来要走入SoC IP设计,那又更不能不了解它,所以笔者仅取重点说明。
■ARM7TDMI核心的主要组成
〈1〉.暂存器组(register bank):ARM7TDMI利用暂存器组来储存微处理器内部各种操作模式的运算域及CPU状态。暂存器组中的所有暂存器至少具有两个读取埠(read port)与一个写入埠(write port)以供存取暂存器之用,较为特殊是R15,有三个读取埠与两个写入埠。
〈2〉.桶型位移暂存器(barrel shifter):ARM7TDMI利用barrel shifter来执行位元位移或旋转,这是一般DSP常用的功能之一。
〈3〉.算术逻辑运算单位(ALU):ARM7TDMI利用ALU来执行算术与逻辑运算。
〈4〉.位址暂存器(address register)与累增器(incrementer):ARM7TDMI利用位址暂存器与累增器来选择并维持记忆体定址功能,以产生连续或非连续的记忆体位址。
〈5〉.资料暂存器(data register):ARM7TDMI使用资料暂存器来保存资料以与记忆体彼此沟通。
〈6〉.指令解码器(instruction decoder):ARM7TDMI利用指令解码器以产生与指令相对应的控制信号。
图1 ARM core
■Pipeline结构
1.完整指令执行的管线作业
2.三层管线作业流程
在这情况下可知一个Cycle执行一个指令。
■CPU资料执行图
图2 CPU资料执行
CPU资料执行图说明
本文利用一简单的加法运算再搭配二个暂存器(Rm及Rn)来说明:
1.分别将(Rn及Rm)送到A BUS及B BUS。
2.在B BUS的Rm透过Barrel Shifter作位移运算后,结果与在A BUS的Rn在ALU整合作运算动作。
3.最后运算结果会由ALU BUS送回暂存器Rd做储存。
4.程式计数器结果则透过Address incrementer作更新再将值写回程式计数器。
5.此时Address BUS更新资料位址,进行下一步的命令撷取的动作;记忆体即会把指令送到Data BUS做进一步的指令解码及执行的准备。
■程式模式(Programmer Mode)
暂存器
ARM Mode暂存器共有37个,分别有31个32bit一般暂存器及6个状态暂存器,而于不同操作模式下分有不同的暂存器可供使用。
表1 ARM Mode暂存器
THUMB Mode暂存器是一个ARM状态暂存器的子集合,分别有21个32bit一般暂存器及6个状态暂存器,使用者可直接使用R0-R7和PC,stack pointer register(SP),link register(LR)、CPSR及SPSR。
在二种State的暂存器组中,有共用暂存器,也有各别暂存器,这就方便OS 的task switch 之程式参数转换用。
■忆体格式
ARM7TDMI对于记忆体内资料的存取以byte为单位,并由0开始线性向上存取的方式进行。也就是byte0~byte3会最先被存取为一个word(在ARM里,一个word等于32位元;也就是4个byte),接下来是byte4~byte7被存取...依此类推下去。而这样储存在记忆体中的一个word之4个byte,哪个会置于最高位置?哪个又会置于最低位置呢?这时,ARM则提供了两种格式供设计者来使用---Big Endian和Little Endian。
在Big Endian格式中,一个word里的最大有效位元组会储存到最低的位元组里,而最小有效位元组会储存到最高的位元组里。
表3 Big Endian格式
在Little Endian格式中,一个word里的最小有效位元组会储存到最低的位元组,而最大有效位元组会储存到最高的位元组里。
表4 Little Endian格式
操作模式
ARM7TDMI共支援7种操作模式。
表5 ARM7TDMI操作模式
模式改变
模式的改变可以由软体控制或是经由外部中断和例外事件的处理所产生。大多数的应用程式会在User模式下执行。非User模式,亦可称为特权模式,其通常用来执行中断服务、例外事件,或者是存取受保护的资源。
■例外事件
每当例外事件的产生,则程式的一般旗标则会暂时停止,在例外被处理之前,目前的处理程序状态必须被保留,最初的程式才能够被恢復。当中断被处理完时,其他的例外事件就会被接受处理,但它们会依照优先顺序处理。
表6 例外事件
[url=http://www.52rd.com/upload/2006_3/images200631411503264767.jpg[/img]][/url] [url=http://www.52rd.com/upload/2006_3/images200631411503264767.jpg[/img]]<img src="http://www.52rd.com/upload/2006_3/images200631411503264767.jpg" [="" img]<="" font="" style="border-width: initial; border-style: none; vertical-align: middle; margin: 15px 0px 5px;">[/url]
表7 指令中的状态域
|