实验一 四位ALU算术逻辑单元设计实验

实 验 报 告
实 验 人: 学 号: 日 期: 2010-4-10
院(系):
专业(班级): 08软件工程(数字媒体)
实验题目: 四位ALU 算术逻辑单元设计实验
一. 实验目的
1. 了解ALU (算术逻辑单元)的功能和使用方法;
2. 认识和掌握超前(并行)进位的设计方法;
3. 认识和掌握ALU 的逻辑电路组成;
4. 认识和掌握ALU 的设计方法。

二. 实验原理
从结构原理图上可推知,本实验中的ALU 运算逻辑单元由4个一位的ALU 运算逻辑单元所组成。

每一位的ALU 电路由全加器和函数发生器所组成,如下图(1)所示。

事实上,ALU 的设计是在全加器的基础上,对全加器功能的扩展来实现符合要求的多种算术/逻辑运算的功能。

为了实验多种功能的运算,An 、Bn 数据是不能直接与全加器相连接的,它们受到功能变量F3-F1的制约,因此,可由An 、Bn 数据和功能变量F3-F1组合成新的函数Xn 、Yn ,然后,再将Xn 、Yn 和下一位进位Cn-1通过全加器进行全加运算以实现所需的运算功能。

ALU 中C0为最低位的进位输入端,C4为最高位的进位输入端,Sn 为运算结果。

一位算/逻辑运算单元的逻辑表达式(n=1、2、3、4)如下:
Sn=Xn ⊕Yn ⊕Cn-1 Cn=XnYn+(Xn+Yn)Cn-1 令Pn=Xn+Yn , Gn=XnYn 则Cn=Gn+PnCn-1
X
B
A
全加器
函数发生器
Sn
C 4
Y
C 0
F1
F3 F2
图(1)
实验要求进位位采用超前(先行、并行)进位实现。

超前进位电路同时形成各位进位,因此实现快速进位,达到快速加法的目的。

这种加法器称为超前进位加法器。

各超前(先行)进位位的形成根据表达式Cn=XnYn+(Xn+Yn)Cn-1来确定,其中n=1、2、3、4。

后产生的进位与前进位有关,最终每个进位也只和Xn、Yn、C0有关,而Xn、Yn、又是An、Bn的函数,如:
C1=G1+P1C0=X1Y1+(X1+Y1)C0
C2=G2+P2C1=X2Y2+(X2+Y2)X1Y1+(X2+Y2)(X1+Y1)CO
C3=G3+P3C2=X3Y3+(X3+Y3)( X2Y2+(X2+Y2n)( X1Y1+(X1+Y1)C0))
C4=G4+P4C3=X4Y4+(X4+Y4)( X3Y3+(X3+Y3)( X2Y2+(X2+Y2n)( X1Y1+(X1+Y1)C0))
一些控制信号如F3-F1为功能控制信号,控制着4位ALU运算逻辑单元的八种功能操作:A4-A1和B4-B1为ALU的两组数据输入端;S4-S1为了4位ALU的4个输出端,S表示为S=SS43S2S1;C4为4位ALU的最高位进位输出端,依次还有C3、C2、C1。

(考虑级联关系时,如有必要可增加级联控制端G)。

三. 实验内容
依照ALU的原理与逻辑结构原理图,用超前进位的方法设计能实现下面八种功能操作的4位ALU,并对电路进行封装。

要求:
输入信号:A4-A1、B4-B1、F3-F1、低位进位C0、(级联控制端G);
输出信号:S4-S1、进位C4。

4位ALU的八种功能如下:
四. 实验器材
1.电脑一台
2.MAX+PLUS II 电路设计软件一套
3.根据需要选用器件,但以基本逻辑门电路器件为主
五. 实验分析与设计
说明:根据需要书写相关内容,如:
分析、设计、电路图、波形图、实验步骤和实验结果及分析等。

根据题意,函数发生器具有如下的功能:X=f(A,B,F3,F2,F1);Y=f(A,B,F3,F2,F1)两个输出端,在函数发生器内,记C0为最低位的进位输入:
下面分别是X与Y输出的卡诺图:
00 01 11 10 0 B ’ B ’ B B 1 B ’ B ’ B
B
由此得到输出函数的逻辑表达式:X=F3A, Y=F2’B ’+F2B=(F2+B)’,C0=F1/F3F2F1 由基本的门电路设计出函数发生器的逻辑单元:
全加器的逻辑运算功能(在数字电路中已学过) X1 Y1 C0 S1 C1 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1
1
1
1
1
S1和C1的逻辑表达式是:S1=X1⊕Y1⊕C0,C1=X1Y1+(X1+Y1)C0 由基本的门电路设计出一位全加器的逻辑单元:
F2F1 F3
封装后,函数发生器fungen和一位全加器adder如下:
实验中,要把低位的进位连接到高一位的本位上,而当F3F2F1的值为001、011、101时,C0的值为1,其余为0,于是C0应满足:C0 = GF1/F1F2F3+C0/G。

而当F3F2F1 = 111时,Cn进位为0,所以进位输入应该满足:
C0 = (GF1/F1F2F3+C0/G)/F3F2F1
C1 = (X1Y1+(X1+Y1)C0)/F3F2F1
C2 = (X2Y2+(X2+Y2)C1)/F3F2F1
C3 = (X3Y3+(X3+Y3)C2)/F3F2F1
由此得到逻辑电路图如下:
经测试,得到电路的波形:
四位ALU封装后(如下图),由于在设计过程中增加了级联控制端G(四位的情形也要考虑G 的输入),因此可以扩展到八位,如下得到的是八位的逻辑电路图:
输出波形:
六. 思考题
设计一个4*4的原码阵列乘法器和一个4/4位的原码阵列除法器。

由于学习能力和时间的有限,本次实验只做了4*4的原码阵列乘法器。

这个乘法器的实现,需要12(即n(n-1))个全加器和16(即n(n)) 个“与”门。

基本思想是由16个与门电路产生被加数,再对被加数进行求和(由全加器实现)。

由手绘4*4阵列,斜线方向为进位输出,竖线方向为和输出,阵列中最后一行构成了一位行波进位加法器。

逻辑电路图如下:
实验得到波形如下:
七. 实验心得
通过本次实验的学习,对该课题有了一定的了解,另外MAX+plus II的操作有待加强……还有在设计四位ALU的时候,对级联控制端的设计和调试花了比较多时间(出过几次错误),在这个问题上还要继续加强学习,不断巩固。

至于对阵列乘法器和除法器的求补形式以及操作还不太熟,希望在以后的学习中能够得到老师的帮助。

合集下载

计算机组成原理实验报告 算术逻辑运算单元实验

计算机组成原理实验报告 算术逻辑运算单元实验

西华大学数学与计算机学院实验报告课程名称:计算机组成原理年级:2011级实验成绩:指导教师:祝昌宇姓名:蒋俊实验名称:算术逻辑运算单元实验学号:312011*********实验日期:2013-12-15一、目的1. 掌握简单运算器的数据传输方式2. 掌握74LS181的功能和应用二、实验原理(1)ALU单元实验构成1、结构试验箱上的算术逻辑运算单元上的运算器是由运算器由2片74LS181构成8字长的ALU 单元。

2、2片74LS373作为2个数据锁存器(DR1、DR2),8芯插座ALU-OUT作为数据输入端,可通过短8芯扁平电缆,把数据输入端连接到数据总线上。

3、运算器的数据输出由一片74LS244(输出缓冲器)来控制,8芯插座ALU-OUT作为数据输出端,可通过短8芯扁平电缆把数据输出端连接到数据总线上。

(2)ALU单元的工作原理数据输入锁存器DR1的EDR1为低电平,并且D1CK有上升沿时,把来自数据总线上的数据打入锁存器DR1。

同样,使EDR2为低电平,并且D2CK有上升沿时,把来自数据总线上的数据打入锁存器DR2。

算术逻辑运算单元的核心是由2片74LS181构成,它可以进行2个8位二进制数的算术逻辑运算,74LS181的各种工作方式可通过设置其控制信号来实现(S0、S1、S2、S3、M、CN)。

当实验者正确设置了74LS181的各个控制信号,74LS181会运算数据锁存器DR1、DR2内的数据。

由于DR1、DR2已经把数据锁存,只要74LS181的控制信号不变,那么74LS181的输出数据也不会发生改变。

输出缓冲器采用74LS244,当控制信号ALU-O为低电平时,74LS244导通,把74LS181的运算结果输出到数据总线;ALU-O为高电平时,74LS244的输出为高阻。

图1 算术逻辑单元原理图三、使用环境计算机组成原理实验箱四、实验步骤(一).逻辑或运算实验1.把ALU-IN(8芯的盒型插座)与CPT-B板上的二进制开关单元中J1插座相连(对应二进制开关H16~H23), 把ALU-OUT(8芯的盒型插座)与数据总线上的DJ2相连。

实验一:脱机运算器实验

实验一:脱机运算器实验

实验一 脱机运算器实验一、实验目的1、深入了解位片结构运算器AM2901的功能与用法;2、学习4片AM2901组成一个16位运算器的级连方式,深化运算器部件的组成、设计、控制和使用等方面的知识。

二、实验原理运算器是计算机中执行各种算术和逻辑运算操作的部件。

运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑运算,以及传送、移位、比较等操作。

运算器的组成除了ALU 单元外,还包括必要的寄存器和移位器等部件。

寄存器用于存放操作数和运算结果,以节省访问存储器的时间;移位器实现数据的移位功能,以扩展ALU 的运算功能,增加数据传送的灵活性。

AM2901是一个4位的位片结构运算器,主要由ALU 、输入多路选择器、输出选择器、寄存器组和移位器等组成,如图1-1所示。

图1-1 AM2901芯片的内部组成结构1)算术逻辑ALUALU 为4位算术逻辑单元,共有8种运算功能,由输入端I 5I 4I 3的编码值决定执行哪一种功能。

2)通用寄存器组AM2901内部有一个通用寄存器组,共有16个4位的寄存器。

寄存器组有A 和B 两个端口,其中端口A 只有读出数据功能,端口B 具有读出和写入两种功能。

即数据可以从A 口和B 口输出,但只能从B 口输入。

3)Q 寄存器Q 寄存器位4位,在乘除运算中可用来存放乘数或商,故又称为乘商寄存器。

Q 寄存器本身具有移位功能,可对数据进行左移一位或右移一位的处理。

4)ALU 输入多路选择器AM2901具有两个输入多路选择器R 和S ,为ALU 提供两个操作数。

R 可选择来自数据线的数据D (来自外部)或寄存器组端口A 的数据;S 可从寄存器组端口A 、B 和Q 寄存器3个来源选取数据。

两个操作数的组合由控制信号I 2I 1I 0的编码确定。

5)移位器4位,用于对ALU 的输出实现直送、左移或右移处理。

6)输出选择器选择AM2901输出数据Y 的来源。

输出数据Y 有两个来源:一个是ALU 的运算结果F ,另一个是直接来自寄存器组端口A 。

算术运算单元ALU的设计

算术运算单元ALU的设计

沈阳理工大学课程设计专用纸沈阳理工大学课程设计专用纸1算术运算单元ALU 的设计1设计要求概述:1.进行两个四位二进制数的运算;.进行两个四位二进制数的运算; 2.算术运算:.算术运算:A+B,A-B,A+1,A-1A+B,A-B,A+1,A-1A+B,A-B,A+1,A-1;;3.逻辑运算:.逻辑运算:A and B,A or B,A not, A xor B A and B,A or B,A not, A xor B;2功能模块整体结构设计 1.1.总体设计概述总体设计概述总体设计概述总体电路设计原理图总体电路设计原理图算术运算单元ALU 总体上由五个模块组成:总体上由五个模块组成:A A ±B 模块、模块、A A ±1模块、模块、A A 与B 和A 或B 模块、模块、A A 异或B 和A 非、控制模块。

通过这五个模块实现两个四位二进制数的算术运算和逻辑运算。

制数的算术运算和逻辑运算。

2.2.各个模块的详细描述各个模块的详细描述各个模块的详细描述⑴ A ±B 模块模块A+B 可以直接通过74283两个四位二进制数加法器直接实现;A —B 可以转换成A 加上B 的补码实现。

同时再设计一个转换控制端M ,M=0时实现A+B A+B,,M=1时实现A-B A-B,最后添加一个总的控制端,最后添加一个总的控制端K0K0,,K0=.0时该模块不输出结果,时该模块不输出结果,K0=1K0=1时该模块工作。

时该模块工作。

A±B模块原理图模块原理图A+B仿真图如下:仿真图如下:A-B仿真图如下:仿真图如下:模块⑵A±1模块只要两个四位二进制数加法器实现,只要A+1如同A+B一样可以直接通过74283两个四位二进制数加法器实现,把B设置成1;A-1可以转换成A加上1的补码实现,同时设置一个转换控制端M ,M =0时实现A+1功能,功能,M M =1时实现A-1功能。

计算机组成原理实验报告算术逻辑单元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) 仿真波形。

实验01 运算器组成实验

实验01 运算器组成实验

实验一运算器组成实验一、实验目的1、通过实验进一步熟悉运算器的组成结构。

2、通过实验理解多功能ALU的设计方法。

3、通过实验理解程序标志位的产生和管理方法。

二、实验步骤1、打开已有的实验工程目录:“ALU”。

通过双击目录中的QuartusII工程文件“4BitALU.qpf”,利用QuartusII软件打开已经建好的实验工程。

图1 打开QuartusII工程2、打开工程后,QuartusII软件的界面如图2所示。

在软件窗口的左边区域的“Project Navigator”列表栏中,选择“files”选项卡,我们可以看到列表栏中列出了这个工程中的设计文件。

本工程的设计文件说明在表1中列举出来。

表1 工程设计文件说明表设计文件说明对应组件文件DFFCE.vhd VHDL设计文件,设计一个带锁存信号的D触发器DFFCE.bsf4BitReg.bdf 使用DFFCE组件创建的4位寄存器,且带有锁存信号4BitReg.bsfFulladder.bdf 一位全加器Fulladder.bsf4BitAdder.bdf 由Fulladder组件创建的4位行波进位加法器4BitAdder.bsf4BitSuber.bdf 利用4BitAdder组件创建的4位减法器4BitSuber.bsf4BitAnder.bdf 4位与运算部件4BitAnder.bsf4BitOrer.bdf 4位或运算部件4BitOrer.bdf4Mux1.bdf 4选1选择器4Mux1.bsfJustALU.bdf 利用以上组件创建的多功能ALU,可以完成“加、减、与、或”运算JustALU.bsf4BitALU.bdf 运算器设计文件其中,设计文件“4BitALU.bdf”还没有完成,需要由实验者在原有设计基础上添加合理设计,完成运算器的功能。

图2 工程界面图3、如图3上所示,“运算器”构建在4BitALU的设计文件中,ALU与缓存数据的寄存器已经实现直连。

4位alu设计实验报告

4位alu设计实验报告

4位alu设计实验报告引言阿里巴巴淘宝研发部需要一个高效的算术逻辑单元(ALU),用于处理复杂的计算任务。

本实验旨在设计并实现一个4位ALU,以满足淘宝研发部的需求。

设计思路功能需求根据淘宝研发部的需求,4位ALU需实现以下基本功能:1. 加法运算2. 减法运算3. 与门运算4. 或门运算5. 异或门运算6. 比较两个数的大小(等于、大于、小于)设计方案为了实现这些功能,我们将使用以下组件:1. 4位全加器电路- 用于加法运算2. 4位比较器电路- 用于比较运算3. 4位逻辑门电路- 用于与门、或门、异或门运算设计方案如下:![ALU](alu_design.png)实验步骤1. 设计并实现4位全加器电路2. 设计并实现4位比较器电路3. 设计并实现4位逻辑门电路4. 使用以上电路组件实现4位ALU电路5. 进行基本运算和比较测试,验证ALU功能是否正确实验结果通过实验验证,4位ALU完成了预期的功能需求。

以下是一些测试样例及输出结果:加法运算- 输入:A=1010,B=0011- 输出:Sum=1101减法运算- 输入:A=1010,B=0011- 输出:Diff=0111与门运算- 输入:A=1010,B=0011- 输出:A&B=0010或门运算- 输入:A=1010,B=0011- 输出:A B=1011异或门运算- 输入:A=1010,B=0011- 输出:A^B=1001比较运算- 输入:A=1010,B=0011- 输出:A>B=0001结论本实验成功设计并实现了一个功能齐全的4位ALU电路,能够满足淘宝研发部的需求。

经过测试,ALU能够正确执行加法、减法、与门、或门、异或门以及比较运算。

这个高效的ALU电路将在处理复杂计算任务时发挥巨大作用。

实验一4位运算器设计

实验⼀4位运算器设计实验⼆ 4 位运算器设计⼀、实验名称:4 位运算器设计⼆、实验学时:5 学时三、实验⽬的:1. 利⽤Verilog建⽴4位运算器模型2. 对所设计的运算器进⾏功能验证四、实验内容:设计⼀个四位算术逻辑运算器电路,并测试其功能。

具体要求如下:1. 设计运算器,实验加减乘、逻辑与、或等功能和⾃⾏设计记录表格2. 输⼊端的0,1 可由拨码开关模拟3. 输出端接Led 灯显⽰输出数据4. 观察输出结果,记录输⼊、输出数据。

五、实验原理:1. ALU原理算术逻辑单元 (Arithmetic-Logic Unit, ALU)是中央处理器的执⾏单元,是所有中央处理器的核⼼组成部分,由"And Gate" 和"Or Gate"构成的算术逻辑单元,主要功能是进⾏⼆位元的算术运算,如加减乘(不包括整数除法)。

2. ⽤拨码开关来模拟 0、1 输⼊3. led指⽰灯显⽰输出4. ⽤按钮来模拟 0、1的低位进位输⼊六、实验步骤:1.根据实验要求作预习报告。

2.建⽴⼯程,设计程序:1)新建⼯程;2)新建verilog HDL⽂件(注:⽂件名和模块名称要和⼯程名保持⼀致)。

3)调试程序:3. 配置管脚:参照实验指导中的管脚图,配置管脚。

4.下载到开发板,观察实验结果,尝试创造⾃⼰的实验⽅案:七、实验报告要求:1. 说明实验⽬的、原理、步骤2. 实验程序及程序分析3. 给出试验结果(显⽰的结果,如照⽚或计算机绘制图⽚)4. 给出实验记录,并对记录进⾏分析。

5. 总结分析实验中所出现的问题,有何收获和体会。

ALU(算术逻辑运算单元)的设计

EDA技术与应用实验报告(四)实验名称:ALU(算术逻辑运算单元)的设计姓名:陈丹学号:100401202班级:电信(2)班时间:2012.12.11南京理工大学紫金学院电光系一、实验目的1、学习包集和元件例化语句的使用。

2、学习ALU电路的设计。

二、实验原理1、ALU原理ALU的电路原理图如图1 所示,主要由算术运算单元、逻辑单元、选择单元构成。

图1ALU功能表如表1 所示。

表12、元件、包集在结构体的层次化设计中,采用结构描述方法就是通过调用库中的元件或者已经设计好的模块来完成相应的设计。

在这种结构体中,功能描述就像网表一样来表示模块和模块之间的互联。

如ALU 是由算术单元、逻辑单元、多路复用器互相连接而构成。

而以上三个模块是由相应的VHDL 代码产生的,在VHDL 输入方式下,如果要将三个模块连接起来,就要用到元件例化语句。

元件例化语句分为元件声明和元件例化。

1、元件声明在VHDL 代码中要引入设计好的模块,首先要在结构体的说明部分对要引入的模块进行说明。

然后使用元件例化语句引入模块。

元件声明语句格式:component 引入的元件(或模块)名port(端口说明);end component;注意:元件说明语句要放在“architecture”和“begin”之间。

2、元件例化语句为将引入的元件正确地嵌入到高一层的结构体描述中,就必须将被引用的元件端口信号与结构体相应端口信号正确地连接起来,元件例化语句可以实现该功能。

元件例化语句格式:标号名:元件名(模块名)port map(端口映射);标号名是元件例化语句的唯一标识,且结构体中的标识必须是唯一的;端口映射分为:位置映射、名称映射。

位置映射指port map 中实际信号的书写顺序与component 中端口说明中的信号书写顺序一致,位置映射对书写顺序要求很严格,不能颠倒;名称映射指port map 中将引用的元件的端口信号名称赋予结构体中要使用元件的各个信号,名称映射的书写顺序要求不严格,顺序可以颠倒。

ALU运算器实验报告

计算机组成与系统结构算术逻辑部件实验报告姓名:同组成员:指导老师:实验时间:2012年3月28日一、实验名称:算术逻辑部件的设计二、实验设备:DE2-70仿真实验板三、实验原理:输入为两个4位操作数A和B,其中,核心部件是能够进行加减运算的加法器,加法器的输出除了和、差的结果Add-Result以外,还有进位标志外,还有进位标志Add-carry、零标志Zero、溢出标志Add-Overflow和标志符号Add-Sign。

在操作控制端ALUctr的控制下,在ALU中执行“加法”、“减法”、“按位或”、“带符号整数比较小于置1”和“无符号数比较小于置1”等运算,Result作为ALU运算的结果被输出,同时,零标志Zero和溢出标志Overflow也被作为ALU的结果标志信息输出。

ALU的操作由一个ALU操作控制信号生成部件产生的控制信号来控制,该控制信号逻辑的输入是ALUctr信号,,输出有4个控制信号:1、SUBctr用来控制ALU执行加法还是减法运算,当SUBctr=1时做减法,当SUBctr=0时做加法;2、OPctr用来控制选择哪种运算的结果作为Result的输出,因为11条目标指令中只有三种运算结果可能:加减,按位或和小于置1,所以OPctr需要两位;3、OVctr用来控制是否要进行溢出判断,当OVctr=1时,需要判断溢出,此时,若结果发生溢出,则溢出标志Overflow为1;当OVctr=0时,无须判断溢出,此时,即使结果发生溢出,溢出标志Overflow也不为1;4、SIGctr信号控制ALU是执行“带符号整数比较小于置于1”还是“无符号数比较小于置1”功能,当SIGctr=0,则执行“无符号数比较小于置1”,当SIGctr=1,则执行“带符号整数比较小于置1”。

ALUctr的三位编码及其对应的操作类型和ALU控制信号ALUctr<2:0> 操作类型SUBctr OVctr SIGctr OPctr<1:0> OPctr的含义0 0 0 addu 0 0 ×0 0 选择加法器的输出结果0 0 1 add 0 1 ×0 0 选择加法器的输出结果0 1 0 or ×0 ×0 1 选择”按位或”结果输出0 1 1 (未用)1 0 0 subu 1 0 ×0 0 选择加法器的输出结果1 0 1 sub 1 1 ×0 0 选择加法器的输出结果1 1 0 sltu 1 0 0 1 0 选择小于置位结果输出1 1 1 slt 1 0 1 1 0 选择小于置位结果输出四、实验结果:通过控制ALUctr、SUBctr、OVctr、SIGctr以及OPctr等控制端来选择需要进行的操作,通过拨动开关来设置我所需要的操作数,通过二极管的发光情况来记录对操作数计算后得到的结果,然后将实际结果与预期结果相匹配,将所有的操作进行过后,比较后发现实际结果均与预期结果全部一致,实验验证成功。

计算机组成原理实验报告说明

实验一运算器组成实验一、实验目的1、掌握运算器的组成及工作原理;2、了解4位函数运算器74LS181的组合功能,熟悉运算器执行算术和逻辑操作的具体实现过程;3、验证带进位控制的运算器功能。

二、实验设备1、EL-JY系列计算机组成及系统结构实验系统一套2、排线若干。

三、工作原理:算术逻辑单元ALU是运算器的核心。

集成电路74LS181是4位运算器,四片74LS181以并/串形式构成16位运算器。

它可以对两个16位二进制数进行多种算术或逻辑运算,74LS181 有高电平和低电平两种工作方式,高电平方式采用原码输入输出,低电平方式采用反码输入输出,这里采用高电平方式。

三态门74LS244作为输出缓冲器由ALU-G信号控制,ALU-G 为“0”时,三态门开通,此时其输出等于其输入;ALU-G 为“1”时,三态门关闭,此时其输出呈高阻。

四片74LS273作为两个16数据暂存器,其控制信号分别为LDR1和LDR2,当LDR1和LDR2 为高电平有效时,在T4脉冲的前沿,总线上的数据被送入暂存器保存。

四、实验内容:验证74LS181运算器的逻辑运算功能和算术运算功能。

五、实验步骤1、按照实验指导说明书连接硬件系统;2、启动实验软件,打开实验课题菜单,选中实验课题打开实验课题参数对话窗口:1)、在数据总线上输入有效数据,按"Ldr1",数据送入暂存器1;2)、在数据总线上输入有效数据,按"Ldr2",数据送入暂存器2;3)、在S3...Ar上输入有效数据组合,按"ALU功能选择端",运算器按规定进行运算,运算结果送入数据缓冲器;4)、按"ALU_G",运算结果送入数据总线。

5)、执行完后,按"回放",可对已执行的过程回看。

6)、回放结束后,按"继续"(继续按钮在点击回放后出现),进行下次数据输入。

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