组成原理课程设计扩展指令4条.docx
《组成原理课程设计扩展指令4条.docx》由会员分享,可在线阅读,更多相关《组成原理课程设计扩展指令4条.docx(23页珍藏版)》请在冰豆网上搜索。
组成原理课程设计扩展指令4条
1.课程设计目的
通过计算机组成原理课程设计,进一步熟练掌握计算机各功能部件的内部构造和相互之间的联系(部件配置、相互连接和作用)、各功能部件的性能参数的相互匹配、机器指令级的各种功能和特性。
学生能够将所学知识融会贯通、进一步系统化,进一步提高硬件系统设计的能力,为以后的更高一级的硬件设计打下坚实基础。
2.课程设计任务
在现有的TEC-XP+教学机系统上扩展4条指令。
要求:
(1)4条指令至少要用到4种寻址方式;
(2)4条指令分别由1步、2步、3步、4步完成;
(3)监控命令A、U必须能够支持这4条指令。
3.系统组成原理及实现
(1)运算器
运算器的基本组成与实现
TEC-XP系统机上的运算器,可选8或16位字长,分别由2或4片4位的位片结构的器件组成,作为讲解运算器的实例和教学实验的对象,有很强的典型性。
它可脱离TEC-XP主机,单独地进行运算器部件实验,也可在主机控制下完成运算器部件实验、其它功能部件实验或整机实验。
位片结构是说,每个器件本身就是一个完整的运算器,只是位数较少,要组成更多位数的实用运算器要用多片共同实现,这里选用的是美国AMD公司的Am2901芯片。
Am2901芯片是一个4位的位片结构的运算器器件,其内部组成如下图所示。
I3
I4
I5I6
I7
I0I8
I1
I2
第一个组成部分是算逻运算部件ALU,完成3种算术运算和5种逻辑运算,共计8种功能。
其输出为F,两路输入为S、R,最低位进位Cn,四个状态输出信号如图所示。
第二个组成部分是通用寄存器组,由16个寄存器构成,并通过B口与A口地址选择被读的寄存器,B口地址还用于指定写入寄存器。
通过B口地址、A口地址读出的数据将送到B、A锁存器,要写入寄存器的数据由一个多路选择器送来。
第三个组成部分是乘商寄存器Q,它能对自己的内容完成左右移位功能,其输出可以送往ALU,并可接收ALU的输出结果。
一组三选一门和另一组二选一门用来选择送向ALU的R、S输入端的数据来源,包括Q寄存器、A口、B口、外部输入D数据的8种不同组合。
第四个组成部分是5组多路选通门,包括一组三选一门完成把ALU的输出、或左移一位、或右移一位的值送往通用寄存器组,最高、最低位移位信号有双向入/出问题。
一组三选一门完成Q寄存器的左移一位、或右移一位、或接收ALU输出值的功能,最高、最低位移位信号有双向入/出问题。
一组二选一门,选择把A口数据或ALU结果送出芯片,以给出输出Y的数据,Y输出的有无还受输出使能/OE信号的控制,仅当/OE为低时才有Y输出,/OE为高,Y输出为高阻态。
ALU的数据来源由I2-0三位选择码控制,8种功能由I5-3三位选择码实现,运算结果处理方式由I8-6三位选择码控制,具体规定如下表所示。
Am2901的9位控制码
状态寄存器、最低进位输入、移位输入控制信号
运算器是计算机硬件系统传统的5大功能部件之一,承担着执行运算和暂存运算数据的功能,通常由执行算术逻辑运算功能的ALU线路、暂存参加ALU运算的数据和中间运算结果的通用寄存器组、支持乘除法运算的专用寄存器3部分组成,3个部分之间通过多路选择器线路实现连接,从而构成一个完整的运算器部件。
TEC-XP计原l6系统的运算器部件主体部分由4片长度为4位的位片结构运算器芯片Am2901组成。
4片Am2901之间的连接如下图所示。
(2)微程序控制器
微程序控制器的基本组成与实现
TEC-XP+教学计算机系统同时实现了微程序方案和组合逻辑方案的两种控制器,其总体组成如图2-5所示。
从两种控制器的组成来看,都包括有程序计数器PC、指令寄存器IR、程序定序器Am2910以及MACH芯片四部分。
PC是选用在运算器的通用寄存器组中的R5实现的,图中用虚线表示。
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语言的源程序代码、执行编译和下载操作以及运行调试这样几步工作。
这是本教学计算机系统的一大显著特色,对降低学生的学习难度、简化修改和扩展控制器功能的操作、改善教学实验效果具有重要的作用。
4.扩展4条指令
(1)4条指令的格式及功能
指令格式
功能
寻址方式
编码
操作步数
入口
NTADDR,SR
SR的值取非和DR的值相与
SR,DR均为直接寻址
25H
一步
90H
ADNTDR,SR
SR的值和SR的值相与,取反
SR,DR均为直接寻址
27H
两步
91H
ADRLDR,[SR]
求出DR,[SR]中值的和,然后除以二
DR直接寻址
SR间接寻址
E9
四步
93H
SURMDR,[SR]
求DR,[SR]的差
DR直接寻址
SR间接寻址
E8
三步
97H
(2)指令所对应的微程序
1)指令NTADDR,SR
v入口地址为90H,意思是指令的存储地址为90H。
v指令下址为30H,意思是下一条指令地址为30H结束程序。
vCI3-0,SCC3-0为30H,及CI3-0为011B表示SCC编码有效,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,1,意思是对应的源寄存器和目标寄存器为通用寄存器的两个AB.
vI8-I6,I5-I3为3,5,意思是I8-I6为011B表示将结果送入B寄存器,I5-I3为101B表示该条命令执行的是非与指令。
vB口,A口为8,8,意思是AB两个寄存其的地址为10000000B。
vSST,SSHSCI为0,0,意思是SST为001B表示进行状态寄存器符号位的判断,SSHSCI为000B表示Cin=0。
vDC2,DC1为0,0,意思是DC2为000B表示不操作,DC1为000B表示将开关内容送到内部总线
2)ADNTDR,SR
第一条微程序
v入口地址为91H,意思是指令的存储地址为91H。
v指令下址为00H,意思是没有指定跳转地址,顺序执行下一条微程序。
vCI3-0,SCC3-0为E0H,及CI3-0为1110B表示顺序执行,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,1,意思是对应通用寄存器A,B。
vI8-I6,I5-I3为1,0,意思是I8-I6为001B表示将结果输出,I5-I3为000B表示该条命令执行的是加法命令。
vB口,A口为8,8,意思是用到了A,B两个口从内存外得到数据。
vSST,SSHSCI为1,0,意思是做相应的状态判断,同时Cin=0。
vDC2,DC1为0,0,意思是DC2为000B表示专用寄存器不进行操作,DC1为000B表示将开关内容送到内部总线
第二条微程序
v入口地址为92H,意思是指令的存储地址为92H。
v指令下址为30H,意思是跳转到结束语句,该句结束后该条指令结束。
vCI3-0,SCC3-0为30H,及CI3-0为011B表示SCC编码有效,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,3,意思是对应的只有一个寄存器B。
vI8-I6,I5-I3为3,7,意思是I8-I6为011B表示将结果输出并送给B寄存器,I5-I3为111B表示该条命令执行的是取非命令。
vB口,A口为8,0,意思是B口的地址为10000000B可以看出该条微程序只用到了B寄存器。
vSST,SSHSCI为1,0,意思是做相应的状态判断,同时Cin=0。
vDC2,DC1为0,0,意思是DC2为011B表示不对专用寄存器进行操作,DC1为000B表示将开关内容送到内部总线。
3)SURMDR,[SR]
第一条微程序
v入口地址为97H,意思是指令的存储地址为97H。
v指令下址为00H,意思是没有指定跳转地址,顺序执行下一条微程序。
vCI3-0,SCC3-0为E0H,及CI3-0为1110B表示顺序执行,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,4,意思是对应的只有一个寄存器A。
vI8-I6,I5-I3为1,0,意思是I8-I6为001B表示将结果输出,I5-I3为000B表示该条命令执行的是加法命令。
vB口,A口为0,8,意思是A口的地址为10000000B可以看出该条微程序只用到了A寄存器。
vDC2,DC1为3,0,意思是DC2为011B表示地址寄存器接受,DC1为000B表示将开关内容送到内部总线
第二条微程序
v入口地址为98H,意思是指令的存储地址为98H。
v指令下址为00H,意思是没有指定跳转地址,顺序执行下一条微程序。
vCI3-0,SCC3-0为E0H,及CI3-0为1110B表示顺序执行,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,3,意思是对应的只有一个寄存器B。
vI8-I6,I5-I3为0,0,意思是I8-I6为000B表示将结果输出并送给Q寄存器,I5-I3为000B表示该条命令执行的是加法命令。
vB口,A口为8,0,意思是B口的地址为10000000B可以看出该条微程序只用到了B寄存器。
vDC2,DC1为0,0,意思是DC2为011B表示不操作,DC1为000B表示将开关内容送到内部总线
第三条微程序
v入口地址为99H,意思是指令的存储地址为99H。
v指令下址为30H,意思是结束程序。
vCI3-0,SCC3-0为30H,及CI3-0为0011B表示SCC编码有效,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为1,6,意思是对应的寄存器要用到D,Q两个。
vI8-I6,I5-I3为3,1,意思是I8-I6为011B表示将结果输出并送给B寄存器,I5-I3为001B表示该条命令执行的是减法命令。
vB口,A口为8,0,意思是B口的地址为10000000B可以看出该条微程序只用到了B寄存器。
vSST,SSHSCI为0,1,意思是SST为000B进行状态位的判断,SSHSCI为001B及Cin为1。
vDC2,DC1为0,0,意思是DC2为011B表示不操作,DC1为000B表示将开关内容送到内部总线。
4)ADRLDR,[SR]
第一条微程序
v入口地址为93H,意思是指令的存储地址为93H。
v指令下址为00H,意思是没有指定跳转地址,顺序执行下一条微程序。
vCI3-0,SCC3-0为E0H,及CI3-0为1110B表示顺序执行,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,4,意思是对应的只有一个寄存器A。
vI8-I6,I5-I3为1,0,意思是I8-I6为001B表示将结果输出,I5-I3为000B表示该条命令执行的是加法命令。
vB口,A口为0,8,意思是A口的地址为10000000B可以看出该条微程序只用到了A寄存器。
vDC2,DC1为3,0,意思是DC2为011B表示地址寄存器接受,DC1为000B表示将开关内容送到内部总线
第二条微程序
v入口地址为94H,意思是指令的存储地址为94H。
v指令下址为00H,意思是没有指定跳转地址,顺序执行下一条微程序。
vCI3-0,SCC3-0为E0H,及CI3-0为1110B表示顺序执行,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,3,意思是对应的只有一个寄存器B。
vI8-I6,I5-I3为0,0,意思是I8-I6为000B表示将结果输出并送给Q寄存器,I5-I3为000B表示该条命令执行的是加法命令。
vB口,A口为8,0,意思是B口的地址为10000000B可以看出该条微程序只用到了B寄存器。
vDC2,DC1为0,0,意思是DC2为011B表示不操作,DC1为000B表示将开关内容送到内部总线
第三条微程序
v入口地址为95H,意思是指令的存储地址为95H。
v指令下址为00H,意思是顺序执行下一条微程序。
vCI3-0,SCC3-0为E0H,及CI3-0为1110B表示顺序执行,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为1,6,意思是对应的寄存器要用到D,Q两个。
vI8-I6,I5-I3为3,0,意思是I8-I6为011B表示将结果输出并送给B寄存器,I5-I3为001B表示该条命令执行的是加法命令。
vB口,A口为8,0,意思是B口的地址为10000000B可以看出该条微程序只用到了B寄存器。
vSST,SSHSCI为0,0,意思是SST为000B进行状态位的判断,SSHSCI为000B及Cin为0。
vDC2,DC1为0,0,意思是DC2为011B表示不操作,DC1为000B表示将开关内容送到内部总线。
④第四条微程序
v入口地址为95H,意思是指令的存储地址为95H。
v指令下址为30H,意思是结束程序。
vCI3-0,SCC3-0为30H,及CI3-0为0011B表示SCC编码有效,SCC3-0为0000H表示必须转移,及入口执行第一条为程序后必须转到下址对应的地址。
vMVR,I2-0为4,3,意思是从非串口非内存读数据并对应的寄存器要用到D,Q两个。
vI8-I6,I5-I3为5,0,意思是I8-I6为011B表示将结果除以二输出并送给B寄存器,I5-I3为001B表示该条命令执行的是加法命令。
vB口,A口为8,0,意思是B口的地址为10000000B可以看出该条微程序只用到了B寄存器。
vSST,SSHSCI为5,0,意思是SST为101B进行状态位的判断,地位进位由RMA0的值决定,SSHSCI为000B及Cin为0。
vDC2,DC1为0,0,意思是DC2为011B表示不操作,DC1为000B表示将开关内容送到内部总线。
(3)ABEL语言源程序编辑以及JED文件生成
1 在所有现存在的指令下面添加
NTAD=(IR==[00100101]);
ADNT=(IR==[00100111]);
ADRL=(IR==[11101001]);
SURM=(IR==[11101000]);
2 紧接着将即将运用到的微程序对应的地址添加进去
MA90=(Y==[1,0,0,1,0,0,0,0]);
MA91=(Y==[1,0,0,1,0,0,0,1]);
MA92=(Y==[1,0,0,1,0,0,1,0]);
MA93=(Y==[1,0,0,1,0,0,1,1]);
MA94=(Y==[1,0,0,1,0,1,0,0]);
MA95=(Y==[1,0,0,1,0,1,0,1]);
MA96=(Y==[1,0,0,1,0,1,1,0]);
MA97=(Y==[1,0,0,1,0,1,1,1]);
MA98=(Y==[1,0,0,1,1,0,0,0]);
MA99=(Y==[1,0,0,1,1,0,0,1]);
3 在D0-D7做如下的添加,将命令入口地址对应为1的加入指令
D0=!
C_M&(!
_MAP&(ADNT#SURM#ADRL#SUB#OR#CMP#MVRR#DEC#SHR#JR#PSHF#PUSH#POP#POPF#STRR#LDRR#LDPC#MVRD#CALA#RET#IRET#DI#ASR#RCR#STC#LDRA#LDRX#STRA#STRX#SBB#JRS#JRNS)#NXTADDR0&!
_PL)&!
Bit8;
D1=!
C_M&(!
_MAP&(SURM#ADRL#AND#OR#TEST#MVRR#SHL#SHR#IN_#OUT#POP#POPF#LDRR#LDPC#JMPA#CALA#RET#IRET#NOT#ASR#CLC#STC#JMPR#LDRA#STRA)#NXTADDR1&!
_PL)&!
Bit8;
D2=!
C_M&(!
_MAP&(SURM#ADD#SUB#AND#OR#INC#DEC#SHL#SHR#PSHF#PUSH#POP#POPF#MVRD#JMPA#CALA#IRET#RCL#RCR#CLC#STC#LDRX#STRA#CALR)#NXTADDR2&!
_PL)#NXTADDR2&!
_PL)&!
Bit8;
D3=!
C_M&(!
_MAP&(XOR_#CMP#TEST#MVRR#INC#DEC#SHR#SHL#STRR#LDRR#LDPC#MVRD#JMPA#CALA#EI#DI#JMPR#JRS#JRNS#LDRA#LDRX#STRA)#NXTADDR3&!
_PL)&!
Bit8;
D4=!
C_M&(!
_MAP&(ADNT#NTAD#SURM#ADRL#JRC#JRNC#JRZ#JRNZ#JR#IN_#OUT#PSHF#PUSH#POP#POPF#STRR#LDRR#LDPC#MVRD#JMPA#CALA#EI#DI#ADC#SBB#NOT#ASR#RCL#RCR#CLC#STC#JMPR#LDRA#LDRX#STRA)#NXTADDR4&!
_PL)#NXTADDR4&!
_PL)&!
Bit8;
D5=!
C_M&(!
_MAP&(RET#IRET#JRS#JRNS#CALR#STRX)#NXTADDR5&!
_PL)&!
Bit8;
D6=!
C_M&(!
_MAP&(EI#DI#IRET#ADC#SBB#NOT#ASR#RCL#RCR#CLC#STC#JMPR#JRS#JRNS#LDRA#LDRX#STRA#STRX#CALR)#NXTADDR6&!
_PL)&!
Bit8;
D7=!
C_M&(!
_MAP&(ADNT#NTAD#SURM#ADRL)#NXTADDR7&!
_PL)&!
Bit8;
4 添加下地址对应的代码
NXTADDR7:
=0;
NXTADDR6:
=0;
NXTADDR5:
=!
C_M&(MA92#MA90#MA99#MA96#MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D#MA0E#MA0F#MA10#MA11#MA13#MA14#MA16#MA18#MA1A#MA1C#MA1E#MA22#MA24#MA30#MA3F#MA50#MA51#MA52#MA53#MA54#MA55#MA56#MA57#MA58#MA59#MA5A#MA63#MA66#MA68#MA69#MA6A)&!
Bit8;
NXTADDR4:
=!
C_M&(MA92#MA98#MA90#MA99#MA96#MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D#MA0E#MA0F#MA10#MA11#MA12#MA13#MA14#MA15#MA16#MA17#MA18#MA1A#MA1C#MA1D#MA22#MA24#MA30#MA3F#MA50#MA51#MA52#MA53#MA54#MA55#MA56#MA57#MA58#MA59#MA5A#MA5C#MA5E#MA60#MA63#MA66#MA69#MA6A)&!
Bit8;
NXTADDR3:
=!
C_M&(MA15#MA17#MA1D#MA30#MA5C#MA5E#MA60)&!
Bit8
NXTADDR2:
=!
C_M&(MA12#MA17#MA1D#MA1E#MA5C#MA5E)&!
Bit8;
NXTADDR1:
=!
C_M&(MA15#MA30#MA31#MA60#MA68)&!
Bit8;
NXTADDR0:
=!
C_M&(MA3F#MA68)&!
Bit8;
5 CI3-0,SCC3-0对应的代码
CI3:
=!
C_M&(MA91#MA97#MA98#MA95#MA94#MA93#MA00#MA01#MA02#MA19#MA1B#MA89#MA1F#MA20#MA21#MA23#MA3A#MA3B#MA3C#MA3D#MA3E#MA5B#MA5D#MA5F#MA61#MA62#MA64#MA65#MA67#MA89)&NRST&!
Bit8;
CI2:
=!
C_M&(MA91#MA97#MA98#MA95#MA94#MA93#MA00#MA01#MA02#MA19#MA1B#MA89#MA1F#MA20#MA21#MA23#MA2A#MA3B#MA3C#MA3D#MA3E#MA5B#MA5D#MA5F#MA61#MA62#MA64#MA65#MA67)&NRST&!
Bit8;
CI1:
=!
C_M&1&NRST&!
Bit8;
CI0:
=!
C_M&(MA92#MA90#MA99#MA96#MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D#MA0E#MA0F#MA10#MA11#MA12#MA13#MA14#MA15#MA16
SCC3:
=!
C_M&0&NRST&!
Bit8;
SCC2:
=!
C_M&(MA10#MA12#MA15#MA17#MA69)&NRST&!
Bit8;
SCC1:
=!
C_M&(MA12#MA15#MA17#MA30)&NRST&!
Bit8;
SCC0:
=!
C_M&(MA15#MA17#MA69)&NRST&!
Bit8;
6 MVR,I2-I0添加相应代码
!
_MIO00:
=!
(MA92#MA91#MA90#MA98#MA97#MA96#MA94#MA93#MA00#MA01#MA03#MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D#MA0E#MA0F#MA10#MA11#MA12#MA15#MA17#MA19#MA1B#MA89#MA1D#MA1E#MA1F#MA21#MA23#MA30#MA31#MA3A#MA3B#MA3D#MA3F#MA50#MA51