算数逻辑单元ALU 联系客服

发布时间 : 星期六 文章算数逻辑单元ALU更新完毕开始阅读bb1402e6c281e53a5902ff44

湘潭大学实验报告

课程名称: 计算机原理与组成 实验名称:_算数逻辑单元ALU_页数:5 专业: 软件工程 班级: 一班 同组者姓名: 组别:学号: 2015551331 姓名: 周佳倩 实验日期:_2016年10月13日 一、实验目的

1. 2. 3. 4.

理解算术逻辑单元ALU的工作原理。 掌握算术逻辑单元ALU的设计方法。

验证32位算术逻辑单元ALU的加、减、与、移位功能。 按给定数据,完成几种指定的算术和逻辑运算。

二、实验要求

1. 做好实验预习,掌握运算器的数据传送通路和ALU的功能特性,并

熟悉本实验中所用的控制台开关的作用和使用方法。 2. 写出实验报告,内容是: 1) 实验目的;

2) 按理论分析值填写好表1-2、表1-3,给出对应的仿真波形。

3) 列表比较实验数据(2)的理论分析值与实验结果值;并对结果进行

分析。实验结果与理论分析值比较,有没有不同?为什么? 4) 通过本实验,你对运算器ALU有何认识,有什么心得体会? 三、实验原理

(1)设计ALU元件

在Quartus II 环境下,用文本输入编辑器Text Editor输入ALU.V算术逻辑单元文件,编译Verilog HDL文件,并将ALU.V文件制作成一个可调用的原理图元件。

(2)以原理图方式建立顶层文件工程

选择图形方式。根据图1-1输入实验电路图,从Quartus II的基本元件库中将各元件调入图形编辑窗口、连线,添加输入输出引脚。

将所设计的图形文件ALU_sy.bdf保存到原先建立的文件夹中,将当前文件设置成工程文件,以后的操作就都是对当前工程文件进行的。 (3)器件选择

选择Cyclone系列,在Devices中选择器件EP1C12QC240C8。编译,引脚锁定,再编译。引脚锁定后需要再次进行编译,才能将锁定信息确定下来,同时生成芯片编程/配置所需要的各种文件。

(4)芯片编程Programming(可以直接选择光盘中的示例已完成的设计进行验证实验)

打开编程窗口。将配置文件ALU_sy.sof下载进GW48系列现代计算机组成原理系统中的FPGA中。

(5)选择实验系统的电路模式是NO.0,验证ALU的运算器的算术运算和逻辑运算功能.

根据表1-1,从键盘输入数据A[7..0]和B[7..0],并设置S[3..0]、M、Cy,验证ALU运算器的算术运算和逻辑运算功能,记录实验数据。

图1-1 算术逻辑单元ALU实验原理图

四、实验内容

算术逻辑单元ALU的设计如图1-1所示。其中运算器addsub32能实现32位的加减运算。参加运算的两个32位数据分别为A[31..0]和B[31..0],运算模式由aluc[3..0]的16种组合决定,而aluc[3..0]的值由4位2进制计数器LPM_COUNTER产生,计数时钟是Sclk(图1-1);r[31..0]为输出结果,Z为运算后的零标志位。ALU功能如表1-1所示。

表1-1ALU的运算功能 选择端aluc 3 2 1 0 * 0 0 0 *0 0 1 * 0 1 0 *1 00 * 1 0 1 * 1 10 0 0 1 1 0 1 1 1 1 1 1 1 五、实验环境与设备

1. 实验软件:Quartus13.0

2. 实验器材:SOPC_EDA现代计算机组成原理系统 Cw48Cp++ 3. 实验操作系统:Microsoft windows XP 六、实验代码设计(行符号说明)

ALU功能 R?A加B R?A与B R?A?B F?A-B R?A?B R?将B逻辑左移16位 R?B逻辑左移A[4..0]位 R?B逻辑右移A[4..0]位 R?B算数右移A[4..0]位 注1、*表示每一位都移至下一更高有效位, “+”是逻辑或,“加”是算术加

ALU原件设计代码: modulealu(a,b,aluc,r,z);

input [31:0] a,b; //输入两个32位数据

input [3:0] aluc; //用16种组合表示9种运算模式 output [31:0] r; //输出结果 output z; //零标志位 assign r=cal (a,b,aluc);

assign z=~|r; //把r的所有32位或起来再取反 function [31:0] cal;

input [31:0] a,b; input [3:0] aluc; casex (aluc)

4'bx000:cal=a+b; //做加法 4'bx100:cal=a-b; //做减法 4'bx001:cal=a&b; //做与运算 4'bx101:cal=a|b; //做或运算 4'bx010:cal=a^b; //做按位与运算

4'bx110:cal={b[15:0],16'h0}; //逻辑左移16位 4'bx011:cal=b<>a[4:0]; //逻辑右移[4..0]位 4'b1111:cal=$signed(b)>>>a[4:0]; //算数右移[4..0]位 endcase endfunction

endmodule

将8位输入扩展成32位: module ext8to32(a,s); input [7:0] a; output [31:0] s;

assign s={4{a}}; //把a扩展为32位 endmodule

七、实验检验与测试 仿真波形:

八、测试数据

验证ALU的逻辑运算功能,ALU模块功能可参照表1-1,并记录实验数据。

表1-2 DA[7..0],DB[7..0]设置值检查

寄存器内容 R[7..0] Z DA[7..0] 00 1 01010101 DB[7..0] 1010101010 1 0 ALUC3 2 1 0 CLR 表1-3给定了寄存器DRl=DA[7..0]和DR2=DB[7..0]的数据(十六进制)根据此数据对照逻辑功能表所得的理论值(要求课前完成)与实验结果值进行比较(均采用正逻辑0)

表1-3 运算结果R[7..0]ALUC3210 0000 0001 0010 0011 0100 0101 0110 DA[7.0] A A A A A A A A F F F F F F DB[7..0] 5 5 5 5 5 5 5 5 0 1 0 1 0 1 ALU功能 (CLR=0) 加法 按位与 异或 逻辑左移[4..0]位 减法 逻辑或 逻辑左移16位 F F 0 0 F F 0 0 F F F F 0 0 0111 1000 1001 1010 1011 1100 1101 1110 1111 F F F F F F F F F F 5 5 5 5 5 5 5 5 0 1 F F F F F F F F 0 1 0 1 0 1 0 1 逻辑右移[4..0]位 加法 按位与 异或 无 减法 逻辑或 逻辑左移16位 算数右移[4..0]位 0 0 F E F F 0 0 0 0 5 4 5 5 0 0 0 8 九、实验过程中出现的问题及处理情况(包括实验现象、原因分析、排除故障方法等)

1. 编写的代码编译不成功,出错原因是语法错误,没注意符号格式。 2. 电路图编译时出错,原因是线路为连接到位。

3. 在仿真过程中,有几条输出波形图出现错误,没有波形是直线,原因是画电

路图时,线路连接错误。