实验二、CPU 部件实现之 ALU 和寄存器堆
一、实验目的:
理解和掌握 CPU 中的算术逻辑运算部件(ALU)和寄存器堆(Register File)的工作
原理,并使用 Verilog 和 ModelSim 进行设计和仿真。
二、实验内容:
-
使用 Verilog 完成 ALU 的设计,并编写测试仿真文件验证其正确性。要求: ALU 支持 16 位的加、减、与、或以及移位运算。
-
使用 Verilog 完成通用寄存器堆的设计,并编写测试仿真文件验证其正确性。要求 寄存器堆包含 8 个 16 位的寄存器;
寄存器堆有两个读端口和一个写端口。
三、实验原理
请根据实验内容要求分别介绍 ALU 和寄存器堆的原理图和工作原理
四、实验步骤
参照实验一,依次补充本部分内容。1. Verilog 关键代码描述
2. 测试文件描述
3. ModelSim 仿真及分析
五、总结
//ALU
module alu(
input wire [15:0] in1, in2,
input wire [2:0] alu_op,
output reg [15:0] Z
);
always@* begin
case(alu_op)
3'b000: Z = in1+in2;
3'b001: Z = in1-in2;
3'b010: Z = in1&&in2;
3'b011: Z = in1||in2;
3'b100: Z = in1<<in2;
3'b101: Z = in1>>in2;
endcase
end
endmodule
//寄存器堆
module register_file(
input wire WE, clk,
input wire [2:0] RA, RB, RW,
input wire [15:0] busW,
output wire [15:0] busA, busB
);
reg [15:0] regfile[7:0];
assign busA = regfile[RA];
assign busB = regfile[RB];
always@(posedge clk) begin
if(WE == 1)
regfile[RW] <= busW;
end
endmodule