MIPS架构中BGE指令实现方法及架构修改方案
MIPS BGE指令的硬件实现修改方案
你要实现的BGE $r1,$r2,despl是I型有符号条件分支指令,行为规则:读取$r1、$r2寄存器值做有符号比较,当$r1 >= $r2时,跳转到PC + 4 + (despl << 2)地址执行,否则顺序执行下一条指令。
待修改的参考架构图如下:
针对这个经典MIPS基础通路,只需要做4处增量修改即可,不需要重构整体架构:
1. 新增有符号大小比较逻辑
现有基础通路一般只实现了BEQ/BNE所需的相等判断(通过异或门检测两个寄存器读值是否完全一致,输出zero标志),这里需要加一个有符号数比较器:
- 两个输入分别接寄存器堆的两个读端口输出:对应$r1的读数据、对应$r2的读数据
- 输出一个
ge_flag信号:按有符号数规则比较,若r1 >= r2则输出1,否则输出0
注意:必须做有符号判断,不能直接用无符号比较逻辑,否则涉及负数的比较会完全出错。
2. 修改控制单元译码逻辑
在控制单元的指令译码ROM/组合逻辑里新增BGE的操作码条目,识别到BGE指令时输出对应控制信号:
RegWrite=0:不需要写回通用寄存器堆ALUSrc=0:ALU第二操作数来自寄存器读端口,不需要取符号扩展后的立即数MemRead=0、MemWrite=0:不访问数据存储器- 新增1-2位的
BranchType控制信号:用来给后续分支选择逻辑指示当前分支类型,比如编码00对应BEQ、01对应BNE、10对应BGE。
3. 复用现有分支目标地址计算通路
这部分不需要改硬件:指令低16位的despl偏移量走原有的符号扩展模块,输出32位后左移2位(完成字偏移到字节偏移的转换),和PC+4相加得到分支目标地址,和现有BEQ/BNE的地址计算逻辑完全共用。
4. 修改分支有效判断与PC选通逻辑
原有通路的分支有效判断一般是硬连的Branch && zero_flag(BEQ生效条件),这里改成一个小型多路选择器:
- 选择控制信号接控制单元输出的
BranchType - 输入分别接:相等判断的zero标志(BEQ用)、zero标志取反(BNE用)、新增的
ge_flag(BGE用) - 多路器输出为1时,代表分支条件满足,控制下一条PC选择通路选通前面算好的分支目标地址写入PC;输出为0时按原有逻辑选
PC+4顺序执行即可。
验证注意点
测试时必须覆盖边界场景:r1为正r2为负、r1等于r2、r1为负r2为正、两个操作数均为负的比较场景,同时验证正偏移向前跳转、负偏移向后跳转的地址计算是否正确。
内容的提问来源于stack exchange,提问作者Dani TR
相关产品推荐
相关产品推荐

