一、实验目的
1.掌握简单运算器的数据传送通路
2.掌握算术逻辑运算加、减、乘、与的工作原理。
3.验证实验台运算器的加、减、与、直通功能。
二、实验设备
TEC-4计算机组成原理教学实验仿真系统
三、实验电路
如图1所示本实验所用的运算器数据通路图。ALU由一片ispLSI1024(U47)组成。四片4位的二选一输入寄存器74HC298 构成两个操作数寄存器DR1和DR2,保存参与运算的数据。由ispLSI1024构成的8位运算器的运算类型由选择端S2、S1、S0选择,功能如表1所示:
表1 运算器运算类型选择表
选 择 |
操 作 | ||
S2 | S1 | S0 | |
0 | 0 | 0 | A & B |
0 | 0 | 1 | A & A(直通) |
0 | 1 | 0 | A + B |
0 | 1 | 1 | A - B |
1 | 0 | 0 | A(低4位) X B(低4位) |
进位C只在加法运算和减法运算时产生,与、乘、直通操作不影响进位C的状态,即进位C保持不变。减法运算采用加减数的反码再加1实现。在加运算中,C表示进位;减运算中,C代表借位。加、减运算产生的进位(借位)在T4的上升沿送入ispLSI1024内的C寄存器保存。
在SW_BUS#信号为0时,参与运算的数据通过一个三态门74HC244(SW_BUS)送到DBUS总线上,进而送至DR1或DR2操作数寄存器。输入数据可由实验台上的8个二进制数据开关SW0-SW7来设置,其中SW0是最低位,SW7是最高位。选中时为1,不选时为0。
图中尾巴上带粗短线标记的信号都是控制信号,控制信号均为电位信号。T3、T4是脉冲信号,印制板上已连接到实验台的时序电路产生的T3、T4信号上。S2、S1、S0、ALU_BUS、LDDR2、LDDR1为高电平有效,SW_BUS#为低电平有效。M1=1时,DR1选择D1-A1作为数据输入端;M1=0时,DR1选择D0-A0作为数据输入端。M2=1时,DR2选择D1-A1作为数据输入端;M2=0时,DR2选择D0-A0作为数据输入端。当LDDR2=1时,在T3的下降沿,选中的数据被打入DR2寄存器。
四、实验任务
(1)正确设置开关DZ、DB、DP。用数据开关SW0—SW7向DR1和DR2寄存器置数。
1.按实验一要求向DR1存入01010101,向DR2存入10101010。
2.置SW_BUS# = 1,关闭数据开关SW0—SW7对数据总线DBUS的输出;置ALU_BUS= 1,开启ALU 对DBUS的输出。选择S2 = 0、S1 = 0、S0 = 1,使运算器进行直通运算,通过DBUS指示灯验证DR2中的内容是否为第2步设置的值。令S2 = 0、S1 = 1、S0 = 0,使运算器进行加运算,通过DBUS指示灯验证DR1中的内容是否为第2步设置的值。在表1中填入控制信号状态与DBUS显示状态。
表2 DR1、DR2设置值检查
ALU_BUS | SW_BUS# | 寄存器内容 | S2 S1 S0 | DBUS |
|
| DR1 (01010101)、DR2(10101010) |
|
|
|
| DR1 (01010101)、DR2(10101010) |
|
|
(2)验证运算器的算术运算和逻辑运算功能。
令DR1 = 01100011B,DR2 =10110100B,正确选择S2、S1、S0,依次进行加、减、与、直通,乘实验 ,记下实验结果(数据和进位)并对结果进行分析。
令DR1 = 10110100B,DR2 = 01100011B,正确选择S2、S1、S0,依次进行加、减、与、直通,乘实验,记下实验结果(数据和进位)并对结果进行分析。
令 DR1 = 01100011B,DR2 =01100011B,正确选择S2、S1、S0,依次进行加、减、与、直通,乘实验 ,记下实验结果(数据和进位)并对结果进行分析。
令 DR1 = 01001100B,DR2 = 10110011B,正确选择S2、S1、S0,依次进行加、减、与、直通,乘实验,记下实验结果(数据和进位)并对结果进行分析。
令DR1=11111111B,DR2 =11111111B,正确选择S2、S1、S0,依次进行加、减、与、直通,乘实验 ,记下实验结果(数据和进位)并对结果进行分析。
五、实验步骤和实验结果
(1)实验任务一的实验步骤及结果如下:
接线:将IAR_BUS#接VCC,RS_BUS#接VCC,LRW接GND,禁止中断地址寄存器IAR、寄存器堆RF、双端口存储器向数据总线DBUS送数。也可以通过将CEL#接VCC禁止双端口存储器向数据总线DBUS送数。将SW_BUS#接K0,将ALU_BUS接K1,S0接K2,S1接K3,S2接K4,LDDR1接K5,LDDR2接K6,M1接VCC,M2接VCC。
2.置开关DB = 0,DZ = 0,DP = 1,使实验系统处于单拍状态。
合上实验台电源。按复位按钮CLR#,使实验系统处于初始状态。

根据右边提示连接
观察数据指示灯状态是否与数据开关状态一致
置ALU_BUS = 0,关闭ALU向数据总线DBUS的输出;置SW_BUS# = 0,开启数据开关SW0—SW7向数据总线DBUS的输出。注意,对于数据总线DBUS(或者其他任何总线),在任一时刻,只能有一个数据源向它输出。置IR/DBUS开关于DBUS位置,在数据开关SW0—SW7上设置各种数据,观察数据指示灯状态是否与数据开关状态一致。

置K0(SW_BUS#) = 0,K1(ALU_BUS)= 0。置开关SW7—SW0为10101001B。数据指示灯应显示10101001B。它指示的是数据总线DBUS的值。打勾代表1,不打勾代表0
向DR1存入01010101,向DR2存入10101010
2.置M1=1,选择DBUS作为DR1的数据源;置LDDR1=1,按QD按钮,则将DBUS的数据打入DR1。置M2=1,选择DBUS作为DR2的数据源;置LDDR2=1,按QD按钮,则将DBUS的数据打入DR2。向DR1存入01010101,向DR2存入10101010。
置K5(LDDR1) = 1,K6(LDDR2) = 0。按一次QD按钮,将01010101B置入DR1。

置K5(LDDR1) = 0,K6(LDDR2) = 1。将数据开关SW7—SW0置为10101010B,数据指示灯应显示10101010B。按一次QD按钮,将10101010B置入DR2。

进行简单运算和测试
3..置K0(SW_BUS#)= 1,关闭数据开关SW0—SW7对数据总线DBUS的输出;置K1(ALU_BUS) = 1,开启ALU 对DBUS的输出。置K2(S0)= 1、K3(S1) = 0、K4(S2) = 0,使运算器进行直通运算。红色数据指示灯应显示10101010B。这表示DR2置数正确。置K2(S0) = 0、 K3(S1) = 1、K4(S2) = 0,使运算器进行加运算,红色数据指示灯应显示11111111B。这表示DR1中的数确实是01010101B。
ALU_BUS | SW_BUS# | 寄存器内容 | S2 S1 S0 | DBUS |
1 | 1 | DR1 (01010101)、DR2(10101010) | 0 0 1 | 10101010B |
1 | 1 | DR1 (01010101)、DR2(10101010) | 0 1 0 | 11111111B |

S2 = 0、S1 = 0、S0 = 1时,DBUS指示灯验证DR2中的内容为第2步设置的值。

S2 = 0、S1 = 1、S0 = 0时,DBUS指示灯验证DR1中的内容为第2步设置的值。
验证运算器的算术运算和逻辑运算功能
(2)以上是实验内容一的实验步骤和实验结果,对于实验内容二,可仿照办理。欲察看C的值,需按一次QD按钮。实验内容二的实验结果如下:
1.令DR1=01100011B,DR2 = 10110100B,加的结果是00010111B,C = 1;减的结果是01010001B,C = 0;与的结果是00100000B,C不变;直通的结果是10110100B,C不变;乘的结果是00001100B,C不变。
| DR1 | DR2 | S2 S1 S0 | 结果(数据) | 进位 | 分析值与实验结果值是否相等 |
1.加 | 01100011B | 10110100B | 0 1 0 | 00010111B | 1 | 是 |
2.减 | 01100011B | 10110100B | 0 1 1 | 01010001B | 0 | 是 |
3.与 | 01100011B | 10110100B | 0 0 0 | 00100000B | 0 | 是 |
4.直通 | 01100011B | 10110100B | 0 0 1 | 10110100B | 0 | 是 |
5.乘 | 01100011B | 10110100B | 1 0 0 | 00001100B | 0 | 是 |
2.令DR1=10110100B,DR2 = 01100011B,加的结果是00010111B,C = 1;减的结果是10101111B,C = 1;与的结果是00100000B,C不变;直通的结果是01100011B,C不变;乘的结果是00001100B,C不变。
| DR1 | DR2 | S2 S1 S0 | 结果(数据) | 进位 | 分析值与实验结果值是否相等 |
1.加 | 10110100B | 01100011B | 0 1 0 | 00010111B | 1 | 是 |
2.减 | 10110100B | 01100011B | 0 1 1 | 10101111B | 1 | 是 |
3.与 | 10110100B | 01100011B | 0 0 0 | 00100000B | 1 | 是 |
4.直通 | 10110100B | 01100011B | 0 0 1 | 01100011B | 1 | 是 |
5.乘 | 10110100B | 01100011B | 1 0 0 | 00001100B | 1 | 是 |
3.令 DR1 =01100011B,DR2 = 01100011B,加的结果是11000110B,C = 0;减的结果是00000000B,C = 0;与的结果是01100011B,C不变;直通的结果是01100011B,C不变;乘的结果是00001001B,C不变。
DR1 | DR2 | S2 S1 S0 | 结果(数据) | 进位 | 分析值与实验结果值是否相等 | |
1.加 | 01100011B | 01100011B | 0 1 0 | 11000110B | 0 | 是 |
2.减 | 01100011B | 01100011B | 0 1 1 | 00000000B | 0 | 是 |
3.与 | 01100011B | 01100011B | 0 0 0 | 01100011B | 0 | 是 |
4.直通 | 01100011B | 01100011B | 0 0 1 | 01100011B | 0 | 是 |
5.乘 | 01100011B | 01100011B | 1 0 0 | 00001001B | 0 | 是 |
4.令 DR1 =01001100,DR2 = 10110011,加的结果是11111111B,C = 0;减的结果是01100111B,C = 0;与的结果是00000000B,C不变;直通的结果是10110011B,C不变;乘的结果是00100100B,C不变。
DR1 | DR2 | S2 S1 S0 | 结果(数据) | 进位 | 分析值与实验结果值是否相等 | |
1.加 | 01001100B | 10110011B | 0 1 0 | 11111111B | 0 | 是 |
2.减 | 01001100B | 10110011B | 0 1 1 | 01100111B | 0 | 是 |
3.与 | 01001100B | 10110011B | 0 0 0 | 00000000B | 0 | 是 |
4.直通 | 01001100B | 10110011B | 0 0 1 | 10110011B | 0 | 是 |
5.乘 | 01001100B | 10110011B | 1 0 0 | 00100100B | 0 | 是 |
5.令DR1=11111111B,DR2 = 11111111B,加的结果是11111110B,C = 1;减的结果是00000000B,C不变;与的结果是11111111B,C不变;直通的结果是11111111B,C不变;乘的结果是11100001B,C不变。
DR1 | DR2 | S2 S1 S0 | 结果(数据) | 进位 | 分析值与实验结果值是否相等 | |
1.加 | 11111111B | 11111111B | 0 1 0 | 11111111B | 1 | 是 |
2.减 | 11111111B | 11111111B | 0 1 1 | 00000000B | 1 | 是 |
3.与 | 11111111B | 11111111B | 0 0 0 | 11111111B | 1 | 是 |
4.直通 | 11111111B | 11111111B | 0 0 1 | 11111111B | 1 | 是 |
5.乘 | 11111111B | 11111111B | 1 0 0 | 11100001B | 1 | 是 |
M1、M2控制信号的作用
(3)M1、M2控制信号的作用是什么?改变M1、M2的高低电平,重复第(2)步,观察出现什么问题?
M1用于选择DR1的数据输入源。M1=1时,DR1选择D1—A1作为数据输入端;M1=0时,DR1选择D0—A0作为数据输入端。M2用于选择DR2的数据输入源。M2=1时,DR2选择D1—A1作为数据输入端;M2=0时,DR2选择D0—A0作为数据输入端。在做实验内容(2)时,如果将M1或者M2由接VCC改为接GND,则DR1或者DR2选择寄存器堆作为数据输入源。由于没有给寄存器堆中的寄存器置数,因此寄存器的内容处于不可知状态。因此在M1 = 0或者M2 = 0时,进行实验内容(2),结果将是无法预知的。