计算机组成原理实验
上图为CPU的数据通路和必要的控制线路图,其中Ins.Mem为指令存储器,Data.Mem为数据存储器。访问存储器时,先给出内存地址,然后由读或写信号控制操作。对于寄存器组,先给出寄存器地址,读操作时,输出端就直接输出相应数据;而在写操作时,在 WE使能信号为1,在时钟边沿触发将数据写入寄存器。 4.控制信号:
控制信号的作用
控制信号名 Reset PCWre ALUSrcA ALUSrcB 状态“0” 初始化PC为0 PC不更改,相关指令:halt 状态“1” PC接收新地址 PC更改,相关指令:除指令halt外 来自寄存器堆data1输出,相关指来自移位数sa,同时,进行令:add、sub、addi、or、and、(zero-extend)sa,即 {{27{0}},sa},相ori、beq、bne、bgtz、slt、sw、lw 关指令:sll 来自寄存器堆data2输出,相关指来自sign或zero扩展的立即数,相关令:add、sub、or、and、sll、slt、指令:addi、ori、sw、lw beq、bne、bgtz 来自ALU运算结果的输出,相关指来自数据存储器(Data MEM)的输令:add、addi、sub、ori、or、and、出,相关指令:lw slt、sll 无写寄存器组寄存器,相关指令: beq、bne、bgtz、sw、halt、j 寄存器组写使能,相关指令:add、addi、sub、ori、or、and、slt、sll、lw DBDataSrc RegWre 计算机组成原理实验
InsMemRW /RD /WR RegDst 写指令存储器 读数据存储器,相关指令:lw 写数据存储器,相关指令:sw 写寄存器组寄存器的地址,来自rt字段,相关指令:addi、ori、lw 读指令存储器(Ins. Data) 输出高阻态 无操作 写寄存器组寄存器的地址,来自rd字段,相关指令:add、sub、and、or、slt、sll ExtSel (zero-extend)immediate(0扩展),(sign-extend)immediate(符号扩展) 相关指令:ori ,相关指令:addi、sw、lw、bne、bne、bgtz 00:pc<-pc+4,相关指令:add、addi、sub、or、ori、and、slt、 sll、sw、lw、beq(zero=0)、bne(zero=1)、bgtz(sign=1,或zero=1); 01:pc<-pc+4+(sign-extend)immediate,相关指令:beq(zero=1)、 bne(zero=0)、bgtz(sign=0,zero=0); 10:pc<-{(pc+4)[31..28],addr[27..2],0,0},相关指令:j; 11:未用 ALU 8种运算功能选择(000-111),看功能表 ALU功能表
PCSrc[1..0] ALUOp[2..0] ALUOp[2..0] 000 001 010 011 100 101 Y = A + B Y = A – B Y = B<
Instruction Memory:指令存储器, address,指令存储器地址输入端口
DataIn,指令存储器数据输入端口(指令代码输入端口) DataOut,指令存储器数据输出端口(指令代码输出端口) InsMemRW,指令存储器读写控制信号,为0写,为1读 Data Memory:数据存储器,
address,数据存储器地址输入端口 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时,在时钟边沿触发写入 RST,寄存器清零信号,为0时寄存器清零 ALU: 算术逻辑单元
result,ALU运算结果
zero,运算结果标志,结果为0,则zero=1;否则zero=0
sign,运算结果标志,结果最高位为0,则sign=0,正数;否则,sign=1,负数
四. 实验器材
电脑一台,Xilinx Vivado 软件一套,Basys3板一块。
五. 实验过程与结果 1.各个指令对应的控制信号
指令 Add Addi Sub Ori And Or Sll Slt Sw Lw Beq Bne PCWre ALUSrcA ALUSrcB DBDataSrc RegWre InsMemRW RD WR RegDst ExtSel 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X 1 X X 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 X 0 X X X 1 X 0 X X X X 1 1 1 1 计算机组成原理实验
Bgtz J Halt 1 1 0
0 X X 0 X X X X X 0 0 0 1 1 1 1 1 1 1 1 1 X X X 1 X X 控制信号 Add Addi Sub Ori And Or Sll Slt Sw Lw Beq Bne Bgtz J Halt ALUOp 000 000 001 011 100 011 010 110 000 000 001 001 101 010 XXX 除异或运算(111)外,ALU所有功能均被使用。 PCSrc 00 01 10 指令 add、addi、sub、or、ori、and、slt、sll、sw、lw、beq(zero=0)、bne(zero=1)、bgtz(sign=1,或zero=1) beq(zero=1)、bne(zero=0)、bgtz(sign=0,zero=0) j 2.主要模块代码及仿真
(1)控制单元(control unit) Verilog代码:
计算机组成原理实验
1. module controlUnit( 2. input [5:0] opcode, 3. input zero, 4. input sign, 5. output reg PCWre, 6. output reg ALUSrcA, 7. output reg ALUSrcB, 8. output reg DBDataSrc, 9. output reg RegWre, 10. output reg InsMemRW, 11. output reg RD, 12. output reg WR, 13. output reg RegDst, 14. output reg ExtSel, 15. output reg [1:0] PCSrc, 16. output reg [2:0] ALUOp 17. );
18. initial begin 19. RD = 1; 20. WR = 1; 21. RegWre = 0; 22. InsMemRW = 0; 23. end
24. always@ (opcode) begin 25. case(opcode)
26. 6'b000000:begin // add 27. PCWre = 1; 28. ALUSrcA = 0; 29. ALUSrcB = 0; 30. DBDataSrc = 0; 31. RegWre = 1; 32. InsMemRW = 1; 33. RD = 1; 34. WR = 1; 35. RegDst = 1; 36. ALUOp = 3'b000; 37. end
38. 6'b000001:begin //addi 39. PCWre = 1; 40. ALUSrcA = 0; 41. ALUSrcB = 1; 42. DBDataSrc = 0; 43. RegWre = 1; 44. InsMemRW = 1;