宗德才,王康康
(1. 常熟理工學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 常熟 215500;
2. 江蘇科技大學(xué) 數(shù)理學(xué)院,江蘇 鎮(zhèn)江 212003)
目前,國內(nèi)很多高校計(jì)算機(jī)組成原理實(shí)驗(yàn)教學(xué)主要是基于TEC-XP16教學(xué)機(jī)進(jìn)行的。為使學(xué)生系統(tǒng)建立整機(jī)概念,培養(yǎng)學(xué)生的計(jì)算機(jī)系統(tǒng)能力,亟需開發(fā)一些設(shè)計(jì)性的實(shí)驗(yàn),如為TEC-XP16教學(xué)機(jī)設(shè)計(jì)一些新指令。
在TEC-2000微程序控制器中設(shè)計(jì)實(shí)現(xiàn)了NXOR等四條指令[1]。在TEC-2000微程序控制器中設(shè)計(jì)實(shí)現(xiàn)了NXOR和SWRM指令[2]。提出了在TEC-XP16組合邏輯控制器中設(shè)計(jì)實(shí)現(xiàn)SWRR等簡(jiǎn)單指令的方法[3]。提出了TEC-XP16微程序控制器中8bit無符號(hào)乘除指令的設(shè)計(jì)實(shí)現(xiàn)方法[4]。
本文提出了一種在TEC-XP16教學(xué)機(jī)微程序控制器中設(shè)計(jì)16bit無符號(hào)乘法指令MULS、16bit無符號(hào)除法指令DIVS與16bit變形補(bǔ)碼乘法指令MULB的方法。
實(shí)驗(yàn)結(jié)果表明,設(shè)計(jì)的16bit無符號(hào)數(shù)乘法指令MULS、16bit無符號(hào)除法指令DIVS與16bit變形補(bǔ)碼乘法指令MULB是正確的。
本文設(shè)計(jì)實(shí)現(xiàn)了三條指令:16bit無符號(hào)乘法指令MULS、16bit無符號(hào)除法指令DIVS與16bit變形補(bǔ)碼乘法指令MULB。
在16bit乘除指令的設(shè)計(jì)實(shí)現(xiàn)過程中用到的硬件設(shè)備主要有TEC-XP16教學(xué)機(jī)、Lattice USB下載電纜HW-USB-2A等;使用的軟件主要有Lattice ispLEVER Classic 2.0和WinPcec等軟件。
下面將介紹三種16bit乘除指令的格式和功能并設(shè)計(jì)相應(yīng)的算法。主要以16bit變形補(bǔ)碼乘法指令為例,介紹其在TEC-XP16教學(xué)機(jī)微程序控制器中設(shè)計(jì)實(shí)現(xiàn)的過程。
設(shè)計(jì)16bit乘除指令的主要步驟如下:
(1)設(shè)計(jì)16bit乘除指令的功能,如表1所示。
表1 MULS、MULB與DIVS指令的格式與功能
(2)根據(jù)三種16bit乘除指令的功能和格式,分別設(shè)計(jì)了算法1,算法2,算法3。
算法1.(16bit無符號(hào)數(shù)乘法).乘積高16bit存R6寄存器,乘積低16bit存R9寄存器。其中,Q寄存器是教學(xué)機(jī)AM2901運(yùn)算器芯片中的乘商寄存器。
(1)初始化R6、R8寄存器,(R6) = 0,(R8) = 17,乘數(shù)從SR送Q寄存器。
(2)R6與Q寄存器聯(lián)合右移一位,Q0移入C觸發(fā)器。
(3)如果C為0,則轉(zhuǎn)(4),如果C不為0,轉(zhuǎn)(6)。
(4)R8減1,結(jié)果不為0,則轉(zhuǎn)(5),結(jié)果為0,則轉(zhuǎn)(8)。
(5)R6與Q寄存器聯(lián)合右移一位,Q0移入C觸發(fā)器,轉(zhuǎn)(3)。
(6)R8減1,結(jié)果不為0,則轉(zhuǎn)(7),結(jié)果為0,則轉(zhuǎn)(8)。
(7)(R6)+(DR)→R6,R6與Q寄存器聯(lián)合右移一位,Q0移入C觸發(fā)器,轉(zhuǎn)(3)。
(8)Q寄存器內(nèi)容傳送到R9寄存器。
基2 Booth算法[5]通過比較乘數(shù)相鄰兩位的值決定進(jìn)行加法、減法還是僅進(jìn)行移位操作。
根據(jù)基2 booth算法,我們?cè)O(shè)計(jì)了16bit變形補(bǔ)碼乘法算法。
算法2.(16bit變形補(bǔ)碼乘法).乘積為32bit變形補(bǔ)碼,乘積高16bit存R6寄存器,乘積低16bit存R9寄存器。
(1)初始化R6、R8寄存器,(R6) = 0,(R8) = 17,乘數(shù)從SR送Q寄存器,C觸發(fā)器清0。
(2)將Q寄存器內(nèi)容送R7寄存器。
(3)將R7寄存器與C觸發(fā)器循環(huán)右移,將C觸發(fā)器值移到R7寄存器最高位,將R7寄存器最低位移入C觸發(fā)器。
(4)檢查C的值,即Q0的值(Q0即乘數(shù)yn)。
(5)將R7寄存器邏輯左移一位,將R7最高位移入C觸發(fā)器,檢查C的值(C即附加位)。
(6)如果Q0=C,則轉(zhuǎn)(7),如果Q0=0,C=1,則轉(zhuǎn)(9),如果Q0=1,C=0,則轉(zhuǎn)(11)。
(7)R8減1,結(jié)果不為0,則轉(zhuǎn)(8),結(jié)果為0,則轉(zhuǎn)(13)。
(8)R6與Q寄存器聯(lián)合右移一位,Q0移入C觸發(fā)器,轉(zhuǎn)(2)。
(9)R8減1,結(jié)果不為0,則轉(zhuǎn)(10),結(jié)果為0,則轉(zhuǎn)(13)。
(10)(R6)+(DR)→R6,然后R6與Q寄存器聯(lián)合右移一位,Q0移入C觸發(fā)器,轉(zhuǎn)(2)。
(11)R8減1,結(jié)果不為0,則轉(zhuǎn)(12),結(jié)果為0,則轉(zhuǎn)(13)。
(12)(R6)-(DR)→R6,然后R6與Q寄存器聯(lián)合右移一位,Q0移入C觸發(fā)器,轉(zhuǎn)(2)。
(13)Q寄存器內(nèi)容傳送到R9寄存器。
算法3.(16bit無符號(hào)數(shù)除法). R9寄存器存16bit商,R7寄存器存余數(shù)。
(1)初始化Q寄存器、R8寄存器,(Q) = 0,(R8) = 16,被除數(shù)從DR送R7寄存器。
(2)(R7)-(SR)→R7,R7與Q寄存器聯(lián)合左移一位,RAM15移入C觸發(fā)器,Q0為/F15(其中,RAM15為運(yùn)算結(jié)果最低位,F(xiàn)15為運(yùn)算結(jié)果的符號(hào)位)。
(3)如果C為0,則轉(zhuǎn)(4),如果C不為0,轉(zhuǎn)(6)。
(4)R8減1,結(jié)果不為0,則轉(zhuǎn)(5),結(jié)果為0,則轉(zhuǎn)(8)。
(5)(R7)-(SR)→R7,R7與Q寄存器聯(lián)合左移一位,RAM15移入C觸發(fā)器,Q0為/F15,轉(zhuǎn)(3)。
(6)R8減1,結(jié)果不為0,則轉(zhuǎn)(7),結(jié)果為0,則轉(zhuǎn)(8)。
(7)(R7)+(SR)→R7,R7與Q寄存器聯(lián)合左移一位,RAM15移入C觸發(fā)器,Q0為/F15,轉(zhuǎn)(3)。
(8)Q寄存器內(nèi)容傳送到R9寄存器。
(9)根據(jù)16bit乘除指令算法,設(shè)計(jì)16bit乘除指令的執(zhí)行步驟,其中MULB指令的執(zhí)行步驟如表3所示。
表3 MULB指令的執(zhí)行步驟表
(10)根據(jù)MULB指令執(zhí)行步驟表,設(shè)計(jì)每一條微指令的地址和下地址字段的值,并設(shè)計(jì)每一條微指令中每一個(gè)控制信號(hào)的值,最終得到MULB指令的微程序表。16bit無符號(hào)數(shù)乘法指令的操作碼為EAH,微程序入口地址為AFH,16bit無符號(hào)數(shù)除法指令的操作碼為EBH,微程序入口地址為D0H,16bit變形補(bǔ)碼乘法指令的操作碼為ECH,微程序入口地址為7FH。
在TEC-XP16中,每一條微指令由下地址字段和控制命令字段組成[6]。16bit下地址字段包括8bit下地址、4bit命令碼和4bit微轉(zhuǎn)移條件,32bit控制命令字段包括3bit MRW信號(hào)、3bit I2~I(xiàn)0信號(hào)、3bit I8~I(xiàn)6信號(hào)、3bit I5~I(xiàn)3信號(hào)、4bit B口地址、4bit A口地址、3bit SST信號(hào)、3bit SSHSCI信號(hào)、3bit DC2信號(hào)、3bit DC1信號(hào)。
當(dāng)命令碼CI3~CI0為0011時(shí),用于條件微轉(zhuǎn)移控制[7],如表2所示。
表2 條件微指令轉(zhuǎn)移所依據(jù)的判斷條件表
(11)根據(jù)MULB指令微程序表,修改描述MACH芯片功能的ABEL語言源程序m256c.abl,編譯適配后下載到MACH芯片中。
首先,修改描述MACH芯片功能的ABEL語言源程序m256c.abl。所設(shè)計(jì)的MULB指令的操作碼為ECH,因此,加一行代碼:MULB = (IR==[1,1,1,0,1,1,0,0]);
其次,依據(jù)表2修改源程序m256c.abl文件中CC信號(hào)的邏輯表達(dá)式。修改后的CC0與CC表達(dá)式如下所示:
MACH芯片向AM2910器件提供8位下地址D7~D0,該地址有2個(gè)來源[8]。我們?cè)O(shè)計(jì)的MULB指令的微程序入口地址為7FH,因此,在D6、D5、D4、D3、D2、D1、D0的邏輯表達(dá)式中需增加MULB信號(hào)。
然后,依據(jù)MULB指令微程序表中的內(nèi)容修改源程序m256c.abl文件中16bit下地址字段和32bit控制命令字段的邏輯表達(dá)式。由于論文篇幅關(guān)系代碼省略。
最后,對(duì)修改后的m256c.abl文件編譯后下載到教學(xué)機(jī)MACH芯片中,其過程詳見文獻(xiàn)[3-4]。
(12)設(shè)計(jì)程序驗(yàn)證所設(shè)計(jì)的16 bit乘除指令的功能。
為了驗(yàn)證MULB指令的功能是否正確,在WinPcec16軟件中編寫了一個(gè)包含MULB指令的教學(xué)機(jī)程序,實(shí)現(xiàn)兩個(gè)16 bit變形補(bǔ)碼的乘法運(yùn)算。
3123H的變形補(bǔ)碼×2123H的變形補(bǔ)碼=3123H×123H=065C3AC9H(變形補(bǔ)碼),
3123H的變形補(bǔ)碼×(-2123H的變形補(bǔ)碼)=3123H×DEDDH=F9A3C537(變形補(bǔ)碼),
程序運(yùn)行結(jié)果表明所設(shè)計(jì)的擴(kuò)展指令MULB是正確的,如圖1所示。
圖1 包含MULB指令的教學(xué)機(jī)程序
目前,國內(nèi)外還沒有研究在TEC-XP16教學(xué)機(jī)微程序控制器中設(shè)計(jì)16bit乘除指令的文獻(xiàn)。本文設(shè)計(jì)了一種16bit無符號(hào)數(shù)乘法指令、16bit無符號(hào)數(shù)除法指令與一種16bit變形補(bǔ)碼乘法指令,實(shí)驗(yàn)結(jié)果表明,設(shè)計(jì)的16bit乘除指令是正確的。
下一步將研究在TEC-XP16教學(xué)機(jī)組合邏輯控制器中設(shè)計(jì)實(shí)現(xiàn)16bit乘除指令等復(fù)雜指令的方法。