实验一:TEC-2实验计算机运算器实验
一、实验目的
1. 了解和掌握Am2901运算器的组成结构和工作原理;
2. 认识和掌握TEC-2机运算器的组成和工作原理;
3. 认识和掌握TEC-2机运算器相关控制信号的含义和使用方法;
二、实验原理
1. AM2901芯片的内部结构
AM2901 芯片是一个4位的位片结构的运算器部件,其内部组成结构如下图所示:
图1 AM2901内部组成结构
该器件是位片结构的,每片内仅有四位线路。其内部组成包括:
(2)16个4位的通用寄存器组,用R0~R15表示,和一个4位的Q寄存器。通用寄存器组为双端读出(用A地址与B地址选取择每个寄存器)和单端(用B地址选取择)控制写入的行方式,而且运算后的结果经过一个移位器实现写入(左移,不移,右移)。Q寄存器本身具有左移右移功能且能接受ALU的运算结果。左右移位时,就有移出、移入信号RAM3,RAM0,Q3,Q0,4个信号,它们都是通过具有双向传送功能的三态门实现的。
(3)该芯片能接收外部送入的4位数据D3~D0,并输入4位的数据Y3~Y0。Y3~Y0可以是通用寄存器A端口上的输出或ALU的运算结果F,并还受输出允许控制信号/OE的控制,仅在/OE为低时,Y3-Y0才有输出,否则处于高阻态。
(4)ALU的两个输入端R和S分别可以接收D输入,A端口或逻辑0数据,和A端口、B端口、Q寄存器和逻辑0数据。Am2901器件只选用了它们可能的全部12种组合中的8种,即A_Q,A_B,0_Q,0_B,0_A,D_A,D_Q,和D_0这8种,并用外部送来的3位控制码I2~I0来选择这8种组合。
(5)AM2901还采用另外3位外部送来的控制信号I8~I6。一是选择向外部送出的数据的来源(A口数据还是ALU运算结果),二是选择其内部的通用寄存器组和Q寄存器接收不接收和如何接收数据库写入(左移,右移,直送)。
2. AM2901芯片的引脚信号及其控制码与操作
一片4位的AM2901芯片的引脚信号如下图2所示。
图 2 AM2901芯片的引脚信号
其中:
- A、B地址:选择通用寄存器组中的源与目的寄存器。当A和B同值时,被选中的一个寄存器的内容将被同时送到A、B两个数据输出端口;
- I2~I0用于运算过程的控制信号;D3~D0用于输入外部数据信号;
- Y3~Y0用于输出运算的结果,它会受/OE信号的控制。在TEC-2机中,/OE端已接地,因此,Y3~Y0总是有的;
- CP为时钟信号;/OE为选通信号;
- RAM3、RAM0为运算结果左右移时的移出位;Q3、Q0为乘商寄存器Q左右移时的移出位;Cy、F=0、Over、F3分别为进位标志位、零标志位、溢出标志位、符号标志位;;Cin 为外部输入的最低进位位。
- I8~I0:外部送来的3组3位的控制信号,功能分别如下:
- ① I8、I7、I6:选择运算结果或有关数据以何种方式送往何处;
- ② I5、I4、I3:选择ALU的运算功能,共八种;
- ③ I2、I1、I0:选择送入进行运算的两个操作数据R和S的来源。
这三种控制信号与相关控制码的关系如下:
图3 AM2901控制信号与相关控制码关系
3. Am2901的操作时序
图4 AM2901的操作时序
4. TEC-2机运算器
图5 微指令中三位微码(SST)与标志位的关系
4片间的连接关系是:
- 16位的数据输入有4片各自的D3~D0组成,其位序号从高位芯片向低位芯片顺序排成D15~D0。
- 16位的数据输出由4片各自的Y3~Y0组成,其为序号从高位芯片向低位芯片顺序排成Y1-Y0。高地位进位关系的3组信号。
- 有高低位进位关系的3组信号,在高低位相邻芯片间连接关系是:
- ① 高位芯片的RAM0与低位芯片的RAM3相连
- ② 高位芯片的Q0与低位芯片的Q3相连
- ③ 在串行进位方式下,高位芯片的Cn与低位芯片的Cn+4相连;若选用AM2902芯片(与74LS182芯片功能相同,两者可以互换使用)实现并行进位,则低位的3个芯片的并行进位信号/G和/P应送往AM2902的相并没有管脚,并将各自对应的片间进位输出信号送入相邻高位芯片AM2901的Cn管脚。同时支持串、并行两种方式,有利于方便地观察与测量每种进位方式的进位延迟时间。
- ② 高位芯片的Q0与低位芯片的Q3相连
- ① 高位芯片的RAM0与低位芯片的RAM3相连
此时,最低位芯片的RAM0与Q0是该16位的运算器的最低位的移入/出信号,最高位芯片的RAM3与Q3是运算器最高位的移入/出信号,均需有另外的逻辑电路与之连接,最低位的Cn是整个运算器的最低位进位输入信号。最高位的CN+4是16位完整运算器的进位输出信号。
同理,只有最高位芯片的F3和OVR有意义,低位的3个芯片的F3和OVR不被使用,4个芯片的F=0000管脚连接在一起,并经一个电阻接到+5V电源,已得到16位的ALU的运算结果为“0”的标志位信号。
注意:标志位的含义及取值:
S:符号标志,负数为1;
V:溢出标志,溢出则为1;
Z:运算结果标志,结果为0则为1;
C:进/借位标志,有则为1
5. 运算器最低位进位信号的给出与控制(SCi)
运算器最低位的进位信号Cin可能为1、为0、为C标志位的值。为了测试与实验方便,有时可送入一个连续的方波信号,当让运算执行16位全1与这个最低位的进位方波信号相加时,则加法器每一位的输出结果均为方波,有利于观察和测试。为此,我们选用两位微码SCi来区分这4中输入情况,具体见下表:
图6 4种输入情况
6. 运算器最高位、最低位的移入信号(SSH)
说明:
- 表中“X”为任意值,表示取任意值都不受影响。
- 当通用寄存器本身移位时,Q寄存器不受影响。
- 乘除法运算要求通用寄存器与Q寄存器联合移位,没有Q寄存器单独移位功能。
- 左右移是由指令功能确定的。
- SSH 为0,用于逻辑移位指令;为1,用于循环移位指令;为2,用于乘除法运算的联合移位及上商;为3,用于算术右移指令,或补码乘法计算。
三、实验内容
脱机和联机时运算器实验
在脱机与联机两种方式下,可以用一些数据实现多种运算,以控制其操作过程与功能
检查所得结果的正确性。
(一) 脱机方式
1. 将TEC-2机功能开关FS4置为“1”。
2. 将TEC-2机主脉冲置为单步方式,即将STEP/CONT开关拨向STEP一边。
3. 用D0+0→R0将立即数D0(A000H)置入寄存器R0(0000)。具体的微型开关和数据开关按下表进行设置:
波特率开关 数据开关
SW2(共12位,最末三位未用) SW1(共12位)
MI876 MI543 MI210 未用 A口 B口(R0) SCi SSH D15-D0
011 000 111 000 0000 0000 00 00 A000H
设置好各控制信号(MI8-MI0),并设置好十六位数据开关为“A000H”,即“1010 0000 0000 0000”后,按压一次STEP键,将立即数D0置入寄存器R0中。
4. 用D1+0→R1将立即数D1(4000H)置入寄存器R1(0001)。具体的微型开关和数据开关按下表进行设置:
波特率开关 数据开关
SW2(共12位,最末三位未用) SW1(共12位)
MI876 MI543 MI210 未用 A口 B口(R1) SCi SSH D15-D0
011 000 111 000 0000 0001 00 00 4000H
用同样的方法将立即数D1置入寄存器R1中。
5. 对寄存器R0、R1初始化后,便可对R0和R1进行各种算术、逻辑运算,此时R0保存的数据为D0(A000H),R1保存的数据为D1(4000H)。
6. 将开关S2 S1 S0置于“110”时,指示灯将显示ALU的运算结果;将开关S2 S1 S0置于“000”时,指示灯将显示SVZC的状态,对应TEC-2机上H25 = S,H26 = V,H27 = Z,H28 = C。
7. 对R0和R1进行各种算术、逻辑运算。
(二) 联机方式
启动TEC-2机,进入监控程序状态:具体操作如下:
1. 将TEC-2机的FS1~FS4置为1010,STEP/CONT置成CONT。
2. 打开计算机电源开关,使计算机正常启动。打开TEC-2电源开关,TEC-2大板左上角一排指示灯亮。
3. 运行通讯程序PCEC,在DOS下命令提示(按默认设置:选择1,N)。联机后,进入联机状态,用A命令输入下列程序:(ENTER表示)
>A800 ENTER
MOV R0,A000
MOV R1,4000
ADD R0, R1
SUB R0,R1
OR R0,R1
AND R0,R1
XOR RO, R1
ADC R0, R1
SHL RO
INC RO
RET
4. 用“G”命令运行程序
在命令行提示符状态下输入:
> G800
执行上面输入的程序
5. 用“R”命令观察运行结果及状态
在命令行提示符状态下输入:
>R
观察运行结果及状态
屏幕将显示:
R0=8001 R1=4000……
6. 用“T”或“P”命令单步执行
在命令行提示符状态下输入:
>T
或
>P
执行之后,观察运行结果及状态
四、实验器材
1. TEC-2机一台,电脑一台
2. TEC-2模拟软件一套
五、实验分析与设计
1. 脱机实验
初始化R0寄存器:
初始化R1寄存器:
(1)R0+R1—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
(2)R0+0—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
(3)R0-R1—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
(4)R0+0—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
(5)R0˅R1—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
(6)R0+0—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
(7)R0˄R1—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
(8)R0+0—>R0
STEP前ALU输出: STEP后ALU输出:
STEP前SVZC输出: STEP后SVZC输出:
总结:
以上结果均符合实验操作手册中的逻辑运算表,实验正确。
2. 联机实验
- 输入A命令,选择800地址空间;
- 将AAAAH数据赋值给R0寄存器;
- 将5555H数据赋值给R1寄存器;
- 将R0与R1进行相加,并把结果保存至R0寄存器,得FFFFH数据;
- 将R0与R1相减,得到AAAAH数据,结果保存至R0;
- 将R0与R1进行或运算,结果得FFFFH,并保存至R0寄存器;
- 将R0寄存器中的FFFFH与R1进行AND与运算,屏蔽掉与R1中数据位不同的数据重新得到5555H并保存到R0中,最终R0与R1寄存器都保留数据5555H,结束并返回。
利用G命令执行,通过R命令观察、T/P命令单步调试,运行结果与人工计算以及机器最终运算结果一致,实验正确,得以验证。
六、思考题
在脱机方式下进行运算器实验时,在按STEP键之前和按STEP键之后,ALU的输出结果及状态SVZC有何不同,为什么?根据Am2901运算器的组成结构及其工作原理加以说明。
答:设置好相应微码和AB口地址之后,立即输出该运算功能的运算结果,此时ALU也已经得到SVZC的值,但并没有传给标志寄存器。按STEP之后,ALU的输出结果则为运算器再做一次运算的结果,这时SVZC所显示的值则为上一步标志位寄存器的值。
根据AM2901运算器的组成结构可以知道,ALU是一个组合逻辑电路,设置A、B相应的值之后,相应的数据便会立即被传送到ALU中进行相应的运算,并且显示出对应的运算结果也会被存在存储器里面。按下STEP之后,在脉冲的作用下,上一步的运算结果也会被存在寄存器里面,但控制码和地址没有改变,所以上一步的运算结果会重新被送到ALU中进行运算,此时ALU的结果为一步运算结果再进行一次运算的数据。
SVZC存储在状态标志寄存器中,其值的改变需要有脉冲信号的作用才能改变,所以在按STEP之前,SVZC的值不变,按下STEP之后,SVZC显示的值才是上一步标志位的状态值。
七、实验心得
在理论课的学习过程中,通过老师的讲解和同学ppt汇报,我对AM2901运算器有了初步的认识。通过本次实验,更加加深了我对其组成结构和工作原理的了解和掌握。通过实际仿真操作,了解了运算器关于二进制码的与或非操作,进一步提高了对机器实现计算功能的认知。
另外,我认识和掌握了TEC-2机运算器的组成和工作原理,主要通过实验拨动波特率开关以及手拨开关,能够了解开关在一些情况下的数据显示,以及背后的工作原理。最后,认识和掌握TEC-2机运算器相关控制信号的含义和使用方法,能够通过这些控制信号以及手拨数据信号进行简单的数据逻辑运算,为接下来能够进行更多更复杂的计算机组成原理实验奠定了基础。
对于脱机方式,经过仿真实验,我在自己的电脑上能够熟悉TEC-2仿真界面,并将自己的操作通过仿真实现,使得LED灯的灯光显示与预期效果一致,达到实验的完成。
除了完成实验目的之外,我对于汇编语言也有一定理解。在联机实验中,通过编写汇编指令,能够清楚地知道在哪块内存空间工作、存储数据;通过单步调试,能够将指令与数据空间存储分配对比起来观察,使自己的汇编语言能力有所提升。