目录
一.指令的数据通路
(1)单周期时钟通路就是指所有指令均在一个时钟周期内完成也就是CPI=1
(2)所以它的性能取决于运行最慢的周期
下面来介绍一些常用MIPS指令的数据通路构建
(1)取指令数据通路
Men[PC++] -> IR
通过PC的地址调用指令存储器获得指令字,并且将PC+4(MIPS加4个字节),在时钟以后写入PC对PC进行更新。
(2)R型指令数据通路
【1】以add(运算)为例
步骤:
(1)PC中存放地址,访问指令寄存器得到32位MIPS指令字。
(2)将32MIPS指令字进行解析分别得到Rs,Rt,Rd的值,并将其放入寄存器组中。
(3)寄存器组通过读信号,将存放在R1和R2寄存器中的值取出,放入ALU中进行运算,将结果返回到寄存器组的WD中。
(4)当写的时钟信号到来时,把结果写入W中,返回到寄存器Rd。
(3)I型指令数据通路
【1】以Lw指令为例
步骤:
(1)PC中存放地址,访问指令寄存器得到32位MIPS指令字。
(2)对MIPS指令进行解析,并将对应的值放入对应的通路中。(注意这里的写入寄存器变为了Rt,之后在整体规划的时候在这里需要加一个多路选择器)
(3)取出R1的值,将立即数进行带符号拓展为32位,将它们在ALU中进行运算,得到地址。
(4)通过地址在数据存储器DM中取出相应的值,在写时钟脉冲到来时写入寄存器W中。
【2】以Sw指令为例
步骤:
前面步骤与Lw指令相同。
将寄存器R2中的值(Rt)写入到数据存储器中指定的地址,操作完成。
二.数据通路的综合
(1)第一阶段(加Mux(多路选择器))
R型指令具有三个寄存器,I型指令具有两个寄存器加一个立即数。因为它们的写入寄存器有时不同,所以我们需要加入多路选择器来进行选择。
(1)RegDst 选择写入寄存器(Rt 或 Rd)
(2)AluSrc 选择第二个操作数(立即数或寄存器R2)
(3)MemtoReg 选择写入寄存器的数据(来自ALU或者数据存储器)
(2)第二阶段(加控制器(对Mux和寄存器操作等进行选择))
控制器中一些信号的描述:
信号名称 | 方向 | 位宽 | 功能描述 |
---|---|---|---|
jump | output | 1 | 是否执行jump操作 |
branch | output | 1 | 是否执行branch操作 |
alusrc | output | 1 | 送入ALU B段数据是立即数的32位投站还是寄存器堆读取的值 |
memwrite | output | 1 | 是否需要写回数据存储器 |
memtoreg | output | 1 | 写回的数据是来自ALU计算的结果还是存储器读取的数据 |
regwrite | output | 1 | 是否需要写寄存器堆 |
regdst | output | 1 | 写入寄存器堆的地址rt还是rd |
alucontrol | output | 3 | ALU的控制信号,不同运算符的控制 |
(3)举例
Lw指令
只需要注意加入的多路选择器,记忆控制器对它们的使用即可!
传送门: 多周期MIPS架构