计算机组成原理与体系结构-实验二 ALU(Proteus 8.15)
目录
一、实验目的
二、实验内容
三、实验器件
四、实验原理
五、实验步骤
六、思考题
一、实验目的
1、了解算术逻辑运算器(74LS181)的组成和功能。
2、掌握基本算术和逻辑运算的实现方法。
二、实验内容
设计算数逻辑运算器系统的通路;运用算术逻辑运算器74LS181进行有符号数/无符号数的算术运算和逻辑运算。
三、实验器件
1. 算术逻辑运算器(74LS181)。
2. 三态门(74LS244)及寄存器(74LS273、74LS373)。
3. RESPACK-8:排阻
4. DIPSWC_8:拨码开关
5. 7SEG-BCD:显示一位数字
6. 7SEG-BCD-GRN:显示一位数字
7. 4078:8输入端的或门
8. 74LS04 :反相器,非门
9. BUS:总线
10. SW-SPDT:单刀双掷开关
11. LED-GREEN:用来表示ZF/CF/SF的值
12. LED-RED:用来表示ZF/CF/SF的值
13. LED-YELLOW:用来表示ZF/CF/SF的值。
四、实验原理
说明:由于笔者能力有限,加上觉得实验指导的描述专业性、条理性较强,所以摘抄到下文。
本实验的算术逻辑运算器电路:输入单元(拨码开关)用来提供参与运算的数据,输出单元(数码显示管7SEG-BCD/7SEG-BCD-GRN)显示总线BUS的内容。运算器则由两个集成电路芯片74LS181以串行进位形式构成8位运算器(ALU):ALU_L4B为低 4 位运算芯片, ALU_H4B 为高4位运算芯片。ALU_L4B 的进位输出端 CN+4与 ALU_H4B 的进位输入端CN相连,使低4位运算产生的进位送进高 4位运算中。 ALU_L4B 的进位输入端CN连接到外来进位端开关ALU_CN,ALU_H4B的进位输出端 CN+4 经过反相器74LS04,通过三态门接到溢出标志位CF指示灯(CF=1,即ALU运算结果溢出)。
ALU 有三个标志位:溢出标志位CF(最高位产生进位),零标志位ZF(ZF=1,ALU 运算结果为0)和符号标志位SF(SF=1,运算结果为负数;SF=0,运算结果为正数或0)。
ALU 的工作方式可通过设置两个74LS181芯片的控制信号(ALU_S0、S1、S2、 S3、 M及CN)来实现, 其逻辑功能表如表2-1所示,表中“A”和“B”分别表示参与运算的操作数,“+”表示逻辑或,“加”表示算术求和。
图 6 74LS181逻辑功能表
注意:+表示或,加表示算数加法,0表示00000000,1表示00000001.
也就是说CN其实控制的是ALU算数器件输入的,CN=0代表
,CN=1代表
。
运算器ALU的输出经过三态门(74LS244)和数据总线BUS相连。当运算器使能开关低电平有效(ALU_OE=0)的时候,运算器三个部位的三态门 244状态为直通:74LS181的控制信号(S0~S3、M、CN)全部连通;74LS181的运算标志位(CF、ZF和 SF)的指示灯全部连通;以及 74LS181 的运算结果输出到数据总BUS。当 ALU_OE=1 的时候,74LS181停止工作,此时74LS181的输出端数据为无效数据,与数据总线BUS隔断。
运算器ALU的两个数据输入端分别由两个数据锁存器(74LS273)DRA、DRB锁存,74LS181 将DRA、DRB内的数据作为上述图6中参与运算的数A和B。由于 DRA、DRB已经把数据暂存,只要74LS181的控制信号不变,那么74LS181的输出数据也不会发生改变。数据锁存器 DRA、DRB 的输入连至数据总线 BUS,在 DRA_CLK、DRB_CLK 端开关出现上升沿跳变的时候,总线 BUS的数据分别打入 DRA、DRB锁存。
五、实验步骤
1、放置RESPACK-8和DIPSWC_8,通过总线将这两个器件连接起来,注意接电源 和接地。 2、放置多个单刀双掷开关,用来控制S0,S1,S2,S3,CN,M,还有ALU输出 (低电平有效),DIPSWC_8(低电平有效)输出和两个存储A和B的寄存器,并且都 高电平连接电源,低电平接地。
3、放置两个74LS244 和 74LS273,DIPSWC_8 与两个 74LS244 通过总线相连, 74LS244 与 74LS273通过总线相连,74LS244的作用为控制总线上DIPSWC_8的数据流 通,避免与结果数据冲突,74LS273的作用为储存进行运算的两个数值。
4、放置两个74LS181和74LS244,74LS273通过总线与74LS181相连,依次连接单 刀双掷开关(S0,S1...)和74LS244和74LS181。
5、放置3个74LS244,一个4078,一个74LS04,三个LED,其中一个74LS244与三个LED相连。
6、放置一个7SEG-BCD,一个7SEG-BCD-GRN,用来显示数字与总线相连。每一个总线都必须命名,总线的命名格式为:name[0..n],name为总线的名字,n为总线数量,与总线相连的每一条线都要命名,格式为:namei,name为相连的总线的名字, i=0,1,2,3.....n
7、启动仿真前,令(S3,S2,S1,S0,M,CN) = (1,1,1,1,1,1),DRA_CLK = DRB_CLK = 0,SW_BUS=ALU_OE=1;
8、启动仿真后,SW_BUS=0,使用拨码开关,选择一个8位的二进制值0xAA,将 DRA-CLK置为1,将值存进锁存器DRA,再将DRA-CLK置为0,再次使用拨码开关, 选择一个8位的二进制值0x55,将DRB-CLK置为1,将值存进锁存器DRB,再将 DRB-CLK置为0,再令SW_BUS=1。
说明:本实验的两个操作数对于48组操作保持固定,同时0xAA和0x55具有特殊性,能够体现泛华计算中更多的特殊情况,比如条件信号输出零标志位ZF=1。
图 7 0xAA/0x55操作数预装载,手动产生上升沿信号
9、设置ALU_OE=0,然后改变运算器的控制信号(S3,S2,S1,S0,M,CN),观察运算器的输出F和标志位CF、SF、ZF,并且把输出F填入下表。
图 8 M=0算术运算,CN=0有进位,4/16种s3s2s1s0运算控制
图 9 M=0算术运算,CN=1无进位,五种细分控制
图 10 0xAA XOR 0x55 (逐位)
六、思考题
1.74LS181 运算器可以区分有符号数运算和无符号数运算么?可以执行无符号数的加法和减法运算么?对于有符号数的运算,74LS181运算器是补码运算器还是原码运算器?
这个问题可以参考实验1思考题1和2的回答。74LS181运算器是可以区分有符号和无符号数的运算的,只需要根据SF和CF进行(组合)判别,就可以实现8位有符号输入(1)-8位有符号输出、8位无符号输入(2)-8位无符号输出或者9位有符号输出。
在实验一中使用M表示加法减法控制,实验二中 对应减法运算,
对应加法运算,因为ALU的功能更加强大,控制信号也从实验一简单的加减法单位控制信号变成了6位控制信号,最多可以对应64种控制情况;再结合条件信号输出CF位和SF位就可以校验溢出情况了。结合实验1的思考题,情况(1)只需要用到SF位、控制信号和操作数的MSB,而情况(2)需要用到控制信号和CF位。
2.在74LS181 运算器的通路中,输入锁存器DRA、DRB的作用是什么?假设去掉其中一个输入锁存器,使得 74LS181 的输入直连总线,运算器还能正常工作么?运算结果输出端连接的74LS244缓冲器的作用是什么?假设去掉输出端74LS244 缓冲器,使得74LS181 运算器的输出直连总线,运算器还能正常工作么?
DRA和DRB的作用可能属于信号边沿有效型的寄存器而非高低电平有效型的锁存器,其作用有两个,一是缓存输入数据,并确保数据的稳定性和准确性,没有这两个寄存器两个操作数永远相同,第二点更重要,如果没有寄存器,ALU输出使能之后结果会作为操作数再次参与运算,会出现无限计算循环的致命问题。
具有三态门结构的74LS244缓冲器的作用很重要,从电路结构图可以发现数据输入和数据输出总线是同一条,因此在数据输入端和数据输出端都需要连接缓冲器;
如果去掉输入端的缓冲器,由于DRA和DRB的存在,ALU(74LS181)的工作不会受到影响,但是一旦输出使能之后,数据会通过总线“反流”到拨码开关处,造成信号冲突——一个在硬件电路设计过程中很忌讳的问题。
而如果去掉的是题目问到的输出端的缓冲器,同样会产生信号冲突,因为输入电路的三态门缓冲器输出端一定存在高低电平,虽然在断开左右连接后软件显示的是灰色信号,但是实际上数据输入电路74LS244的输出端的0-1高低电平,会直接通过总线“反流”到ALU输出端,和ALU产生的计算输出相互冲突,直接导致结果不稳定。
3.当74LS181运算器进行无符号数运算的过程中,运算结果的标志位SF有无意义?在有符号数运算过程中,标志位CF的含义是一致的么?如果做两个有符号数加法“A+0”,标志位CF会置位么?如果做两个有符号数减法“A-0”,标志位CF会置位么?在什么情况下有符号数的加法会出现标志位CF置位?
这个问题很有意思,和实验一的思考题、实验二的思考题1本质是一个问题。把操作数当成无符号类型是,只需要考虑CF位而不需要考虑SF位,因此并无意义,SF就是一个普通的位而非符号位。同理,操作数作为有符号类型输入时,CF位是没有意义的,甚至对于溢出的判断都没有帮助(除非在内部有使用,并向外部提供专门的溢出标志位),由于74LS181包括前述加法器的封装特性,和外界不连通,所以也没有办法直接使用这种办法判断溢出。
笔者认为,A+0和A-0都不会使CF=1;CF=1可能出现在同符号的两个有符号数相加或者不同符号的两个有符号数相减时,后者转化成前者,最终因为两个操作数的绝对值之和超过了当前位数有符号数的表示范围而产生溢出(下溢或上溢),8位的表示范围是[-128,127]。