《计算机组成原理A》课程设计性实验报告开课实验室:计算机组成原理实验室年月日实验题目指令扩展实验一、实验目的深入了解教学计算机微程序控制器的组成和设计技术,包括Am2910器件的功能与具体用法,教学计算机的总体组成和部件之间的连接方法,总之应该深入理解控制器部件的组成、设计、控制与使用等诸项知识。
二、设备与环境TEC-XP+教学机,微机(装有Windows XP、ISPLEVER、ispVM System等软件)。
三、实验内容在现有的基本指令系统上,扩展2条指令,分别是:指令一:NXOR DR,SR ,其功能是(DR⊕SR) DR 。
指令二: SWRM DR,[SR] ,其功能是DR与[SR]的值互换,实现寄存器与内存单元(通过间接寻址方式)之间的数据传送。
四、实验步骤1、CPU模型2、微程序控制器组成原理框图3、机器指令与微指令关系① PC:存放下一条机器指令的地址(向指令存储器提供指令地址)。
②指令存储器:(存放所有机器指令),经地址译码,选中相应存储单元,取出相应机器指令,送入指令寄存器IR。
③指令寄存器IR:存放正在执行的机器指令。
机器指令包含两个字段:操作码(OP)、地址码。
④由操作码(OP)映射得到微地址(译码过程),即机器指令所对应的微程序入口地址,存入微地址寄存器。
⑤控制存储器存放所有的微程序,经地址译码读出一条微指令。
⑥由控制存储器读出的一条微指令存入微指令寄存器。
4、教学机TEC-XP的控制器提供的控制信号(微指令格式)① B0-B5字段:DC1:CPU内部总线数据来源选择控制,详见表1-1;DC2:专用寄存器接收控制,详见表1-2。
② B6-B11字段:SSH SCI:最低进位输入、移位输入控制信号,详见表2-1;SST:状态寄存器控制信号,详见表2-2。
③ B12-B19字段:A口:0000表示不使用寄存器,1000表示取IR中的SR,0100表示R4(SP),0101表示R5(PC);B口:0000表示不使用寄存器,1000表示取IR中的DR,0100表示R4(SP),0101表示R5(PC)。
表1-1 DC1-CPU 内部总线数据来源选择 表1-2 DC2-专用寄存器接收控制表2-1 状态寄存器 表2-2 最低进位输入、移位输入控制信号④ B20-B28字段:I5-I3,I8-I6,I2-I0,为Am2901的9位控制码,详见下表3-1。
⑤ B29-B31字段:/MIO REQ /WE 对内存和I/O 接口读写控制:/MIO (0:有内存或串口的读写,1:无) REQ (0:读写内存, 1:读写串行口) /WE (0:写操作, 1:读操作)DC1编码 译码信号操作说明000 /SWTOIB 送开关内容到内部总线 001 /RTOIB 送ALU 输出到内部总线 010 /ETOIB 送IR 低位字内容到内部总线 011 /FTOIB 送程序状态字到内部总线 100 / 16位机不用 101 / 16位机不用110 /INTV 送中断向量到内部总线 111NC无操作DC1编码 译码信号 操作说明000 NC 无操作001 /GIR 指令寄存器接收 010 / 16位机不用 011 /GAR 地址寄存器接收 100 /INTR 恢复中断优先级 101 /INTN 接收中断优先级 110 /EI 用于开中断指令 111/DI用于关中断指令SSH SCI Cin/Shift 000 Cin = 0 001 Cin = 1 010 Cin = C 100 逻辑移位 101循环移位SST C Z V S 000 C ZVS 001 CyZR OV F15010 内部总线 011 0 Z V S 100 1 Z V S 101 RAM0 ZV S 110 RAM15 Z V S 111Q0ZVSI8-I6:运算结果处理I5-I3: 运算功能I2-I0:数据来源编码 通用寄存器 Q 寄存器 Y 的输出 R S 000 F →Q F R+S A Q 001 F S-R A B 010 F →B A R-S 0 Q 011 F →B F R ∨S 0 B 100 F/2→B Q/2→Q F R ∧S 0 A 101 F/2→B F /R ∧S D A 110 F*2→B Q*2→Q F R ∀S D Q 111F*2→BF/(R ∀S)DMRW 编码 功能 000 写内存 001 读内存 010 写串口 011 读串口1XX 无内存和串口的读写操作⑥ B32-B39字段: 顺序控制字段,CI3-CI0,SCC3-0 = 0010 0000(20H )时,表示MAPROM 映射入口地址;CI3-CI0,SCC3-0 = 1110 0000(E0H )时,表示顺序执行;当CI3-CI0 = 0011(3H )时SCC3-0字段有效,此时SCC 编码及功能详见下表4-1。
⑦ B40-B47字段: 微下地址字段 5、扩展的2条机器指令的格式及功能扩展的2条机器指令的格式、功能、寻址方式、操作码编码、微程序步数、微程序入口地址如下表所示:6、指令所对应的微程序每条机器指令对应的微程序、以及每步(微指令)的功能及各字段值的意义: (1)如下表所示,为两条指令所对应的微程序:(2)扩展的两条机器指令的功能及各字段的意义如下:SCC 编码 (CI3-CI0 = 0011 时有效) 功能(下面条件满足时,使/CC = 0) 0000 必转移0010 有中断,INT=0时转移0100 C 、Z 测试,JRC 、JRNC 、JRZ 、JRNZ 指令 微指令转移条件不成立时,转移 0101 S 测试,JRS 、JRNS 指令微指令转移条件不成立时,转移 0110 IR 10 = 0时(IN ),转移 0111IR 8 = 1时(PUSH 、POP ),转移序号 格式 功能寻址方式 编码 微程序步数微程序 入口地址 1 NXOR DR,SRDR 与SR 的值异或送DR寄存器直接寻址 22H 1 80 2SWRM DR,[SR] DR 与 [SR]的值互换DR 为寄存器直接寻址,[SR]为寄存器间接寻址E9H48A序号 指令 入口 地址 下址 CI3-0 SCC3-0 MRW I2-0 I8-6 I5-3 B 口 A 口 SST SSHSCI DC2DC1 1NXOR DR,SR8030 30 4,1 3,7 8,8 1,0 0,0 2 SWRM DR ,[SR] 8A00 E0 4,3 0,0 8,0 0,0 0,0 00 E0 4,4 1,0 0,8 0,0 3,0 00 E0 1,7 3,0 8,0 0,0 0,0 30300,21,00,00,00,1指令一:NXOR DR,SR机器指令NXOR共包括一条微指令,该微指令的功能及各字段值的意义如下:①入口地址:表示该机器指令对应的微程序入口地址为80H;②下址:表示下一条机器指令的微程序入口地址为30H,并且为结束程序指令;③ CI3-0/SCC3-0:CI3-0 = 0011,表示进行条件微转移;SCC3-0 = 0000,表示必转移,即执行完该条微指令后必须转移到下一条机器指令所对应的地址;④ MRW/I2-0:MRW = 100,表示无内存和串口的读写操作;I2-0 = 001,表示数据来源于A,B两个寄存器;⑤ I8-I6/I5-I3:I8-I6 = 011,I5-I3 = 111,I8-I6表示将运算结果存入B寄存器;I5-I3表示进行异或运算;⑥ B口/A口:B = A = 1000,表示A口和B口的地址均为1000,该指令使用了A和B两个寄存器;⑦ SST/SSH SCI:该指令中SST为1,转换为二进制位001,SST的功能为设置状态寄存器的值,表示为 CZVS为C(Cy)Z(ZR)V(OV)S(F15);SSH SCI为0,其功能是设置进位输入,转换为二进制为000,表示Cin=0;⑧ DC2/DC1:该指令中DC1和DC2分别为0,0,转换为二进制为000,000,其功能为DC1送开关内容到内部总线,DC2不进行操作。
指令二:SWRM DR,[SR]机器指令SWRM包括四条微指令,以下是四条微指令执行过程概述:①机器指令入口地址为8A,下址为00,微指令顺序执行,无内存操作,数据来源为011,运算结果送入Q寄存器,由Y口输出,进行R与S的加法操作,B口为IR的DR,不使用A口数据,状态寄存器的值不变,进位输入为0,专用寄存器无操作,送开关内容到内部总线;②微指令的入口地址为8B,下址为00,微指令顺序执行,无内存操作,数据来源为100,运算结果送入Y输出,进行R与S的加法运算,不使用B口数据,A口为IR的SR,状态寄存器的值不变,进位输入为0,地址寄存器接收数据,送开关内容到内部总线;③微指令的入口地址为8C,下址为00,微指令顺序执行,对内存进行读操作,运算器获得数据,运算结果送入B口,并由Y输出,进行R与S的或运算,B口为IR的DR,不使用A口数据,状态寄存器的值不变,进位输入为0,专用寄存器无操作,送开关内容到内部总线;④微指令的入口地址为8D,下址为30,执行完后必转,对内存进行写操作,数据来源为010,运算结果送入Y输出,进行R与S的加法运算,不使用A口与B口数据,状态寄存器的值不变,进位输入为0,专用寄存器无操作,送ALU输出到内部总线。
7、ABEL语言源程序编辑以及JED文件生成(1)添加指令操作码NXOR = (IR == [0,0,1,0,0,0,1,0]);SWRM = (IR == [1,1,1,0,1,0,0,1]);(2)添加入口地址添加NXOR指令的入口地址: MA80 = (Y == [1,0,0,0,0,0,0,0]);添加SWRM指令的入口地址: MA8A = (Y == [1,0,0,0,1,0,1,0]);MA8B = (Y == [1,0,0,0,1,0,1,1]);MA8C = (Y == [1,0,0,0,1,1,0,0]);MA8D = (Y == [1,0,0,0,1,1,0,1]);(3)入口地址定义对NXOR指令做如下修改:D7= !C_M&(!_MAP&(NXOR#......)#NXTADDR7&!_PL)&!Bit8;对SWRM指令做如下修改:D1= !C_M&(!_MAP&(SWRM#······)#NXTADDR1&!_PL)&!Bit8;D3= !C_M&(!_MAP&(SWRM#······)#NXTADDR3&!_PL)&!Bit8;D7= !C_M&(!_MAP&(NXOR#SWRM#······)#NXTADDR7&!_PL)&!Bit8;(4)下址定义对NXOR指令做如下修改:NXTADDR5:=!C_M&(MA80#......)&!Bit8;NXTADDR4:=!C_M&(MA80#......)&!Bit8;对SWRM指令做如下修改:NXTADDR5:=!C_M&(MA8D#......)&!Bit8;NXTADDR4:=!C_M&(MA8D#......)&!Bit8;(5)条件转移字段定义对NXOR指令做如下修改:CI0 := !C_M&(MA80#......)&NRST&!Bit8;对SWRM指令做如下修改:CI3:= !C_M&(MA8A#MA8B#MA8C#......)&NRST&!Bit8;CI2:= !C_M&(MA8A#MA8B#MA8C#......)&NRST&!Bit8;CI1:= !C_M&(MA8A#MA8B#MA8C#......)&NRST&!Bit8;CI0 :=!C_M&(MA8D#......)&NRST&!Bit8;(6)MRW定义对NXOR指令做如下修改:!_MIO00:=!(MA80#......);对SWRM指令做如下修改:!_MIO00:=!(MA8A#MA8B#......);_WE00 :=(MA8C#......);(7)I2-I0,I8-I6,I5-I3定义I200:=(MA8B#MA8C#......);I100:=(MA8A#MA8C#MA8D#......);!I000:=!(MA8A#MA8C#......);I700:=(MA8C#......);!I600 :=!(MA8B#MA8C#MA8D#MA80#......);I500 :=(MA80#......);I400 :=(MA80#......);I300 :=(MA80#......);(8)B口、A口定义B30=(MA80#MA8A#MA8C#......);A30=(MA8B#MA80#......);(9)SST/SSH SCI定义SST000:=(MA80#......);(10)DC2 DC1定义DC2_100:=(MA8B#......);DC2_000:=(MA8B#......);将源程序按如上所述修改完毕后,双击lc4256.syn,启动ispLEVER软件,之后双击m256c.abl文件,再双击Compile Logic进行编译,最后双击JEDEC File,生成.jed文件。