2.3 ARC EM处理器结构
ARC EM的设计采取了在保证面积小的前提下最大可能地提高性能的结构,其处理器结构非常精简,使得ARC EM的内核非常小,器件的功耗也随之降低。
本节主要介绍ARC EM微处理器的接口信号、内核结构、存储系统、存储保护机制以及调试。
2.3.1 接口信号
ARC EM处理器的接口信号主要有:时钟与复位信号、总线接口、中断接口、测试和调试接口、Halt&Run控制接口、代码保护Code Protect以及Actionpoint接口信号。
下面主要介绍总线接口、中断接口和测试/调试接口,其他接口以及相关接口的具体信号描述可参考文献9。
1.总线接口
ARC EM系列微处理器使用标准协议的总线接口,具体如图2-3所示。
图2-3 ARC EM的总线接口信号示意图
图2-3表明了ARC EM的总线接口信号,主要包括DMP存储器接口单元、IFQ/Instr Cache指令总线接口单元、DATACache数据总线接口单元以及APEX扩展总线接口单元、ICCM和DCCM直接存储器接口(Direct Memory Interface,DMI)。对于这些接口信号,ARC EM提供了基于AHB/AHB-Lite和BVCI总线接口信号。
对于主端接口,具体可配置的类型如下。
1)AHB总线接口:ARC EM处理器支持配置两个AHB主端接口,一个用于处理指令访存,另一个用于处理数据访存(Load/Store)。
2)AHB_Lite single接口:处理器可配置成单一的AHB_Lite主端接口,用于处理指令和数据访存操作。
3)AHB_Lite dual接口:处理器可配置成两个独立的AHB_Lite主端接口,一个用于处理指令访存,一个用于处理数据访存。
4)BVCI接口:处理器可配置成两个独立的BVCI主端接口,一个用于处理指令访存,一个用于处理数据访存。
对于从端接口,即ICCM和DCCM的DMI接口,支持可配置成AHB_Lite或者BVCI总线类型。
2.中断接口
ARC EM处理器内核可以配置多达240个外部中断。外部中断的引脚名称反映了每个中断的向量号,范围从16到255。当配置了内部计时器后,中断16和17会保留为内部计时器。在这种情况下,对应的中断信号不显示为外部中断输入。
3.测试和调试接口
ARC EM提供的测试接口符合IEEE 1149.1-2001 JTAG规范。此接口也可以使用2线JTAG IEEE 1149.7系统测试逻辑(STL)规范。4线JTAG接口可以通过使用IEEE 1149.7分接控制器转换成双线JTAG。4线JTAG接口信号如表2-2所示。除了可以通过JTAG串行接口进行调试,还支持通过BVCI调试接口进行高速调试。
表2-2 JTAG接口
2.3.2 内核结构
ARC EM采用三级流水线,可以有效地减少每个指令花费的平均周期数。从结构图2-4可以看出,EM的三级流水线结构依次为:取指级FA、执行级XA、完成级CA。其每一级的功能描述如下。
1.FA:Fetch,Decode 1取指
Fetch(FA)阶段的作用是获取并对齐最多32位的指令,并送往执行(XA)级。指令的来源主要有以下几种:
(1)ICCM
包含单周期访问的ICCM0和双周期访问的ICCM1。
(2)IFQ/ICACHE
两者都可从外存获取指令。IFQ是一个取指队列,可以配置队列深度和总线突发访问长度。
(3)Debug unit
用来注入debugger指令,支持debugger访问处理器资源。
(4)Micro-Code Sequencer(Code Density option)
用来发射需要由多条微指令完成的复杂指令和操作。
图2-4 ARC EM内核结构框图
此外,FA级还负责执行分支并选取下一个时钟的取指P C地址。为了支持可变长度指令执行,FA级需要预解码出当前取出的指令长度,并缓冲最多1 6位的当前取出的数据。如果寄存器文件是由后端工具Memory Compiler生成的宏单元,FA还需要解码出寄存器的读地址编号。
2.XA:Decode 2,Execute译码和执行
这一部分的主要功能如下:
㊣ 执行指令解码操作的其余部分。
㊣ 读取寄存器组并获取操作数。
㊣ 对可用功能单元发射指令。
㊣ 计算每条指令的结果。
这一级用以确定指令是否可以派遣到功能单元并开始执行。需要等待功能单元的可用性(结构冒险)和所需的数据是否可用(数据冒险RAW,WAW)。如果当前指令存在冒险,指令将会被延迟并在下个时钟继续调度。
一旦分支指令的结果已知,则分支单元可以决定是否重新启动该流水线。
“延迟槽”用以在指令转移到目标分支的位置之前,指示成功执行分支或跳转指令。
3.CA:Memory,Writeback存储器访问和回写寄存器
1)用来更新机器状态。
2)用来捕获从所有流水线返回的数据并将其写入寄存器文件。
3)用以访问辅助地址空间状态并处理异常事件(异常和中断)。
4)访问CCM、Dcache和外部数据/外设总线。
ARC EM处理器还采用了动态流水线发射技术。主流水线与其他流水线可同时运行不同的指令,处理器能动态管理流水线资源。
如图2-5所示为ARC EM的不同流水线结构。可以看出,处理器中除主流水线(Core pipeline)以外还存在访存流水线(DMP)、可配置的变长乘法流水线、APEX流水线以及除法流水线等。
图2-5 ARC EM流水线结构
如果一条指令经过CA级,则称为指令完成。完成的指令必将立即或者在后续某个时间点更新处理器状态。如果指令完成但仍需要继续执行,则只将PC等必要的处理器状态更新,其他处理器状态暂时不更新。指令在相应的流水线继续运行,直到执行结果回写寄存器文件和标志寄存器等处理器状态,称之为指令结束。如果已经完成但未结束的指令与当前XA待发射的指令存在读或写等数据相关性,指令调度就会暂停。
动态指令执行在一定程度上允许乱序,并能确保流水线进程的正确运行,从而提升了处理器性能。
2.3.3 存储系统
存储系统由多种存储器组件组合而成,其中每个组件均可根据动态存储器映射的需求进行配置。ARC EM处理器的存储器空间被分为16个相等的部分,如图2-6所示。存储器地址的高4位用来编码(区分)每个区域。存储器区域主要用于映射不同类型的存储器。
ARC EM处理器包含以下可用存储组件:
CCMs紧耦合存储器、ICCM 指令紧耦合存储器(ICCM0、ICCM1)、DCCM数据紧耦合存储器
IFQ指令预取缓冲
DMI数据存储启动器
外设数据总线
Cache高速缓存:指令缓存(IC)、数据缓存DC
如图2-7所示为对存储组件的取址访问。通过BVCI/AHB总线访问IFQ、IC和ICCM内部的指令。
如图2-8所示为对存储组件内部的数据操作。通过BVCI/AHB/AHB-lite总线对DC和DCCM内部的数据进行读、写操作。
下面详细介绍CCM紧耦合存储器、IFQ指令预取缓冲以及DMI数据存储器等主要存储组件。
1.CCM紧耦合存储器
ARC EM处理器支持两种类型的CCM:指令紧耦合存储器(ICCM0,ICCM1)及数据紧耦合存储器(数据通路DCCM)。ICCM和DCCM是根据应用可选择进行配置的,CCM可以与其他的存储器组件(如取指队列和DMI)共存。
图2-6 ARC EM存储器空间划分
图2-7 指令访问通道
图2-8 数据访问通道
EM处理器和其他功能模块均可直接访问CCM模块。作为处理器内核私有的局部存储器,处理器对CCM访问不产生任何总线通信,其访问时间是确定的,可大大提高性能并保证实时性;并且,对CCM进行操作,比操作外部总线上的存储器或高速缓存的功耗低。CCM可用于锁定对性能较关键的代码或数据。这非常合适于关键的系统级程序(如中断处理和其他对时间敏感的任务)。
与高速缓存不同,ICCM和DCCM需要启动代码,以编程方式进行初始化。每种类型CCM都分配有与之对应的4位基地址辅助寄存器,CCM映射的存储器空间区域由基地址辅助寄存器指定。其中ICCM只能被分配在0~7区域,DCCM只能被分配在8~15区域。一个CCM将占据整个存储区域空间,在32位地址的情况下,区域大小为256MB。当CCM的容量小于区域大小时,CCM的内容将重复并填充整个256MB区域。
ARC EM处理器允许系统中的其他主端设备通过一个标准的目标接口(BVCI或AHB-Lite)访问其CCMs,如图2-9所示。
ICCM和DCCM都支持。
所有CCM提供单个端目标总线接口,处理外部访问具有最高优先级。
接下来具体介绍ICCMs和DCCM。
(1)ICCM特性
ARC EM处理器有ICCM0和ICCM1,如图2-10所示。ICCM具有以下特点:
1)ICCM可以用于指令访问以及加载/存储数据。
2)ICCM0的工作频率与处理器内核频率一致,在发出请求的下个时钟周期返回数据。
3)ICCM1的工作频率为处理器内核时钟的二分频,在发出请求的两个时钟周期之后返回数据。ICCM1可以利用双组(Bank)存储器来弥补缓慢的访问时间。
图2-9 CCMs目标端口
图2-10 ICCM
4)ICCM1可以与IFQ指令预取缓冲配合使用。此时,从ICCM1中读取的指令将缓存到IFQ中。
5)ICCM支持通过指令LD/ST访问。
ICCM允许自修改代码,但是过多使用这种方式将导致系统性能下降。
(2)DCCM特性
ARC EM处理器可通过加载/存储访问DCCM存储器。DCCM的工作频率与处理器内核频率一致,在一个时钟发出请求之后可返回数据。DCCM可以单独使用,也可与一个数据缓存或数据存储器主端接口同时使用。
2.IFQ指令预取缓冲
IFQ是一个可选组件,可通过外部总线的突发模式预取即将执行的指令。IFQ可作为一个低成本的替代指令缓存。IFQ支持的配置选项包括队列大小选项(1、2、4、8或16个32位)和突发长度大小(1、2、4或8个32位)。突发长度大小不能超过队列大小。IFQ的结构如图2-11所示。
3.DMI数据存储启动器
DMI(Data Memory Initiator)主端接口是一个可选组件,在没有数据高速缓存的配置下,可以容许处理非突发式外部总线请求。
4.外设数据总线
外设数据总线是一个可选组件,允许处理器内核使用专用的总线连接外设。运行期间可通过AUX_DMP_PER辅助寄存器更改映射的地址范围。
5.Cache高速缓存
ARC EM处理器支持可选择配置数据和指令高速缓存。
图2-11 IFQ结构
ARC EM处理器的存储器访问指令提供数据Cache使能和直通(direct)操作:存储器访问指令后缀为.di(ld.di和st.di)将在进行相应的Load/Store操作时旁通数据Cache。另外,ARC EM处理器的数据Cache,通过设置数据缓存访问寄存器DC_DATA、数据缓存控制寄存器DC_CTRL等,还能提供高级调试功能,允许程序员对相应数据Cache RAM里的数据内容进行查看和修改。
具体设置操作见参考文献9的第5章。
2.3.4 存储保护机制
ARC EM处理器的存储器保护单元(MPU)为各个存储器组件提供了保护。通过指定基地址和大小,将地址空间划分成关联特定属性的区域(例如读、写和执行),如果试图访问某区域,但是其关联的属性并不允许该访问,则ARC EM处理器将产生保护冲突异常,并执行对应的异常处理程序。注意,MPU区域和16个存储器映射区域有本质的区别。MPU区域可通过编程对每个区域的基地址和大小动态调整,数量也可以配置,而储存器映射区域为固定的16个等分。
ARC EM系列处理器为用户模式和内核模式提供独立的读、写和执行权限。存储器保护使得操作系统能够保护其代码不受非法或意外访问进程的数据的影响。用户还可以定义默认内核和用户访问权限之外的所有存储器区域的权限。多个MPU区域允许重叠并且根据区域编号,优先采用编号较小的区域中的属性。
ARC EM处理器的存储器保护单元关键特性如下:
支持对特定存储器区域代码属性编程,如允许或禁止执行该区域代码。
支持对特定存储器区域数据的读写属性编程。
单独的内核和用户模式的读、写和执行权限。
可配置1、2、4、8或16个存储器区域。
各区域可以单独或独立编程。
能够设置默认权限,它适用于在所有编程保护以外区域访问。
例如,连续区域如图2-12所示。
图2-12 保护单元存储分布
在这个例子中,存储空间具有以下特点:
1)存储器的0到2GB部分区域是用户可执行区域。
2)接下来的2GB到3GB区域是用户的读、写操作区。
3)3GB到4GB部分为用户的外设读、写操作区。
2.3.5 调试
ARC EM处理器拥有丰富的调试接口以方便用户开发调试,包括:JTAG、Actionpoints、SmaRT。主机处理器可以通过使用特殊的调试功能来控制EM处理器。调试功能确保主机执行以下操作:
通过状态和调试寄存器启动和停止处理器。
通过控制寄存器单步调试处理器。
查看和修改寄存器文件和存储器中的值。
通过读取追踪堆栈中的数据,分析代码执行。
通过使用BRK指令设置软件断点。
有了这些功能,主机可以提供软件断点、单步执行和程序的跟踪处理器。处理器也可以停止自己与标志指示。
1.标准JTAG接口
ARC EM处理器提供标准的4线JTAG调试接口,通过它将MetaWare调试器与用户应用程序连接,进行调试。
2.2线JTAG接口
另外,ARC EM处理器还提供两线JTAG调试接口,如图2-13所示。这是一个额外的模块,可用来调试主机和现有的5线JTAG端口之间的连接。
图2-13 2线JTAG
3.Actionpoints
ARC EM系列处理器提供可选的断点调试系统Actionpoints。
Actionpoints支持断点和观察点。在执行特定的一条或一系列指令时,将会触发断点调试。当检测到特定执行地址或数据访问的存储器地址值、辅助寄存器读(LR)和写(SR)时,以及特定的数据值读写到存储器或者辅助寄存器时,将会触发观察点。断点和检查点都可以被编程。某些Actionpoints在触发指令完成之前生效,而有的则在触发指令完成后生效。所有断点寄存器只能在内核模式下进行操作;在用户模式下访问这些寄存器时会引发权限冲突异常。
注意Actionpoints和软件断点的区别。软件断点一般是将某个地址的指令替换成BRK指令,当处理器执行到BRK指令时,进入暂停状态以供调试器访问。Actionpoints是一个硬件逻辑,其断点和观察点数量都是有限的,并取决于处理器配置。并且Actionpoints触发条件不限于执行的PC地址一种。
4.SmaRT
ARC EM系列处理器还提供可选的小型实时跟踪模块(SmaRT)。
小型实时跟踪(SmaRT)是一个可选片上调试硬件组件,进行指令跟踪。智能存储最近的、非顺序执行的指令的地址。MetaWare确保SmaRT调试器的使用,并且显示指令跟踪的历史记录。当处理器停止时,MetaWare调试器通过JTAG端口读取指令跟踪信息并保存。
小型实时跟踪结构如图2-14所示。其特征如下:
用不同的堆栈大小(从8到4096)记录程序流的变化。
任何非顺序执行的指令都将被存储,包括直接跳转、分支跳转、中断和异常以及循环。多个分支到相同的位置(内环)存储为单个条目,以最大化堆栈的使用。
节能功能包括关闭模块时钟和当不在跟踪模式时清空所有的信号输入。MetaWare调试器显示跟踪信息,不需要单独的专用跟踪端口。
图2-14 SmaRT结构