《计算机组成原理》设计性实验指导

  • 格式:doc
  • 大小:1.02 MB
  • 文档页数:12

1 一、实验目的 深入了解教学计算机微程序控制器的组成和设计技术,包括Am2910器件的功能与具体用法,教学计算机的总体组成和部件之间的连接方法,总之应该深入理解控制器部件的组成、设计、控制与使用等诸项知识。 二、设备与环境 TEC-XP+教学机,微机一台,装有Windows XP、ISPLEVER、ispVM System等软

件。 三、实验内容 在现有的基本指令系统上,扩展2条指令。 四、实验步骤 1、 扩展的2条指令的格式及功能 写明2条指令的格式、功能、寻址方式、操作码编码、微程序步数、微程序入口地址。 2、 指令所对应的微程序 每条指令对应的微程序、以及每步(微指令)的功能及各字段值的意义 1、在叙述各字段意义时,先进行总的概述,然后按微指令分条描述其各字段的功能。 2、在第五项中,对结果要进行简单分析总结 3、在最后追加一个第六项,实验体会。 3、ABEL语言源程序编辑以及JED文件生成 m256c.abl源程序修改过程(10步)以及生成JED文件的整个操作过程 4、MACH编程 将JED文件下载到MACH器件的过程 五、编程验证及结果分析 编写一个验证程序,运行结果说明

附:(该部分做为写实验报告时的素材) 见下页 2

预备知识 一、运算器部分 表2-1 Am2901的9位控制码

表2-2 状态寄存器、最低进位输入、移位输入控制信号 二、微程序控制器的基本组成与实现 TEC-XP+教学计算机系统同时实现了微程序方案和组合逻辑方案的两种控制器,其总体组成如图2-5所示。从两种控制器的组成来看,都包括有程序计数器PC、指令寄存器IR、程序定序器Am2910以及MACH芯片四部分。PC是选用在运算器的通用寄存器组中的R5 3

实现的,图中用虚线表示。IR是选用两片8位的寄存器电路实现的,还用到一片传送IR低位字节内容到内部总线IB的开关门电路。Am2910芯片用来确定微指令的执行次序。MACH芯片是一片有130多个输入输出管脚、由一万个门电路组成的CPLD器件,其内部的线路组成和实现的功能都比较复杂。

图2-5 教学机计算机控制器的总体组成 (1)程序计数器PC可以在运算器内部完成加1运算功能,产生下一条相邻指令的地址;或者完成加一个相对转移的偏移量,产生相对转移指令的转移地址;或者直接接收一个16位的指令地址,用在程序调用或者跳转指令中。 (2)指令寄存器IR接收从内存储器读出并传送到内部总线IB的指令内容,其全部16位输出送MACH芯片的输入引脚,其低8位内容还可以经一个有三态功能的开关门送到内部总线IB。 (3)微程序定序器Am2910芯片用在微程序控制器中,用于以多种方式向控制存储器提供下一条微指令的地址,控制微指令的执行次序,解决的是指令执行步骤的衔接问题。 (4)两种控制器的主要功能线路都集中到一片高集成度CPLD器件(MACH芯片)中实现,在完成扩展指令的教学实验中,可以不对MACH芯片之外的电路作任何变动,全部操作都集中到修改描述MACH芯片功能的ABEL或VHDL语言的源程序代码、执行编译和下载操作以及运行调试这样几步工作。这是本教学计算机系统的一大显著特色,对降低学生的学习难度、简化修改和扩展控制器功能的操作、改善教学实验效果具有重要的作用。 从图2-5可以看到,MACH器件内部包含有微程序控制器中的控制存储器、微指令寄存器、映射指令操作码为微指令地址的MAPROM、产生微指令是否转移信号CC的SCCgal、实现微指令字中的下条微指令地址和MAPROM输出的下条微指令地址二者选其一的线路;包含有组合逻辑控制器的节拍发生器Timing和控制信号产生部件两部分线路;此外还实现了把两种控制器各自提供的32位控制信号进行二者选其一的功能。 与早期产品比较,本系统把用于中断实验的电路、对控制器控制信号译码的DC2和DC1电路、为运算器提供最低位进位输人信号、左右移位时提供给最高最低位的移位输入信号的电路也放到了MACH芯片之内实现,以尽量减少主板上中小规模电路的数量。 4

表2-3给出了由命令码I3~I0、条件输入/CC、条件允许/CCEN信号以及计数器当前值的组合决定的Am2910所完成的功能。 表2-4给出了Am2910条件转移时SCC的编码及功能。

表2-3 Am2910的功能

其中:注1 表示若测试失败则保持,否则就装数;图中/表示保持原内容不变。 表2-4 SCC编码及功能

 控制信号 (1) 对运算器的控制 23位控制信号,同23位微型开关内容: A3~A0,B3~B0,I8~I6,I5~I3,I2~I0 SST2~0,SSHSCI2~0 寄存器分配: R4:SP R5: PC 约定用法:R0:I/O指令约定使用,也是通用累加器 对内存和 I/O接口的读写 5

/MIO(0:有内存或串口读写,1:无) REQ(0:读写内存, 1:读写串行口) /WE(0:写操作, 1:读操作) M R W编码 功能

(2) 对内部总线和特定寄存器的控制 内部总线数据来源选择控制

专用寄存器接收控制 (3) 控制器提供的控制信号(微指令格式 ) TEC-2000 16位机基本指令流程 6

0→PC、关中断PC→AR、PC+1→PCMEM→IR

/MAP

12151719131416181A1C2024DR+SR→DR0405060708090A0B0C0D0E0F1011DR-SR→DRDR and SR→DRDR xor SR→DRDR-SRDR or SR→DRDR and SRSR→DRDR+1→DRDR-1→DRSHL DRSHR DR判断是否转移PC+OFFSET→PCSP-1→SP、ARSP→AR、SP+1→SPDR→ARSR→ARPC→AR、PC+1→PCPC→AR、PC+1→PCPC→AR、PC+1→PCSP→AR、SP+1→SPPORT→ARR0→IOIO→R0FLAG→MEMMEM→FLAG

MEM→DRSR→MEM

MEM→QMEM→PCSP-1→SP、AR

PC→MEM、Q→PC

转移不转移

加电启动,按RESET按钮000102

0330STR→Q、判中断

31PC→AR、PC+1→PC

伪中断处理,空操作3A

无中断

1B1D1E

1F23

21

22

有中断A组B、D组

D组B组

图7-4 16位机微程序基本指令流程框图图2-7 基本指令流程 . 加电启动时,执行 0->PC; . 接下来的两步,完成取指操作; . 按指令操作码,读出相应微指令; . 按指令具体功能,再分别用 1、2、3、4 步完成不同指令组的中各条指令的执行过程; . 最后检查中断请求信号,有请求时则响应中断,否则开始下一条指令的执行过程。

三、ABEL语言描述微程序控制器源程序 … DC1 = [DC1_2,DC1_1,DC1_0]; DC2 = [DC2_2,DC2_1,DC2_0]; D = [D7,D6,D5,D4,D3,D2,D1,D0]; Y = [Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0]; NXTADDR = [NXTADDR7,NXTADDR6,NXTADDR5,NXTADDR4,NXTADDR3, NXTADDR2,NXTADDR1,NXTADDR0]; GALSCC = [CI3,CI2,CI1,CI0,SCC3,SCC2,SCC1,SCC0]; all = [OUTER,SCI,SSH,I,SST,A,B,DC1,DC2]; ADD = (IR==[0,0,0,0,0,0,0,0]); SUB = (IR==[0,0,0,0,0,0,0,1]); 7

AND = (IR==[0,0,0,0,0,0,1,0]); OR = (IR==[0,0,0,0,0,1,1,0]); XOR_ = (IR==[0,0,0,0,0,1,0,0]); CMP = (IR==[0,0,0,0,0,0,1,1]); TEST = (IR==[0,0,0,0,0,1,0,1]); MVRR = (IR==[0,0,0,0,0,1,1,1]); INC = (IR==[0,0,0,0,1,0,0,1]); DEC = (IR==[0,0,0,0,1,0,0,0]); SHL = (IR==[0,0,0,0,1,0,1,0]); SHR = (IR==[0,0,0,0,1,0,1,1]); JR = (IR==[0,1,0,0,0,0,0,1]); JRC = (IR==[0,1,0,0,0,1,0,0]); JRNC = (IR==[0,1,0,0,0,1,0,1]); JRZ = (IR==[0,1,0,0,0,1,1,0]); JRNZ = (IR==[0,1,0,0,0,1,1,1]); JMPA = (IR==[1,0,0,0,0,0,0,0]); LDRR = (IR==[1,0,0,0,0,0,0,1]); LDPC = (IR==[1,0,0,0,1,0,0,1]); STRR = (IR==[1,0,0,0,0,0,1,1]); IN_ = (IR==[1,0,0,0,0,0,1,0]); OUT = (IR==[1,0,0,0,0,1,1,0]); PUSH = (IR==[1,0,0,0,0,1,0,1]); POP = (IR==[1,0,0,0,0,1,1,1]); PSHF = (IR==[1,0,0,0,0,1,0,0]); POPF = (IR==[1,0,0,0,1,1,0,0]); MVRD = (IR==[1,0,0,0,1,0,0,0]); CALA = (IR==[1,1,0,0,1,1,1,0]); RET = (IR==[1,0,0,0,1,1,1,1]);

MA00 = (Y==[0,0,0,0,0,0,0,0]); MA01 = (Y==[0,0,0,0,0,0,0,1]); MA02 = (Y==[0,0,0,0,0,0,1,0]); MA03 = (Y==[0,0,0,0,0,0,1,1]); MA04 = (Y==[0,0,0,0,0,1,0,0]); MA05 = (Y==[0,0,0,0,0,1,0,1]); MA06 = (Y==[0,0,0,0,0,1,1,0]); MA07 = (Y==[0,0,0,0,0,1,1,1]); MA08 = (Y==[0,0,0,0,1,0,0,0]); MA09 = (Y==[0,0,0,0,1,0,0,1]); MA0A = (Y==[0,0,0,0,1,0,1,0]); MA0B = (Y==[0,0,0,0,1,0,1,1]); MA0C = (Y==[0,0,0,0,1,1,0,0]); MA0D = (Y==[0,0,0,0,1,1,0,1]); MA0E = (Y==[0,0,0,0,1,1,1,0]);