第2章 arm体系结构。
本章介绍arm7tdmi程序员模型、工作模式与工作状态、arm和thumb状态的寄存器组织、存储器组织结构、异常以及协处理器接口等一些基本概念。本章还讲述了arm的编程基础,如:arm微处理器的基本工作原理、程序设计相关的基本技术细节等。
2.1 arm7tdmi程序员模型。
arm7tdmi是目前应用最广泛的arm内核。它由74209个晶体管组成,通常采用0.35μm制作工艺,最高时钟为66mhz,最快速度为60mips,耗电87mw。
arm7tdmi处理器是采用32位地址寻址,支持片内调试(jtag),支持断点调试(embedded ice),具有乘法运算器和**指令流水线的32位整数risc处理器。
掌握arm7tdmi的工作性能和使用方法,使用者首先要从程序员编程的角度了解arm7tdmi内核。
2.1.1内核概述。
arm7tdmi内核的基本结构如图2.1所示。arm7tdmi内核由扫描、指令译码和控制逻辑和alu组成。
图2.1 arm7tdmi内核的基本结构。
其中, 指令译码和控制逻辑包括指令流水线(instruction pipeline)、thumb指令译码器(thumb instruction decoder),alu包含寄存器组(register bank*8乘法器(multiplier)、桶形移位器(barrel shifter)和32位的运算器(32bit alu)。
2.1.2译码器与控制逻辑。
指令译码和控制逻辑包括指令流水线、thumb指令译码器。
流水线技术是将每条指令分解为多步来执行,流水线方式是指把一个处理过程分解成若干个子过程,每个子过程可以与其他子过程同时进行,实现几条指令并行处理,以加速程序运行过程的技术。
流水线技术是通过增加计算机硬件来实现的,每条由各自独立的电路来处理,每完成一步,就进到下步,而前一步则处理后续指令。采用流水线技术后,处理器并没有加速单条指令的执行,每条指令的操作步骤也不能少,由于多条指令的不同操作步骤同时执行,因而从总体上加快了指令流执行速度,缩短了程序执行时间。
在计算机的体系结构中,处理器包含指令部件i和指令执行部件e。指令部件i负责完成指令取指、指令译码,指令执行部件e负责完成功能运算、结果保存。计算机执行程序是按顺序执行的。
在一条指令中,可以分为三个部分,如图2.2所示:
图2.2 指令执行过程。
为了提高cpu的工作效率,arm的控制器设计完全采用硬布线实现。如图2.3所示,arm把若干条指令在执行时间上重叠起来,使机器的执行速度大大加快。
图2.3 流水线执行过程。
从图2.3可以看出,指令部件完成第1条指令取指后,交给指令译码部件;指令部件进行第2条指令的取指。同理,译码部件完成第1条指令译码后,交给指令执行部件;指令译码继续完成第2条指令的译码。
指令的整个执行过程相当于工业生产线上的流水作业,这种指令的处理机制称作指令流水线。
到目前为止,arm核处理器的流水机制分为**流水线、五级流水线和六级流水线(arm11为八级流水线)。arm7采用**流水线结构,分别是取指、译码和执行。arm9采用的是五级流水线结构,分别是取指、译码、执行、存储和回写。
arm10采用的是六级流水线结构。
指令流水线遇到执行“跳转指令”时,指令流水线不能继续执行,自动清空指令流水线(如重新建立指令流水线需要2个或2个以上的指令周期),指令流水线需要重新建立。为提高指令执行效率,arm在指令设计上基本每条指令都采用条件执行。执行含有条件的指令时,如条件不满足,相当指令一条nop指令,指令流水线不清空。
arm7tdmi执行使用 3 级流水线,第一级从内存中取回的指令,第二级开始译码,而第**实际执行。因此,程序计数器指针总是超出当前执行的指令两个指令,参见图2.3(在为分支指令计算偏移量时必须计算在内)。
在分支时arm7tdmi将多花2个指令周期(因为流水线需要重新添满)。所以最好利用条件执行指令来避免浪费周期。例如:
cmp r0,#
beq finish1
mov r1,#
mov r2,#
finish1
arm7tdmi条件指令可以使系统执行更为有效:
cmp r0,#
movne r1,#
movne r2,#
thumb指令译码器。由于arm内部只有一个32位运算器,为节约存储器空间,减少**的存储空间,thumb指令是将32位指令按照16位格式进行存储,在执行过程中,thumb指令译码器把16位格式的指令还原成32位运算器能够执行的32位指令。
2.1.3运算器。
alu包含寄存器组、32*8乘法器、桶形移位器和32位的运算器。本节简单介绍乘法器、桶形移位器和32位的运算器。寄存器组将2.3节中介绍。
1)32位的加法器。
运算器不仅要实现加法运算,还必须实现指令集的所有指令。它包括访问存储器的地址计算、跳转地址计算和位逻辑运算功能,arm内核不采用微程序译码方式执行,采用完全的硬布线逻辑实现。
2)桶形移位器。
arm7tdmi的运算指令包括两个操作数,第一个是寄存器,第二个可以是寄存器、立即数、或者是寄存器、立即数经过移位运算产生的操作数。桶形移位器采用交叉开关,提供实现移位的硬件设备,减少数据的延时,提高指令的执行速度。
3)32*8乘法器。
arm7tdmi支持64位结果乘法指令以及乘加指令。乘法器是由硬件布线逻辑实现的,它采用著名的booth改进电路,提高了乘法运行速度。
2.1.4内核接口信号。
arm7tdmi总线接口信号分为时钟信号、中断请求信号、总线控制信号、调试信号、边界扫描信号、处理器模式与状态信号、存储器接口信号、协处理器接口信号和电源等9类。下面介绍各类主要信号:
1.时钟信号:
1)mclk(memory clock)
输入信号。arm7tdmi、存储器及系统其它部件在mclk时钟的控制下运行。为获得地址原始的mclk低电平定时信号,ale须用mclk的下降沿驱动成高电平信号,用mclk的上升沿驱动成低电平信号。
ale可以简单地反向mclk 信号得到,但是从mclk得到ale有延时,须特别注意。
2)nwait(not wait)
nwait是由存储器或者外部设备给出的信号,可以用于延长总线周期。当访问低速存储器或设备时,处理器将把访问时间延长若干个时钟周期,以等待低速存储器和设备的响应。在arm7tdmi内部,nwait与mclk进行“与”操作,当nwait为高时,arm7tdmi在mclk的控制下运行。
在任何的多周期存储器访问时,nwait低电平保持到最终得到数据锁存。
3)eclk(external clock)
eclk是内核的输出信号,由mclk扩展生成。当调试内核时,eclk是由tck产生的dclk信号。
2.中断请求信号:
1)nirq(not interrupt request)
低电平有效。如果nirq为低电平,将产生irq中断。
2)nfiq(not fast interrupt requests)
低电平有效。如果nfiq为低电平将产生fiq中断。
3)isync(synchronous interrupt)
如果nirq和nfiq与arm核时钟同步,isync为低电平;如果isync为高电平,要求nirq和nfiq与arm核时钟进行同步。
3.总线控制信号:
1)nreset(not reset)
nreset为低电平导致正在执行的指令非正常执行。nreset为低电平时,处理器在复位处执行指令的虚拟预取。如nreset一直为低,处理器执行内部周期,同时地址自动从复位处增值,最终地址会产生溢出,地址为0。
当nreset在低电平保持2个或2个以上时钟周期后,恢复为高电平一个时钟周期,arm7tdmi将从地址0×00重新开始执行。
2)highz(high impedance)
highz信号为高电平表示highz指令被加载到tap控制器。
3)nenin(not enable input)
在写周期,nenin 与nenout共同控制数据总线。在简单的系统中,nenin 为低,nenout 不定义。在一些较复杂的应用系统中,nenin允许外部系统操纵。
当外部设备驱动总线时,nenin可用于信号延时。
4)nenout( not enable output)
在数据写周期,nenout一直保持低电平。在共享总线应用中,nenout信号可用作辅助仲裁。
5)abe(address bus enable)
abe输入为低电平,强迫地址总线进入高阻状态。mas[1:0]、nrw、lock、 nopc 和 ntrans信号也有类似的情况。
如果系统不要求禁止地址驱动,abe应接到高电平。
6)ape(address pipeline enable)
当ape为高电平表示总线处于流水线方式,当ape为低电平,表示总线处于非流水线方式。ape的电平要保持到存储器控制信号指明另一个非顺序访问结束。地址总线、lock、nrw、mas[1..
0]、nopc、和ntrans与ape共同作用,以确定总线周期的类型。
系统可能包含dram和sram以及rom。为适应不同地址周期的需要,在mclk 为低时ape可以变换。ape信号控制arm7tdmi的地址总线可以在流水线方式或非流水线方式下操作。
ape信号的输入可以控制arm7tdmi的地址总线形成流水线或取消流水线。ape信号影响a[31:0]、nrw、 mas[1:
0]、 lock、nopc 和 ntrans信号。作为地址译码的结果,ape由被访问的存储体驱动,ape信号需要保持到另一个非顺序访问周期。通常,在同类存储器的猝发顺序访问中,ape保持为同一电平。
在只包含sram 和 rom的系统中,在产生要求的地址时,ape总是保持低电平;许多应用系统包含dram 和 sram/rom,为适应不同的地址定时要求,在mclk的低电平相位内,ape可以安全改变。
7)ale(adress latch enable)
在非顺序周期里,地址译码需要加入一个等待状态,用于控制地址输出的锁存器,通常地址信号需要稳定,直到周期结束。ale为高电平,系统地址将保持不变。它的作用与mas[1:
0], nrw, lock, nopc和 ntrans信号类似。
ARM体系结构
arm的体系结构。arm是随机存取存储器的意思。arm的英文是advanced risc machines,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。首先说一下arm微处理器的特点 1 体积小 低功耗 低成本 高性能 2 支持thumb 16位 arm...
ARM体系结构版本
arm体系结构的版本。前面一段时间我搞过一次 mcu编译与运行 的专题,详细介绍从 编译到 运行以及中断机制的流程,这里想在编译部分补充一些知识点。对于嵌入式开发人员,搭建开发环境是比较困难的一步,市面上针对arm开发的ide非常多,有的编译器诸如ads或者mdk等老编译器并不支持arm11或者co...
ARM体系结构变化
处理器的体系结构定义了指令集 isa 和基于这一体系结构下处理器的程序员模型。尽管每个处理器性能不同,所面向的应用不同,每个处理器的实现都要遵循这一体系结构。arm体系结构为嵌入系统发展商提供很高的系统性能,同时保持优异的功耗和面积效率。arm体系结构的发展。arm体系结构为满足arm合作者以及设计...