三个 D 触发器用于保存当前状态,是时序逻辑电路,RST用于初始化状态“000“,另外两个部分都是组合逻辑电路,一个用于产生 下一个阶段的状态,另一个用于产生每个阶段的控制信号。从图上可看出,下个状态取决于 指令操作码和当前状态;而每个阶段的控制信号取决于指令操作码、当前状态和反映运算结果的状态 zero 标志和符号 sign标志。
其中指令和数据各存储在不同存储器中,即有指令存储器和数据存储器。访问存储器时,先给出内存地址,然后由读或写信号控制操作。对于寄存器组, 给出寄存器地址(编号),读操作时不需要时钟信号,输出端就直接输出相应数据;而在写操作时,在 WE使能信号为 1时,在时钟边沿触发将数据写入寄存器。
IR 指令寄存器目的是使指令代码保持稳定,PC 写使能控制信号PCWre,是确保PC 适时修改,原因都是和多周期工作的CPU有关。ADR、BDR、 ALUoutDR、DBDR四个寄存器不需要写使能信号,其作用是切分数据通路,将大组合逻辑切分为若干个小组合逻辑,大延迟变为多个分段小延迟。
各控制信号功能如下:
控制信号名 状态 0 状态 1RST 对于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