PIPE各阶段的实现

本文详细阐述了PIPE处理器流水线的四个阶段:PC选择和取指、译码和写回、执行以及访存阶段的工作原理。在PC选择阶段,根据不同情况选择PC值;译码和写回阶段考虑了寄存器写入的优先级;执行阶段的条件码更新逻辑确保异常情况下不更新;访存阶段处理数据依赖和控制流。同时,文章讨论了处理加载/使用冒险、ret指令、分支预测错误和异常的控制逻辑,以保证流水线的正确运行。
摘要由CSDN通过智能技术生成

1.PC选择和取指阶段
这个阶段必须选择程序计数器PC的当前值,并且预测下一个PC值。PC选择逻辑从三个程序计数器源中进行选择。当一条预测错误的分支进入访存阶段时,会从流水线寄存器M(信号M_valA)中读出该指令valP的值(指明下一条指令的地址),当ret指令进入写回阶段时,会从流水线寄存器W(信号W_valM)中读出返回地址。其他情况会使用存放在流水线寄存器F(信号F_predPC)中的PC的预测值。我们将指令的状态和计算分成两个部分。在取指阶段,可以测试由于指令地址越界引起的内存错误,还可以发现非法指令或halt指令。必须推迟到访存阶段才能发现非法数据地址。
2.译码和写回阶段
我们观察到,提供给写端口的寄存器ID来自于写回阶段(信号W_desE和W_dstM),而不是来自于译码阶段,这是因为我们希望进行写的目的寄存器是由写回阶段中的指令指定的。因为只有call指令和跳转指令在后面的阶段中需要valP的值,而这些指令并不需要从寄存器文件A端口中读出的值,因此我们会将信号valA和valP合并。
流水线化的实现应该是给处于最早流水线阶段中的转发源以较高的优先级。只有指令pop %rsp会关心在访存阶段或写回阶段中的两个源之间的转发优先级,因为只有这种指令能同时写两个寄存器。
写回阶段的一小部分是保持不变的,由于流水线寄存器W保存着最近完成的指令的状态,很自然地要用这个值来表示整个处理器状态。
3.执行阶段
标号为“Set CC”的逻辑以信号m_stat和W_stat作为输入,这个逻辑决定了是否要更新条件码。这些信号用来检查一条导致异常的指令正在通过后面的流水线阶段的情况,因此,任何对条件码的更新都会被

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值