湘潭大学计算机原理 实验一 算术逻辑单元ALU实验报告

合集下载

ALU实验报告

ALU实验报告

算术逻辑部件ALU实验报告一、实验目的(1)熟悉硬件描述语言及开发环境,了解硬件系统开发的基本过程。

(2)掌握 ALU基本设计方法和简单运算器的数据传送通路。

(3)验证 ALU的功能。

二、实验环境( 1)硬件环境:安装有 Windows7 或以上操作系统的PC,THINPAD教学计算机。

( 2)软件开发: FPGA开发工具软件 Xilinx ISE 12.3或以上。

三、实验内容(1)根据实验原理中的要求,用 VHDL语言实现一个简单的 ALU。

(2)在教学计算机 THINPAD上验证实现的 ALU的功能。

四、实验原理算术逻辑部件 ALU的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作等。

算术运算包括定点加减乘除运算,逻辑运算主要用逻辑与、逻辑或、逻辑异或和逻辑非等操作。

ALU通常有两个数据输入端A 和B 输出操作数,一个数据输出端Y 以及标志位输出结果,通过输入操作码op 来确定所要进行的操作,本实验通过实现一个状态机,根据状态机状态的变化来输人操作数及操作码,并最终实现不同的运算,将结果和标志位呈现出来。

本实验中的 ALU要求实现基本的算术运算、逻辑运算、移位运算等,具体功能如下:操作码功能描述ADD A+B加法SUB A-B减法AND A and B与OR A or B或XOR A xor B异或NOT not A取非SLL A sll B逻辑左移 B 位SRL A srl B逻辑右移 B 位SRA A sra B算术右移 B 位ROL A rol B循环左移 B 位ALU的输入数据为 16 位,操作码 op 为 4 位,算术运算时数据用补码表示。

五、实验步骤本实验通过 VHDL语言实现一个比较简单的ALU模块。

(1)用 VHDL语言编写 ALU 功能代码,并用状态机对其进行控制,使其完成实验要求的操作。

操作码和操作数的输入用微型开关 SW0~SW15,计算结果的输出用数字机上的 LED灯来展示。

ALU实验报告

ALU实验报告

算术逻辑单元实验报告一、实验目的1、掌握运算器的工作原理。

2、验证运算器的功能。

二、实验原理算术逻辑单元的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作。

算术运算包括定点加减乘除运算;逻辑运算主要有逻辑与、逻辑或、逻辑异或和逻辑非操作。

ALU通常有两个数据输入端A和B,一个数据输出端Y 以及标志位等。

三、实验要求1、实验设计目标设计一个16位算术逻辑单元,满足以下要求。

(1)16位算术逻辑单元能够进行下列运算:加法、减法、加1、减1、与、或、非和传送。

用3位运算操作码OP[2..0]进行运算,控制方式如下表所示。

(2)设立两个标志寄存器Z和C。

当复位信号reset为低电平时,将这两个标志寄存器清零。

当运算结束后,在时钟clk的上升沿改变标志寄存器Z和C的值。

运算结果改变标志寄存器C、Z的情况如下:加法、减法、加1、减1运算改变Z、C;与、或、非运算改变Z,C保不变;传送操作保持Z、C不变。

因此在运算结束Z、C需要两个D触发器保存。

(3)为了保存操作数A和B,设计两个16位寄存器A和B。

当寄存器选择信号sel=0时,如果允许写信号write=1.,则在诗中clk的上升沿将数据输入dinput送入A 寄存器;当寄存器选择信号sel=1时,如果允许写信号write=1.,则在诗中clk的上升沿将数据输入dinput送入B寄存器。

(4)算术逻辑单元用一个设计实体完成。

2.顶层设计实体的引脚要求(1)clk对应试验台上的时钟(单脉冲)。

(2)reset对应实验台上的CPU复位信号CPU-RST。

(3)数据输入dinput对应试验台开关SD15~SD0。

(4)允许写信号write对应试验台开关SA5.(5)OP[2..0]对应试验台开关SA2~SA0.(6)寄存器选择信号sel对应试验台开关SA4.(7)16为运算结果result对应实验台上的指示灯A15~A0.(8)Z、C标志位对应试验台上的Z、C指示灯。

计算机组成原理实验报告_32位ALU设计实验

计算机组成原理实验报告_32位ALU设计实验

实验三32位ALU设计实验一、实验目的学生理解算术逻辑运算单元(ALU)的基本构成,掌握Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的32位加法器、Logisim 中的运算组件构造指定规格的ALU 单元。

二、实验原理、内容与步骤实验原理、实验内容参考:1、32位加法功能的原理与设计1)设计原理1,被加数A(32位),2,被加数B(32位),3,前一位的进位CIN(1位),4,此位二数相加的和S(32位),5,此位二数相加产生的进位COUT(1位)。

要实现32位的二进制加法,一种自然的想法就是将1位的二进制加法重复32次(即逐位进位加法器)。

这样做无疑是可行且易行的,但由于每一位的CIN都是由前一位的COUT提供的,所以第2位必须在第1位计算出结果后,才能开始计算;第3位必须在第2位计算出结果后,才能开始计算,等等。

而最后的第32位必须在前31位全部计算出结果后,才能开始计算。

这样的方法,使得实现32位的二进制加法所需的时间是实现1位的二进制加法的时间的32倍。

2)电路设计32位加法功能2、32位减法功能的原理与实现1)变减法为加法的原理1.在Y引脚处使用求补器(32位),即可变减法为加法2.用构造好的32位加法器。

Y各位取反,C0取1,即可达到减法变加法。

无符号数的减法溢出,带加减功能的ALU的进位取反后表示,有符号数的减法溢出,仍然用最高位和符号位是否相等来判断2)电路设计32位减法功能3、加减溢出检测的设计(不考虑乘除法)1)有符号数溢出的设计有符号数溢出的设计2)无符号数溢出的设计无符号数溢出的设计4、移位的原理与设计1)逻辑移位逻辑移位2)算术移位算术移位5、逻辑运算功能的原理与设计2)与、或、异或、或非逻辑6、大于、等于、小于功能设计大于、等于、小于功能设计7、AluOP的控制原理与设计1)原理:AluOP的控制原理与设计8、总电路设计图算术逻辑运算单元ALU三、实验结论及分析(实验完成功能情况、存在问题分析或改进思路、自己的心得体会等。

计算机组成原理第一次实验

计算机组成原理第一次实验
F ( A B )加AB 加 1
FB F AB F 1 F A B F A B FA
F AB
F A加A
*
F AB减1
F A加A加1
F A B)加A 加 1 ( F A B )加A 加 1 (
F A B)加A ( F A B )加A (
2
网络工程系·2009 年编制
实验仿真:
管脚配置:
3
网络工程系·2009 年编制
ALU 实验数据表:
Hale Waihona Puke 选择端 M=H S3 S2 S1 S0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 逻辑功能
FB F A B F AB F AB
F A B
F ( A B) 加 AB
F A减B
F ( A B) 加 AB +1
F A减B减1
F ( A B )减1
F A B
F A加AB F A加B F A B )加AB (
F A加AB 加 1 F A加B 加 1
《计算机组成原理》课程实验报告
实验名称 姓 名
算术逻辑单元(ALU)
实验序号 级 学 成 号 绩
1
系院专业
网络工程 指导教师

实验日期
一、实验目的 1、认识算术逻辑单元(ALU)是计算机的核心部件之一,它能执行加法和减法等算术运算, 也能执行“与”“或”“非”等逻辑运算。 、 、 2、了解算术逻辑运算的结构组成和工作原理。 3、了解运算器的数据传输通路; 4、验证运算器的组合功能; 5、掌握算术逻辑运算加、减工作原理; 6、验证实验台运算的 8 位加、减、与、直通功能;5、按给定数据,完成几种指定的算术和 逻辑运算。 二、实验内容与要求 1、设计 ALU 元件。在 Quartus II 环境下,用文本输入编辑器 Text Editor 输入 ALU181.VHD 算 术逻辑单元文件,编译 VHDL 文件,并将 ALU181.VHD 文件(例 4-1)制作成一个可调用的原理图 元件。 2、以原理图方式建立顶层文件工程。选择图形方式。根据图 4-50 输入实验电路图,从 Quartus II 的基本元件库中将各元件调入图形编辑窗口、连线,添加输入输出引脚。 将所设计的原理图图形文件 ALU.bdf 保存到原先建立的文件夹中, 将当前文件设置成工程文件, 以后的操作就都是对当前工程文件进行的。 3、器件选择。选择 Cyclone 系列,在 Devices 中选择器件 EP1C6QC240C8。编译,引脚锁定, 再编译。引脚锁定后需要再次进行编译,才能将锁定信息确定下来,同时生成芯片编程/配置所需要 的各种文件。 4、 芯片编程 Programming (也可以直接选择光盘中的示例) 打开编程窗口。 。 将配置文件 ALU.sof 下载进 GW48 系列现代计算机组成原理系统中的 FPGA 中。 5、选择实验系统的电路模式是 NO.0,验证 ALU 的运算器的算术运算和逻辑运算功能。根据表 4-1,用按键输入数据 A[7..0]和 B[7..0],并设置 S[3..0]、M、CN,验证 ALU 运算器的算术运算和逻 辑运算功能,记录实验数据。 实验原理图:

计算机组成原理实验一实验报告

计算机组成原理实验一实验报告

实验一运算器实验(一)算术逻辑运算器一、实验目的:1.掌握算术逻辑运算器单元ALU(74LS181)的工作原理2.掌握简单运算器的数据传送通道3.验算由74LS181等组合逻辑电路组成的运算功能发生器运算功能4.按给定数据,完成实验指定的算术/逻辑运算二、实验设备计算机组成原理实验仪一台,排线若干条。

三、实验原理运算器实验电路说明:(1)两片74LS181(每片4位)以并/串联形式构成字长为8位的运算器。

(2)8位运算器的输出经过一个输入双向三态门(74LS245)与数据总线相连,运算器的两个数据输入端分别与两个8位寄存器(74LS273)DR1和DR2的输出端相连,DR1和DR2寄存器是用于保存参加运算的数据和运算的结果.寄存器的输入端与数据总线相连。

(3)8位数据开关D7~D0(在“INPUT DEVICE”中)用来产生参与运算的数据,经过一个输出三态门(74LS245)与数据总线相连,数据显示灯(BUS UNIT)已与数据总线相连,用来显示数据总线上的内容。

(4)S3、S2、S1、S0是运算选择控制端,有它们决定运算器执行哪一种运算(16种算术运算或16种逻辑运算)。

(5)M是算术/逻辑运算选择,M=0时,执行算术运算,M=1时,执行逻辑运算。

(6)Cn是算术运算的进位控制端,Cn=0(低电平),表示有进位,运算时相当于在最低位上加进位1,Cn=1(高电平),表示无进位。

逻辑运算与进位无关。

(7)ALU-B是输出三态门的控制端,控制运算器的运算结果是否送到数据总线BUS上。

低电平有效。

(8)SW-B是输入三态门的控制端,控制“INPUT DEVICE”中的8位数据开关D7~D0的数据是否送到数据总线BUS上。

低电平有效。

(9)LDDR1是寄存器DR1存数控制信号,LDDR2是寄存器DR2存数控制信号。

它们都是高电平有效。

(10)A0~A3是4位数据输入通道A,B0~B3是4位数据输入通道B。

实验报告算术逻辑单元

实验报告算术逻辑单元

一、实验目的1. 理解算术逻辑单元(ALU)的基本原理和功能。

2. 掌握ALU的设计方法和实现过程。

3. 通过实验加深对计算机组成原理的理解。

二、实验原理算术逻辑单元(ALU)是计算机中执行算术运算和逻辑运算的核心部件。

它主要完成加、减、乘、除等算术运算以及与、或、非、异或等逻辑运算。

ALU的设计和实现是计算机组成原理中的基础内容。

三、实验内容1. 设计一个8位ALU,能够完成加、减、乘、除、与、或、非、异或等运算。

2. 使用Verilog HDL语言实现该ALU。

3. 在FPGA平台上进行测试,验证ALU的功能。

四、实验步骤1. 分析ALU的功能需求,确定输入和输出信号。

2. 设计ALU的内部结构,包括运算单元、控制单元和寄存器。

3. 使用Verilog HDL语言编写ALU的代码。

4. 在FPGA平台上进行测试,验证ALU的功能。

五、实验结果与分析1. 实验结果根据实验要求,我们设计了一个8位ALU,能够完成加、减、乘、除、与、或、非、异或等运算。

以下是部分实验结果:(1)加法运算输入:A = 10101010,B = 11001100输出:10111010(2)减法运算输入:A = 11001100,B = 10101010输出:01010100(3)乘法运算输入:A = 10101010,B = 11001100输出:1111100000(4)除法运算输入:A = 11111111,B = 10000000输出:11111111(5)与运算输入:A = 10101010,B = 11001100输出:10001000(6)或运算输入:A = 10101010,B = 11001100输出:11101110(7)非运算输入:A = 10101010输出:01010101(8)异或运算输入:A = 10101010,B = 11001100输出:011001102. 实验分析通过实验,我们成功设计并实现了8位ALU。

计算机组成原理实验报告算术逻辑单元ALU实验(源代码全)

计算机组成原理实验报告算术逻辑单元ALU实验(源代码全)

计算机组成原理实验报告算术逻辑单元ALU实验(源代码全)算术逻辑单元ALU实验⼀. 实验⽬的1、理解算术逻辑单元ALU的⼯作原理。

2、掌握算术逻辑单元ALU的设计⽅法。

3、验证32位算术逻辑单元ALU的加、减、与、移位等基本功能。

4、选定⼏组数据,完成⼏种算术/逻辑运算。

⼆. 实验设备1、 装有Xilinx Vivado的计算机⼀台。

2、LS-CPU-EXB-002教学系统实验箱⼀套。

三. 实验任务1、学习MIPS指令集,熟知指令类型,了解指令功能和编码,归纳基础的ALU运算指令。

2、归纳确定⾃⼰本次实验中准备实现的ALU运算,要求要求⾄少实现5种ALU运算,包含加减运算,其中减法在内部要转换为加法,见表1-1。

表1-1 ALU的控制信号选择端aluc ALU功能3 2 1 00 0 00 0 10 1 00 1 11 0 01 0 11 1 00 1 1 11 1 1 13、根据如图1-1所⽰的结构框图,设计实验⽅案,并⽤Verilog编写相应代码。

4、 对编写的代码进⾏仿真,得到正确的波形图。

5、将以上设计作为⼀个单独的模块,设计⼀个外围模块去调⽤该模块,如图1-2。

外围模块中需调⽤封装好的LCD触摸屏模块,显⽰ALU 的两个源操作数、操作码和运算结果,并且需要利⽤触摸功能输⼊源操作数。

操作码可以考虑⽤LCD触摸屏输⼊,也可⽤拨码开关输⼊。

6、将编写的代码进⾏综合布局布线,并下载到试验箱中的FPGA板⼦上进⾏演⽰。

四. 实验步骤这⾥给出实验代码,具体的实验步骤请看书alu.vmodule 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'b0000: cal = a + b;//加4'b0001: cal = a&b;4'b0010: cal = a^b;4'b0011: cal = b<<a[4:0];4'b0100: cal = a-b;4'b0101: cal = a|b;4'b0110: cal ={b[15:0],16'h0};4'b0111: cal = b>>a[4:0];4'b1111: cal = $signed(b)>>> a[4:0];//算术右移endcaseendfunctionendmodulealu-display.v//************************************************************************* // > ⽂件名: alu_display.v// > 描述:ALU显⽰模块,调⽤FPGA板上的IO接⼝和触摸屏// > 作者 : LOONGSON// > ⽇期 : 2016-04-14//************************************************************************* module alu_display(//时钟与复位信号input clk,input resetn,//后缀"n"代表低电平有效//拨码开关,⽤于选择输⼊数input [1:0] input_sel,//00:输⼊为控制信号(alu_control)//10:输⼊为源操作数1(alu_src1)//11:输⼊为源操作数2(alu_src2)//触摸屏相关接⼝,不需要更改output lcd_rst,output lcd_cs,output lcd_rs,output lcd_wr,output lcd_rd,inout[15:0] lcd_data_io,output lcd_bl_ctr,inout ct_int,inout ct_sda,output ct_scl,output ct_rstn);//-----{调⽤ALU模块}beginreg [3:0] alu_control;// ALU控制信号reg [31:0] alu_src1;// ALU操作数1reg [31:0] alu_src2;// ALU操作数2wire [31:0] alu_result;// ALU结果wire alu_z;alu alu_module(alu alu_module(.aluc(alu_control),.a(alu_src1 ),.b(alu_src2 ),.r(alu_result ),.z(alu_z));//-----{调⽤ALU模块}end//---------------------{调⽤触摸屏模块}begin--------------------// //-----{实例化触摸屏}begin//此⼩节不需要更改reg display_valid;reg [39:0] display_name;reg [31:0] display_value;wire [5:0] display_number;wire input_valid;wire [31:0] input_value;lcd_module lcd_module(.clk(clk ),//10Mhz.resetn(resetn ),//调⽤触摸屏的接⼝.display_valid(display_valid ),.display_name(display_name ),.display_value(display_value ),.display_number(display_number),.input_valid(input_valid ),.input_value(input_value ),//lcd触摸屏相关接⼝,不需要更改.lcd_rst(lcd_rst ),.lcd_cs(lcd_cs ),.lcd_rs(lcd_rs ),.lcd_wr(lcd_wr ),.lcd_rd(lcd_rd ),.lcd_data_io(lcd_data_io ),.lcd_bl_ctr(lcd_bl_ctr ),.ct_int(ct_int ),.ct_sda(ct_sda ),.ct_scl(ct_scl ),.ct_rstn(ct_rstn ));//-----{实例化触摸屏}end//-----{从触摸屏获取输⼊}begin//根据实际需要输⼊的数修改此⼩节,//建议对每⼀个数的输⼊,编写单独⼀个always块//当input_sel为00时,表⽰输⼊数控制信号,即alu_control always @(posedge clk)beginif(!resetn)beginalu_control <=12'd0;endelse if(input_valid && input_sel==2'b00)beginalu_control <= input_value[11:0];endend//当input_sel为10时,表⽰输⼊数为源操作数1,即alu_src1 always @(posedge clk)beginif(!resetn)if(!resetn)beginalu_src1 <=32'd0;endelse if(input_valid && input_sel==2'b10)beginalu_src1 <= input_value;endend//当input_sel为11时,表⽰输⼊数为源操作数2,即alu_src2 always @(posedge clk)beginif(!resetn)beginalu_src2 <=32'd0;endelse if(input_valid && input_sel==2'b11)beginalu_src2 <= input_value;endend//-----{从触摸屏获取输⼊}end//-----{输出到触摸屏显⽰}begin//根据需要显⽰的数修改此⼩节,//触摸屏上共有44块显⽰区域,可显⽰44组32位数据//44块显⽰区域从1开始编号,编号为1~44,always @(posedge clk)begincase(display_number)6'd1 :begindisplay_valid <=1'b1;display_name <="SRC_1";display_value <= alu_src1;end6'd2 :begindisplay_valid <=1'b1;display_name <="SRC_2";display_value <= alu_src2;end6'd3 :begindisplay_valid <=1'b1;display_name <="CONTR";display_value <={20'd0, alu_control};end6'd4 :begindisplay_valid <=1'b1;display_name <="RESUL";display_value <= alu_result;end6'd5 :begindisplay_valid <=1'b1;display_name <="ZF";display_value <= alu_z;enddefault:begindisplay_valid <=1'b0;display_name <=40'd0;display_value <=32'd0;endendcaseend//-----{输出到触摸屏显⽰}end//----------------------{调⽤触摸屏模块}end---------------------//endmodulealu_tb.v代码如下:module testbench;// Inputsreg [31:0] a;reg [31:0] b;reg [3:0] aluc;//outputwire [31:0] r;wire z;//Instantiate the Unit Under Test(UUT)alu uut(.a(a),.b(b),.r(r),.aluc(aluc),.z(z));initial begin// Initialize Inputsa=0;b=0;aluc=0;//Wait 100ns for global reset to finish#100;//Add stimulus hereendalways #10 a=$random;//$random为系统任务,产⽣⼀个随机的32位数always #10 b=$random;//#10表⽰等待10个单位时间(10ns),即每过10ns,赋值⼀个随机的32位数 always #10 aluc={$random}%2;//加了拼接符,{$random}产⽣⼀个⾮负数,除2取余得到0或1 endmodulealu.xdc⽂件如下:set_property PACKAGE_PIN AC19 [get_ports clk]set_property PACKAGE_PIN Y3 [get_ports resetn]set_property PACKAGE_PIN AC22 [get_ports input_sel[0]]set_property PACKAGE_PIN AD24 [get_ports input_sel[1]]set_property IOSTANDARD LVCMOS33 [get_ports clk]set_property IOSTANDARD LVCMOS33 [get_ports resetn]set_property IOSTANDARD LVCMOS33 [get_ports input_sel[1]]set_property IOSTANDARD LVCMOS33 [get_ports input_sel[0]]set_property PACKAGE_PIN J25 [get_ports lcd_rst]set_property PACKAGE_PIN H18 [get_ports lcd_cs]set_property PACKAGE_PIN K16 [get_ports lcd_rs]set_property PACKAGE_PIN L8 [get_ports lcd_wr]set_property PACKAGE_PIN K8 [get_ports lcd_rd]set_property PACKAGE_PIN J15 [get_ports lcd_bl_ctr]set_property PACKAGE_PIN H9 [get_ports {lcd_data_io[0]}]set_property PACKAGE_PIN K17 [get_ports {lcd_data_io[1]}]set_property PACKAGE_PIN J20 [get_ports {lcd_data_io[2]}]set_property PACKAGE_PIN M17 [get_ports {lcd_data_io[3]}]set_property PACKAGE_PIN L17 [get_ports {lcd_data_io[4]}]set_property PACKAGE_PIN L17 [get_ports {lcd_data_io[4]}]set_property PACKAGE_PIN L18 [get_ports {lcd_data_io[5]}]set_property PACKAGE_PIN L15 [get_ports {lcd_data_io[6]}]set_property PACKAGE_PIN M15 [get_ports {lcd_data_io[7]}]set_property PACKAGE_PIN M16 [get_ports {lcd_data_io[8]}]set_property PACKAGE_PIN L14 [get_ports {lcd_data_io[9]}]set_property PACKAGE_PIN M14 [get_ports {lcd_data_io[10]}]set_property PACKAGE_PIN F22 [get_ports {lcd_data_io[11]}]set_property PACKAGE_PIN G22 [get_ports {lcd_data_io[12]}]set_property PACKAGE_PIN G21 [get_ports {lcd_data_io[13]}]set_property PACKAGE_PIN H24 [get_ports {lcd_data_io[14]}]set_property PACKAGE_PIN J16 [get_ports {lcd_data_io[15]}]set_property PACKAGE_PIN L19 [get_ports ct_int]set_property PACKAGE_PIN J24 [get_ports ct_sda]set_property PACKAGE_PIN H21 [get_ports ct_scl]set_property PACKAGE_PIN G24 [get_ports ct_rstn]set_property IOSTANDARD LVCMOS33 [get_ports lcd_rst]set_property IOSTANDARD LVCMOS33 [get_ports lcd_cs]set_property IOSTANDARD LVCMOS33 [get_ports lcd_rs]set_property IOSTANDARD LVCMOS33 [get_ports lcd_wr]set_property IOSTANDARD LVCMOS33 [get_ports lcd_rd]set_property IOSTANDARD LVCMOS33 [get_ports lcd_bl_ctr]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[4]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[5]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[7]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[8]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[9]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[10]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[11]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[12]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[13]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[14]}]set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[15]}]set_property IOSTANDARD LVCMOS33 [get_ports ct_int]set_property IOSTANDARD LVCMOS33 [get_ports ct_sda]set_property IOSTANDARD LVCMOS33 [get_ports ct_scl]set_property IOSTANDARD LVCMOS33 [get_ports ct_rstn]拨码开关的连接,通过AC22、AD24拨码开关来控制输⼊SRC_1,SRC_2,CONTR的值五.结果记录及分析(1) 仿真波形。

计算机组成原理运算器实验报告

计算机组成原理运算器实验报告

计算机组成原理运算器实验报告本次实验的主题为计算机组成原理运算器实验。

在本次实验中,我们通过对运算器的实验进行研究和探究,了解了计算机组成原理方面的相关知识,更加深入地认识了计算机的运作原理。

一、实验目的本次实验的目的是使学生掌握运算器的组成和运算过程,并且了解运算器在计算机中的位置和给计算机的工作。

二、实验原理1、硬件部分运算器是一种计算机硬件,可以进行算术和逻辑运算。

运算器包含一个算术逻辑单元(ALU),一个累加器和一些寄存器。

运算器可以在CPU 中实现简单的算术操作。

运算器由三部分组成:算术逻辑单元(ALU)、寄存器和累加器。

ALU 是计算机CPU中负责完成算术和逻辑运算的部分;寄存器是计算机中用来暂时存放数据的小型存储器,它是CPU中数据存储的主要形式;累加器是CPU中的一种特殊寄存器,在运算过程中用于存储运算结果。

2、软件部分计算机编程中常常涉及到算术和逻辑运算,进行这些运算的方法是在程序中调用运算器中的算术逻辑单元(ALU)。

ALU是计算机CPU中负责完成算术和逻辑运算的部分,用于进行各种算术和逻辑运算,如加、减、乘、除、与、或、非、移位等。

三、实验过程— 1 —本次实验的实验步骤如下:1、打开实验设备,将电源线插进插座,将设备的开关打开,在设备前方的显示器上能够看见下划线。

2、按下NORM键,增益调整。

将x的值设置为“0011”,将y的值设置为“1101”。

3、操作者可以选择不同的操作符。

例如选择ADD操作,将其输入。

4、按下RUN键,运算器开始计算。

5、运算结束后,在屏幕上将显示运算结果。

本例中,结果为“1000”。

四、实验结果与分析在本次实验中,我们利用运算器实现了不同运算的计算过程,并且也成功地输出了运算结果。

这一过程与计算机组成原理中的运算器的定义、作用及组成都有密切的关系。

在本次实验中,我们也进一步加深了对计算机组成原理中该重要部分的理解。

五、实验总结通过本次实验,我们深入了解了运算器在计算机中的作用及其实现方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机原理与设计
实验报告
实验一算术逻辑单元ALU
姓名: XXX
学号: 2013551728
班级: 13级软件工程2班
实验日期: 2014年 10 月22 日
一.实验目的
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 ALU的运算功能
注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'b0111: cal=b>>a[4:0];
4'b1111: cal=$signed(b)>>>a[4:0];
endcase
endfunction
endmodule
(2)以原理图方式建立顶层文件工程
原理图如下:
(3)查看波形图波形图如下:
(4)分配引脚结构图如下:
引脚分配表如下:
四.实验任务
(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]设置值检查
表1-3给定了寄存器DRl=DA[7..0]和DR2=DB[7..0]的数据(十六进制),要求根据此数据对照逻辑功能表所得的理论值(要求课前完成)与实验结果值进行比较(均采用正逻辑0)。

表1-3
四.实验心得
这次实验总体难度并不大,较难的地方是由于第一次接触Quartus这个软件,所以刚开始在应用上出现了很多问题,比如不知道该如何封装元件、如何测试波形、如何设置引脚等等。

为了解决这样的问题我上网搜索了很多资料,也请教了老师和同学,最终学会了这些,让我受益很大。

相关文档
最新文档