第六章、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 链接地址)
地址寄存器是处理器数据通路与外界存储器之间的流水线寄存器