系列文章目录
【计算机组织与体系结构】实验一:算术逻辑单元的实现
【计算机组织与体系结构】实验二:给定指令系统的处理器设计
【计算机组织与体系结构】实验三:流水线处理器
【计算机组织与体系结构】实验四:指令 CACHE 的设计与实现
文章目录
一、实验目的
- 掌握 Vivado 集成开发环境
- 掌握 Verilog 语言基本知识
- 掌握 Verilog 语言设计并实现组合逻辑电路
二、实验环境
Vivado 集成开发环境
三、实验内容
1、ALU 操作要求
完成一个简单的、具有执行 16 种算术逻辑运算操作的电路,要求的 16 种操作如下表所示
Note:/
是逻辑非操作, ⊙
是逻辑同或操作, ⊕
是逻辑异或操作。
2、模块接口设计
信号说明如下:
1) 定义四个输入信号 A、 B、 Cin、 Card。其中, A、 B 为 32 位运算数, Card 为 5 位运算操作码, Cin 为进位。
2) 定义三个输出信号 F, Cout, Zero,其中 F 为运算结果, Cout 为结果进位, Zero 为零标志。
要求根据 16 种运算操作对运算操作码 Card 进行编码,并实现这 16 种运算操作。
四、实验设计
1、写出ALU(算术逻辑单元)的16种运算的编码
2、设计文件 alu.v
//alu.v
`timescale 1ns / 1ps //仿真时间单位/仿真时间精度
//定义16种运算的编码
`define A_ADD_B 5'b00001 //A+B---1号
`define A_ADD_B_Cin 5'b00010 //A+B+Cin
`define A_SUB_B 5'b00011 //A-B
`define A_SUB_B_Cin 5'b00100 //A-B-Cin
`define B_SUB_A 5'b00101 //B-A
`define B_SUB_A_Cin 5'b00110 //B-A-Cin
`define Value_A 5'b00111 //A
`define Value_B 5'b01000 //B
`define NOT_A 5'b01001 //A非----9号
`define NOT_B 5'b01010 //B非
`define A_OR_B 5'b01011 //或
`define A_AND_B 5'b01100 //与
`define A_XNOR_B 5'b01101 //同或
`define A_XOR_B 5'b01110 //异或
`define A_NAND_B 5'b01111 //与非
`define ZERO 5'b01000 //零
module alu(
input [31:0] A, //A为32位运算数
input [31:0] B, //B为32位运算数
input Cin, //Cin为进位,0或者1
input [4:0] Card, //Card为5位运算操作码
output [31:0] F, //F为运算结果
output Cout, //Cout为进位结果
output Zero //Zero为零标志
);
wire [31:0] a_add_b_result; //1
wire [31:0] a_add_b_cin_result;
wire [31:0] a_sub_b_result;
wire [31:0] a_sub_b_cin_result;
wire [31:0] b_sub_a_result;
wire [31:0] b_sub_a_cin_result;
wire [31:0] value_a_result;
wire [31:0] value_b_result;
wire [31:0] not_a_result; //9
wire [31:0] not_b_result;
wire [31:0] a_or_b_result;
wire