专业班级:22级物联网工程2班
姓名:李企轩、沈志鸿、胡子轩
一、设计思路
1.主要参照
数字逻辑与组成原理实践教程
2. 多周期处理器
把每条指令的执行分成多个大致相等的阶段,每个阶段在一个时钟周期内完成;各阶段内最多完成一次访存或一次寄存器读写或一次ALU操作;各阶段的执行结果在下一次时钟到来时保存到相应存储单元或稳定的保持在组合电路中;时钟周期的宽度以最复杂阶段所用时间为准,通常取一次存储器读写的时间。
3. 指令周期
·取指令(IF):根据程序计数器PC中的指令地址,从存储器中取出一条指令。同时,PC根据指令子长度自动递增产生下一条指令所需要的指令地址,但遇到地址转移指令时,则控制器把转移地址送入PC,得到的地址做些变换送入PC。
·指令译码(ID):对取指令操作中得到的指令进行分析和译码,确定这条指令需要完成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。
·指令执行(EXE):跟据指令译码得到的操作控制信号,具体的执行指令动作,然后转移到结果写回状态。
·存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。
·结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。
4.MIPS指令
寄存器型(R型)指令
| op | rs | rt | rd | shamt | funct |
|---|---|---|---|---|---|
| 6位 | 5位 | 5位 | 5位 | 5位 | 6位 |
立即数型(I型)指令
| op | rs | rt | immediate |
|---|---|---|---|
| 6位 | 5位 | 5位 | 16位 |
跳转型(J型)指令
| op | addr |
|---|---|
| 6位 | 26位 |
op:操作码
rs:第1个源操作数寄存器
rt:第2个源操作数寄存器,或目的操作数寄存器
rd:目的操作数寄存器
shamt:位移量,移位指令用于指定移多少位
func:功能码,在R类型指令中用来指定指令的功能
immediate:16位立即数
addr:地址
二、总体模块构成
PCctr:计算下一条指令地址
PC_in_out:将PCctr生成的地址返回到PCctr的地址输入,以计算下一条地址
InstrctionMem:存储指令
ControlUnnit:通过指令生成相应的控制信号,通过指令和当前状态确定下一状态
RegisterFile:通用寄存器组
Extender:对立即数进行无符号扩展或符号扩展
SLUSrc_select:选择ALU的第二个操作数输入来源
ALU32:AlU进行加/减计算
DataMem:数据存储器
Data_select:选择写入寄存器组的数据来源
三、功能仿真
1.仿真文件
每1ps个时间单位时钟信号反转一次,即时钟周期为2ps
module MultiCycleCPU_test(
);
reg CLK;
wire IF_clk,ID_clk,ALU_clk,MEM_clk,WB_clk;
wire [5:0] Opcode;
wire [31:0] ALU_in1;
wire [31:0] ALU_in2;
wire [31:0] ALU_result;
wire [31:0] PC_out;
MultiCycleCPU cpu32(
.CLK(CLK),
.Opcode(Opcode),
.ALU_in1(ALU_in1),
.ALU_in2(ALU_in2),
.ALU_result(ALU_result),
.PC_out(PC_out),
.IF_clk(IF_clk),
.ID_clk(ID_clk),
.ALU_clk(ALU_clk),
.MEM_clk(MEM_clk),
.WB_clk(WB_clk)
);
initial
begin
CLK=0;
end
always #0.001 CLK=~CLK;
endmodule
测试结果