介绍
CPU的流程可分为取指、译码、执行、访存、回写(Instruction Fetch,Decode,Execution,Memory Request,Write Back)五阶段。本实验需要完成了执行阶段的ALU部分,并进行了简单的访存实验。
ALU的设计实验
如图所示,给出一个具有N位输入和N位输出的算术逻辑单元。此单元接收控制信号F,执行对应功能后,得到N位输出;
F2:0 | 功能 |
---|---|
000 | A + B |
001 | A - B |
010 | A & B |
011 | A OR B |
100 | ~A |
101 | SLT |
110 | NULL |
111 | NULL |
ALU的实验要求
1、根据ALU原理图,使用verilog语言定义ALU模块,其中给输入输出端口参考实验原理,运算指令码长度[2:0];
2、内置一个32位num2(32h‘01)输入到A口;
3、将输入到B口的8位num1扩展至32位(sw1-sw7),作为B口的输入;
4、运算器支持”加、减、与、或、非“5种操作,输入控制信号F(op[2:0]);
5、验证表1中所有功能;
module alu_assign(
input wire [31:0] a,
input wire [7:0] b,
input wire [2:0] f,
output wire [31:0] s,
output wire overflow
);
wire [31:0] Sign_extend;
assign Sign_extend={{24{1'b0}},b[7:0]};
assign overflow = 1'b0;
assign s = (f == 3'b000) ? (a + Sign_extend):
(f == 3'b001) ? (a - Sign_extend):
(f == 3'b010) ? (a & Sign_extend):
(f == 3'b011) ? (a | Sign_extend):
(f == 3'b100) ? (~ a):
(f == 3'b101) ? (a < Sign_extend):
32'b0;
endmodule
这篇笔记参考网上众多资料实验并整理而成,如果涉及侵权烦请请告知,我将第一时间处理。