计算机组成原理实验书

更新时间:2024-01-29 11:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机组成原理实验指导书

河南师范大学

计算机与信息技术学院

TEC—4计算机组成原理实验系统

TEC—4计算机组成原理实验系统由北京邮电大学计算机学院、清华同方教学仪器设备公司、深圳拓普威电子技术有限公司联合研制。它是一个8位计算机模型实验系统,可用于大专、本科、硕士研究生计算机组成原理课程、计算机系统结构课程的教学实验,对提高学生的动手能力、提高学生对计算机整体和各组成部分的理解、提高学生的计算机系统综合设计能力都会有很大帮助。

一、TEC—4计算机组成原理实验系统特点

1.计算机模型简单、实用,运算器数据通路、控制器、控制台各部分划分清晰。

2.计算机模型采用了数据总线和指令总线双总线体制,能够实现流水控制。 3.控制器有微程序控制器或者硬布线控制器两种类型,每种类型又有流水和非流水两种方案。

4.寄存器堆由1片ispLSI1016组成,运算器由1片ispLSI1024组成,设计新颖。

5.实验台上包括了1片系统编程芯片ispLSI1032,学生可用它实现硬布线控制器。

6.该系统能做运算器组成、双端口存储器、数据通路、微程序控制器、中断、CPU组成与机器指令执行、流水微程序控制器、硬布线控制器、流水硬布线控制器等多种实验。

7.电源部分采用模块电源,重量轻,具有抗电源对地短路能力。 8.采用自锁紧累接接线方式,接线可靠。

二、TEC—4计算机组成原理实验系统的组成

TEC—4计算机组成原理实验系统由下述六部分组成: 1.控制台 2.数据通路 3.控制器

4.用户自选器件试验区 5.时序电路 6.电源部分

下面分别对各组成部分予以介绍。

三、电源

电源部分由一个模块电源、一个电源插座、一个电源开关和一个红色指示灯组成。电源模块通过四个螺栓安装在实验台下面。它输出+5V电压,最大负载电流3安培,内置自恢复保险功能,具有抗+5V对地短路能力。电源插座用于接交流220伏市电,插座内装有保险丝。电源开关用于接通或者断开交流220伏市电。当电源模块输出+5V时,点亮+5V红色指示灯。

四、时序发生器

时序发生器产生计算机模型所需的时序。时序电路由一个1MHz 晶体振荡器、2片GAL22V10(U6和U7)组成,位于控制存储器的右边。根据本机设计,

执行一条微指令需要4个时钟周期T1、T2 、T3、T4,执行一条指令通常需要取指、送操作数、运算、写结果四个节拍,因此本机的基本时序如下:

图1 基本时序图

图中,MF是晶体振荡器产生的1MHz基本时钟,T1、T2、T3、T4是数据通路和控制器中各寄存器的时钟脉冲,印制板上已将它们和有关的寄存器连接。T1、T2、T3、T4既供微程序控制器时使用,也供硬布线控制器使用。W1、W2、W3、W4只供硬布线控制器作指令节拍信号使用。

五、数据通路

数据通路的设计是TEC—4计算机组成原理实验系统最有特色的部分。首先它采用了数据总线和指令总线双总线形式,使得流水实验能够实现。它还使用了大规模可编程器件作为运算器和寄存器堆,使得设计简单明了,可修改性强。数据通路位于实验系统中部。

下图是数据通路总体图,下面介绍图中各主要部件的作用。

图2 数据通路总体图

1.运算器ALU

运算器ALU由一片ispLSI1024(U47)组成,在选择端S2、S1、S0控制下,对数据A和B进行加、减、与、直通、乘五种运算,功能如下:

表1 运算器功能表

进位C只在加法运算和减法运算时产生。加运算中,C表示进位;减运算中,C代表借位。加、减运算产生的进位(借位)在T4的上升沿送入C寄存器保存。与、乘、直通操作不影响进位C的状态,即进位C保持不变。

当ALU_BUS = 1时,运算结果送往数据总线DBUS。加、减运算产生的进位(借位)C与控制台的C指示灯相连。

2.DR1和DR2

DR1和DR2是运算操作数寄存器,DR1和ALU的B数据口相连,DR2和ALU的A数据口相连。DR1 和DR2各由2片74HC298(U23、U24、U21、U22)组成。U23是DR1 的低4位,U24是DR1的高4位;U21是DR2的低4位,U22是DR2的高4位。当M1=0且LDDR1=1时,在T3的下降沿,DR1接收来自寄存器堆B端口的数据;当M1=1且LDDR1=1时,在T3的下降沿,DR1 接收来自数据总线DBUS的数据。当M2=0且LDDR2=1时,在T3的下降沿,DR2接收来自寄存器堆A端口的数据;当M2=1且LDDR2=1时,在T3的下降沿,DR2接收来自数据总线DBUS的数据。

3.多端口通用寄存器堆RF

多端口通用寄存器堆RF由1片ispLSI1016(U32)组成,它的功能和MC14580类似。寄存器堆中包含4个8位寄存器(R0、R1、R2、R3),有三个控制端口。其中两个端口控制读操作,一个端口控制写操作,三个端口可同时操作。RD1、RD0选择从A端口读出的寄存器,RS1、RS0 选择从B端口读出的寄存器,WR1、WR0选择被写入的寄存器。WRD控制写操作。当WRD=0时,禁止写操作;当WRD=1时,在T2的上升沿将来自ER寄存器的数据写入由WR1、WR0选中的寄存器。

A端口的数据直接送往操作数寄存器DR2,B端口的数据直接送往操作数寄存器DR1。除此之外,B端口的数据还通过1片74HC244(U15)送往数据总线DBUS。当RS_BUS#=0时,允许B端口的数据送到数据总线DBUS上;当RS_BUS#=1时,禁止B端口的数据送到数据总线DBUS。

4.暂存寄存器ER

暂存寄存器ER(U14)是1片74HC374,主要用于暂时保存运算器的运算结果。当LDER=1时,在T4的上升沿,将数据总线DBUS上的数据打入暂存寄存器ER。ER的输出送往多端口通用寄存器堆RF,作为写入数据使用。

5.开关寄存器SW_BUS

开关寄存器SW_BUS(U38)是1片74HC244,用于将控制台开关SW7—SW0的数据送往数据总线DBUS。当SW_BUS#=1时,禁止开关SW7—SW0 的数据送往数据总线DBUS;当SW_BUS#=0时,允许开关SW7—SW0的数据送往数据总线DBUS。

6.双端口存储器RAM

双端口存储器由一片IDT7132(U36)及少量附加控制电路组成。IDT7132是2048字节的双端口静态随机存储器,本机实际使用256字节。IDT7132两个端口可同时进行读、写操作。在本机中,左端口的数据连接总线DBUS,可进行读、写操作,右端口数据和指令总线INS连接,输出到指令寄存器IR,作为只读端口使用。存储器IDT7132有6个控制引脚:CEL#、LRW、OEL#、CER#、RRW、OER#。CEL#、LRW、OEL#控制左端口读、写操作,CER#、RRW、OER#控制右端口读、写操作。CEL#为左端口选择引脚,低有效,为高时禁止左端口操作;LRW为高时,左端口进行读操作,LRW为低时,左端口进行写操作;OEL#为低时,将左端口读出的数据放到数据总线DBUS上。CER#、RRW、OER#控制右端口读、写操作的方式与CEL#、LRW、OER#控制左端口读、写操作的方式类似,不过右端口读出的数据放到指令总线上而不是数据总线上。本机设计中,OER#已固定接地,RRW固定接高电平,CER#由CER反相产生。当CER=1时,右端口读出数据,并放到指令总线INS上;当CER=0时,禁止右端口操作。左端口的OEL#由LRW经反相产生,不需要单独控制。当CEL#=0且LRW=1时,左端口进行读操作;当CEL#=0且LRW=0时,在T3的上升沿开始进行写操作,将数据总线DBUS上的数据写入存储器。

7.地址寄存器AR1和AR2

地址寄存器AR1(U37)和AR2(U27、U28)提供双端口存储器的地址。AR1是1片GAL22V10,具有加1功能,提供双端口存储器左端口的地址。AR1从数据总线DBUS接收数据。AR1的控制信号是LDAR1和AR1_INC。当AR1_INC=1时,在T4的上升沿,AR1的值加1;当LDAR1=1时,在T4的上升沿,将数据总线DBUS的数据打入地址寄存器AR1。AR2由2片74HC298组成,有两个数据输入端,一个来自程序计数器PC,另一个来自数据总线DBUS。AR2的控制信号是LDAR2和M3。M3选择数据来源,当M3=1时,选中数据总线DBUS;当M3=0时,选中程序计数器PC。LDAR2控制何时接收地址,当LDAR2=1时,在T2的下降沿将选中的数据源上的数据打入AR2。

8.程序计数器PC、地址加法器ALU2、地址缓存器R4

程序计数器PC、地址加法器ALU2、地址缓存器R4联合完成三种操作:PC加载,PC+1,PC+D。R4是一个由2片74HC298(U25、U26)构成的具有存储功能的两路选择器。当M4=1时,选中数据总线DBUS;当M4=0时,从指令寄存器IR低4位IR0—IR3接收数据。当LDR4=1时,在T2的下降沿将选中的数据打入R4。ALU2由1片GAL22V10(U17)构成,当PC_ADD=1时,完成PC和IR低4位的相加,即PC加D。程序计数器PC是1片GAL22V10(U18),当PC_INC=1时,完成PC+1;当PC_ADD=1时,与ALU2一起完成PC+D的功能;当LDPC=1时,接收从ALU2和R4来的地址,实际是接收来自数据总线DBUS地址,这些新的程序地址在T4的上升沿打入PC寄存器。

9.指令寄存器IR

指令寄存器IR是一片74HC374(U20)。它的数据端从双端口存储器接收数据(指令)。当LDIR=1时,在T4的上升沿将来自双端口存储器的指令打入指令寄存器IR保存。指令的操作码部分送往控制器译码,产生各种所需的控制信号。大多数情况下,指令的操作数部分应连到寄存器堆(用户自己连接),选择参与运算的寄存器。在某些情况下,指令的操作数部分也参与新的PC的计算。

本实验系统设计了12条基本的机器指令,均为单字长(8位)指令。指令功能及格式如下表所示。

表2 机器指令格式

名 称 助 记 功 能 指 令 格 式 IR7 IR6 IR5 IR3 IR2 IR1 IR0 符 IR4 Rd+Rs->Rd 0 0 0 0 RS1 RS0 RD1 RD0 加法 ADD Rd, Rs Rd-Rs->Rd 0 0 0 1 RS1 RS0 RD1 RD0 减法 SUB Rd, Rs Rd*Rs->Rd 0 0 1 0 RS1 RS0 RD1 RD0 乘法 MUL Rd, Rs Rd&Rs->Rd 0 0 1 1 RS1 RS0 RD1 RD0 逻辑与 AND Rd, Rs Rd->[Rs] 0 1 0 0 RS1 RS0 RD1 RD0 存数 STA Rd, [Rs] [Rs]->Rd 0 1 0 1 RS1 RS0 RD1 RD0 取数 LDA Rd, [Rs] [Rs]->PC 1 0 0 0 RS1 RS0 X X 无条件JMP 转移 [Rs] 条件转JC D 若 C = 1 1 0 0 1 D3 D2 D1 D0 移 则 PC+D->PC 0 1 1 0 X X X X 停机 STP 暂停运行 1 0 1 0 X X X X 中断返IRET 返回中断 回 1 0 1 1 X X X X 开中断 INTS 允许中断 1 1 0 0 X X X X 关中断 INTC 禁止中断 表中的X代表随意值,RS1、RS0指的是寄存器堆的B端口选择信号RS1、RS0,RD1、RD0指的是寄存器堆的A端口选择信号RD1、RD0,不过由于运算结果需写回,因此它也同时指WR1、WR0,用户需将它们对应连接。另一点需说明的是,为了简化运算,指令JC D中的D是一个4位的正数,用D3 D2 D1 D0表示。

实验系统虽仅设计了12条基本的机器指令,但代表了计算机中常用的机器指令类型。必要时用户可扩充到16条指令或者重新设计指令系统。

10.中断地址寄存器IAR

中断地址寄存器IAR(U19)是一片74HC374,用于保存中断发生时的断点地

址。它直接使用LDIAR信号作为时钟脉冲。当IAR_BUS#=0时,它将断点地址送到数据总线DBUS上,以便用控制台上的数据指示灯观察断点地址。

以上介绍了数据通路的基本组成。数据通路所需的各控制信号,除了T1、T2、T3、T4已在印制板上连接好以外,其余的控制信号在数据通路的下方都有插孔引出,实验时只要将它们和控制器产生的对应信号正确连接即可。实验中提供的电路图上,凡引出、引入线端带有短粗黑标记的信号,都是需要用户自己连接的信号。

六、控制器

控制器位于本实验系统的中上部,产生数据通路操作所需的控制信号。出厂时,提供了一个微程序控制器,使用户能够进行基本的计算机组成原理实验。在进行流水微程序控制器实验,硬布线控制器实验和流水硬布线控制器实验等课程设计时,用户可设计自己的控制器,部分或者全部代替出厂时提供的控制器。

图3 控制器框图

1.控制存储器

控制存储器由5片28C64(U8、U9、U10、U11、U12)组成。28C64是电擦除的可编程ROM,存储容量为8K字节,本实验系统仅使用了128字节。微指令格式采用全水平型,微指令字长35位。其中顺序控制部分10位:后继微地址μA0-μA5,判别标志P0、P1、P2、P3;操作控制字段25位,全部采用直接表示法,用于控制数据通路的操作。

标志位P3和控制台开关SWC、SWB、SWA结合在一起确定微程序的分支,完成不同的控制台操作。标志位P2与指令操作码(IR的高4位IR4、IR5、IR6、IR7)结合确定微程序的分支,转向各种指令的不同微程序流程。标志位P1标志一条指令的结束,与中断请求信号INTQ结合,实现对程序的中断处理。标志位P0与进位标志C结合确定微程序的分支,实现条件转移指令。

操作控制字段25位,全部采用直接表示法,控制数据通路的操作。在设计过程中,根据微程序流程图对控制信号进行了适当的综合与归并,把某些在微程序流程图中作用相同或者类似的信号归并为一个信号。下面列出微程序控制器提供的控制信号。信号名带后缀#者为低电平有效,否则为高电平有效。

INTS 置中断允许标志INTE为1。

INTC 清除中断允许标志INTE。

LDIR(CER) 为1时,允许对IR加载,此信号也可用于作为双端口存储

器右端口选择CER。

LDPC(LDR4) 为1时,允许对程序计数器PC加载,此信号也可用于作为

R4的加载允许信号LDR4。

PC_ADD 为1时,进行PC+D操作。 PC_INC 为1时,进行PC+1操作。

M4 当M4=1时,R4从数据总线DBUS接收数据;当M4=0时,R4

从指令寄存器IR接收数据。

LDIAR 为1时,对中断地址寄存器IAR加载。

LDAR1(LDAR2) 为1时,允许对地址寄存器AR1加载,此信号也可用于作为

允许对地址寄存器AR2加载。

AR1_INC 为1时,允许进行AR1+1操作。

M3 当M3=1时,AR2从数据总线DBUS接收数据;当M3=0时,

AR2从程序计数器PC接收数据。

LDER 为1时,允许对暂存寄存器ER加载。

IAR_BUS# 低有效,为0时将中断地址寄存器IAR送数据总线DBUS。 SW_BUS# 低有效,为0时将控制台开关SW7—SW0送数据总线DBUS。 RS_BUS# 低有效,为0时将寄存器堆RF的B端口送数据总线DBUS。 ALU_BUS 为1时,将ALU中的运算结果送数据总线DBUS。

CEL# 低有效,为0时允许双端口存储器左端口进行读、写操作。 LRW 当LRW=1且CEL#=0时,允许双端口存储器左端口进行读操

作;当LRW=0且CEL#=0时,允许双端口存储器左端口进行写操作。

WRD 为1时,允许对寄存器堆RF进行写操作。 LDDR1(LDDR2) 为1时允许对操作数寄存器DR1加载。此信号也可用于作为

对操作数寄存器DR2加载。

M1(M2) 当M1=1时,操作数寄存器DR1从数据总线DBUS接收数据;

当M1=0时,操作数寄存器DR1从寄存器堆RF接收数据。此信号也可用于作为操作数寄存器DR2的数据来源选择信号。

S2、S1、S0 选择运算器ALU的运算类型。 TJ 暂停微程序运行。 NC0、NC1、NC2 备用 、NC3、NC4

上述控制信号连同时序电路提供的时序、控制信号位于控制器的下边。

2.微地址寄存器μAR(74HC273)

微地址寄存器μAR(74HC273)对控制存储器提供微程序地址。当CLR#=0时,将其复位到零,使微程序从000000B地址开始执行。在T1的上升沿将新的微程序地址μD0—μD5打入微地址寄存器μAR。控制台开关SWC直接连到74HC273,作为μD6,用于实现读寄存器操作KRR。

3.跳转开关JUMP

这是一组6个跳转开关(J1)。当用短路子将它们连通时,微地址寄存器μ

AR从本实验系统提供的微程序地址译码电路得到新的微程序地址μD0—μD5。当他们被断开时,用户提供自己的新微程序地址μD0—μD5。这样用户能够使用自己设计的微程序地址译码电路。

4.微程序地址译码电路DECORDER

微程序地址译码电路DECORDER产生后继微程序地址,它由2片74HC32(U2、U3)和2片74HC08(U4、U5)构成。微程序地址译码电路数据来源是:控制存储器产生的后继微程序地址μA0—μA5,控制存储器产生的标志位P0—P3,指令操作码IR4—IR7,进位标志C,中断请求标志INTQ,控制台方式标志位SWA、SWB。

七、控制台

控制台位于TEC—4计算机组成原理实验系统的下部,主要由若干指示灯和若干拨动开关组成,用于给数据通路置数、设置控制信号、显示各种数据。

1.SW7—SW0

数据开关,直接接到数据通路部分的数据总线DBUS上,用于向数据通路中的器件置数。开关拨到上面位置时输出1,拨到下面位置时输出0。SW7 是最高位,SW0是最低位。

2.K15—K0

双位拨动开关。开关拨到上面位置时输出1,拨到下面位置时输出0。实验中用于模拟数据通路部分所需的电平控制信号。例如,将K0与LDDR1连接,则K0向上时,表示置LDDR1为1;K0向下时,表示置LDDR1为0。

3.数据指示灯D7—D0

8个红色发光二极管,用于显示数据总线DBUS或者指令寄存器IR的状态。D7是最高位,D0是最低位。双位开关IR/DBUS拨到IR位置时,显示指令寄存器IR的状态;双位开关IR/DBUS拨到DBUS位置时,显示数据总线DBUS状态。

4.地址指示灯A7—A0

8个绿色发光二极管,用于显示双端口存储器的地址寄存器内容。A7是最高位,A0是最低位。双端口存储器IDT7132有两个地址端口,地址寄存器AR1提供左端口地址A7L—A0L,地址寄存器AR2提供右端口地址A7R—A0R。当双位开关AR2/AR1拨到AR1的位置时,显示地址寄存器AR1的内容;当双位开关AR2/AR1拨到AR2位置时,显示地址寄存器AR2的内容。

5.微地址指示灯μ_A5—μ_A0

6个黄色发光二极管,用于显示控制存储器的地址μ_A5—μ_A0。μ_A5是最高位,μ_A0是最低位。

6.其他指示灯P3、P2、P1、P0、IE、C

6个黄色发光二极管用于显示P3、P2、P1、P0、IE、C的值。P3、P2、P1、P0是控存的微代码位,用于条件分支产生下一个微地址。C是加、减运算时产生

的进/借位值。IE是中断允许标志。当IE=1时,允许中断;当IE=0时,禁止中断。

7.微动开关CLR#、QD、INTR

这三个微动开关用于产生CLR#、QD、INTR单脉冲。按一次按钮CLR#,产生一个负的单脉冲CLR#,对全机进行复位,使全机处于初始状态,微程序地址置为000000B。CLR#到时序和控制器的连接已在印制板上实现,控制存储器和数据通路部分不使用复位信号CLR#。按一次QD按钮,产生一个正的QD启动脉冲。QD和时序部分的连接已在印制板上实现。按一次INTR按钮,产生一个正的单脉冲,可用于作为中断请求信号。INTR到时序部分的连接已在印制板上实现。这三个单脉冲都有插孔对外输出,供用户设计自己的控制器和时序电路时使用。

8.单步、单拍、单指开关DB、DP、DZ DB(单步)、DP(单拍)、DZ(单指)是三种特殊的非连续工作方式。当DP=1时,计算机处于单拍方式,按一次QD按钮,每次只执行一条微指令,发送一组T1、T2、T3、T4时序脉冲。当DZ=1时,计算机处于单指方式。单指方式只对微程序控制器适用。在单指方式下,按一次QD按钮,计算机执行一条指令。当DB=1时,机器处于单步方式。单步方式只对硬布线控制器适用。在单步方式下,按一次启动按钮QD,发送一组W1、W2、W3、W4时序脉冲。在使用硬布线控制器时,每条指令需要一组W1、W2、W3、W4时序脉冲,因此单步方式实际上是硬布线控制器下的单指方式。DB、DP、DZ这三个双位开关,任何时刻都只允许一个开关置1,决不允许两个或三个开关同时置1。当DB=0且DP=0且DZ=0时,机器处于连续工作方式。

9.控制台方式开关SWC、SWB、SWA

控制台方式开关SWC、SWB、SWA定义了TEC—4计算机组成原理实验系统的五种工作方式,出厂时存在控存中,五种工作方式定义如下:

SWC SWB SWA 工作方式

0 0 0 PR,启动程序

0 0 1 KRD,读双端口存储器 0 1 0 KWE,写双端口存储器 0 1 1 KLD,加载寄存器堆 1 0 0 KRR,读寄存器堆

在按CLR#按钮复位后,根据SWC、SWB、SWA选择工作方式。

PR是启动程序方式。在此方式下,首先在SW7—SW0指定启动地址,按启动按钮QD后,启动程序运行。

KRD是读双端口存储器方式。在此方式下,(1)首先在SW7—SW0置好存储器地址:按QD按钮,则将此地址打入地址寄存器AR1,并读出该地址存储器内容到数据总线DBUS。(2)每按一次QD按钮,地址寄存器AR1加1,并读出新地址存储器内容到数据总线DBUS。依次进行下去,直到按复位按钮CLR#为止。

KWE是写双端口存储器方式。在此方式下,(1)首先在SW7—SW0置好存储器地址:按QD按钮,则首先将此地址打入地址寄存器AR1,然后等待输入数据。(2)在SW7—SW0置好数据,按QD按钮,首先写数据到AR1指定的存储器单元,然后地址寄存器AR1加1,等待新的输入数据。依次进行下去,直到按复位按钮

CLR#为止。

KLD是加载寄存器堆方式。此方式用于对寄存器堆加载。(1)首先在SW7—SW0置好存储器地址,按QD按钮,则将此地址打入地址寄存器AR1和地址寄存器AR2。(2)在SW7—SW0置好数据,数据的低2位D1、D0为寄存器堆中的寄存器号,按一次QD按钮,则写数据到AR1指定的存储器单元;然后将写入的数据从右端口读出,并送入指令寄存器IR。(3)在SW7—SW0置好数据,该数据为写入寄存器的数据,寄存器号由IR低2位指定。按QD按钮,则首先将此数据写入寄存器ER,然后将ER中的数据写入指定的寄存器。(4)返回(2),依次进行下去,直到按复位按钮CLR#为止。

KRR是读寄存器堆方式。此方式用于读寄存器堆中的寄存器。(1)首先在SW7—SW0置好存储器地址,按QD按钮,则将此地址打入地址寄存器AR1和地址寄存器AR2。(2)在SW7—SW0置好数据,数据的D3、D2位为寄存器堆中的寄存器号,按一次QD按钮,则写数据到AR1指定的存储器单元;然后将写入的数据从右端口读出,并送入指令寄存器IR。同时将IR3、IR2指定的寄存器送往数据总线DBUS。拨动开关IR/DBUS可看到IR的值和IR指定的寄存器的值。(3)返回(2),依次进行下去,直到复位按钮CLR#为止。

八、用户自选器件试验区

本计算机组成原理实验系统提供了一个用户自选器件试验区,供流水微程序控制器实验、硬布线控制实验、流水硬布线控制器实验使用。自选器件试验区包括了1个ispLSI1032器件及下载插座,把PC机和下载插座用出厂时提供的下载电缆相连,在PC机上运行ispEXPERT软件,即可对ispLSI1032器件编程和下载。利用ispLSI1032器件,可满足这三个实验中应用的逻辑电路需要。另外,为了增加灵活性,用户自选器件试验区还提供了10个双列直插插座,其中包括2个24引脚插座,3个20引脚插座,2个16引脚插座,3个14引脚插座。

除此之外,TEC—4计算机组成原理实验系统中还提供了3个接地点,供用示波器和万用表测试时使用。

实验一 运算器组成实验

一、实验目的

(1)掌握算术逻辑运算加、减、乘、与的工作原理。 (2)熟悉简单运算器的数据传送通路。

(3)验证实验台运算器的8位加、减、与、直通功能。 (4)验证实验台的4位乘4位功能。

(5)按给定数据,完成几种指定的算术和逻辑运算。

二、实验电路

图4 运算器数据通路实验电路图

图4示出了本实验所用的运算器数据通路图。ALU由l片ispLSI1024构成。四片4位的二选一输入寄存器74HC298构成两个操作数寄存器DR1和DR2,保存参与运算的数据。DR1接ALU的B数据输入端口,DR2接ALU的A数据输入端口,ALU的输出在ispLSI1024内通过三态门发送到数据总线DBUS7-DBUS0上,进位信号C保存在ispLSIl024内的一个寄存器中。当实验台下部的IR/DBUS开关拨到DBUS位置时,8个红色发光二极管指示灯接在数据总线DBUS上,可显示运算结果或输入数据。另有一个指示灯C显示运算器进位信号状态。由ispLSI1024构成的8位运算器的运算类型由选择端S2、S1、S0选择,功能如表3所示。

表3 运算器运算类型选择表 选 择 操 作 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的上升沿送入ispLSIl024内的C寄存器保存。

在SW-BUS#信号为0时,参与运算的数据通过一个三态门74HC244(SW_BUS)送到DBUS总线上,进而送至DR1或DR2操作数寄存器。输入数据可由实验台上的8个二进制数据开关SW0_SW7来设置,其中SW0是最低位,SW7是最高位。开关向上时为l,开关向下时为0。

图中尾巴上带粗短线标记的信号都是控制信号,控制信号均为电位信号。T3、T4是脉冲信号,印制板上已连接到实验台的时序电路产生的T3、T4信号上。S2、S1、S0、ALU_BUS、LDDR2、LDDR1、M1、M2、SW_BUS#各电位控制信号用电平开关K0—K15来模拟。K0—K15是一组用于模拟各控制电平信号的开关,开关向上时为1,开关向下时为0,每个开关无固定用途,可根据实验具体情况选用。S2、S1、S0、ALU_BUS、LDDR2、LDDR1为高电平有效,SW_BUS#

为低电平有效。M1 = 1时,DR1选择D1—A1作为数据输入端;M1 = 0时,DR1选择D0—A0作为数据输入端。当LDDR1 = 1时,在T3的下降沿,选中的数据被打入DR1寄存器。M2 = 1时,DR2选择Dl—A1作为数据输入端;M2 = 0时,DR2选择D0—A0作为数据输入端。当LDDR2 = 1时,在T3的下降沿,选中的数据被打入DR2寄存器。

数据总线DBUS有5个数据来源:运算器ALU,寄存器堆RF,控制台开关SW0—SW7,双端口存储器IDT7132和中断地址寄存器IAR。在任何时刻,都不允许2个或者2个以上的数据源同时向数据总线DBUS输送数据,只允许1个(或者没有)数据源向数据总线DBUS输送数据。在本实验中,为了保证数据的正确设置和观察,请令RS_BUS# = 1,LRW = 0,IAR_BUS# = 1。

为了在实验中,每次只产生一组T1、T2、T3、T4脉冲,需将实验台上的DP、DB、DZ开关进行正确设置。将DP开关置1,将DB,DZ开关置0,每按一次QD按钮,则顺序产生T1、T2、T3、T4各一个单脉冲。本实验中采用单脉冲输出。

三、实验设备

(1)TEC-4计算机组成原理实验系统l台 (2)双踪示波器一台 (3)直流万用表一只 (4)逻辑测试笔一支

四、实验任务

(1)按图6所示,正确连接运算器模块与实验台上的电平开关K0—K15。由于运算器的C和C指示灯、8位数据开关SW0—SW7、T3、T4的连线已由印制电路板连好,故接线任务仅仅是完成有关控制信号与电平开关K0—K15的连线。正确设置开关DZ、DB、DP。用数据开关SW0—SW7向DR1和DR2寄存器置数。

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

2.置M1 = 1,选择DBUS作为DR1的数据源;置LDDR1 = 1,按QD按钮,则将DBUS的数据打入DR1。置M2 = 1,选择DBUS作

为DR2的数据源;置LDDR2 = 1,按QD按钮,则将DBUS的数据打入DR2。向DR1存入01010101,向DR2存入10101010。

3.置SW_BUS# = 1,关闭数据开关SW0—SW7对数据总线DBUS的输出;置ALU_BUS = 1,开启ALU对DBUS的输出。选择S2 = 0,S1 = 0,S0 = 1,使运算器进行直通运算,通过DBUS指示灯验证DR2中的内容是否为第2步设置的值。令S2 = 0,S1= l,S0 = 0,使运算器进行加运算,通过DBUS指示灯验证DR1中的内容是否为第2步设置的值。在表4中填入控制信号状态与DBUS显示状态。

表4 DR1、DR2设置值检查 ALU_BUS SW_BUS# 寄存器内容 S2 S1 S0 DBUS DR1(01010101) DR2(10101010) DR1(01010101) DR2(10101010) (2)验证运算器的算术运算和逻辑运算功能。

1.令DR1 = 01100011B,DR2 = 10110100B,正确选择S2、S1、S0,依次进行加、减、与、直通、乘实验,记下实验结果(数据和进位)并对结果进行分析。

2.令DR1 = 10110100B,DR2 = 01100011B,正确选择S2、S1、S0,依次进行加、减、与、直通、乘实验,记下实验结果(数据和进位)并对结果进行分析。

3.令DR1 = 01100011B,DR2 = 01100011B,正确选择S2、S1、S0,依次进行加、减、与、直通、乘实验,记下实验结果(数据和进位)并对结果进行分析。

4.令DR1 = 01001100B,DR2 = 10110011B,正确选择S2、S1、S0,依次进行加、减、与、直通、乘实验,记下实验结果(数据和进位)并对结果进行分析。

5.令DR1 = 11111111B,DR2 = 11111111B,正确选择S2、S1、S0,依次进行加、减、与、直通、乘实验,记下实验结果(数据和进位)并对结进行分析。

(3)Ml、M2控制信号的作用是什么?改变Ml、M2的高低电平,重复第(2)步,观察出现什么问题?

五、实验步骤和实验结果

(1)实验任务(1)的实验步骤及结果如下: 1.接线

将IAR_BUS#接VCC,RS_BUS#接VCC,IRW接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,使实验系统处于单拍状态。 3.合上实验台电源。按复位按钮CLR#,使实验系统处于初始状态。 4.置K0(SW_BUS#) = 0,K1(ALU_BUS) = 0。置开关SW7—SW0为01010101B。将开关IR/DBUS拨到DBUS位置,红色数据指示灯应显示01010101B。它指示的是数据总线DBUS的值。 5.置K5(LDDR1) = 1,K6(LDDR2) = 0。按一次QD按钮,将01010101B置入DR1。

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

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

注意:运算开始前应将LDDR1和LDDR2关闭,以保证运算结果及C的正确。

(2)以上是实验内容(1)的实验步骤和实验结果,对于实验内容(2),可仿照办理。

欲察看C的值,需按一次QD按钮。实验内容(2)的实验结果如下:

1.令DR1 = 01100011B,DR2 = 10110100B,加的结果是00010111B,C = 1;减的结果是01010001B,C = 0;与的结果是00100000B,C不变;直通的结果是 10110100B,C不变;乘的结果是00001100B(DR1的低4位乘DR2的低4位),C不变。 2.令 DR1 = 10110100B,DR2 = 01100011B,加的结果是00010111B,C = l;减的结果是10101111B,C = l;与的结果是00100000B,C不变;直通的结果是01100011B,C不变;乘的结果是00001100B,C不变。 3.令DR1 = 01100011B,DR2 = 01100011B,加的结果是11000110B,C=0;减的结果是00000000B,C=0;与的结果是01100011B, C不变; 直通的结果是 01100011B,C不变;乘的结果是00001001B,C不变。

4.令DR1=01001100,DR2 = 10110011,加的结果是11111111B,C=0,减的结果是01100111B,C=0;与的结果是00000000B,C不变;直通的结果是10110011B,C不变;乘的结果是 00100100B,C不变。 5.令DR1 = 11111111B,DR2 = 11111111B,加的结果是11111110B,C = 1;减的结果是00000000B, C不变;与的结果是11111111B,C不变;直通的结果是11111111B,C不变;乘的结果是 11100001B,C不变。

(3)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),结果将是无法预知的。

实验二 存储器原理实验

一、实验目的

(1)了解双端口静态随机存储器IDT7132的工作特性及使用方法。 (2)了解半导体存储器怎样存储和读出数据。

(3)了解双端口存储器怎样并行读写,产生冲突的情况如何。

二、实验电路

图5示出了双端口存储器的实验电路图。这里使用了一片IDT7132(U36)(2048×8位),两个端口的地址输入A8—A10引脚接地,因此实际使用存储容量为256字节。左端口的数据部分连接数据总线DBUS7—DBUS0,右端口的数据部分连接指令总线INS7—INS0。一片GAL22V10(U37)作为左端口的地址寄存器(AR1),内部具有地址递增的功能。两片4位的74HC298(U28、U27)作为右端口的地址寄存器(AR2H、AR2L),带有选择输入地址源的功能。使用两组发光二极管指示灯显示地址和数据:通过开关IR/DBUS切换显示数据总线DBUS和指令寄存器IR的数据,通过开关AR1/AR2切换显示左右两个端口的存储地址。写入数据由实验台操作板上的二进制开关SW0—SW7设置,并经过SW_BUS三态门74HC244(U38)发送到数据总线DBUS上。指令总线INS的指令代码输出到指令寄存器IR(U20),这是一片74HC374。

存储器IDT7132有6个控制引脚:CEL#、LRW、OEL#、CER#、RRW、OER#。CEL#、LRW、OEL#控制左端口读、写操作,CER#、

RRW、OER#控制右端口读、写操作。CEL#为左端口选择引脚,低有效。当CEL# =1 时,禁止左端口读、写操作;当CEL# =0 时,允许左端口读、写操作。当LRW为高时,左端口进行读操作;当LRW为低时,左端口进行写操作。当OEL#为低时,将左端口读出的数据放到数据总线DBUS上;当OEL#为高时,禁止左端口读出的数据放到数据总线DBUS上。CER#、RRW、OER#控制右端口读、写操作的方式与CEL#、LRW、OER#控制左端口读、写操作的方式类似,不过右端口读出的数据放到指令总线上而不是数据总线上。实验台上的OEL#由LRW经反相产生。当CEL#=0且LRW=1时,左端口进行读操作,同时将读出的数据放到数据总线DBUS上。当CER#=0且LRW=0时,在T3的上升沿开始进行写操作,将数据总线上的数据写入存储器。实验台上已连接T3到时序发生器的T3输出。实验台上OER#已固定接地,RRW固定接高电平,CER#由CER反相产生,因此当CER=1且LDIR=1时,右端口读出的指令在T4的上升沿打入IR寄存器。

存储器的地址由地址寄存器AR1、AR2提供,而AR1和AR2的内容根据数码开关SW0—SW7设置产生,并经三态门SW_BUS发送到数据总线时被AR1或AR2接收, 三态门的控制信号SW_BUS#是低电平有效。数据总线DBUS有5个数据来源:运算器ALU,寄存器堆RF,控制台开关SW0—SW7,双端口存储器IDT7132和中断地址寄存器IAR。在任何时刻,都不允许2个或者2个以上的数据源同时向数据总线DBUS输送数据,只允许1个(或者没有)数据源向数据总线DBUS输送数据。在本实验中,为了保证数据的正确设置和观察,请令RS_BUS# = 1, ALU_BUS = 0, IAR_BUS# = 1。AR1的控制信号是LDAR1和AR1_INC。当LDAR1 = 1时,AR1从DBUS接收地址;当AR1_INC =1时,使AR1中的存储器地址增加1;在T4的上升沿,产生新的地址;LDAR1和AR1_INC两者不可同时为1。AR2的控制信号是LDAR2和M3。当M3 =1 时,AR2从数据总线DBUS接收数据;当M3=0 时,AR2以PC总线PC0—PC7作为数据来源。当LDAR2=1时,在T2的下降沿,将新的PC值打入AR2。

图5 双端口存储器实验电路图

三、实验设备

(1)TEC-4计算机组成原理实验系统1台 (2)双踪示波器一台 (3)直流万用表一只 (4)逻辑测试笔一支

四、实验任务

(1)按图7所示,将有关控制信号和二进制开关对应接好,仔细复查一遍,然后接通电源。

(2)将数码开关SW0—SW7(SW0是最低位)设置为00H,将此数据作为地址置入AR1;然后重新设置二进制开关控制,将数码开关SW0—SW7上的数00H写入RAM第0号单元。依此方法,在存储器10H单元写入数据10H,20H单元写入20H,30H单元写入30H,40H号单元写入40H。共存入5个数据。

使用双端口存储器的左端口,依次读出存储器第00H、10H、20H、30H、40H单元中的内容,观察上述各单元中的内容是否与该单元的地址号相同。请记录数据。注意:总线上禁止两个以上部件同时向总线输出数据。当存储器进行读出操作时,必须关闭SW_BUS三态门!而当向AR1送入地址时,双端口存储器不能被选中。 (3)通过双端口存储器右端口(指令端口),依次把存储器第00H、10H、20H、30H、40H单元中的内容置入指令寄存器IR,观察结果是否与(2)相同,并记录数据。

(4)双端口存储器的并行读写和访问冲突测试。

置CEL#=0且CER=1,使存储器左、右端口同时被选中。当AR1和AR2的地址不相同时,没有访问冲突;地址相同时,由于都是读出操作,也不冲突。如果左、右端口地址相同且一个进行读操作、另一个进行写操作,则发生冲突。要检测冲突,可以用示波器测试BUSYL和BUSYR插孔(分别是两个端口的“忙”信号输出)。BUSY为0时不一定发生冲突,但发生冲突时,BUSY一定为0。当某一个端口(无论是左端口还是右端口)的BUSY = 0时,对该端口的写操作被IDT7132忽略掉。

五、实验步骤及实验结果

(1)接线

IAR_BUS#接VCC,ALU_BUS接GND,RS_BUS#接VCC,禁止中断地址寄存器、运算器、多端口寄存器堆RF向数据总线DBUS送数据。AR1_INC接GND,M3接VCC,使地址寄存器AR1和AR2从数据总线DBUS取得地址数据。

CEL#接K0,LRW接K1,CER接K2, LDAR1接K3,LDAR2接K4,SW_BUS#接K5,LDIR接K6。

置DP=1,DB=0,DZ=0,使实验台处于单拍状态。

合上电源。按复位按钮CLR#,使实验系统处于初始状态。

(2)向存储器写数,并读出进行检查。

1.令K0 (CEL#)=1,K1(LRW)=1,K2(CER)=0,K3(LDAR1)=1,K4(LDAR2)=0,K5 (SW_BUS#)=0, K6(LDIR)=0。将IR/DBUS开关拨到DBUS位置,将 AR1/AR2开关拨到AR1位置。置SW7-SW0=00H,按一次QD按钮,将00H写入AR1,绿色的地址指示灯应显示00H。再令K3(LDAR1)=0,K0(CEL#)=0,K1(LRW)=0,按一次QD按钮,则将00H数据写入存储器的00H单元。依次重复进行,在存储器10H单元写入数据10H,20H单元写入20H,30H单元写入30H,40H单元写入40H,共存入5个数据。

2.令K0 (CEL#)=1,K1(LRW)=1,K2(CER)=0,K3(LDAR1)=1,K4(LDAR2)=0,K5 (SW_BUS#)=0,K6(LDIR)=0。将IR/DBUS开关拨到DBUS位置,将ARl/AR2开关拨到AR1位置。置SW7-SW0=00H,按一次QD按钮,将00H写入AR1,绿色的地址指示灯应显示00H。令K5(SW_BUS#)=1,然后令K3(LDAR1)=0,K0(CEL#)=0,K1(LRW) =l,则读出存储器的00H单元的数据,读出的数据显示在DBUS数据指示灯上,应为00H。照此方法,可依次读出存储器单元l0H、20H、

30H、40H的数据 。

(3)读出存储器的数据,写入IR。

令K0(CEL#)=l,K1(LRW)=l,K2(CER)=0,K3(LDAR1)=0,K4(LDAR2)=1,K5 (SW_BUS#)=0,K6(LDIR)=0。将IR/DBUS开关拨到IR位置,将ARl/AR2开关拨到AR2位置。置SW7-SW0=00H,按一次QD按钮,将00H写入AR2,绿色的地址指示灯应显示00H。令K4(LDAR2)=0,K2(CER)=l,K6(LDIR)=1,按一次QD按钮,则从右端口读出存储器的00H单元的数据,读出的数据写入指令寄存器IR,显示在IR数据指示灯上,应为00H。照此方法,可从右端口依次读出存储器单元l0H、20H、30H、40H的数据,写入指令寄存器IR。

(4)双端口存储器的并行读写和访问冲突测试

1.令K0(CEL#)=l,K1(LRW)=l,K2(CER)=0,K3(LDAR1)=l,K4(LDAR2)=0,K5 (SW_BUS#)=0,K6(LDIR)=0。将ARl/AR2开关拨到AR1位置。置SW7-SW0=38H,按一次QD按钮,将38H写入AR1,绿色的地址指示灯应显示38H。令K3(LDAR1)=0,K4(LDAR2)= l,K5(SW_BUS#)=0将ARl/AR2开关拨到AR2位置。置SW7-SW0=38H,按一次QD按钮,将38H写入AR2,绿色的地址指示灯应显示38H。

2. 先令K2(CER)=1,K0(CEL#)=1,用示波器探头(或逻辑笔)测试BUSYL插孔,BUSYL应为高电平。保持K2(CER)不变,将K0(CEL#)拨动到0位置,示波器上(逻辑笔)的BUSYL信号从高电平变为低电平; 再将K0(CEL#)拨到1位置,BUSYL信号从低电平变为高电平。

3. 先令K0(CEL#)=0,K2(CER)=0,用示波器探头(逻辑笔)测试BUSYR插孔,BUSYR应为高电平。保持K0(CEL#)不变,将K2(CER)拨动到1位置,示波器上(逻辑笔)的BUSYR信号也从高电平变为低电平; 再将K2(CER)拨到0位置,BUSYL信号也从低电平变为高电平。

实验三 数据通路(总线)实验

一 、实验目的

(1)将双端口通用寄存器堆和双端口存储器模块联机; (2)进一步熟悉计算机的数据通路; (3)掌握数字逻辑电路中故障的一般规律,以及排除故障的一般原则和方法; (4)锻炼分析问题与解决问题的能力,在出现故障的情况下,独立分析故障现象,并排除故障。

二、实验电路

图6示出了数据通路实验电路图,它是将双端口存储器实验模块和一个双端口通用寄存器堆模块(RF)连接在一起形成的。双端口存储器的指令端口不参与本次实验。通用寄存器堆连接运算器模块,本实验涉及其中的操作数寄存器DR2。

由于双端口存储器RAM是三态输出,因而可以将它直接连接到数据总线DBUS上。此外,DBUS上还连接着双端口通用寄存器堆。这样,写入存储器的数据可由通用寄存器提供,而从存储器RAM读出的数据也可送到通用寄存器堆保存。

双端口存储器RAM已在存储器原理实验中做过介绍,DR2运算器实验中使用过。通用寄存器堆RF(U32)由一个ISP1016实现,功能上与两个4位的MC14580并联构成的寄存器堆类似。RF内含四个8位的通用寄存器R0、RI、R2、R3,带有一个写入端口和两个输出端口,从而可以同时写入一路数据,读出两路数据。写入端口取名为WR端口,连接一个8位的暂存寄存器(U14)ER,这是一个74HC374。输出端口取名为RS端口(B端口)、RD端口(A端口),连接运算器模块的两个操作数寄存器DR1、DR2。RS端口(B端口)的数据输出还可通过一个8位的三态门RS0(U15)直接向DBUS输出。

双端口通用寄存器堆模块的控制信号中,RS1、RS0用于选择从RS端口(B端口)读出的通用寄存器,RD1、RD0用于选择从RD端口(A端口)读出的通用寄存器。而WR1、WR0则用于选择从WR端口写入的通用寄存器。WRD是写入控制信号,当WRD=1时,在T2上升沿的时刻,将暂存寄存器ER中的数据写入通用寄存器堆中由WR1、WR0选中的寄存器;当WRD=0时,ER中的数据不写入通用寄存器中。LDER信号控制ER从DBUS写入数据,当LDER=1时,在T4的上升沿,DBUS上的数据写入ER。RS_BUS#信号则控制RS端口到DBUS的输出三态门,是一个低电平有效信号。以上控制信号各自连接一个二进制开关K0—Kl5。

图6 数据通路实验电路图

三、实验设备

(1)TEC-4计算机组成原理实验仪一台 (2)双踪示波器一台 (3)直流万用表一只 (4)逻辑测试笔一支

四、实验任务

(1)将实验电路与控制台的有关信号进行线路连接,方法同前面的实验。

(2)用8位数据开关向RF中的四个通用寄存器分别置入以下数据:R0=0FH,R1=0F0H,R2=55H,R3=0AAH。

给R0置入0FH的步骤是:先用8位数码开关SW0—SW7将0FH置入ER,并且选择WR1=0、WR0=0、WRD=1,再将ER的数据置入RF。给其他通用寄存器置入数据的步骤与此类似。

(3)分别将R0至R3中的数据同时读入到DR2寄存器中和DBUS上,观察其数据是否是存入R0至R3中的数据,并记录数据。其中DBUS上的数据可直接用指示灯显示,DR2中的数据可通过运算器ALU,用直通方式将其送往DBUS。

(4)用8位数码开关SW0—SW7向AR1送入一个地址0FH,然后将R0中的0FH写入双端口RAM。

用同样的方法,依次将R1至R3中的数据写入RAM中的0F0H,55H,0AAH单元。 (5)分别将RAM中0AAH单元的数据写入R0,55H单元的数据写入R1,0F0H单元写入R2,0FH单元写入R3。然后将R3,R2,R1,R0中的数据读出到DBUS上,通过指示灯验证读出的数据是否正确,并记录数据。

(6)进行RF并行输入输出试验。

1.选择RS端口(B端口)对应R0,RD端口(A端口)对应R1,WR端口对应R2,并使WRD=l,观察并行输入输出的结果。选择RS端口对应R2,验证刚才的写入是否生效。记录数据。

2.保持RS端口(B端口)和WR端口同时对应R2,WRD=1,而ER中置入新的数据,观察并行输入输出的结果,RS端口输出的是旧的还是新的数据?

(7)在数据传送过程中,发现了什么故障? 如何克服的?

五、实验步骤与实验结果

(1)接线

IAR_BUS#接VCC,禁止中断地址寄存器IAR向数据总线DBUS送数据。CER接GND,禁止存储器右端口工作。AR1_INC接GND,禁止AR1加1。S2接GND,S1接GND,S0接VCC,使运算器ALU处于直通方式。M2接GND,使DR2选择寄存器堆RF作为数据来源。置DP = 1,DZ = 0,DB = 0,使实验系统开机后处于单拍状态。

K0接SW_BUS#,K1接RS_BUS#,K2接ALU_BUS,K3接CEL#,K4接LRW,K5接LDAR1,K6接LDDR2,K7接LDER,K8接RS0,K9接RS1,K10接RD0,K11接RD1,K12接WR0,K13接WR1,K14接WRD。

合上电源。按CLR#按钮,使实验系统处于初始状态。

(2)向RF中的四个通用寄存器分别置入数据

令K1(RS_BUS#)= 1, K2(ALU_BUS)= 0,K3(CEL#)= 1,K4(LRW)= 1,K5(LDAR1)= 0,K6(LDDR2)= 0,K8(RS0)= 0,K9(RS1)= 0,K10(RD0)= 0,K11(RD1)= 0,K12(WR0)= 0,K13(WR1)= 0,K14(WRD)= 0。

令K0(SW_BUS#)= 0,K7(LDER)= 1。置SW7—SW0为0FH,按一次QD按钮,将0FH写入暂存寄存器ER。令K7(LDER)= 0,K14(WRD)= 1,K12(WR0)= 0,K13(WR1)= 0,按一次QD按钮,将0FH(在ER中)写入R0寄存器。

令K0(SW_BUS#)= 0,K7(LDER)= 1。置SW7—SW0为0F0H,按一次QD按钮,将0F0H写入暂存寄存器ER。令K7(LDER)= 0,K14(WRD)= 1,K12(WR0)= 1,K13(WR1)= 0,按一次QD按钮,将0F0H(在ER中)写入R1寄存器。

令K0(SW_BUS#)= 0,K7(LDER)= 1。置SW7—SW0为55H,按一次QD按钮,将55H写入暂存寄存器ER。令K7(LDER)= 0,K14(WRD)= 1,K12(WR0)= 0,K13(WR1)= 1,按一次QD按钮,将55H(在ER中)写入R2寄存器。

令K0(SW_BUS#)= 0,K7(LDER)= 1。置SW7—SW0为0AAH,按一次QD按钮,将0AAH写入暂存寄存器ER。令K7(LDER)= 0,K14(WRD)= 1,K12(WR0)= 1,

K13(WR1)= 1,按一次QD按钮,将0AAH(在ER中)写入R3寄存器。

(3)分别将R0至R3中的数据同时读入到DR2寄存器中和DBUS上,观察其数据是否是存入

R0至R3中的数据。

1.令K0(SW_BUS#)= 1,K2(ALU_BUS)= 0,K3(CEL#)= 1,K4(LRW)= 1,K5

(LDAR1)= 0,K6(LDDR2)= 0,K7(LDER)= 0,K10(RD0)= 0,K11(RD1)= 0,K12(WR0)= 0,K13(WR1)= 0,K14(WRD)= 0。 将开关IR/DBUS至于DBUS位置。令K1(RS_BUS#)= 0,使寄存器堆中的数据送DBUS总线。令K8(RS0)= 0,K9(RS1)= 0,R0中的数据通过B端口送DBUS ,数据指示灯应显示0FH。令K8(RS0)= 1,K9(RS1)= 0,R1中的数据通过B端口送DBUS,数据指示灯应显示0F0H。令K8(RS0)= 0,K9(RS1)= 1,R2中的数据通过B端口送DBUS,数据指示灯应显示55H。令K8(RS0)= 1,K9(RS1)= 1,R3中的数据通过B端口送DBUS,数据指示灯应显示0AAH。

2.令K0(SW_BUS#)= 1,K1(RS_BUS#)= 1, K3(CEL#)= 1,K4(LRW)= 1,K5

(LDAR1)= 0,K7(LDER)= 0,K8(RS0)= 0,K9(RS1)= 0,K12(WR0)= 0,K13(WR1)= 0,K14(WRD)= 0。

将开关IR/DBUS至于DBUS位置。令K2(ALU_BUS)= 1,使运算器ALU的运算结果送DBUS总线。由于S2接GND,S1接GND,S0接VCC,ALU做直通运算,因此DBUS数据指示灯显示的是DR2寄存器的值。令K10(RD0)= 0,K11(RD1)= 0,K6(LDDR2)= 1,按一次QD按钮,R0中的数据通过A端口送入DR2,DBUS数据指示灯应显示0FH。令K10(RD0)= 1,K11(RD1)= 0,K6(LDDR2)= 1,按一次QD按钮,R1中的数据通过A端口送入DR2,DBUS数据指示灯应显示0F0H。令K6(LDDR2)= 1,K10(RD0)= 0,K11(RD1)= 1,按一次QD按钮,R2中的数据通过A端口送入DR2,DBUS数据指示灯应显示55H。令K10(RD0)= 1,K11(RD1)= 1,K6(LDDR2)= 1,按一次QD按钮,R3中的数据通过A端口送入DR2,DBUS数据指示灯应显示0AAH。

(4)将R0、R1、R2、R3中的数据依次送入存储器0FH、0F0H、55H、0AAH单元。

令K2(ALU_BUS)= 0,K5(LDAR1)= 0,K6(LDDR2)= 0,K7(LDER)= 0,K10(RD0)= 0,K11(RD1)= 0,K12(WR0)= 0,K13(WR1)= 0,K14(WRD)= 0。

置AR1/AR2开关到AR1位置。令K1(RS_BUS#)= 1,K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,置SW7—SW0为0FH,按一次QD按钮,将AR1置为0FH,地址指示灯应显示0FH。令K0(SW_BUS#)= 1,K1(RS_BUS#)= 0,禁止数据开关SW7—SW0送DBUS,允许寄存器堆送数据总线DBUS。令K5(LDAR1)= 0,K8(RS0)= 0,K9(RS1)= 0,K3(CEL#)= 0,K4(LRW)= 0,按一次QD按钮,将R0中的数据写入存储器0FH单元。

置AR1/AR2开关到AR1位置。令K1(RS_BUS#)= 1,K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,置SW7—SW0为0F0H,按一次QD按钮,将AR1置为0F0H,地址指示灯应显示0F0H。令K0(SW_BUS#)= 1,K1(RS_BUS#)= 0,禁止数据开关SW7—SW0送DBUS,允许寄存器堆送数据总线DBUS。令K5(LDAR1)= 0,K8(RS0)= 1,K9(RS1)= 0,K3(CEL#)= 0,K4(LRW)= 0,按一次QD按钮,将R1中的数据写入存储器0F0H单元。

置AR1/AR2开关到AR1位置。令K1(RS_BUS#)= 1,K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,置SW7—SW0为55H,按一次QD按钮,将AR1置为55H,地址指示灯应显示55H。令K0(SW_BUS#)= 1,K1(RS_BUS#)= 0,禁止数据开关SW7—SW0

送DBUS,允许寄存器堆送数据总线DBUS。令K5(LDAR1)= 0,K8(RS0)= 0,K9(RS1)= 1,K3(CEL#)= 0,K4(LRW)= 0,按一次QD按钮,将R2中的数据写入存储器55H单元。

置AR1/AR2开关到AR1位置。令K1(RS_BUS#)= 1,K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,置SW7—SW0为0AAH,按一次QD按钮,将AR1置为0AAH,地址指示灯应显示0AAH。令K0(SW_BUS#)= 1,K1(RS_BUS#)= 0,禁止数据开关SW7—SW0送DBUS,允许寄存器堆送数据总线DBUS。令K5(LDAR1)= 0,K8(RS0)= 1,K9(RS1)= 1,K3(CEL#)= 0,K4(LRW)= 0,按一次QD按钮,将R3中的数据写入存储器0AAH单元。

(5)将RAM中0AAH、55H、0F0H、0FH单元的数据依次写入R0、R1、R2、R3。然后将R3、R2、R1、R0中的数据读出到DBUS上,通过指示灯验证读出的数据是否正确。

1.令K1(RS_BUS#)= 1,K2(ALU_BUS)= 0, K6(LDDR2)= 0, K8(RS0)= 0,

K9(RS1)= 0,K10(RD0)= 0,K11(RD1)= 0。

令K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,K14(WRD)= 0,置SW7—SW0为0AAH,按一次QD按钮,将AR1置为0AAH。令K14(WRD)= 0,K0(SW_BUS#)= 1,K3(CEL#)= 0,K4(LRW)= 1,K5(LDAR1)= 0,K7(LDER)= 1,按一次QD按钮,将存储器0AAH单元的内容读出,写入到暂存寄存器ER。令K0(SW_BUS#)= 1,K5(LDAR1)= 0,K7(LDER)= 0,K3(CEL#)= 1,K14(WRD)= 1,K12(WR0)= 0,K13(WR1)= 0,按一次QD按钮,将ER中的数据写入R0。

令K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,K14(WRD)= 0,置SW7—SW0为55H,按一次QD按钮,将AR1置为55H。令K14(WRD)= 0,K0(SW_BUS#)= 1,K3(CEL#)= 0,K4(LRW)= 1,K5(LDAR1)= 0,K7(LDER)= 1,按一次QD按钮,将存储器55H单元的内容读出,写入到暂存寄存器ER。令K0(SW_BUS#)= 1,K5(LDAR1)= 0,K7(LDER)= 0,K3(CEL#)= 1,K14(WRD)= 1,K12(WR0)= 1,K13(WR1)= 0,按一次QD按钮,将ER中的数据写入R1。

令K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,K14(WRD)= 0,置SW7—SW0为0F0H,按一次QD按钮,将AR1置为0F0H。令K14(WRD)= 0,K0(SW_BUS#)= 1,K3(CEL#)= 0,K4(LRW)= 1,K5(LDAR1)= 0,K7(LDER)= 1,按一次QD按钮,将存储器0F0H单元的内容读出,写入到暂存寄存器ER。令K0(SW_BUS#)= 1,K5(LDAR1)= 0,K7(LDER)= 0,K3(CEL#)= 1,K14(WRD)= 1,K12(WR0)= 0,K13(WR1)= 1,按一次QD按钮,将ER中的数据写入R2。

令K0(SW_BUS#)= 0,K5(LDAR1)= 1,K3(CEL#)= 1,K14(WRD)= 0,置SW7—SW0为0FH,按一次QD按钮,将AR1置为0FH。令K14(WRD)= 0,K0(SW_BUS#)= 1,K3(CEL#)= 0,K4(LRW)= 1,K5(LDAR1)= 0,K7(LDER)= 1,按一次QD按钮,将存储器0FH单元的内容读出,写入到暂存寄存器ER。令K0(SW_BUS#)= 1,K5(LDAR1)= 0,K7(LDER)= 0,K3(CEL#)= 1,K14(WRD)= 1,K12(WR0)= 1,K13(WR1)= 1,按一次QD按钮,将ER中的数据写入R3。

2. 令K0(SW_BUS#)= 1, K2(ALU_BUS)= 0,K3(CEL#)= 1,K4(LRW)= 1,

K5(LDAR1)= 0,K6(LDDR2)= 0,K7(LDER)= 0, K10(RD0)= 0, K11(RD1)= 0,K12(WR0)= 0,K13(WR1)= 0 ,K14(WRD)= 0。

将开关IR/DBUS至于DBUS位置。令K1(RS_BUS#)= 0,K8(RS0)= 0,K9(RS1)= 0,数据指示灯显示R0的值,应为0AAH。令K8(RS0)= 1,K9(RS1)= 0,数据指示

灯显示R1的值,应为55H。令K8(RS0)= 0,K9(RS1)= 1,数据指示灯显示R2的值,应为0F0H。令K8(RS0)= 1,K9(RS1)= 1,数据指示灯显示R3的值,应为0FH。

(6)进行RF并行输入输出试验

1.选择RS端口(B端口)对应R0,RD端口(A端口)对应R1,WR端口对应R2,并使WRD=1, 观察并行输入输出的结果。选择RS端口对应R2,验证刚才的写入是否生效。令K3(CEL#)=l,K4(LRW)=l,K5(LDAR1)=0。

将开关IR/DBUS至于DBUS位置。令K0(SW_BUS#)=0,K1(RS_BUS#)=l,K2(ALU_BUS)=0,K6(LDDR2)=0,K7(LDER)=l,Kl4(WRD)=0。将SW7-SW0置为35H,按一次QD按钮,将35H写入暂存寄存器 ER。

令K0(SW_BUS#)=l,K1(RS_BUS#)=0,K2(ALU_BUS)=0,K14(WRD)=l,K6(LDDR2)=1。再令K8(RS0)=0,K9(RS1)=0,RS端口选择R0;Kl0(RD0)=l,K11(RD1)=0,RD端口选择R1;Kl2(WR0)=0,K13(WR1)=l,WR端口选择R2按一次QD按钮,这时ER中的数据(35H)写入了R2,同时R1中的数据(55H)写入了DR2,R0中的数据送数据总线DBUS(其实,R0中的数据并不受按QD按钮的影响)。数据指示灯应显示R0中的数据0AAH,如果令K1(RS_BUS#)=l,K2(ALU_BUS)=1,数据指示灯应显示DR2的内容(即R1的内容),应为 55H。再令K1(RS_BUS#)=0,K2(ALU_BUS)=0,使数据指示灯仍显示RS端口的内容,同时令K8(RS0)=0,K9(RS1)=l,RS端口选择R2,数据指示灯应显示新的R2的值,即35H。

2.保持RS端口(B端口)和WR端口同时对应R2,WRD=l,而ER中置入新的数据,观察并行输入输出的结果,RS端口输出的是旧的还是新的数据?

令K2(ALU_BUS)=0,K3(CEL#)=l,K4(LRW)=l,K5(LDAR1)=0,K6(LDDR2)=0,K1(RD0)=0, K11(RD1)=0。

将开关IR/DBUS至于DBUS位置。令K0(SW_BUS#)=0,K1(RS_BUS#)=l,K7(LDER)=l, K14(WRD)=0。将SW7-SW0置为53H,按一次QD按钮,将53H写入暂存寄存器ER。令K0(SW_BUS#)=l,K1(RS_BUS#)=0,K8(RS0)=0,K9(RS1)=l,RS端口选择R2,数据指示灯显示R2的值,应为35H。令K14(WRD)=l,Kl2(WR0)=0,K13(WR1)=1,WR端口选择R2, 允许写操作。当按下QD按钮时,新的值53H从ER写入R2,数据指示灯立即变为53H。

实验四 微程序控制器设计实验

一、实验目的

(1)掌握时序产生器的组成原理。 (2)掌握微程序控制器的组成原理。 (3)加深理解微指令与机器指令的关系。

二、实验电路

1.时序发生器

TEC-4计算机组成原理实验系统的时序电路如图7所示。

图7 时序信号发生器图

电路采用2片GAL22V10(U6,U7),可产生两级等间隔时序信号T1-T4和W1-W4,其中一个W由一轮T1-T4循环组成,它相当于一个微指令周期

或硬联线控制器的一拍,而一轮W1-W4循环可供硬联线控制器执行一条机器指令。

本实验不涉及硬联线控制器。微程序控制器只使用时序信号T1-T4,产生T信号的功能集成在GAL22VlO芯片TIMER1(U6)中,另外它还产生节拍信号W1、W2、W3、W4的控制时钟CLK1。

TIMER1的输入信号中,MF接实验台上晶体振荡器的输出,频率为1MHz。T1至T4的脉冲宽度为100ns。CLR(注意,实际上是控制台上的CLR#信号,因为ABEL语言的书写关系改为CLR,仍为低有效信号)为复位信号,低有效。实验仪处于任何状态下令CLR# = 0,都会使时序发生器和微程序控制器复位(回到初始状态),CLR# = l时,则可以正常运行。复位后时序发生器停在T4、W4状态,微程序地址为000000B。建议每次实验仪加电后,先用CLR#复位一次。控制台上有一个CLR#按钮,按一次,产生一个CLR#负脉冲,实验台印制板上已连好控制台CLR#到时序电路CLR的连线。

TJ(停机)是控制器的输出信号之一。连续运行时,如果控制信号TJ = l,会使机器停机,停止发送时序脉冲T1-T4、W1-W4,时序停在T4。在实验台上为了将时序信号发生器的输入信号TJ和控制存储器产生的TJ信号区分开来,以便于连线操作,在实验台上时序信号发生器的输入信号TJ命名为TJI,而控制存储器产生的信号TJ仍命名为TJ。QD(启动)是来自启动按钮QD的脉冲信号,在TIMER1中,对QD用MF进行了同步,产生QD1和QD2。ACT表示QD1上升沿,表达式是QDl&!QD2,脉冲宽度为1000ns。QDR是运行标志,QD信号使其为l,CLR信号将其置0。DP(单拍)是来自控制台的DP开关信号,当DP = l时,机器处于单拍运行状态,按一次启动按钮QD,只发送一条微指令周期的时序信号就停机。利用单拍方式,每次只执行一条微指令,因而可以观察微指令代码和当前微指令的执行结果。DZ(单指)信号是针对微程序控制器的,接控制台开关DZ和P1信号配合使用。Pl是微指令字判断字段中的一个条件信号,从微程序控制器输出。Pl信号在微程序中每条机器指令执行结束时为l,用于检测有无中断请求INTQ,而时序发生器用它来实现单条机器指令停机。在DB = 0且DP = 0的前提下,当DZ = 0时,机器连续运行。当DZ = 1时,机器处于单指方式,每次只执行一条机器指令。

DB、SKIP、CLK1信号以及W1-W4时序信号都是针对硬布线控制器的。W1-W4是节拍信号,硬布线控制器执行一条机器指令需要一组W1-W4信号。DB(单步)信号就是每次发送一组W信号后停机,可见其功能与DZ类似。执行某些机器指令不需要完整的一组W信号周期,SKIP信号就是用来跳过本指令剩余的W节拍信号的。中断允许标志IE由控制存储器的输出信号INTS将其置1,由控制存储器的输出信号INTC将其置0。在TIMER2内部,控制台产生的中断请求用时钟CLK1进行同步,产生了INTR1。只有在INTE = l时,

控制台产生的中断请求脉冲INTR才能起作用,即产生向控制器输出中断信号INTQ,INTQ = INTE & INTR1。

2.数据通路

微程序控制器是根据数据通路和指令系统来设计的。这里采用的数据通路是在综合前面各实验模块的基础上,又增加程序计数器PC(U18)、地址加法器ALU2(U17)、地址缓冲寄存器R4(U25、U26)和中断地址寄存器IAR(U19)。PC和ALU2各采用一片GAL22V10,两者配合使用,可完成程序地址的存储、增1和加偏移量的功能。R4由两片74HC298组成,带二选一输入端。IAR是一片74HC374,用于中断时保存断点地址。

3.微指令格式与微程序控制器电路

根据给定的12条机器指令功能和数据通路总体图的控制信号,采用的微指令格式见下图。微指令字长共35位。其中顺序控制部分10位(后继微地址6位,判别字段4位),操作控制字段25位,各位进行直接控制。微指令格式中,信号名带有后缀“#”的信号为低有效信号,不带有后缀“#”的信号为高有效信号。

图8 微指令格式

对应微指令格式,微程序控制器的组成如下图所是示:

图9 微程序控制器的组成

控制存储器采用5片EEPROM 28C64(U8,U9,U10,U11,U12)。28C64的输出是D0-D7,分别与引脚11、12、13、15、16、17、18、19相对应,CM0是最低字节,CM4是最高字节。微地址寄存器6位,用一片6D触发器74HC174(U1)组成,带有清零端。两级与门、或门构成微地址转移逻辑,用于产生下一微指令的地址。在每个T1上升沿时刻,新的微指令地址会打入微地址寄存器中,控制存储器随即输出相应的微命令代码。微地址转移逻辑生成下一地址,等下一个T1上升沿时打入微地址寄存器。跳转开关JUMP(J1)是一组6个跳线开关。当用短路子将它们连通时,微地址寄存器μAR从本实验系统提供的微程序地址译码电路得到新的微程序地址μD0-μD5。当他们被断开时,用户提供自已的新微程序地址μD0-μD5。这样用户能够使用自己设计的微程序地址译码电路。5片EEPROM的地址A6(引脚4)直接与控制台开关SWC连接,当SWC = 1时,微地址大于或者等于40H,当SWC = 0时,微地址的范围00H-3FH。SWC主要用于实现读寄存器堆的功能。

微地址转移逻辑的多个输入信号中,INTQ是中断请求,本实验中可以不理会它。SWA、SWB是控制台的两个二进制开关信号,实验台上线已接好。C是进位信号,IR7-IR4是机器指令代码,由于本次实验不连接数据通路,这些信号都接到二进制开关K0—Kl5上。

三 、机器指令与微程序

为了在教学中简单明了,本实验仪使用12条机器指令,均为单字长(8位)指令。

表5 指令功能与格式 指 令 格 式 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ADD Rd, Rs Rd+Rs->Rd 0 0 0 0 RS1 RS0 RD1 RD0 加法 SUB Rd, Rs Rd-Rs->Rd 0 0 0 1 RS1 RS0 RD1 RD0 减法 MUL Rd, Rs Rd*Rs->Rd 0 0 1 0 RS1 RS0 RD1 RD0 乘法 AND Rd, Rs Rd&Rs->Rd 0 0 1 1 RS1 RS0 RD1 RD0 逻辑与 STA Rd, [Rs] Rd->[Rs] 0 1 0 0 RS1 RS0 RD1 RD0 存数 LDA Rd, [Rs] [Rs]->Rd 0 1 0 1 RS1 RS0 RD1 RD0 取数 [Rs]->PC 1 0 0 0 RS1 RS0 X X 无条件转移 JMP [Rs] D3 D2 D1 D0 条件转移 JC D 若 C = 1 则 1 0 0 1 PC+D->PC 停机 中断返回 开中断 关中断 STP IRET INTS INTC 暂停运行 返回中断 允许中断 禁止中断 0 1 1 0 1 0 1 0 1 0 1 1 1 1 0 0 X X X X X X X X X X X X X X X X 名 称 助 记 符 功 能 指令功能及格式如表所示。指令的高4位提供给微程序控制器,低4位提供给数据通路。

应当指出,用以上12条指令来编写实际程序是不够的。好在我们的目的不是程序设计,而主要是为了教学,通过CPU执行一些最简单的程序来掌握微程序控制器的工作原理。

上述12条指令的微程序流程设计如下图所示。每条微指令可按前述的微指令格式转换成二进制代码,然后写入5个28C64中。

图10 微程序控制流程图

为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还设计了以下五个控制台操作微程序:

存储器写操作(KWE):按下复位按钮CLR#后,微地址寄存器状态为全零。此时置SWC = 0、SWB =1、SWA = 0,按启动按钮后微指令地址转入27H,从而可对RAM连续进行手动写入。

存储器读操作(KRD):按下复位按钮CLR#后,置SWC = 0,SWB = 0,SWA = 1,按启动按钮后微指令地址转入17H,从而可对RAM连续进行读操作。

写寄存器操作(KLD):按下复位按钮CLR#后,置SWC = 0,SWB = 1,SWA = 1,按启动按钮后微指令地址转入37H,从而可对寄存器堆中的寄存器连续进行写操作。

读寄存器操作(KRR):按下复位按钮CLR#后,置SWC = 1,SWB = 0,SWA = 0,按启动按钮后微指令地址转入47H,从而可对寄存器堆中的寄存器连续进行读操作。

启动程序(PR):按下复位按钮CLR#后,置SWC = 0,SWB = 0,SWA = 0,用数据开关SW7-SW0设置内存中程序的首地址,按启动按钮后微指令地址转入07H,然后转到“取指”微指令。

应当着重指出,在微指令格式的设计过程中,对数据通路所需的控制信号进行了归并和化简。细心的同学可能已经发现,微程序控制器输出的控制信号远远少于数据通路所需的控制信号。这里提供的微程序流程图是没有经过归并和化简的。仔细研究一下微程序流程图,就会发现有些信号出现的位置完全一

样,这样的信号用其中一个信号就可以代表。请看信号LDPC和LDR4,这两个信号都在微程序地址07H,1AH,1FH,26H出现,而在其他的微程序地址都不出现,因此这两个信号产生的逻辑条件是完全一样的。从逻辑意义上看,这两个信号的作用是产生新的PC,完全出现在相同的微指令中是很正常的,因此用LDPC完全可以代替LDR4。还有另一些信号,例如LDDR1和LDDR2,出现的位置基本相同。LDDR2和LDDR1的唯一不同是在地址14H的微指令中,出现了LDDR2信号,但是没有出现LDDR1信号。LDDR1和LDDR2是否也可以归并成一个信号呢?答案是肯定的。微程序流程图中只是指出了在微指令中必须出现的信号,并没有指出出现其他信号行不行,这就要根据具体情况具体分析。在地址14H的微指令中,出现LDDR1信号行不行呢?完全可以。在地址14H出现的LDDR1是一个无用的信号,同时也是一个无害的信号,它的出现完全没有副作用,因此LDDR1和LDDR2可以归并为一个信号LDDR1。根据以上两条原则,我们对下列信号进行了归并和化简:

LDIR(CER) 为1时,允许对IR加载,此信号也可用于作为双端口

存储器右端口选择CER。

LDPC(LDR4) 为l时,允许对程序计数器PC加载,此信号也可用于作

为R4的加载允许信号LDR4。

LDAR1(LDAR2) 为l时,允许对地址寄存器AR1加载,此信号也可用于

作为对地址寄存器AR2加载。

LDDR1(LDDR2) 为1时允许对操作数寄存器DR1加载。此信号也可用于

作为对操作数寄存器DR2加载。

Ml(M2) 当M1 = l时,操作数寄存器DR1从数据总线DBUS接

收数据;当M1 = 0时,操作数寄存器DR1从 寄存器堆RF接收数据。此信号也可用于作为操作数寄存器DR2的数据来源选择信号。

在对微指令格式进行归并和化简的过程中,我们有意保留了一些信号,没有化简,同学们可以充分发挥创造性,提出更为简单的微指令格式。

还要说明的是,为什么微指令格式可以化简,而实验台数据通路的控制信号为什么不进行化简?最主要的原因是前面进行的各个实验的需要,例如LDDR1和LDDR2这两个信号,在做运算器数据通路实验时,是不能设计成一个信号的。还有一个原因是考虑到实验时易于理解,对某些可以归并的信号也没有予以归并。

四、实验设备

(1)TEC-4计算机组成原理实验系统一台 (2)直流万用表一只 (3)逻辑测试笔一支

五、实验任务

(1)按实验要求,连接实验台的开关K0—K15、按钮开关、时钟信号源和微程序控制器。 注意:本次实验只做微程序控制器本身的实验,故微程序控制器输出的微命令信号与执行部件(数据通路)的连线暂不连接。连线完成后应仔细检查一遍,然后才可加上电源。

(2)熟悉微指令格式的定义,按此定义将控制台指令微程序的8条微指令按十六进制编码,列于下表。三种控制台指令的功能由SWC,SWB,SWA三个二进制开关的状态来指定(KRD = 001B,KWE = 010B,PR = 000B)。

微指令地址 微指令编码 微指令地址 微指令编码 00H 0005C00207 3CH 0405C8003D 07H 0005412005 17H 000544003F 27H 040544003D 3FH 0409C0003E 3DH 000140003C 3EH 0005C8003F

单拍(DP)方式执行控制台微程序,读出上述八条微指令,用P字段和微地址指示灯跟踪微指令执行情况。并与上表数据对照。

(3)用P3和SWC、SWB、SWA的状态组合,观察验证三种控制台指令KRD、KWE、PR微地址转移逻辑功能的实现。

(4)熟悉05H、10H两条微指令的功能和P2测试的状态条件(IR4-IR7),用二进制开关设置IR7-IR4的不同状态,观察SUB、LDA、STA、JUMP机器指令微地址转移逻辑功能的实现。(用逻辑笔测试有关逻辑电路的电平,分别做出测试记录。)

(5)设置IR7-IR4的不同组合,用单拍方式执行SUB、LDA、STA、JUMP机器指令微程序,用微地址和P字段指示灯跟踪微程序转移和执行情况。用逻辑笔测试小插座上输出的微命令信号,记录SUB、LDA、STA、JUMP四条机器指令的微命令信号。

六、实验步骤

(1)接线

跳线开关J1用短路子短接。控制器的输入C接K0,IR4接K1,IR5接K2,IR6接K3,IR7接K4,TJI接K5,SKIP接GND。

合上电源。按CLR#按钮,便实验系统处于初始状态。 (2)用P3和SWC、SWB、SWA的状态组合,观察验证三种控制台指令KWE、

KRD、PR微地址转移逻辑功能的实现。

将时序电路的输入TJI与控制存储器的输出TJ连接,置DP = l,DB = 0,DZ = 0。选择SWC = 0、SWB = 0、SWA = l,按QD按钮,验证KRD的微地址转移功能;选择SWC = 0、SWB = l、SWA = 0,按QD按钮,验证KWE的微地址转移功能;选择SWC = 0、SWB = 0、SWA =0,按QD按钮,验证PR的微地址转移功能。这里不再详述。

(3)熟悉地址05H、10H两条微指令的功能和P2测试的状态条件(IR4-IR7),用二进制开关设置IR7-IR4的不同状态,观察SUB、LDA、STA、JUMP机器指令微地址转移逻辑功能的实现。

1.05H微指令的功能是根据程序计数器PC从存储器取指令,送往指令寄存器IR,同时进行PC + 1的操作。05H微指令的下一微指令地址是10H。不过,10H只是一个表面的下一微地址,由于该微指令中P2 = 1,因此实际的微指令地址的低4位要根据IR7-IR4确定,实际微地址为10H + IR7 IR6 IR5 IR4。 2.置DP =1,DZ = 0,DB = 0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。令K4(IR7) = 0,K3(IR6) = 0,K2(IR5) = 0,K1(IR4) = 0,相当于ADD指令的操作码。按一次QD按钮,微地址变为07H。按一次QD按钮,微地址变为05H。按一次QD按钮,微地址变为10H。按一次QD按钮,微地址变为3BH。按一次QD按钮,微地址变为34H。按一次QD按钮,微地址变为0FH。 3.置DP = 1,DZ = 0,DB = 0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。令K4(IR7) = 0,K3(IR6) = 0,K2(IR5) = 0,K1(IR4) = 1,相当于SUB指令的操作码。按一次QD按钮,微地址变为07H。按一次QD按钮,微地址变为05H。按一次QD按钮,微地址变为11H。按一次QD按钮,微地址变为3AH。按一次QD按钮,微地址变为34H。按一次QD按钮,微地址变为0FH。 4.置DP = l,DZ = 0,DB = 0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。令K4(IR7) = 0,K3(IR6) = l,K2(IR5) = 0,K1(IR4) = 0,相当于STA指令的操作码。按一次QD按钮,微地址变为07H。按一次QD按钮,微地址变为05H。按一次QD按钮,微地址变为14H。按一次QD按钮,微地址变为35H。按一次QD按钮,微地址变为0FH。 5.置DP = l,DZ = 0,DB = 0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。令K4(IR7) = 0,K3(IR6) = 1,K2(IR5) = 0,K1(IR4) = 1,相当于LDA指令的操作码。按一次QD按钮,微地址变为07H。按一次QD按钮,微地址变为05H。按一次QD按钮,微地址变为15H。按一次QD按钮,微地址变为36H。按一

次QD按钮,微地址变为34H。按一次QD按钮,微地址变为0FH。 6.置DP = l,DZ = 0,DB = 0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。令K4(IR7) = l,K3(IR6) = 0,K2(IR5) = 0,K1(IR4) = 0,相当于JMP指令的操作码。按一次QD按钮,微地址变为07H。按一次QD按钮,微地址变为05H。按一次QD按钮,微地址变为18H。按一次QD按钮,微地址变为0FH。

表6 取机器指令周期及ADD指令执行周期微程序代码

当 前 微 地 址 T J S2 S1 S0 M 1 L D D R 1 W R D L R W C E L # A L U ︱ BUS RS ︱ BUS # S W ︱ BUS # IAR ︱ BUS # L D E R M 3 AR1 ︱ INC L D A R 1 L D I A R M 4 P C ︱ INC PC ︱ ADD L D P C L D I R I N T C I N T S P3 P2 P1 P0 A5 A4 A3 A2 A1 A0 1000 000111 0000 000101 0100 010000 0000 111011 0000 110100 0000 001111 0010 000101 00 0 000 0 0 0 0 1 0 07 0 000 0 0 0 0 1 0 05 0 000 0 0 0 0 1 0 10 0 000 0 1 0 0 1 0 3B 0 010 0 0 0 0 1 1 34 0 000 0 0 1 0 1 0 0F 0 000 0 0 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

实验五 机器指令执行与时序实验

一、实验目的

(1)理解时序电路的原理与作用,提高对基本逻辑电路、部件的分析和设计能力, 理解计算机中周期、节拍、脉冲间的关系,增加对计算机系统时序的理解。

(2)将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机, 加深理解机器指令的执行过程

(3)通过CPU运行九条机器指令组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。

二、实验电路

1.时序发生器

TEC-4计算机组成原理实验系统的时序电路如图所示。

图11 时序信号发生器图

电路采用2片GAL22V10(U6,U7),可产生两级等间隔时序信号T1-T4和W1-W4,其中一个W由一轮T1-T4循环组成,它相当于一个微指令周期或硬联线控制器的一拍,而一轮W1-W4循环可供硬联线控制器执行一条机器指令。

微程序控制器使用时序信号T1-T4,产生T信号的功能集成在GAL22VlO芯片TIMER1(U6)中,另外它还产生节拍信号W1、W2、W3、W4的控制时钟CLK1。

TIMER1的输入信号中,MF接实验台上晶体振荡器的输出,频率为1MHz。T1至T4的脉冲宽度为100ns。CLR(注意,实际上是控制台上的CLR#信号,因为ABEL语言的书写关系改为CLR,仍为低有效信号)为复位信号,低有效。实验仪处于任何状态下令CLR# = 0,都会使时序发生器和微程序控制器复位(回到初始状态),CLR# = l时,则可以正常运行。复位后时序发生器停在T4、

W4状态,微程序地址为000000B。建议每次实验仪加电后,先用CLR#复位一次。控制台上有一个CLR#按钮,按一次,产生一个CLR#负脉冲,实验台印制板上已连好控制台CLR#到时序电路CLR的连线。

本次实验用到前面四个实验中的所有电路,包括运算器、存储器、通用寄存器堆、程序计数器、指令寄存器、微程序控制器等,将几个模块组合成为一台简单计算机。因此,在基本实验中,这是最复杂的一个实验,也是最能得到收获的一个实验。

在前面的实验中,实验者本身作为“控制器”,完成数据通路的控制。而在本次实验中,数据通路的控制将由微程序控制器来完成。CPU从内存取出一条机器指令到执行指令结束的一个机器指令周期,是由微指令组成的序列来完成的,即一条机器指令对应一个微程序。

三、实验设备

(1)TEC-4计算机组成原理实验系统一台 (2)双踪示波器一台 (3)直流万用表一只 (4)逻辑测试笔一文

四、实验任务

(1)观察时序信号

用双踪示波器观测时序产生器的输入输出信号:MF,W1-W4,T1—T4。比较相位关系,画出其波形。观察时须将TJ1接低电平,DB、DZ、DP开关均置为0状态,然后按QD按钮,则连续产生T1、T2、T3、T4、W1、W2、W3、W4。

(2)对机器指令系统组成的简单程序进行译码。

将下表的程序按指令格式手工汇编成十六进制机器代码,此项任务应在预习时完成。

地址 指令 机器代码 00H LDA R0, [R2] 01H LDA R1, [R3] 02H ADD R0,R1 03H JC +5 04H AND R2, R3 05H SUB R3, R2 06H 07H 08H 09H STA R3, [R2] MUL R0, R1 STP JMP [R1]

(3)按照下面框图,参考前面实验的电路图完成连线,控制器是控制部件,数据通路(包括上面各模块)是执行部件,时序发生器是时序部件。连线包括控制台、时序部分、数据通路和微程序控制器之间的连接。其中,为把操作数传送给通用寄存器组RF,数据通路上的RS1、RS0、RD1、RD0应分别与IR3至IR0连接,WR1、WR0也应接到IR1、IR0上。

图12 模型计算机连线示意图

(4)将上述任务(2)中的程序机器代码用控制台操作存入内存中,并根据程序的需要,用数码开关SW7-SW0设置通用寄存器R2、R3及内存相关单元的数据。注意:由于设置通用寄存器时会破坏内存单元的数据,因此应先设置寄存器的数据,再设置内存数据。

(5)用单拍(DP)方式执行一遍程序,列表记录通用寄存器堆RF中四个寄存器的数据,以及由STA指令存入RAM中的数据(程序结束后从RAM的相应单元中读出),与理论分析值作对比。单拍方式执行时注意观察微地址指示灯、IR/DBUS指示灯、AR2/ARl指示灯和判断字段指示灯的值,以跟踪程序中取指令和执行指令的详细过程(可观察到每一条微指令)。

(6)以单指(DZ)方式重新执行程序一遍,注意观察IR/DBUS指示灯、AR2/AR1指示灯的值(可观察到每一条机器指令)。执行结束后,记录RF中四个寄存器的数据,以及由STA指令存入RAM中的数据,与理论分析值作对比。注意:单指方式执行程序时,四个通用寄存器和RAM中的原始数据与第一遍执行程序的结果有关。

(7)以连续方式(DB、DP、DZ都设为0)再次执行程序。这种情况相当于计算机正常运行程序。由于程序中有停机指令STP,程序执行到该指令时自动

停机。执行结束后,记录RF中四个寄存器的数据,以及由STA指令存入RAM中的数据,与理论分析值作对比。同理,程序执行前的原始数据与第二遍执行结果有关。

五、实验步骤和实验结果

(1)观察时序信号波形

令TJI = 0,置DP = 0,DZ = 0,DB = 0。按QD按钮,则时序部分开始不停止的运行,直到按CLR#按钮为止。用双踪示波器观察MF、T1、T2、T3、T4、W1、W2、W3、W4信号。观察的方法是同时观察两路信号,以便比较相位。可按下述顺序进行:MF和T1,T1和T2,T2和T3,T3和T4,T1和W1,W1和W2,W2和W3,W3和W4。根据观察的结果,画出波形图。

图13 基本时序图

(2)对机器指令系统组成的简单程序进行译码。

地址 指令 机器代码 00H LDA R0, [R2] 58H 01H LDA R1, [R3] 5DH 02H ADD R0,R1 04H 03H JC +5 95H 04H AND R2, R3 3EH 05H SUB R3, R2 1BH 06H STA R3, [R2] 4BH 07H MUL R0, R1 24H 08H STP 60H 09H JMP [R1] 84H

(3)接线

1.将跳线开关J1用短路子短接。时序发生器的输入TJI接控制存储器的输出TJ。控制器的输入C接运输器ALU的C。控制器的输入IR7、IR6、IR5、IR4依次接指令寄存器IR的输出IR7、IR6、IR5、IR4。共6条线。

2.控制器的输出LDIR(CER)、LDPC(LDR4)、PC_ADD、PC_INC、M4、LDIAR、LDAR1(LDAR2)、AR1_INC、M3、LDER、IAR_BUS#、SW_BUS#、RS_BUS#、ALU_BUS、CEL#、LRW、WRD、LDDR1 (LDDR2)、M1(M2)、S2、S1、S0依次与数据通路的对应信号连接。共27条线。

3.指令寄存器IR的输出IR0接双端口寄存器堆的RD0、WR0,IR1接RD1、WR1,IR2接RS0,IR3接RS1。共6条线。

合上电源。按CLR#按扭,使实验系统处于初始状态。

(4)存程序机器代码,设置通用寄存器R2、R3及内存相关单元的数据。

● 设置通用寄存器R2、R3的值。

在本操作中,我们打算使R2=60H,R3=61H。

1.令DP=0,DB=0,DZ=0,使实验系统处于连续运行状态。令SWC=0、SWB=1、SWA=1,使实验系统处于寄存器加载工作方式KLD。按CLR#按扭,使实验系统处于初始状态。

2.在SW7-SW0上设置一个存储器地址,该存储器地址供设置通用寄存器使用。该存储器地址最好是不常用的一个地址,以免设置通用寄存器操作破坏重要的存储器单元的内容。例如可将该地址设置为0FFH。按一次QD按扭,将OFFH写入AR1和AR2。

3.在SW7-SW0上设置02H,作为通用寄存器R2的寄存器号。按一次QD按扭,则将02H写入IR。

4.在SW7-SW0上设置60H,作为R2的值。按一次QD按扭,将60H写入IR指定的R2寄存器。

5.在SW7-SW0上设置03H,作为通用寄存器R3的寄存器号。按一次QD按扭,将03H写入IR。

6. 在SW7-SW0上设置61H,作为R3的值。按一次QD按扭,将61H写入R3。

7.设置R2、R3结束,按CLR#按扭,使实验系统恢复到初始状态。

● 存程序机器代码。

本操作中,我们从00H地址开始存10个机器代码:58H,5DH,04H,95H,3EH,1BH,4BH,24H,60H,84H。在60H存入24H,用于给R0置初值;在61H存入83H,用于给R0置初值。

1.令DP=0,DB=0,DZ=0,使实验系统处于连续运用状态。令SWC=0、SWB=1、SWA=0,使实验系统处于写双端口存储器工作方式KWE。按CLE#按钮,使实验系统处于初始状态。

2.置SW7-SW0为00H,按QD按钮,将00H写入AR1。

3.置SW7-SW0为58H,按QD按钮,将58H写入存储器00H单元。AR1自动加1,变为01H。

4.置SW7-SW0为5DH,按QD按钮,将5DH写入存储器01H单元。AR1自动加1,变为02H。

5.重复进行下去,一直到将84H写入存储器09H单元。按CLR#按钮,使实验系统恢复到初始状态。

6.置SW7-SW0为60H,按QD按钮,将60H写入AR1。

7.置SW7-SW0为24H,按QD按钮,将24H写入存储器60H单元。AR1自动加1,变为61H。

8.置SW7-SW0为83H,按QD按钮,将83H写入存储器61H单元。按CLR#按钮,使实验系统恢复到初始状态。

(5)用单拍(DP)方式执行一遍程序。

在单拍执行过程中,首先要随时监测AR2的值和IR的值,以判定程序执行到何处,正在执行哪条指令。监测微地址指示灯和判断字段指示灯,对照微程序流程图,可以判断出微指令的地址和正在进行的微操作。程序扫行的结果如下:

初值:R0未定,R1未定,R2=60H,R3=61H。存储器60H单元的内容是24H,61H单元的内容是83H。 00H 1.LDA R0,[R2]

执行结果R2=60H,R0=24H。 01H 2.LDA R1,[R3]

执行结果R3=61H,R1=83H。 02H 3.ADD R0,R1

执行结果R0=0A7H,R1=83H,C=0。 03H 4.JC +5

执行结果转移到04H,因为C=0。 04H 5.AND R2,R3

扫行结果 R2=60H,R3=61H。 05H 6.SUB R3,R2

扫行结果 R2=60H,R3=01H。 06H 7.STA R3,[R2]

扫行结果R2=60H,R3=01H,存储器60单元的内容为01H。 07H 8.MUL R0,R1 (R0与R1的低四位相乘)故结果为15H

执行结果 R0=15H,R1=83H。 08H 9.STP

执行结果:无变化 09H 10.JMP [R1]

执行结果 转移到83H。

第一遍执行结束。执行结果是R0=15H,R1=83H,R2=60H,R3=01H,存储器60H单元的内容是01H,61H单元的内容是83H。

(6)用单指(DZ)方式扫行一遍程序。

初值:R0=15H,R1=83H,R2=60H,R3=01H,存储器60H单元的内容是01H,61H单元的内容是83H。

1.LDA R0,[R2]

执行结果 R2=60H,R0=01H。 2.LDA R1,[R3]

执行结果 R3=01H,R1=5DH。 3.ADD R0,R1

执行结果 R0=5EH,R1=5DH,C=0。 4.JC +5

执行结果转移到04H,因为C=0。 5.AND R2,R3

执行结果R2=00H,R3=01H。 6.AND R3,R2

执行结果R2=00H,R3=01H。 7.STA R3,[R2]

执行结果 R2=00H,R3=01H,存储器00单元的内容为01H。 8.MUL R0,R1 (只R0与R1的低四位相乘) 执行结果 R0=0B6H,R1=5D 9.STP

执行结果:无变化 10.JMP [R1]

执行结果 转移到5DH。

第二遍执行结束。执行结果是R0=B6H,R1=5DH,R2=00H,R3=01H,存储器60H单元的内容是01H,61H单元的内容 83H,00H单元的内容为01H。

(7)用连续方式扫描一遍程序

由于00单元的内容已被修改,因此在扫描前应首先恢复00H单元的内容58H。

初值:R0=0B6H,R1=5DH,R2=00H,R3=01H,存储器60H单元的内容是01H,61H单元的内容是83H,00H单元的内容为58H。

1.LDA R0,[R2]

执行结果 R2=00H,R0=58H。 2.LDA R1,[R3]

执行结果 R3=01H,R1=5DH。 3.ADD R0,R1

执行结果 R0=0B5H,R1=5DH,C=0。 4.JC +5

执行结果转移到04H,因为C=0。 5.AND R2,R3

执行结果 R2=00H,R3=01H。 6.SUB R3,R2

执行结果 R2=00H,R3=01H。 7.STA R3,[R2]

执行结果 R2=00H,R3=01H,存储器00单元的内容为01H。 8.MUL R0,R1

执行结果 R0=41H,R1=5DH。 9.STP

执行结果:无变化

本文来源:https://www.bwwdw.com/article/5bew.html

Top