电子科大-系统结构实验-解决控制冒险.docx

电子科大-系统结构实验-解决控制冒险.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

实验报告

课程名称:计算机系统结构实验

学院:计算机科学与工程学院

专业:计算机科学与技术

指导教师:好老师

学生姓名:爱学习的大哥哥

实验成绩:

日期:2017年5月26日

电子科技大学计算机学院实验中心

电子科技大学

实验报告

实验工程名称:解决控制冒险

实验室名称:主楼A2-412实验时间:2017年5月26日

实验目的

在给出的流水线代码根底上,增加ID级关闭写使能信号,以解决不正确分支指令的影响。通过完成这次实验,加深对控制冒险现象的产生和消除控制冒险的原理的理解,提高编程和测试的能力。

实验原理

转移相关问题

转移指令改变程序顺序执行的特性。由于是流水线操作,在转移发生之前,假设干条转移指令的后续指令已被取到流水线处理机中。这就是所谓的转移相关问题〔branchhazard〕,有时也称之为控制相关问题〔controlhazard〕。

回忆我们前面介绍的处理转移相关问题的4种技术:

以上任何一种方法都会使硬件固定,编译时会根据硬件机制和转移行为对代码进行调度,以获取最正确性能。

消除无条件转移指令的后一条指令影响

每条指令在ID时判断在当前在EXE阶段的操作码暂存器的值是否是无条件转移指令:

如果是,那么不使能当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这样这条指令的执行就对程序的逻辑没有影响。

条件转移指令

条件转移指令的实现思想与无条件转移指令有所类似,但不完全相同。首先对于条件转移指令本身来说,需要判断Z标志是否能用。假设Z标志还没有准备好,那么要暂停流水线一个时钟周期。这一点和判断数据相关极为相似。但由于转移指令只可能改变PC而不改变其它状态,因此用不着封锁WZ,WMEM,WREG〔对转移指令来讲,这些信号原本就为0〕。

因为如果处在译码级的是条件转移指令,而且处在EXE级的是ALU类型的指令〔就要写Z标志到流水线存放器Z了〕,那么要等到ALU指令写完Z后,再判断转移与否,为此要暂停一个周期(或者如前所述,插入一条nop指令)。

对于条件转移指令的下一条指令的处理方法与无条件指令不同。因为条件转移的下一条指令有可能执行也有可能不执行,需要在对无条件转移指令的处理策略上进行扩展:

条件转移的下一条指令在ID时判断在当前在EXE阶段的操作码暂存器的值是否是条件转移指令并且判断是否转移成功(Z的值没变),如果发现成功,那么不使能当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这条指令的执行就对程序的逻辑没有影响(与无条件处理方式相同);如果发现转移不成功,说明本条指令为有效指令,使能当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,本条指令正常执行。

实验内容

在给出的流水线代码根底上,增加ID级关闭写使能信号,以解决不正确分支指令的影响。

实验器材〔设备、元器件〕

ISEDesignSuite14.7集成开发环境,编程语言:VerilogHDL硬件描述语言

实验步骤

1、新建工程,将上个实验完成的解决数据冒险与数据前推的代码拷贝进来

2、在直接跳转中,需要废除跳转指令的下一条〔当译码出跳转指令时,下一条已经流出,所以要废除掉〕;而在条件跳转中,需要根据z的值来判断是否废除下一条指令。在代码中译码级,pcsource定义如下

assignpcsource[1]=i_jr|i_j|i_jal;//选择下一条指令的地址,00选PC+4,01选转移地址,10选存放器内地址,11选跳转地址

assignpcsource[0]=i_beqrsrtequ|i_bne~rsrtequ|i_j|i_jal;LOADDEPEN,BTAKEN,ID_branch);

如果是直接跳转,那么一定废除,pcsource=11,如果是条件跳转,废除的条件就是pcsource=01,暂不考虑jr指令,那么要废除下一条指令的条件就是pcsource=00;

3、在顶层模块添加变量

wirewz;//决定是否写z值

wire[1:0]exepcsource;//exepcsource主要用在条件跳转

wz需要在id级计算出来,然后传递到exe级,如果废除指令那么wz=0;

exepcsource与之相反,从exe级传递到id级,用来指示下一条指令是否废除。

4、增加这两个变量后,顶层模块id级与exe级的代码如下

pipeidid_stage(dpc4,inst,//指令译码ID级

wrn,wdi,wwreg,clock,resetn,

bpc,jpc,pcsource,dwreg,dm2reg,dwmem,

daluc,daluimm,da,db,dimm,drn,dshift,djal,z,

ern,mrn,ewreg,mwreg,idad

文档评论(0)

liuzhouzhong + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档