--WORD格式---可编辑--
--
杭州电子科技大学计算机学院
实验报告
课程名称:计算机组成原理
姓
名:
实验项目:多功能
ALU设计实验
班
级:
指导教师:
学
号:
实验位置:
日
期: 2015 年 4 月 29 日
实验
目的
实验
环境
1) 学习多功能 ALU的工作原理,掌握运算器的设计方法。
2) 掌握运用 Verilog HDL 进行行为描述与建模的技巧和方法。
Xilinx ISE Design Suite 13.4
1) 创建工程,编写 ALU模块代码。
2) 编写对 A、B 数据进行选择的模块代码。
3) 编写选择输出数据模块代码。
4) 设置顶层文件,并将三个模块代码导入。
实验 ( 5) 设置输入信号,进行软件仿真并记录仿真波形。
内容
( 6)
生成 BIT 文件并下载入
FPGA中,进行硬件测试。
(算
( 7)
记录测试结果。
法、
程
序、
步骤
和方
法)
(接
上)
实验
内容
(算
法、
程
序、
步骤
和方
法)
1) ALU 模块代码,利用三八译码器,将我们将要操作的对象,进行分别的处理。
module ALU_TOP(A,B,F,ZF,OF,ALU_OP);
input [31:0] A,B;
input [2:0] ALU_OP;
output ZF,OF;
output [31:0] F;
reg [31:0] F;
reg ZF,OF;
reg [5:0] i;
reg C;
reg [32:0] CF;
always @ (ALU_OP or A or B)
begin
case(ALU_OP)
3'b000:begin CF=A&B; end
3'b001:begin CF=A|B; end
3'b010:begin CF=A^B; end
3'b011:begin CF=A~^B; end
3'b100:begin CF=A+B; end
3'b101:begin CF=A-B; end
3'b110:begin CF=(A
3'b111:begin CF=B<
endcase
F[31:0]=CF[31:0];
C=CF[32];
ZF=0;
for(i=0;i<32;i=i+1)
ZF=ZF|F[i];
ZF=~ZF;
OF=A[31]^B[31]^F[31]^C;
end
endmodule
( 2)
输入数据选择模块代码
,根据实验指导书上的对于
32 位数据的处理方
式。
module Choice(AB_SW,A,B);
input [2:0] AB_SW;
output [31:0] A,B;
reg [31:0] A,B;
wire [2:0] AB_SW;
always @ ( * )
begin
case(AB_SW)
3'b000:begin A=32'h0000_0000;B=32'h0000_0000;end 3'b001:begin A=32'h0000_0003;B=32'h0000_0607;end 3'b010:begin A=32'h8000_0000;B=32'h8000_0000;end 3'b011:begin A=32'h7FFF_FFFF;B=32'h7FFF_FFFF;end 3'b100:begin A=32'hFFFF_FFFF;B=32'hFFFF_FFFF;end 3'b101:begin A=32'h8000_0000;B=32'hFFFF_FFFF;end 3'b110:begin A=32'hFFFF_FFFF;B=32'h8000_0000;end 3'b111:begin A=32'h1234_5678;B=32'h3333_2222;end default:begin A=32'h9ABC_DEF0;B=32'h1111_2222;end
endcase
end
endmodule
3) 输出数据选择模块代码, 根据实验指导书上的对于 32 位数据的处理方式。
module CLED(F_LED_SW,LED,F,ZF,OF);
input [31:0] F;
input ZF,OF;
input [2:0] F_LED_SW;
output [7:0] LED;
reg [7:0] LED;
wire [31:0] F;
wire [2:0] F_LED_SW;
wire ZF,OF;
always @ ( * )
begin
case(F_LED_SW)
3'b000:LED=F[7:0];
3'b001:LED=F[15:8];
3'b010:LED=F[23:16];
3'b011:LED=F[31:24]