手写一个简易的多周期 MIPS CPU (2)

三个 D 触发器用于保存当前状态,是时序逻辑电路,RST用于初始化状态“000“,另外两个部分都是组合逻辑电路,一个用于产生 下一个阶段的状态,另一个用于产生每个阶段的控制信号。从图上可看出,下个状态取决于 指令操作码和当前状态;而每个阶段的控制信号取决于指令操作码、当前状态和反映运算结果的状态 zero 标志和符号 sign标志。

其中指令和数据各存储在不同存储器中,即有指令存储器和数据存储器。访问存储器时,先给出内存地址,然后由读或写信号控制操作。对于寄存器组, 给出寄存器地址(编号),读操作时不需要时钟信号,输出端就直接输出相应数据;而在写操作时,在 WE使能信号为 1时,在时钟边沿触发将数据写入寄存器。

IR 指令寄存器目的是使指令代码保持稳定,PC 写使能控制信号PCWre,是确保PC 适时修改,原因都是和多周期工作的CPU有关。ADR、BDR、 ALUoutDR、DBDR四个寄存器不需要写使能信号,其作用是切分数据通路,将大组合逻辑切分为若干个小组合逻辑,大延迟变为多个分段小延迟。

各控制信号功能如下:

控制信号名 状态 0 状态 1
RST   对于PC,初始化PC为程序首地址   对于PC,PC接收下一条指令地址  
PCWre   PC不更改,另 外,除‘000’状态之外,其余状态慎改PC的值。   PC更改,另外,在‘000’状态时,修改PC的值合适。  
ALUSrcA   来自寄存器堆 data1 输出   来自移位数sa,同时,进行(zeroextend)sa,即 {{27{1'b0},sa}  
ALUSrcB   来自寄存器堆 data2 输出   来自 sign或 zero 扩展的立即数  
DBDataSrc   来自ALU运算结果的输出   来自数据存储器(Data MEM)的输出  
RegWre   无写寄存器组寄存器   寄存器组寄存器写使能  
WrRegDSrc   写入寄存器组寄存器的数据来自 PC+4(PC4)   写入寄存器组寄存器的数据来自ALU 运算结果或存储器读出的数据  
InsMemRW   写指令存储器   读指令存储器(Ins. Data)  
mRD   存储器输出高阻态   读数据存储器  
mWR   无操作   写数据存储器  
IRWre   IR(指令寄存器)不更改   IR 寄存器写使能。向指令存储器发出读指令代码后,这个信号也接着发出,在时钟上升沿,IR 接收从指令存储器送来的指令代码。  
ExtSel   零扩展   符号扩展  
PCSrc[1..0]   00:PC<-PC+4
01:PC<-PC+4+((sign-extend)immediate<<2)
10:PC<-rs
11:PC<-{PC[31:28], addr[27:2],2'b00}
 
RegDst[1..0]   写寄存器组寄存器的地址,来自:
00:0x1F($31)
01:rt 字段
10:rd 字段
11:未用
 
ALUOp[2..0]   ALU 8种运算功能选择(000-111)  
相关部件及引脚说明

Instruction Memory:指令存储器

Iaddr,指令地址输入端口

DataIn,存储器数据输入端口

DataOut,存储器数据输出端口

RW,指令存储器读写控制信号,为0 写,为 1读

Data Memory:数据存储器

Daddr,数据地址输入端口

DataIn,存储器数据输入端口

DataOut,存储器数据输出端口

/RD,数据存储器读控制信号,为 0 读

/WR,数据存储器写控制信号,为0 写

Register File:寄存器组

Read Reg1,rs 寄存器地址输入端口

Read Reg2,rt 寄存器地址输入端口

Write Reg,将数据写入的寄存器,其地址输入端口(rt、rd)

Write Data,写入寄存器的数据输入端口

Read Data1,rs 寄存器数据输出端口

Read Data2,rt 寄存器数据输出端口

WE,写使能信号,为1 时,在时钟边沿触发写入

IR: 指令寄存器,用于存放正在执行的指令代码

ALU: 算术逻辑单元

result,ALU运算结果

zero,运算结果标志,结果为 0,则 zero=1;否则 zero=0

sign,运算结果标志,结果最高位为0,则 sign=0,正数;否则,sign=1,负数

ALU

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjsgx.html