宗德才,王康康
(1. 常熟理工学院 计算机科学与工程学院,江苏 常熟 215500;
2. 江苏科技大学 数理学院,江苏 镇江 212003)
目前,国内很多高校计算机组成原理实验教学主要是基于TEC-XP16教学机进行的。为使学生系统建立整机概念,培养学生的计算机系统能力,亟需开发一些设计性的实验,如为TEC-XP16教学机设计一些新指令。
在TEC-2000微程序控制器中设计实现了NXOR等四条指令[1]。在TEC-2000微程序控制器中设计实现了NXOR和SWRM指令[2]。提出了在TEC-XP16组合逻辑控制器中设计实现SWRR等简单指令的方法[3]。提出了TEC-XP16微程序控制器中8bit无符号乘除指令的设计实现方法[4]。
本文提出了一种在TEC-XP16教学机微程序控制器中设计16bit无符号乘法指令MULS、16bit无符号除法指令DIVS与16bit变形补码乘法指令MULB的方法。
实验结果表明,设计的16bit无符号数乘法指令MULS、16bit无符号除法指令DIVS与16bit变形补码乘法指令MULB是正确的。
本文设计实现了三条指令:16bit无符号乘法指令MULS、16bit无符号除法指令DIVS与16bit变形补码乘法指令MULB。
在16bit乘除指令的设计实现过程中用到的硬件设备主要有TEC-XP16教学机、Lattice USB下载电缆HW-USB-2A等;使用的软件主要有Lattice ispLEVER Classic 2.0和WinPcec等软件。
下面将介绍三种16bit乘除指令的格式和功能并设计相应的算法。主要以16bit变形补码乘法指令为例,介绍其在TEC-XP16教学机微程序控制器中设计实现的过程。
设计16bit乘除指令的主要步骤如下:
(1)设计16bit乘除指令的功能,如表1所示。
表1 MULS、MULB与DIVS指令的格式与功能
(2)根据三种16bit乘除指令的功能和格式,分别设计了算法1,算法2,算法3。
算法1.(16bit无符号数乘法).乘积高16bit存R6寄存器,乘积低16bit存R9寄存器。其中,Q寄存器是教学机AM2901运算器芯片中的乘商寄存器。
(1)初始化R6、R8寄存器,(R6) = 0,(R8) = 17,乘数从SR送Q寄存器。
(2)R6与Q寄存器联合右移一位,Q0移入C触发器。
(3)如果C为0,则转(4),如果C不为0,转(6)。
(4)R8减1,结果不为0,则转(5),结果为0,则转(8)。
(5)R6与Q寄存器联合右移一位,Q0移入C触发器,转(3)。
(6)R8减1,结果不为0,则转(7),结果为0,则转(8)。
(7)(R6)+(DR)→R6,R6与Q寄存器联合右移一位,Q0移入C触发器,转(3)。
(8)Q寄存器内容传送到R9寄存器。
基2 Booth算法[5]通过比较乘数相邻两位的值决定进行加法、减法还是仅进行移位操作。
根据基2 booth算法,我们设计了16bit变形补码乘法算法。
算法2.(16bit变形补码乘法).乘积为32bit变形补码,乘积高16bit存R6寄存器,乘积低16bit存R9寄存器。
(1)初始化R6、R8寄存器,(R6) = 0,(R8) = 17,乘数从SR送Q寄存器,C触发器清0。
(2)将Q寄存器内容送R7寄存器。
(3)将R7寄存器与C触发器循环右移,将C触发器值移到R7寄存器最高位,将R7寄存器最低位移入C触发器。
(4)检查C的值,即Q0的值(Q0即乘数yn)。
(5)将R7寄存器逻辑左移一位,将R7最高位移入C触发器,检查C的值(C即附加位)。
(6)如果Q0=C,则转(7),如果Q0=0,C=1,则转(9),如果Q0=1,C=0,则转(11)。
(7)R8减1,结果不为0,则转(8),结果为0,则转(13)。
(8)R6与Q寄存器联合右移一位,Q0移入C触发器,转(2)。
(9)R8减1,结果不为0,则转(10),结果为0,则转(13)。
(10)(R6)+(DR)→R6,然后R6与Q寄存器联合右移一位,Q0移入C触发器,转(2)。
(11)R8减1,结果不为0,则转(12),结果为0,则转(13)。
(12)(R6)-(DR)→R6,然后R6与Q寄存器联合右移一位,Q0移入C触发器,转(2)。
(13)Q寄存器内容传送到R9寄存器。
算法3.(16bit无符号数除法). R9寄存器存16bit商,R7寄存器存余数。
(1)初始化Q寄存器、R8寄存器,(Q) = 0,(R8) = 16,被除数从DR送R7寄存器。
(2)(R7)-(SR)→R7,R7与Q寄存器联合左移一位,RAM15移入C触发器,Q0为/F15(其中,RAM15为运算结果最低位,F15为运算结果的符号位)。
(3)如果C为0,则转(4),如果C不为0,转(6)。
(4)R8减1,结果不为0,则转(5),结果为0,则转(8)。
(5)(R7)-(SR)→R7,R7与Q寄存器联合左移一位,RAM15移入C触发器,Q0为/F15,转(3)。
(6)R8减1,结果不为0,则转(7),结果为0,则转(8)。
(7)(R7)+(SR)→R7,R7与Q寄存器联合左移一位,RAM15移入C触发器,Q0为/F15,转(3)。
(8)Q寄存器内容传送到R9寄存器。
(9)根据16bit乘除指令算法,设计16bit乘除指令的执行步骤,其中MULB指令的执行步骤如表3所示。
表3 MULB指令的执行步骤表
(10)根据MULB指令执行步骤表,设计每一条微指令的地址和下地址字段的值,并设计每一条微指令中每一个控制信号的值,最终得到MULB指令的微程序表。16bit无符号数乘法指令的操作码为EAH,微程序入口地址为AFH,16bit无符号数除法指令的操作码为EBH,微程序入口地址为D0H,16bit变形补码乘法指令的操作码为ECH,微程序入口地址为7FH。
在TEC-XP16中,每一条微指令由下地址字段和控制命令字段组成[6]。16bit下地址字段包括8bit下地址、4bit命令码和4bit微转移条件,32bit控制命令字段包括3bit MRW信号、3bit I2~I0信号、3bit I8~I6信号、3bit I5~I3信号、4bit B口地址、4bit A口地址、3bit SST信号、3bit SSHSCI信号、3bit DC2信号、3bit DC1信号。
当命令码CI3~CI0为0011时,用于条件微转移控制[7],如表2所示。
表2 条件微指令转移所依据的判断条件表
(11)根据MULB指令微程序表,修改描述MACH芯片功能的ABEL语言源程序m256c.abl,编译适配后下载到MACH芯片中。
首先,修改描述MACH芯片功能的ABEL语言源程序m256c.abl。所设计的MULB指令的操作码为ECH,因此,加一行代码:MULB = (IR==[1,1,1,0,1,1,0,0]);
其次,依据表2修改源程序m256c.abl文件中CC信号的逻辑表达式。修改后的CC0与CC表达式如下所示:
MACH芯片向AM2910器件提供8位下地址D7~D0,该地址有2个来源[8]。我们设计的MULB指令的微程序入口地址为7FH,因此,在D6、D5、D4、D3、D2、D1、D0的逻辑表达式中需增加MULB信号。
然后,依据MULB指令微程序表中的内容修改源程序m256c.abl文件中16bit下地址字段和32bit控制命令字段的逻辑表达式。由于论文篇幅关系代码省略。
最后,对修改后的m256c.abl文件编译后下载到教学机MACH芯片中,其过程详见文献[3-4]。
(12)设计程序验证所设计的16 bit乘除指令的功能。
为了验证MULB指令的功能是否正确,在WinPcec16软件中编写了一个包含MULB指令的教学机程序,实现两个16 bit变形补码的乘法运算。
3123H的变形补码×2123H的变形补码=3123H×123H=065C3AC9H(变形补码),
3123H的变形补码×(-2123H的变形补码)=3123H×DEDDH=F9A3C537(变形补码),
程序运行结果表明所设计的扩展指令MULB是正确的,如图1所示。
图1 包含MULB指令的教学机程序
目前,国内外还没有研究在TEC-XP16教学机微程序控制器中设计16bit乘除指令的文献。本文设计了一种16bit无符号数乘法指令、16bit无符号数除法指令与一种16bit变形补码乘法指令,实验结果表明,设计的16bit乘除指令是正确的。
下一步将研究在TEC-XP16教学机组合逻辑控制器中设计实现16bit乘除指令等复杂指令的方法。