- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章强化流水线
* * 1.8 流水线操作技术 流水线 操作 在执行多条指令时,将每条指令的预取指、取指、译码、寻址、读取操作数、执行等阶段,相差一个阶段地重叠地执行。 流水线操作的优点 一条k段流水能在k+(n-1)个周期内处理n条指令。其前k个周期用于完成第一条指令,其余n-1条指令的执行需要n-1个周期。而非流水处理器上执行n条指令则需要nk 个周期。当指令条数n较大时,可认为每个周期内执行的最大指令个数为k。 预取指P 取指F 译码D 寻址A 读取操作数R 执行X 流水线操作 在第一个机器周期用PC中的内容加载PAB 在第二个机器周期用读取到的指令字加载PB。 第三个周期用PB的内容加载指令寄存器IR,对IR内的指令进行译码,产生执行指令所需要的一系列控制信号。 预取指P 取指F 译码D 寻址A 读取操作数R 执行X 流水线操作 用数据1读地址加载DAB,或用数据2读地址加载CAB,修正辅助寄存器和堆栈指针。 读数据1加载DB,或读数据2加载CB;用数据3写地址加载到EAB,以便在流水线的最后一级将数据送到数据存储空间。 执行指令,或用写数据加载EB。 空转浪费周期 1.延迟分支转移的流水线图 无延迟流水线分支转移的问题 地址 指令 a1,a2 B b1 这是一个四周期、二字分支指令 a3 i3 这是任意的一周期、一字指令 a4 i4 这是任意的一周期、一字指令 ... ... b1 j1 例 分支转移指令流水线图 用分支转移指令的地址a1加载PAB。 取得双字分支转移指令 取得双字分支转移指令 分支转移指令流水线图 i3和i4指令取指。由于这两条指令处在分支转移指令的后面,虽然已经取指,但不能进入译码级,且最终被丢弃。 分支转移指令进入译码级 用新的值b1加载PAB 分支转移指令流水线图 j1指令取指 双字分支转移指令进入流水线的执行级 执行j1指令 双字分支转移指令进入流水线的执行级 由于i3和i4指令是不允许执行的,所以这两个周期均花在分支转移指令的执行上。 允许跟在延迟分支转移指令之后的两条单字或一条双字指令可以被执行 延迟分支转移 注意 1.延迟操作指令后面只有两个字的空 隙,因此不能在此空隙中安排任何 一类分支转移指令或重复指令; 2.在CALLD或RETD的空隙中还不能安 排PUSH和POP指令。 3.延迟操作指令比它们的非延迟型 指令要快,在调试延迟型指令时, 直观性稍差一些,因此希望在大多 数情况下还是采用非延迟型指令。 例 在完成R=(x+y)*z操作后转至next。 可以分别编出如下两段程序: 利用普通分支转移指令B 利用延迟分支转移指令BD LD @x,A LD @x,A ADD @y,A ADD @y,A STL A, @s STL A, @s LD @s,T LD @s,T MPY @z,A BD next STL A, @r MPY @z,A B next STL A, @r (共8个字,10个T) (共8个字,8个T) 在空闲的随后两周期中执行下两条指令 XC n,cnd[,cnd[,cnd] 如果条件满足,则执行下面n(n=1或2)条指令,否则下面n条指令改为执行n条NOP指令。 2.条件执行指令的流水线图 条件执行指令XC 有下列程序: 地址 指令 a1 i1 a2 i2 a3 i3 a4 XC 2, cond a5 i5 a6 i6 条件执行指令流水线图 XC指令的地址a4加载到PAB 取XC指令的操作码 求解XC指令所规定的条件。如果条件满足,则后面指令i5和i6进入译码级并执行;否则不对i5和i6指令译码。 1. XC是一条单字单周期指令,与条件跳 转指令相比,具有快速选择其后1或2 条指令是否执行的优点 ; 2. XC指令在执行前2个周期就已经求出 条件,如果在这之后到执行前改变条 件(如发生中断),将会造成无期望 的结果 。 3. 要尽力避免在XC指令执行前2个周期 改变所规定的条件 。 4. 并没有规定XC指令后的一条或两条指 令必须是单周期指令。 注 意 CPU在单个周期内两次访问双寻址存储
文档评论(0)