没有合适的资源?快使用搜索试试~ 我知道了~
19020011038-岳宇轩-实验31
需积分: 0 0 下载量 21 浏览量
2022-08-08
21:39:31
上传
评论
收藏 412KB DOCX 举报
温馨提示
试读
16页
3.2减法操作可以看到,alu控制器值为0100 0000 0000B,选择了减法操作,1111H-1111H = 03.3有符号比较操作alu控制器值为001
资源详情
资源评论
资源推荐
1
中国海洋大学计算机科学与技术系
实验报告
姓名:岳宇轩 年级:2019 专业: 19 慧与
科目:计算机组成原理 题目:ALU
实验时间: 2021 年 5 月 6 日 实验教师: 张巍
一、实验结果及截图分析:
(※代码挖空的部分必须截图或复制)
1. 代码补全 alu.v
`timescale 1ns / 1ps
//*************************************************************************
// > 文件名: alu.v
// > 描述 :ALU 模块,可做 12 种操作
// > 作者 : LOONGSON
// > 日期 : 2016-04-14
//*************************************************************************
module alu(
input [11:0] alu_control,
input [31:0] alu_src1,
input [31:0] alu_src2,
output [31:0] alu_result
);
reg [31:0] alu_result;
wire alu_add; //加法
wire alu_sub; //减法
wire alu_slt; //有符号比较,小于置位
wire alu_sltu; //无符号比较,小于置位
wire alu_and; //按位与
wire alu_nor; //按位或非
wire alu_or; //按位或
wire alu_xor; //按位异或
wire alu_sll; //逻辑左移
wire alu_srl; //逻辑右移
wire alu_sra; //算数右移
2
wire alu_lui; //高位加载
assign alu_add = alu_control[11];
assign alu_sub = alu_control[10];
assign alu_slt = alu_control[ 9];
assign alu_sltu = alu_control[ 8];
assign alu_and = alu_control[ 7];
assign alu_nor = alu_control[ 6];
assign alu_or = alu_control[ 5];
assign alu_xor = alu_control[ 4];
assign alu_sll = alu_control[ 3];
assign alu_srl = alu_control[ 2];
assign alu_sra = alu_control[ 1];
assign alu_lui = alu_control[ 0];
wire [31:0] add_sub_result; //加减结果,减法用加法来实现
wire [31:0] slt_result;
wire [31:0] sltu_result;
wire [31:0] and_result;
wire [31:0] nor_result;
wire [31:0] or_result;
wire [31:0] xor_result;
wire [31:0] sll_result;
wire [31:0] srl_result;
wire [31:0] sra_result;
wire [31:0] lui_result;
wire signed [31:0] temp_src1; //带符号数的临时变量
assign temp_src1 = alu_src1; //方便后面对 alu_src1 进行算数右移
assign and_result = alu_src1 & alu_src2; //按位与
assign or_result = alu_src1 | alu_src2; //按位或
assign nor_result = ~or_result; //或非
assign xor_result = alu_src1 ^ alu_src2; //异或
assign lui_result = {alu_src2[15:0], 16'd0}; //高位加载,第二个操作数的低十六位加载到高十六位上
assign sll_result = alu_src1 << alu_src2; //逻辑左移
assign srl_result = alu_src1 >> alu_src2; //逻辑右移
assign slt_result = adder_result[31] ? 1'b1 : 1'b0; // 带符号数小于置位
assign sltu_result = adder_cout ? 1'b0 : 1'b1; //无符号数小于置位
assign sra_result = temp_src1 >>> alu_src2; //算数右移
wire [31:0] adder_operand1;
wire [31:0] adder_operand2;
wire adder_cin ;
3
wire [31:0] adder_result ;
wire adder_cout ;
assign adder_operand1 = alu_src1;
assign adder_operand2 = alu_add ? alu_src2 : ~alu_src2; //默认进行减法,为 slt 和 sltu 服务
assign adder_cin = ~alu_add;
adder adder_module( //调用实验一中的 adder.v 加法模块
.operand1(adder_operand1),
.operand2(adder_operand2),
.cin (adder_cin ),
.result (adder_result ),
.cout (adder_cout )
);
//代码补全部分
assign add_sub_result = adder_result; //先给加减法结果赋值
always@(*)
begin
if(alu_add | alu_sub) //如果是加法或者减法操作,则把加减法结果 add_sub_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= add_sub_result;
else if(alu_slt) //如果是有符号比较,则把有符号比较结果 slt_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= slt_result;
else if(alu_sltu) //如果是无符号比较,则把无符号比较结果 sltu_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= sltu_result;
else if(alu_and) //如果是按位与操作,则把按位与操作结果 and_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= and_result;
else if(alu_nor) //如果是按位或非操作,则把按位或非操作结果 nor_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= nor_result;
else if(alu_or) //如果是按位或操作,则把按位或操作结果 or_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= or_result;
else if(alu_xor) //如果是按位异或操作,则把按位异或操作结果 xor_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= xor_result;
else if(alu_sll) //如果是逻辑左移操作,则把逻辑左移的结果 alu_sll 放入 alu 最终的运算结果 alu_result 中
alu_result <= sll_result;
else if(alu_srl) //如果是逻辑右移操作,则把逻辑右移的结果 alu_srl 放入 alu 最终的运算结果 alu_result 中
alu_result <= srl_result;
else if(alu_sra) //如果是算术右移操作,则把算术右移的结果 alu_sra 放入 alu 最终的运算结果 alu_result 中
alu_result <= sra_result;
else if(alu_lui) //如果是高位加载操作,则把高位加载操作的结果 lui_result 放入 alu 最终的运算结果 alu_result 中
alu_result <= lui_result;
end
4
endmodule
2.添加 adder.v adder_display.v alu_display.v testbench.v
之前实验用到过的文件,这里不再分析解释了
3. 完成仿真,生成仿真波形图像
3.1 加法
可以看到,alu 控制信号为 1000 0000 0000B,对照上方右侧定义,alu 操作为加法操作,两个操作数的值分
别为 1111H 和 1111H,加法运算后的结果为 2222H。
剩余15页未读,继续阅读
学习呀三木
- 粉丝: 23
- 资源: 303
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0