跳转至

第六章、ARM 流水线组织⚓︎

约 770 个字 预计阅读时间 4 分钟

Chapter1. 3 级流水线组织⚓︎

ARM7 系列(ARM v5TE 版本)采用
取指(放入指令流水线)➔ 译码 ➔ 执行(占有数据通路)

一条指令有 3 个周期 执行时间,但 吞吐率 是每个周期一条指令

流水线观察: - 所有指令都占用数据通路一个或多个相邻周期 - 在指令占用数据通路的每一个周期,都在前面的相邻周期占有译码逻辑 - 在第一个数据周期,每条指令为下 下条指令 发出取指信号 - 转移指令清空和重填指令流水线 - 保存处理器状态的寄存器堆:两个读端口一个写端口,访问寄存器 - 插式移位器:把一个操作数移位或循环移位 - ALU - 地址寄存器和增值器 - 选择和保存所有的存储器地址,并在需要时产生顺序地址 - 数据寄存器 - 保存传送到存储器或从存储器取出的数据(相当于缓存) - 指令译码器和控制逻辑

PC 必须在当前指令之前计数,增加 8 个字节(为下 下条指令 取指),试图通过 r15 访问 PC 需要考虑流水线的情况

Chapter2. 5 级流水线组织⚓︎

ARM9 系列(ARM v6 版本)
取指 ➔ 译码 ➔ 执行 ➔ 缓冲/数据(访问数据存储器或缓冲一周期)➔ 回写

程序的执行时间 $ T_{prog}= N_{inst}\times CPI/F_{clk} $$

N:指令数 CPI:每条指令的平均时钟周期数 F:处理器的时钟频率

因此,提高性能的方法: - 减小指令数量——➔ 优化编译器 - 提高时钟频率表 - 增加流水线级数,从而简化每一级的逻辑(即减少每个时钟周期内必须完成的最大工作量) - 减小 CPI

根本问题——存储器瓶颈(指令和数据在同一存储器,性能受到存储器带宽限制)
改进方法:一个时钟周期给出多于 32 位数据,哈佛结构

增加级数后 ➔ 可能产生后一条指令需要前一条指令的结果,然而前一条指令结果还未回写至寄存器,因此需要前推通路,从而可以使得结果能在级间传送。

三级流水线和五级流水线对比ARM7TDMI: Fetch -> Decode -> Execute ARM9: Fetch -> Decode -> Execute -> Memory -> Write

Chapter3、ARM 数据通路组织结构分析⚓︎

需要的时钟周期主要取决于要访问寄存器的次数

  • 数据处理指令:需要两个操作数、一个时钟完成所有数据通路操作
  • 数据传送指令
  • STR 需要两个时钟周期(计算地址、存储数据及自动变址)
  • LDR 需要三个时钟周期
  • 转移指令:需要三个时钟周期(计算地址、保存返回地址、填充流水线、修正 r14 链接地址)

地址寄存器是处理器数据通路与外界存储器之间的流水线寄存器