1. 基本原则
根据指令需求,连接组件,建立数据通路
2. 指令的需求
指令的需求简单分为以下两类,
<1> 所有指令的共同需求
<2> 不同指令的不同需求
2.1 所有指令的共同需求 - 取指令
取指令
程序计数器PC的内容是指令的地址
用PC的内容作为地址,访问指令存储器获得指令编码
需要更新PC,顺序执行时,PC = PC+4,发生分支时,PC = 分支目标的地址
取指单元IFU
2.2 加法和减法指令的需求
addu rd,rs,rt 和 subu rd,rs,rt
加法和减法的指令位域
下图所示,一个时钟周期就可以完成加减法操作,其中ALUCtr和RegWr是由指令译码生成的控制信号。
加减法的数据通路
2.3 逻辑运算指令的需求
ori rt,rs,imm16
ori指令的位域
现在再看加减法的数据通路图,如果想实现ori指令,还存在以下几个问题,
<1> 目的寄存器是rt,而不是rd
<2> 立即数是ALU的一个输入
<3> 立即数是16-bit
针对上面3个问题,提出以下解决方案,增加了两个2选1多路器和1个零扩展部件,如下图所示,
支持ori指令的数据通路
2.4 访存指令的需求
lw rt,imm16(rs)
访存指令的位域
再看上面的数据通路,如果想实现访存指令,仍存在以下问题,
<1> 如何进行符号扩展
<2> 从何处装载数据
针对上面的两个问题,对数据通路进行改造,方案是将原有的零扩展部件添加符号扩展的功能,增加数据存储器和相应的2选1多路器,如下图所示,
支持lw指令后的数据通路
sw rt,imm16(rs)
观察sw指令,需要将rt的数据存入数据存储器,因此增加一条数据线连接RegFile的busB和数据存储器的DataIn,并给数据存储器增加写使能控制信号MemWr。
支持sw指令后的数据通路
3. 总结
将IFU和数据通路放在一起,如下图所示,
IFU和数据通路