01.为什么要引入流水线技术
嵌入式处理器执行指令时,一般步骤为:首先从存储器中读取指令,然后对该指令进行译码,识别出被执行的指令属于哪一种指令,然后再从指令中提取到操作数并进行组合,接着根据需要将数据存储到存储器中,最后将结果写到寄存器中。但是,在实际运行过程中,并非所有的指令都需要执行所有的步骤,并且这些步骤所需要用到的硬件功能往往也是不同的。假如某条指令结束之前,后一条指令还未开始,那么在处理指令的每一个步骤都只需使用少部分的硬件,因而硬件资源的使用率并不高。
那么如何改善硬件资源的使用率呢?可以使用流水线技术,即在当前的指令结束之前,就开始执行后一条指令。RISC处理器执行指令时就采用了流水线技术,在对当前指令进行译码的同时,读取下一条指令,从而提高了指令执行的效率。和汽车制造的流水生产线技术一样,在每一个阶段都只进行特定的处理器任务。
02.处理器中流水线技术的应用
到ARM7为止的ARM处理器都使用了三级流水线技术:
1)取指:从寄存器中加载一条指令;
2)译码:识别指令,并准备下一个周期需要用到的数据通路的控制信号。
3)执行:处理指令,将所得到的结果写到寄存器中。
在处理器执行简单的数据处理指令的时候,原本完成一条指令平均需要3个时钟周期,那么使用流水线技术,就能将一条指令的平均完成时间缩短至1个时钟周期。因而三级流水线技术对于到ARM7为止的ARM处理器而言性价比都是比较高的,能满足其高性能的要求。
如果处理器要获得更高的性能,有两种方法:一是提高时钟频率,但这会缩短指令的执行周期,就需要简化每一级中流水线的逻辑,增加流水线的级数;二是减少每一条指令的平均指令周期。
三级流水线的ARM核在每一个时钟周期都会访问存储器:读取指令或者进行数据传输,只是利用不使用存储器的周期进行性能改善,这对于处理器而言无法获得更高的性能。而减少指令的平均指令周期数,就需要在每个时钟周期内让存储器给出多于一个的数据,即让一个存储器给出32位以上的数据或者为指令和数据各设一个存储器。
因而,较高性能的ARM核采用了五级流水线,以提高时钟频率,并且为指令和数据分别设置了一个存储器,以减少每条指令的平均周期数。ARM9TDMI使用的就是典型的五级流水线技术:
1)取指:从存储器中加载一条指令并放入指令流水线;
2)译码:识别所读取的指令,并从寄存器堆中提取操作数;
3)执行:将其中一个操作数移位,并在存储器地址中产生结果,其中对于load、store指令则是计算存储器地址;
4)缓冲/数据:如果不需要数据,就只是缓冲一个时钟周期,如果需要数据就访问数据存储器获取数据;
5)回写:将处理指令所得到的结果写到寄存器堆中。
在Cortex-A8中ARM核采用了十三级流水线以提高性能。
03.流水线技术不适用的情况
在处理器处理某些指令或者当指令过于复杂时,流水线的使用效率就会降低,甚至难以使用流水线实现。
例如当前指令的结果在后一条指令取数的时候还没有产生,并且后一条指令的操作数是当前指令的结果,那么后一条指令必须中断直到等到前一条指令的结果产生。
此外,如果出现跳转指令,并且跳转目标的计算结果会影响后一条指令的取指,那么就必须中断,但是,在进行译码之前,无法确定当前指令属于跳转指令,而此时已经按照流水线已经完成了后一条指令的取指,那么只能放弃该指令的取指结果,重新进行取指。如果跳转指令发生在执行指令的阶段,那么需要放弃已经取指的后两条指令,这无疑会降低流水线的使用效率。
因而,只有按照相似步骤执行的指令,才能发挥流水线技术的使用效率,达到预期提高处理器性能的目的。
04.SkyEye支持的处理器核心
SkyEye,中文全称天目全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,支持用户通过拖拽的方式对硬件进行行为级别的仿真和建模。
SkyEye目前支持主流的嵌入式硬件平台,可以运行主流的操作系统,此外还能适配国内自主研发的操作系统天脉。通过利用基于LLVM的动态二进制翻译技术,使虚拟处理器在典型的桌面计算机上运行速度可以达到2000MIPS以上。
▲图 4-1 利用虚拟原型来降低产品的周期和成本SkyEye支持包括ARM在内的多种指令集架构的不同处理器核心,可以在主流的嵌入式硬件平台,运行主流的操作系统,还能适配国内自主研发的操作系统天脉。
五、参考资料
[1].《ARM处理器开发详解》
网友评论