Arm9的流水线分为:取值,译码,执行,仿存,回写
取值
|
从指令存储器取指令
|
译码
|
读取寄存器操作数
|
执行
|
产生ALU运算结果或产生存储器地址
|
仿存
|
访问数据存储器
|
回写
|
完成结果写寄存器
|
五级流水线技术的问题:如果当前指令(A) 的目的操作数寄存器(也就是写寄存器的操作)和下一条指令(B) 的源操作数寄存器(也就是度寄存器的操作)一致,B 指令就需要等A 回写之后才能译码。这就是五级流水线中的寄存器冲突,所以应该避免写这一种程序。为了解决这个问题,就采用了互锁。来解决这个问题。如图所示:
由于指令LDR的目的地址和他的下一条指令的源地址都是R9,第一条指令对R9的写要发生在回写阶段,也只有第一条指令会写后第二条指令才能进行译码。所以会产生上述的情况。
通常采用的解决的办法是改变程序的顺序就可以了。
例如:现在要实现的是:把0x00001000和0x00002000处的内容放到地址是0x00008000和0x00009000的位置。
其中0x00001000里面的内容是: H E L L O W O R L D
实现的过程是:
全部拷贝过程由两个结构相同的循环各自独立完成,分别实现两块数据的拷贝,并且两个拷贝过程极为类似,分析其中一个即可。
T1~ T3 是3 个单独的时钟周期; T4 ~ T11 是一个循环,在时空图中描述了第一次循环的执行情况。在T12 的时候写LR 的同时,开始对循环的第一条语句进行取指,所以总的流水线周期数为3 + 10 ×10 + 2 ×9 = 121 。整个拷贝过程需要121 ×2 + 2 = 244 个时钟周期完成。考虑到通过减少流水线的冲突可以提高流水线的执行效率,而流水线的冲突主要来自寄存器冲突和分支指令,因此对代码作如下两方面调整:
①将两个循环合并成一个循环能够充分减少循环跳转的次数,减少跳转带来的流水线停滞;
②调整代码的顺序,将带有与临近指令不相关的寄存器插到带有相关寄存器的指令之间,能够充分地避免寄存器冲突导致的流水线阻塞
对代码调整和流水线的时空图如图所示
。
调整之后, T1 ~ T5 是5 个单独的时钟周期, T6~ T13是一个循环,同样在T14的时候BNE 指令在写LR 的同时,循环的第一条指令开始取指,所以总的指令周期数为5 + 10 ×10 + 2 ×9 + 2= 125 。
通过两段代码的比较可看出:调整之前整个拷贝过程总共使用了244 个时钟周期,调整了循环内指令的顺序后,总共使用了125 个时钟周期就完成了同样的工作,时钟周期减少了119 个,缩短了119/ 244 = 48. 8 % ,效率提升十分明显。
因此流水线的优化问题主要应从两方面考虑:
①通过合并循环等方式减少分支指令的个数,从而减少流水线的浪费;
②通过交换指令的顺序,避免寄存器冲突造成的流水线停滞。
分享到:
相关推荐
总共有ARM.CMSIS.4.5.0.pack,ARM.CMSIS.5.0.0.pack,ARM.CMSIS.5.1.0.pack,ARM.CMSIS.5.2.0.pack,ARM.CMSIS.5.3.0.pack,ARM.CMSIS.5.4.0.pack,ARM.CMSIS.5.5.0.pack,ARM.CMSIS.5.6.0.pack和ARM.CMSIS.5.7.0....
ARM.CMSIS.5.3.0.pack和ARM.CMSIS.5.4.0.pack.rar.rar
ARM.CMSIS.5.3.0 ARM.CMSIS.5.7.0和4.2.0.zip
5级流水线和6级流水线ARM组织.pdf 学习资料 复习资料 教学资源
ARM.CMSIS.5.1.0.pack和ARM.CMSIS.5.2.0.pack
arm-2009q3.tar.gz 交叉编译工具链 之前在ubuntu上用了
总共有ARM.CMSIS.4.5.0.pack,ARM.CMSIS.5.0.0.pack,ARM.CMSIS.5.1.0.pack,ARM.CMSIS.5.2.0.pack,ARM.CMSIS.5.3.0.pack,ARM.CMSIS.5.4.0.pack,ARM.CMSIS.5.5.0.pack,ARM.CMSIS.5.6.0.pack和ARM.CMSIS.5.7.0....
ARM开发工具,Keil的官方支持包,包含ARM.CMSIS.5.5.0.pack,ARM.CMSIS.5.5.1.pack更新包
ARM.CMSIS.5.8.0.pack
构建arm架构ubuntu根文件系统.pdf构建arm架构ubuntu根文件系统.pdf构建arm架构ubuntu根文件系统.pdf构建arm架构ubuntu根文件系统.pdf构建arm架构ubuntu根文件系统.pdf构建arm架构ubuntu根文件系统.pdf构建arm架构...
ubuntu-22.04-preinstalled-desktop-arm64+raspi.img.xz http://cdimages.ubuntu.com/ubuntu/releases/22.04/release/
第五章_ARM9_IO和IO操作.ppt第五章_ARM9_IO和IO操作.ppt第五章_ARM9_IO和IO操作.ppt第五章_ARM9_IO和IO操作.ppt第五章_ARM9_IO和IO操作.ppt第五章_ARM9_IO和IO操作.ppt第五章_ARM9_IO和IO操作.ppt第五章_ARM9_IO和IO...
....arm.chm ....ARMJtag调试原理.pdf ....ARMmmu详细图解.pdf ....ARM内核.pdf ....ARM学习资料 ....ARM指令集(中文版).pdf ....EasyARM2200原理图.PDF ....ST-ARM7Demo原理图.pdf ....ST-ARM9资料1.pdf...
ARM开发详解全集.rar 第1章 ARM微处理器的概述.doc 第2章 ARM微处理器的编程模型.pdf 第3章 ARM微处理器的指令系统.doc 第四章 ARM程序设计基础.doc ... 嵌入式UCLINUX及应用开发.pdf-Detailed Complete Works of ...
深入浅出ARM9主讲LPC3200系列.书店没有卖,周立功公司采购开发板才配的书籍
ARM.CMSIS-FreeRTOS.10.3.1.pack
jdk-8u151-linux-arm64-vfp-hflt.tar.gz.................................................................................................
ARM.mbedTLS.1.8.0.pack
嵌入式设计及Linux驱动开发指南:基于ARM9处理器.part4.rar
ARM.CMSIS.5.5.1.packsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss