ARM 处理器内核
简要定义… 可综合内核(软核) 固化宏单元(硬核) 测试芯片 ARM926EJ-S ARM7TDMI-S ARM1026EJ-S
议程 ARM7TDMI 处理器内核系列 ARM9TDMI 处理器内核系列 ARM10E处理器内核系列 其他处理器
什么是 ARM7TDMI? ARM7TDMI 是基于 ARM7 内核 3 级流水线---0.9MIPS/MHz 冯.诺依曼架构 CPI(Cycle Per Instruction) 约为1.9 T - Thumb 架构扩展, 提供两个独立的指令集: ARM 指令,均为 32位 Thumb指令,均为 16位 两种运行状态,用来选择哪个指令集被执行 D - 内核具有Debug扩展结构 M - 增强乘法器 (32x8) 支持64位结果. I - EmbeddedICE-RT逻辑---提供片上断点和调试点支持
ARM7TDMI 内核信号 ARM7TDMI 内核 时钟 存储器接口 配置 中断 存储器管理 总线控制 协处理器接口 电源 nM[4:0] MCLK nIRQ nFIQ nRESET BUSEN BIGEND ISYNC nWAIT VDD VSS APE DBE 协处理器接口 存储器管理 存储器接口 ABORT nOPC CPB CPA nCPI nTRANS nM[4:0] MAS[1:0] nRW nMREQ LOCK SEQ nENOUT A[31:0] DOUT[31:0] DIN[31:0] D[31:0] 电源 总线控制 时钟 配置 中断
ARM7TDMI 方框图 控制信号 地址总线 BUS Splitter ARM7TDM 内核 数据总线 Embedded ICE 逻辑 DOUT[31:0] ARM7TDM 内核 DIN[31:0] 数据总线 D[31:0] Embedded ICE 逻辑 TAP 控制器 JTAG 接口
ARM7TDMI 内核 地址 自增器 地址寄存器 寄存器 解码站 解码 乘法器 读数据 寄存器 桶形 移位器 写数据 寄存器 ABE A[31:0] 地址 自增器 地址寄存器 Incrementer P C BIGEND MCLK 寄存器 nWAIT PC Update 指令 解码 nRW A L U B u s MAS[1:0] 解码站 A B u s B u s ISYNC 指令 解码 nIRQ 乘法器 nFIQ nRESET 及 ABORT nTRANS 读数据 寄存器 nMREQ 桶形 移位器 SEQ 控制 逻辑 LOCK nM[4:0] 写数据 寄存器 nOPC nCPI 32 位 ALU CPA CPB DBE D[31:0]
外部地址产生 PC[31:2] ARM State PC[31:1] Thumb State ALU[31:0] 地址 A[31:0] 寄存器 A[31:0] 0x1C 向量 INC 0x00 自增器
指令流水线 为增加处理器指令流的速度,ARM7 系列使用3级流水线. PC指向正被取指的指令,而非正在执行的指令 允许多个操作同时处理,比逐条指令执行要快。 PC指向正被取指的指令,而非正在执行的指令 ARM Thumb PC PC Fetch 从存储器中读取指令 PC - 4 PC-2 Decode 解码指令 寄存器读(从寄存器Bank) 移位及ALU操作 寄存器写(到寄存器Bank ) PC - 8 PC - 4 Execute
最佳流水线 周期 1 2 3 4 5 6 该例中用6个时钟周期执行了6条指令 所有的操作都在寄存器中(单周期执行) 1 2 3 4 5 6 操作 ADD SUB MOV AND ORR EOR CMP RSB Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Fetch 该例中用6个时钟周期执行了6条指令 所有的操作都在寄存器中(单周期执行) 指令周期数 (CPI) = 1
LDR 流水线举例 周期 1 2 3 4 5 6 该例中,用6周期执行了4条指令 指令周期数 (CPI) = 1.5 操作 Fetch 1 2 3 4 5 6 操作 Fetch Decode Execute ADD SUB LDR MOV AND ORR Fetch Decode Execute Fetch Decode Execute Data Writeback Fetch Decode Execute Fetch Decode Fetch 该例中,用6周期执行了4条指令 指令周期数 (CPI) = 1.5
分支流水线举例 周期 1 2 3 4 5 流水线被阻断 注意:内核运行在ARM状态 地址 操作 0x8000 BL 0x8004 X 1 2 3 4 5 地址 操作 0x8000 BL 0x8004 X 0x8008 XX 0x8FEC ADD 0x8FF0 SUB 0x8FF4 MOV Fetch Decode Execute Linkret Adjust Fetch Decode Fetch Fetch Decode Execute Fetch Decode Execute Fetch Decode Fetch 流水线被阻断 注意:内核运行在ARM状态
中断流水线举例 IRQ 中断的反应时间最小=7周期 IRQ 周期 1 2 3 4 5 6 7 8 地址 操作 0x8000 ADD 1 2 3 4 5 6 7 8 地址 操作 0x8000 ADD 0x8008 MOV 0x0018 B (to 0xAF00) 0x8004 SUB 0x001C XX 0x0020 XXX 0xAF00 STMFD 0xAF04 MOV 0xAF08 LDR 0x800C X F D E F Decode IRQ Execute IRQ Linkret Adjust F Linkret Adjust F F D E F D F F D E F D F IRQ 中断的反应时间最小=7周期
对齐 存储器访问必须始终适当地保持地址对齐 用‘Data Abort’ 异常来检测无效的非对齐数据存取 非对齐地址将产生不可预测的/未定义的结果 用‘Data Abort’ 异常来检测无效的非对齐数据存取 扩展逻辑要求,或使用MMU在 720T, 920T, 926E-S, 1020E 谨防指令读取时出现非对齐 非对齐数据存取能够完成, 但不是用 LDR 使用 LDRB, STRB 传递字节,或使用LDM 加移位/屏蔽 字节访问 (字节对齐) 半字访问 (半字对齐) 字访问 (字对齐) 3 2 1 7 6 5 4 8 a c e 9 b d f
ARM 存储器接口 顺序周期 (S cycle) (nMREQ,SEQ存储器请求信号) 非顺序周期(N cycle) (nMREQ,SEQ存储器请求信号) nMREQ = 0, SEQ = 0 ARM 内核要求如下地址转换: 与前一周期的地址不相关. 内部周期(I cycle) (nMREQ,SEQ存储器请求信号) nMREQ =1, SEQ = 0 ARM 内核不要求地址转换,因为它在完成一个内部功能,不需要取指 协处理寄存器转换周期(C cycle) (nMREQ,SEQ存储器请求信号) nMREQ = 1, SEQ = 1 ARM 内核希望用总线协处理器通信,但不要求存储器系统的任何动作
T标志位的作用 阶段 1 阶段 2 Fetch Decode Execute Mux 32-bit data D[31:0] 1 Mux 1 Mux 16 16 Thumb 指令 解码 16 Mux ARM 指令 解码 A[1] 1 T标志
带Cache的ARM7TDMI ARM7xxT ARM710T 8K 统一的 cache 内存管理单元 写缓冲 JTAG 和非 AMBA 信号 CP15 控制 逻辑 ARM7TDMI 内核 地址 MMU 写 缓冲 AMBA 总线 接口 AMBA 接口 地址 数据 数据写 数据读 Cache ARM7xxT ARM720T 同ARM710T,但支持 WinCE ARM740T 8K 统一的 cache 内存管理单元 写缓冲 ARM710T 8K 统一的 cache 完整的内存管理单元(mmu),支持虚拟地址和存储器保护 写缓冲
ARM7TDMI-S ARM7TDMI-S 是ARM7TDMI 的完全可综合版本 指令集和周期与ARM7TDMI 固化版本兼容 完全可综合的 RTL 使用了纲要设计构件的组件 ALU 寄存器组 单时钟设计(上升沿)单一总线接口
SecurCore SC100 第一个适合安全应用的32位 RISC 处理器 可用于smart 卡和其他有安全性要求的嵌入式领域 基于ARM7内核的专为安全解决方案设计 完全可综合的,全静态设计 提供安全的存储器保护单元 Thumb指令支持,提高代码密度和系统性能 特殊的、独一无二的防伪造设计 小尺寸 (1mm2 典型的 0.25 工艺) 低功耗 (< 0.7mW/MHz at 2.5V)
小测验 1) 一条简单的算术操作( 如: ADD )要占用几个周期? 2) ARM7TDMI指令流水线有几个阶段? 3) ARM7TDMI 是否使用 ALU 计算地址? 4) ARM在存储器里,可寻址几种类型的数据? 5) 试举一非顺序周期的例子? 6) 数据总线的哪一半可被内核用作Thumb 指令?
议程 ARM7TDMI 处理器内核系列 ARM9TDMI 处理器内核系列 ARM10E处理器内核系列 其他处理器
ARM9TDMI Harvard架构 5 级流水线 实现了以下改进: 增加了可用的存储器宽度 可以实现对指令和数据存储器的同时访问 指令存储器接口 数据存储器接口 可以实现对指令和数据存储器的同时访问 5 级流水线 实现了以下改进: 改进 CPI 到 ~1.5 提高了最大时钟频率
ARM or Thumb Inst Decode ARM9TDMI流水线的变化 ARM7TDMI ARM decode Instruction Fetch Thumb®ARM decompress Reg Read Reg Write Shift ALU Reg Select FETCH DECODE EXECUTE ARM9TDMI ARM or Thumb Inst Decode Instruction Fetch Memory Access Reg Write Shift + ALU Reg Decode Reg Read FETCH DECODE EXECUTE MEMORY WRITE
MU逻辑单元包含有:多路复用器,乘法器和桶形移位器 ARM9TDMI数据通道 (1) 数据总线 字节旋转 /符号扩展. 双向 缓冲器 DD DINFWD 字节/半字 C 字节/半字 复制 指令递增 数据递增 寄存器 Bank 结果 B MU 逻辑 ALU DA A IA 向量 地址总线 指令地址总线 MU逻辑单元包含有:多路复用器,乘法器和桶形移位器
ARM9TDMI 数据通道 (2) MU 逻辑 结果 DINFWD B BDATA 寄存器 Bank 移位器 Imm A ALU 乘法器 PSR ADATA 锁存 锁存 (至 IA 生成逻辑)
LDR互锁 本例中,用了7个时钟周期执行6条指令, CPI = 1.2 。 3 4 5 6 7 8 9 操作 ADD R1, R1, R2 F D E W SUB R3, R4, R1 F D E W LDR R4, [R7] F D E M W ORR R8, R3, R4 F D I E W AND R6, R3, R1 F I D E W EOR R3, R1, R2 F D E W F – 取指(Fetch)D – 解码(Decode) E – 执行(Execute) I – 互锁(Interlock)M – 存储器(Memory )W –写回( Writeback) 本例中,用了7个时钟周期执行6条指令, CPI = 1.2 。 LDR指令之后立即跟一条数据操作指令,由于使用了相同的寄存器,将会导致互锁 。
最佳流水线 本例中,用了6个时钟周期执行6条指令, CPI = 1。 LDR指令没有引起流水线互锁 周期 1 2 3 4 5 6 7 8 9 F D E W F – 取指(Fetch)D – 解码(Decode) E – 执行(Execute) I – 互锁(Interlock)M – 存储器(Memory )W –写回( Writeback) M 操作 ADD R1, R1, R2 SUB R3, R4, R1 LDR R4, [R7] AND R6, R3, R1 ORR R8, R3, R4 EOR R3, R1, R2 本例中,用了6个时钟周期执行6条指令, CPI = 1。 LDR指令没有引起流水线互锁
LDM互锁 (1) 本例中,用了8个时钟周期执行5条指令, CPI = 1.6 在LDM期间,有并行的存储器访问和回写周期 周期 1 2 3 4 5 6 7 8 9 操作 LDMIA R13!, {R0-R3} F D E M MW W SUB R9, R7, R8 F D I I I E W STR R4, [R9] F I I I D E M W ORR R8, R4, R3 F D E W AND R6, R3, R1 F D E F – 取指(Fetch)D – 解码(Decode) E – 执行(Execute)MW-存储器和回写同时执行 I – 互锁(Interlock)M – 存储器(Memory )W –写回( Writeback) 本例中,用了8个时钟周期执行5条指令, CPI = 1.6 在LDM期间,有并行的存储器访问和回写周期
LDM 互锁 (2) 本例中,用了9个时钟周期执行5条指令, CPI = 1.8 操作 LDMIA R13!, {R0-R3} SUB R9, R7, R3 ORR R8, R4, R3 AND R6, R3, R1 1 2 3 4 5 6 7 8 STR R4, [R9] 9 F – 取指(Fetch)D – 解码(Decode) E – 执行(Execute) I – 互锁(Interlock)M – 存储器(Memory )W –写回( Writeback) F D E W M MW I 本例中,用了9个时钟周期执行5条指令, CPI = 1.8 此处SUB 使用了 R3,增加了一个额外的互锁周期来完成该寄存器数据的获取 这种情况对任何LDM 指令,像带IA, DB, FD,等,都会发生 。
ARM9TDMI系统举例 数据 存储器 ARM9TDMI 指令 注意: 数据接口必须能够读取指令存储器中的数据。 CTRL DA[..] DD[..] IA[..] ID[..] GLUE 注意: 数据接口必须能够读取指令存储器中的数据。 为调试方便,建议数据接口能够读写指令存储器。
带Cache的ARM9TDMI ARM9xxT ARM920T ARM940T 2x 16K caches MMU 支持虚拟地址和内存保护 写缓冲 D Cache GLUE 外部 存储器 ARM9TDMI MMU I Cache ARM940T 2x 4K caches MPU 写缓冲 ARM9xxT
ARM9E-S 系列概述 ARM9E 基于 ARM9TDMI 内核,有以下扩展和增强: ARM946E-S v5TE架构 ARM966E-S 单周期 32x16 乘法器 EmbeddedICE 逻辑 RT 改进的 ARM/Thumb 交互操作 新的32x16和 16x16 乘法指令 新的计数到零指令 新的饱和算术指令 ARM946E-S ARM9E-S 内核 指令和数据cache, 大小可选择 指令和数据RAM,大小可选择 保护单元 AHB 总线接口 ARM966E-S 与 ARM946E-S相似, 但无 cache。 v5TE架构
ARM926EJ-S 概述 Jazelle状态允许直接执行Java 8位码 ARM926EJ-S ARM9E-S 内核 可配置的cacheTCM TCM(Terminal-to-ComputerMultiplexer终端设备至计算机多路转接器) 内存管理单元 双重 32位 AHB 总线接口 (多层)
小测验 1) Harvard结构带来了哪些优势? 2) ARM9TDMI流水线有几级? 3) 在流水线的哪一个阶段读寄存器? 3) 在流水线的哪一个阶段读寄存器? 4) 寄存器 bank由几个读或写端口? 5) 什么条件下会出现互锁?
议程 ARM7TDMI 处理器内核系列 ARM9TDMI 处理器内核系列 ARM10E处理器内核系列 其他处理器
ARM10E 系列概述 ARM1020E ARM1022E v5TE架构 CPI 1.3 6 级流水线 静态分支预测 32kB 指令cache和32kB数据cache 支持“Hit under miss” 非阻塞的执行单元 每周期64 位的 LDM / STM操作 EmbeddedICE逻辑 - RT-II 支持新的 VFPv1 结构 ARM1022E 同上,除了cache大小为16kB 对SUDL(single user design license )有效
ARM10 与ARM9的流水线对比 ARM9TDMI ARM10 FETCH DECODE EXECUTE MEMORY WRITE ARM 或 Thumb 指令解码 指令 取指 寄存器 访问 寄存器 写 移位+ ALU 寄存器 译码 寄存器 读 FETCH DECODE EXECUTE MEMORY WRITE ARM10 数据+ 分支地址 生成 分支 预测 ARM 或 Thumb 指令解码 数据 Cache 接口 寄存器 读 + 结果 前向迁移 记分板 指令地址 生成 协处理器 数据接口 寄存器 写 移位+ ALU 协处理器 指令发出 指令 取指 乘 加 乘法 FETCH ISSUE DECODE EXECUTE MEMORY WRITE
ARM10 整数单元数据通道 结果 数据装载 B 移位器 ALU B Imm 寄存器 Bank PC 写端口 A A PSR CLZ 乘法器
顺序代码的执行 开始于64位的对齐地址 周期 1 2 3 4 5 6 7 8 9 Address Operation 顺序代码的执行 开始于64位的对齐地址 周期 1 2 3 4 5 6 7 8 9 Address Operation Fetch to Buffer 0x07320 ADD B F I D E Wb 0x07324 ADD A C F I D E Wb 0x07328 SUB B C F I D E Wb 0x0732C LDR A B C F I D E M Wl 0x07330 ADD A B F I D E Wb 0x07334 MUL A F I D E F - Fetch I - Issue D - Decode E - Execute M – Memory Wb - Writeback Wl - Write to register using load port
ARM1026EJ-S 概述 Jazelle状态允许直接执行Java 8位码 ARM1026EJ-S ARM10EJ-S 内核 可配置的cache和 TCM 支持MMU 和MPU 两个 64位 AHB 总线接口 (多层)
议程 ARM7TDMI 处理器内核系列 ARM9TDMI 处理器内核系列 ARM10E处理器内核系列 其他处理器
Intel® StrongARM 概述 ARM V4 架构 (无Thumb 支持) 5级流水线,降低跳转损耗-stage pipeline, reduced branch penalty 改进的乘法器(典型地比ARM9TDMI 快2个周期) 不支持 Multi-ICE 调试 (JTAG 限制在连通性测试) 无外部协处理器接口 SA-110: 16K 指令和数据 caches, 8 x 16 字节写缓冲. SA-1100/1110: 片上外设,存储器控制器 更小的 cache 容量 PID (进程标识符)寄存器 指令断点,通过 CP15
Intel® XScale™ 概述 V5TE 兼容架构 7-8级流水线带统计分支预测 32k的数据和指令 Cache, 外加2k的数据Minicache 8口写缓冲,4口填充和追加缓冲 完整的32位协处理器接口 调试和性能监控逻辑(通过CP14 ) 乘-加模块(作为CP0 ) 可配置的内核时钟速度100-733MHz ,来自 33-66MHz 输入时钟 异步输入总线时钟可到100 MHz (最大总线内核时钟的1/3 ) 举例:XScale 80200: 中断控制器 (implemented as CP13) ECC 存储器保护