计算机原理与设计
实验报告
实验一 算术逻辑单元ALU
姓名: XXX 学号: 2013551728 班级: 13级软件工程2班 实验日期: 2014年 10 月22
日
实验地点 硬件环境 系统环境 设计软件 器件型号
信息楼605 Intel(R) Core™ i3-3240 ,1.91GB Windows XP SP3 Quartus II 13.0 EP1C12QC240C8 一.实验目的
1. 理解算术逻辑单元ALU的工作原理。 2. 掌握算术逻辑单元ALU的设计方法。
3. 验证32位算术逻辑单元ALU的加、减、与、移位功能。 4. 按给定数据,完成几种指定的算术和逻辑运算。
二.实验内容
算术逻辑单元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-1 选择端aluc 3 2 1 0 * 0 0 0 * 0 0 1 * 0 1 0 * 1 0 0 * 1 0 1 * 1 1 0
ALU的运算功能
ALU功能 RA加B RA与B RAB FA-B RAB R将B逻辑左移16位 RB逻辑左移A[4..0]位 0 0 1 1 RB逻辑右移A[4..0]位 0 1 1 1 RB算数右移A[4..0]位 1 1 1 1 注1、* 表示每一位都移至下一更高有效位, “+”是逻辑或,“加”是算术加
三.实验步骤
(1)设计ALU元件 ALU元件设计代码: module alu (a,b,aluc,r,z);
input [31:0] a,b; input [3:0] aluc; output [31:0] r; output z; assign r = cal(a,b,aluc); assign z = ~|r; 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}; 4'bx011: cal=b<>a[4:0]; 4'b1111: cal=$signed(b)>>>a[4:0]; endcase endfunction endmodule (2)以原理图方式建立顶层文件工程 原理图如下: (3)查看波形图 波形图如下: (4)分配引脚 结构图如下: 引脚分配表如下: Node Name A0_B1 ALUC[3] ALUC[2] ALUC[1] ALUC[0] CLR DA[7] DA[6] DA[5] DA[4] DA[3] DA[2] DA[1] DA[0] DB[7] DB[6] DB[5] DB[4] DB[3] DB[2] DB[1] DB[0] IN[7] IN[6] IN[5] IN[4] IN[3] IN[2] IN[1] IN[0] R[7] R[6] R[5] R[4] R[3] R[2] R[1] R[0] SCLK Z Direction Input Output Output Output Output Input Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Input Input Input Input Input Input Input Input Output Output Output Output Output Output Output Output Input Output Location PIN_235 PIN_140 PIN_139 PIN_138 PIN_137 PIN_239 PIN_20 PIN_19 PIN_18 PIN_17 PIN_16 PIN_15 PIN_14 PIN_13 PIN_136 PIN_135 PIN_134 PIN_133 PIN_132 PIN_128 PIN_41 PIN_21 PIN_12 PIN_8 PIN_7 PIN_6 PIN_4 PIN_3 PIN_2 PIN_1 PIN_164 PIN_163 PIN_162 PIN_161 PIN_160 PIN_159 PIN_158 PIN_141 PIN_238 PIN_165 四.实验任务 (1)按图1-1所示,在本验证性示例中用数据选择开关(键3控制)的高/低电平选择总线通道上的8位数据进入对应的数据锁存器lpm_latch中;即首先将键3输入高电平,用键2、键1分别向DA[7..0] 置数01010101(55H),这时在数码管4/3上显示输入的数据(55H);然后用键3输入低电平,再用键2、键1分别向DB[7..0]置数10101010(AAH),这时在数码管2/1上显示输入的数据(AAH);这时表示在图1-1中的两个锁存器中分别被锁入了加数55H和被加数AAH。可双击图1-1的ALU元件,了解其Verilog HDL描述。 (2)键6控制时钟SCLK,可设置表1-1的aluc[3..0]=0 ~ F。现连续按动键6,设置操作方式选择aluc[3..0]=0000(加法操作),使数码管8显示0,以验证ALU的算术运算功能: 当键7设置clr=0时,数码管6/5=FF(55H+AAH=FFH); 当键7设置cn=1(复位)时,数码管7/6/5=100(Z=1); 键KEY6控制时钟SCLK,设置aluc[3..0]=0~F,KEY7设置clr=0或clr=1,验证ALU的逻辑运算功能,并记录实验数据。 表1-2 DA[7..0],DB[7..0]设置值检查 R[7..0] 11111111 00000000 Z 0 1 寄存器内容 DA[7..0] 01010101 01010101 DB[7..0] 1010101010 1010101010 0 1 0 0 ALUC3 2 1 0 CLR (3) 验证ALU的算术运算和逻辑运算功能,ALU模块功能可参照表1-1。 表1-3给定了寄存器DRl=DA[7..0]和DR2=DB[7..0]的数据(十六进制),要求根据此数据对照逻辑功能表所得的理论值(要求课前完成)与实验结果值进行比较(均采用正逻辑0)。 表1-3 ALUC3 2 1 0 0000000011111111000011110000111100110011001100110 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 DA[7..0] AA AA AA AA FF FFFFFFF5555F F F F F F F 5 5 5 5 DB[7..0] 55550000FFFF00005 5 5 5 1 1 1 1 F F F F 1 1 1 1 ALU功能 R=A加B R=A与B R=A异或B R=B逻辑左移A[4..0]位 R=A减B R=A或B R=B逻辑左移16位 R=B逻辑右移A[4..0] R=A加B R=A与B R=A异或B R=B逻辑左移A[4..0]位 R=A减B R=A或B R=B逻辑左移16位 R=B算术右移A[4..0]位 运算结果R[7..0](CLR=0) FF 00 FF 00 FE FF 00 00 FF FF 00 00 54 55 00 08 四.实验心得 这次实验总体难度并不大,较难的地方是由于第一次接触Quartus这个软件,所以刚开始在应用上出现了很多问题,比如不知道该如何封装元件、如何测试波形、如何设置引脚等等。为了解决这样的问题我上网搜索了很多资料,也请教了老师和同学,最终学会了这些,让我受益很大。 因篇幅问题不能全部显示,请点此查看更多更全内容