微程序控制器扩展指令研究

2019-06-17 10:02宗德才王康康
计算机应用与软件 2019年6期
关键词:寄存器表达式指令

宗德才 王康康

1(常熟理工学院计算机科学与工程学院 江苏 常熟 215500)2(江苏科技大学数理学院 江苏 镇江 212003)

0 引 言

“计算机组成原理”课程是计算机相关专业的核心课程之一,学好该课程对于学生建立计算机系统整机概念和培养学生分析、设计计算机系统的能力至关重要[1]。“计算机组成原理”是理论性和实践性都很强的一门课程,其中的实践实验环节,是学好“计算机组成原理”课程的关键[2]。

文献[3]设计了4位乘法指令与8位除4位的除法指令,文献[4]设计了基于TEC-XP指令级、微体系级的仿真系统以及脱机运算器、中断嵌套和I/O通信三大部件实验的仿真软件,文献[5]、文献[6]将EDA软件Proteus应用于教学实验中,文献[4]、文献[5]、文献[6]方式的缺点是学生无法动手操作,很难形成对计算机硬件的直观理解,并且都未涉及乘除指令的实现。文献[7]设计了一个8位模型机,控制器包含了14条指令,但未包含乘法、除法等指令。文献[8]设计了加法、取数、转移等指令,但并未设计乘除指令。文献[9]要求学生至少设计实现7条指令,但并未要求设计乘除指令。

目前,我校计算机组成原理实验教学内容主要是基于清华大学计算机系研制的TEC-XP16计算机组成原理实验系统而开展进行的。与大多数高校一样,该课程的实验内容,还是停留在验证性实验阶段,为了使学生更好掌握计算机的各个组成部件的工作原理,理解指令的执行流程,系统地建立计算机整机概念,培养学生的设计、创新能力,需要开发一些设计性实验,如在CPU的控制器中扩展一些新指令。

文献[10]介绍了TH-union教学机微程序控制器部件实验的原理及实验步骤,属于验证性实验,没有扩展新指令。文献[11]在TEC-2000教学机微程序控制器中设计实现了四条扩展指令,NXOR DR,SR、SWRM DR,[SR]、ADTW DR与ADRM DR,[SR],并将扩展的新指令用程序进行了验证。文献[12]在TEC-2000教学机微程序控制器中设计实现了两条扩展指令,NXOR DR,SR与SWRM DR,[SR],并将扩展的新指令用程序进行了验证。文献[11]和文献[12]在TEC-2000教学机微程序控制器中扩展的指令都比较简单,每条扩展指令只需要1~4条微指令即可实现。目前,国内外还没有研究在TEC-XP16教学机微程序控制器中扩展较复杂指令,如乘法指令、除法指令的文献。本文提出了一种在TEC-XP16教学机微程序控制器中设计MUL乘法指令与DIV除法指令的方法,所设计的MUL指令与DIV指令分别需要25条微指令和29条微指令组成的微程序来实现。然后,以扩展MUL指令为例,详细介绍了如何在控制器的源文件中添加扩展指令的控制信号的逻辑表达式、编译控制器的源文件、对MACH器件进行编程、编写程序验证扩展指令是否正确的整个过程。最后,我们以实验方式验证了所设计和实现的乘法指令与除法指令的功能。

1 基本组成及其工作原理

微程序控制器的核心部件是控制存储器,控制存储器用于存放全部微程序。每一条机器指令对应一个微程序,每个微程序由若干条微指令组成,每条微指令对应一个或多个控制信号。微指令是以二进制代码形式表示的,每一位代表一个控制信号,若某位为1,表示对应的控制信号有效,若某位为0,表示对应的控制信号无效。在程序执行过程中,将逐条执行每条指令对应的每一条微指令,用微指令中的控制命令字段控制计算机各功能部件的运行,并用微指令中的下地址字段形成后续微指令的地址[13]。

在TEC-XP16教学计算机中,微程序控制器与组合逻辑控制器的主要逻辑电路都是由一片MACH芯片实现的。微程序控制器由控制存储器、微指令寄存器、映射指令操作码为微指令地址的MAPROM、产生微指令是否转移信号CC的条件判断线路SCC GAL、实现微指令字中的下条微指令地址和MAPROM输出的下条微指令地址二选一功能的线路、确定微指令执行次序的Am2910芯片等部分组成[14]。

在TEC-XP16教学计算机中扩展新指令时,首先,要设计好新指令对应的微程序,然后将设计好的组成微程序的所有微指令写入控制存储器中。

在以前的教学机产品中,如TEC-2000教学机中,控制存储器中的内容是保存在ROM芯片中的,而在TEC-XP16教学计算机中,控制存储器的内容不是保存在ROM芯片中的,控制存储器的内容是用组合逻辑表达式表示的[14]。

2 设计微程序控制器的扩展指令

在TEC-XP16教学机中扩展指令过程中,首先,根据设计好的新指令对应的微程序修改描述MACH芯片功能的ABEL语言源程序;然后将修改后的ABEL语言程序用ISP LEVER软件编译成.jed文件,接着将.jed文件下载到MACH芯片中;最后,在教学机上调试运行包含扩展指令的教学机程序。

在现有的TEC-XP16教学机中,描述MACH芯片功能的ABEL语言源程序同时实现了组合逻辑控制器与微程序控制器,但两种控制器都只能执行29条基本指令。本文在TEC-XP16教学机微程序控制器中设计实现了两条扩展指令:乘法指令MUL DR,SR与除法指令DIV DR,SR。

2.1 设计条件

(1) 硬件:TEC-XP16教学机,PC机,Lattice USB下载电缆HW-USB-2A。

(2) 软件:Lattice ispLEVER Classic 2.0软件、WinPcec软件。

2.2 乘法指令与除法指令的设计过程

在TEC-XP16教学机的微程序控制器中扩展指令的主要过程如下:

(1) 确定乘法指令与除法指令的格式和功能,如表1所示。

表1 MUL指令与DIV指令的指令格式与功能

(2) 按乘法指令与除法指令的功能和格式,设计8位无符号数乘法算法,8位无符号数除法算法,如算法1,算法2所示。

算法1(8位无符号数乘法算法) 被乘数与乘数都用8位无符号数表示,被乘数与乘数分别放在DR、SR寄存器,乘积为16位无符号数,乘积16位放R6寄存器。

(1) 保存R3、R8寄存器内容到堆栈;

(2) 初始化,部分积R6初始化为0,R3、R8寄存器初始化为8;

(3) 将DR寄存器内容左移8位;

(4) 将SR寄存器内容右移1位,最低位移入C触发器;

(5) 如果C为1,则转(6),如果C为0,转(7);

(6) (R6)+(DR)→R6;

(7) R6寄存器内容右移一位,最低位移入C触发器;

(8) R8减1,结果不为0,则转(4),结果为0,结束;

(9) 出栈恢复R3、R8寄存器内容。

算法2(8位无符号数除法算法) 被除数与除数都用8位无符号数表示,被除数与除数分别放在DR、SR寄存器,R9寄存器放8位商。

(1) 保存R3寄存器内容到堆栈;

(2) 初始化,R3初始化为9(上商9次),R9初始化为0;

(3) (DR)-(SR)→DR;

(4) 如果S为0,则转(5),如果S为1,转(9);

(5) R3减1,结果不为0,则转(6),结果为0,则转(12);

(6) 将R9寄存器内容增1,转(4);

(7) 将R9寄存器内容左移一位,将DR寄存器内容左移一位;

(8) (DR)-(SR)→DR,转(4);

(9) R3减1,结果不为0,则转(10),结果为0,则转(13);

(10) 将R9寄存器内容左移一位,将DR寄存器内容左移一位;

(11) (DR)+(SR)→DR,转(4);

(12) 将R9寄存器内容增1;

(13) 出栈恢复R3寄存器内容。

(3) 根据乘除指令的算法,划分指令执行步骤并设计每一步的执行功能,MUL指令的执行步骤表如表2所示。DIV指令的指令执行步骤表由于论文篇幅关系省略。

表2 MUL指令的执行步骤表

(4) 根据指令执行步骤表,设计微指令地址和下地址字段的取值,并设计每一个控制信号的状态值,如表3、表4所示。乘法指令的操作码为E8H,微程序入口地址为6AH,除法指令的操作码为E9H,微程序入口地址为87H。

表3 MUL指令的微程序表

续表3

表4 DIV指令的微程序表

续表4

如图1所示,一条微指令由16位的下地址字段和32位的控制命令字段共同组成,下地址字段用于正确给出下一条微指令的地址,控制命令字段给出的32位控制信号用于控制教学机各功能部件的运行[13]。

微下地址命令码微转移条件MRWI2-I0I8-I6I5-I3B口地址A口地址SSTSSHSCIDC2DC116位下地址字段32位控制命令字段

图1 TEC-XP16教学机的微指令格式

图1中,命令码CI3~CI0为0010时,根据指令的操作码从MAPROM找到该指令对应的微程序的入口地址,从而开始该条指令的执行。命令码CI3~CI0为1110时,顺序执行,即执行紧跟在本条微指令后面的那条微指令,(μPC)+1→μPC。

如表5所示,命令码CI3~CI0为0011时,用于条件微转移控制,微转移条件SCC3~SCC0用于条件微转移时给出转移依据的条件,条件满足时发生转移,下一条微指令的地址为当前微指令中微下地址字段的内容;条件不满足,顺序执行[14]。

表5 条件微指令转移所依据的判断条件表

(5) 根据表3和表4,修改描述MACH芯片功能的ABEL语言源程序,编译适配后下载到MACH芯片中。

(6) 写一个包含所设计的乘法指令与除法指令的教学机程序,通过运行该程序检查执行结果的正确性,验证设计的乘除指令是否正确。

3 MUL扩展指令的实现

下面将以MUL指令为例,介绍在微程序控制器的ABEL源文件中添加扩展指令的控制信号的逻辑表达式,编译控制器的ABEL源文件,对MACH器件编程,编写程序验证扩展指令是否正确的整个过程。

(1) 启动Lattice ispLEVER Classic 2.0中的ispLEVER Classic Project Navigator软件,新建一个项目,项目名称必须是lc4256。

(2) 选择器件类型,如图2所示。

图2 选择器件类型

(3) 单击“Add Source”按钮,添加控制器源文件m256c.abl。然后,单击“完成”按钮。

(4) 右键单击m256c.abl文件,选择“Open”命令。在文本编辑器中打开m256c.abl文件。

(5) 在文本编辑器中修改m256c.abl控制器源文件(文中字体加粗的代码是添加的代码)。

我们设计的MUL指令的操作码为E8H,因此,在RET=(IR==[1,0,0,0,1,1,1,1]);后面加一行代码:

MUL=(IR==[1,1,1,0,1,0,0,0]);

依据表3 MUL指令的微程序表修改CC信号的逻辑表达式,当CC信号为低电平时微程序执行转移,为高电平时则顺序执行。当SCC3~SCC0为0100,NADR为01110101并且Z为0时,CC为低电平,即当Z为0执行地址为77H的JRNZ 75微指令后将转移到75H地址执行微指令。当SCC3~SCC0为0100,NADR为01111011并且C为0时,CC为低电平,即当C为0执行地址为79H的JRNC 7B微指令后将转移到7BH地址执行微指令。当SCC3~SCC0为0100,NADR为00110000并且Z为1时,CC为低电平,即当Z为1执行地址为7DH的JRZ 7F微指令后将转移到30H地址执行微指令。修改后的CC0表达式如下:

CC0=!SCC3&!SCC2&!SCC1&!SCC0

#!SCC3& SCC2& SCC1&!SCC0&(IN_)

#!SCC3& SCC2&!SCC1&!SCC0&(JRC)&!C

#!SCC3& SCC2&!SCC1&!SCC0&(JRNC)&C

#!SCC3& SCC2&!SCC1&!SCC0&(JRZ)&!Z

#!SCC3&SCC2&!SCC1&!SCC0&(JRNZ)&Z

#!SCC3&SCC2&!SCC1&!SCC0&(MUL)&

(NADR==[0,1,1,1,0,1,0,1])&(Z==0)

#!SCC3& SCC2&!SCC1&!SCC0&(MUL)&

(NADR==[0,1,1,1,1,0,1,1])&(C==0)

#!SCC3& SCC2&!SCC1&!SCC0&(MUL)&

(NADR==[0,1,1,1,1,1,1,1])&(Z==1)

# CCM;

CCM=!SCC3& SCC2& SCC1& SCC0&(PUSH)

#!SCC3& SCC2& SCC1& SCC0&(POP)

#!SCC3& SCC2&!SCC1& SCC0&(JRS)&!S

#!SCC3& SCC2&!SCC1& SCC0&(JRNS)&S

#!SCC3&!SCC2& SCC1&!SCC0&!INT;

!CC=CC0;

如图3所示,MACH芯片向AM2910器件提供8位下地址信息D7~D0,该地址有2个来源[15],通过AM2910产生的_PL和_MAP信号进行选择,当_PL为低时,该地址来自微指令中的8位下地址字段NADR7~NADR0;当_MAP为低时,该地址来自MAPROM的输出,MAPROM是通过组合逻辑表达式来实现的。

图3 TEC-XP16教学机控制器的总体组成

我们设计的MUL 指令的微程序入口地址为6AH,因此,D0、D2、D4、D7表达式不需要修改,在D6、D5、D3、D1的逻辑表达式中需增加MUL汇编指令。修改后的D1、D3、D5、D6的逻辑表达式如下:

D1=!C_M&(!_MAP&(AND#OR#TEST#MVRR#SHL#SHR#IN_#OUT#POP#POPF#LDRR#JMPA#CALA#RET#IRET#NOT#ASR#CLC#STC#JMPR#LDRA#STRA#SWRR#MUL)#NADR1&!_PL);

D3=!C_M&(!_MAP&(XOR_#CMP#TEST#MVRR#INC#DEC#SHR#SHL#STRR#LDRR#MVRD#JMPA#CALA#EI#DI#JMPR#JRS#JRNS#LDRA#LDRX#STRA#SWRR#MUL)#NADR3&!_PL);

D5=!C_M&(!_MAP&(RET#IRET#JRS#JRNS#CALR#STRX#SWRR#MUL)#NADR5&!_PL);

D6=!C_M&(!_MAP&(EI#DI#IRET#ADC#SBB#NOT#ASR#RCL#RCR#CLC#STC#JMPR#JRS#JRNS#LDRA#LDRX#STRA#STRX#CALR#SWRR#MUL)#NADR6&!_PL);

按照所设计的乘法指令和除法指令的微程序表中的内容修改描述 MACH 芯片功能的 ABEL语言源程序,即分别写出微指令每一位信号的完整的逻辑表达式,即把在微程序表中该位信号取值为1或0时所对应的微指令地址或在一起。

依据表3 MUL指令微程序表的内容修改微程序控制器16位下地址字段的逻辑表达式,即微下地址NADR7~ NADR0、命令码CI3~CI0、微转移条件SCC3~SCC0的逻辑表达式。由于论文篇幅关系代码省略。

依据表3 MUL指令微程序表的内容修改微程序控制器32位控制命令字段的逻辑表达式。其中,DC2_200、DC2_100、DC2_000、DC1_200、DC1_100、DC1_000表达式不需要修改。由于论文篇幅关系代码省略。

(6) 保存m256c.abl文件。

(7) 在左侧源文件窗口中单击m256c.abl文件,双击Compile Logic任务项,即对源文件m256c.abl进行编译。

(8) 在左侧源文件窗口中点击器件图标,在右侧窗口中双击JEDEC File任务项生成lc4256.jed文件。完成后以绿色的“√”标记。若有警告信息,则以黄色的“!”标记,警告信息一般并不影响JEDEC文件的使用。

(9) 启动Lattice ispLEVER Classic 2.0中的ispVM System软件,弹出主界面。

(10) 将教学机左下方五个黑色的控制开关拨为10100(1表示往上拨,0表示往下拨)。

(11) 通过Lattice USB 下载电缆HW-USB-2A连接PC机与教学计算机上MACH芯片,打开教学计算机电源。

(12) 执行Options、Cable and I/O Port Setup…命令,设置Cable为USB接口,因为我们用的是USB ispDOWNLOAD Cables。

(13) 通过ispVM System软件主界面的SCAN按钮找到在线编程器件。

(14) 右击所找到的编程器件LC4256V,选择“Edit Device”,在“Device Information”窗口中选择Device为 LC4256V(B),通过Browse按钮选择已编译好的JED文件(lc4256.jed),单击OK按钮。

(15) 重新回到ispVM System软件主界面,点击GO命令进行下载编程。如图4所示,在Status窗口中显示信息“Operation Done:No errors.Operation:Successful”,表示对LC4256V器件的编程已经成功。

图4 编程成功

(16) 关闭教学计算机电源,拔下下载编程电缆。

(17) 将教学机左下方五个黑色的控制开关拨为00010(1表示往上拨,0表示往下拨),启动WinPcec16软件,然后打开教学机电源,先按RESET键,后按START键,启动教学机监控程序。

(18) 在WinPcec16中编写一个包含扩展指令MUL的教学机程序,如图5所示。其中,MUL指令为我们设计的扩展指令,教学机中规定扩展指令必须用E命令将二进制形式的扩展指令写入教学机内存。程序中MUL指令的二进制代码为E812(十六进制形式),E8为MUL指令的操作码,1、2分别表示R1、R2寄存器编号。该程序将R1寄存器内容与R2寄存器内容相乘,乘积存放在R6寄存器,即10010001×10110101=01100110 10000101(十六进制数6685),程序运行结果表明所设计的扩展指令MUL是正确的。

图5 包含扩展指令MUL的教学机程序的运行结果

(19) 在WinPcec16软件中编写一个包含扩展指令DIV的教学机程序,该程序将R1寄存器内容与R2寄存器内容相除,商存放在R9寄存器,即10111100÷11011110=0.11011000(十六进制数00D8),余数存放在R1寄存器,余数补码为1111111111010010(十六进制数FFD2),余数为负,则需通过余数补码+除数补码恢复余数,1111111111010010+.0000000011011110=0000000010110000,即余数为+0.10110000,程序运行结果表明所设计的扩展指令DIV是正确的,如图6所示。扩展指令必须用E命令输入。

图6 包含扩展指令DIV的教学机程序的运行结果

4 结 语

目前,国内外还没有研究在TEC-XP16教学机微程序控制器中扩展较复杂指令,如乘法指令、除法指令的文献。为解决TEC-XP16教学机缺少乘法指令和除法指令的问题,本文对TEC-XP16教学机微程序控制器中扩展乘法指令与除法指令进行了尝试,设计了一种8位无符号数乘法指令与一种8位无符号数除法指令。对所设计和实现的乘法指令与除法指令进行了实验测试,测试结果验证了我们所设计和实现的乘法指令与除法指令的功能是正确的。目前,已在我校计算机科学与技术15级学生计算机组成原理课中开设了一些设计性实验,如本文提到的在微程序控制器中扩展一些新指令。从学生的反馈来看,多开设这种设计性的实验,可以使学生从根本上理解计算机各组成部件的工作原理以及各个组成部件之间的联系,使学生更易形成一个完整的计算机整机概念,有益于提高学生的设计能力和创新能力,培养学生分析问题和解决问题的能力,激发学生学习的主动性和积极性。下一步将尝试利用教学机AM2901运算器芯片中的乘商寄存器实现16位乘法指令与16位除法指令,以及在微程序控制器中扩展补码乘法与补码除法等指令。

猜你喜欢
寄存器表达式指令
基于 Verilog HDL 的多周期 CPU 设计与实现
灵活选用二次函数表达式
《单一形状固定循环指令G90车外圆仿真》教案设计
Lite寄存器模型的设计与实现
灵活选用二次函数表达式
常用电子测速法在某数字信号处理器中的应用*
浅析C语言运算符及表达式的教学误区
关于ARM+FPGA组建PLC高速指令控制器的研究
移位寄存器及算术运算应用
MAC指令推动制冷剂行业发展