基于TEC-XP16的16位乘除指令设计

2022-01-17 06:20宗德才王康康
电子元器件与信息技术 2021年9期
关键词:触发器寄存器乘法

宗德才,王康康

(1. 常熟理工学院 计算机科学与工程学院,江苏 常熟 215500;

2. 江苏科技大学 数理学院,江苏 镇江 212003)

0 引言

目前,国内很多高校计算机组成原理实验教学主要是基于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是正确的。

1 16bit乘除指令的设计实现

本文设计实现了三条指令:16bit无符号乘法指令MULS、16bit无符号除法指令DIVS与16bit变形补码乘法指令MULB。

1.1 软硬件环境

在16bit乘除指令的设计实现过程中用到的硬件设备主要有TEC-XP16教学机、Lattice USB下载电缆HW-USB-2A等;使用的软件主要有Lattice ispLEVER Classic 2.0和WinPcec等软件。

1.2 16bit乘除指令的设计

下面将介绍三种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指令的教学机程序

2 结论

目前,国内外还没有研究在TEC-XP16教学机微程序控制器中设计16bit乘除指令的文献。本文设计了一种16bit无符号数乘法指令、16bit无符号数除法指令与一种16bit变形补码乘法指令,实验结果表明,设计的16bit乘除指令是正确的。

下一步将研究在TEC-XP16教学机组合逻辑控制器中设计实现16bit乘除指令等复杂指令的方法。

猜你喜欢
触发器寄存器乘法
算乘法
STM32和51单片机寄存器映射原理异同分析
我们一起来学习“乘法的初步认识”
《整式的乘法与因式分解》巩固练习
Lite寄存器模型的设计与实现
把加法变成乘法
使用触发器,强化安全性
几种常见触发器工作方式的讨论
触发器逻辑功能转换的两种方法
高速数模转换器AD9779/AD9788的应用