![](https://csdnimg.cn/release/download_crawler_static/81718424/bg1.jpg)
技术纵横 T ECH NOL OGY REVIEW
24
2009 年第 3 期
adv@mesnet.com. cn( 广告专用 )
ARM 流水线关键技术分析与代码优化
大连理工大学
邱铁 西方 迟宗正
摘 要
流水线技术是广泛应用在微处理器体系结构中的关键技术 。本文根据 ARM 系列处理器采用的三级和
五级流水线的工作原理 , 对各种冲突情况下的流水线运行情况进行了详细分析 , 最后通过实例分析提出
在编程阶段提高流水线性能的方法 。
关键词
ARM 处理器 流水线 性能分析 冲突避免 代码优化
引 言
流水线技术通过多个功能部件并行工作来缩短程序执
行时间 , 提高处理器核的效率和吞吐率 , 从而成为微处理器
设计中最为重要的技术之一。 ARM7 处理器核使用了典型
三级流水线的冯 诺伊曼结构 , ARM 9 系列则采用了基于
五级流水线的哈佛结构。通过增加流水线级数简化了流水
线各级的逻辑 , 进一步提高了处理器的性能
[1]
。
ARM 7 的三级流水线在执行单元完成了大量的工
作, 包括与操作数相关的寄存器和存储器读写操作、 A LU
操作以及相关器件之间的数据传输。执行单元的工作往
往占用多个时钟周期 , 从而成为系统性能的瓶颈。 A RM 9
采用了更为高效的五级流水线设计 , 增加了 2 个功能部件
分别访问存储器并写回结果 , 且将读寄存器的操作转移到
译码部件上 , 使流水线各部件在功能上更平衡
[ 2]
; 同时其
哈佛架构避免了数据访问和取指的总线冲突。
然而不论是三级流水线还是五级流水线 , 当出现多周
期指令、跳转分支指令和中断发生的时候 , 流水线都会发
生阻塞 , 而且相邻指令之间也可能因为寄存器冲突导致流
水线阻塞 , 降低流水线的效率。本文在对流水线原理及运
行情况详细分析的基础上 , 研究通过调整指令执行序列来
提高流水线运行性能的方法。
1 ARM7/ ARM9 流水线技术
1. 1 ARM7 流水线技术
ARM 7 系列处理器中每条指令分取指、 译码、执行三
个阶段 , 分别在不同的功能部件上依次独立完成。取指部
件完成从存储器装载一条指令 , 通过译码部件产生下一周
期数据路径需要的控制信号 , 完成寄存器的解码 , 再送到
执行单元完成寄存器的读取、 A LU 运算及运算结果的写
回 , 需要访问存储器的指令完成存储器的访问
[ 3]
。流水线
上虽然一条指令仍需 3 个时钟周期来完成 , 但通过多个部
件并行 , 使得处理器的吞吐率约为每个周期一条指令 , 提
高了流式指令的处理速度 , 从而可达到 0. 9 M IPS/ M H z
的指令执行速度。
在三级流水线下 , 通过 R15 访问 PC( 程序计数器 ) 时
会出现取指位置和执行位置不同的现象。这须结合流水
线的执行情况考虑 , 取指部件根据 PC 取指 , 取指完成后
PC+ 4 送到 PC, 并把取到的指令传递给译码部件 , 然后取
指部件根据新的 PC 取指。因为每条指令 4 字节 , 故 PC
值等于当前程序执行位置 + 8。
1. 2 ARM9 流水线技术
ARM 9 系列处理器的流水线分为取指、 译码、执行、
访存、回写。取指部件完成从指令存储器取指 ; 译码部件
读取寄存器操作数 , 与三级流水线中不占有数据路径区别
很大 ; 执行部件产生 A LU 运算结果或产生存储器地址
( 对于存储器访问指令来讲 ) ; 访存部件访问数据存储器 ;
回写部件完成执行结果写回寄存器
[ 4]
。把三级流水线中
的执行单元进一步细化 , 减少了在每个时钟周期内必须完
成的工作量 , 进而允许使用较高的时钟频率 , 且具有分开
的指令和数据存储器 , 减少了冲突的发生 , 每条指令的平
均周期数明显减少。
2 三级流水线运行情况分析
三级流水线在处理简单的寄存器操作指令时 , 吞吐率
为平均每个时钟周期一条指令 ; 但是在存在存储器访问指
令、跳转指令的情况下会出现流水线阻断情况 , 导致流水