亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種快速的浮點乘法指令設計方法

        2021-07-16 08:12:58宗德才王康康
        計算機應用與軟件 2021年7期
        關鍵詞:指令設計

        宗德才 王康康

        1(常熟理工學院計算機科學與工程學院 江蘇 常熟 215500) 2(江蘇科技大學數(shù)理學院 江蘇 鎮(zhèn)江 212003)

        0 引 言

        目前,國內很多高校計算機組成原理實驗教學內容主要是基于清華大學計算機系研制的TEC-XP16 教學計算機而開展的。為了使學生更好地掌握計算機的各個組成部件的工作原理,理解指令的執(zhí)行流程,系統(tǒng)地建立計算機整機概念,迫切需要開發(fā)一些設計性實驗,如在CPU的控制器中設計一些新指令。

        文獻[1]設計了一種4位乘法指令和一種8位除4位除法指令,文獻[2]、文獻[3]將EDA 軟件Proteus 應用于教學實驗中,缺點是很難形成對計算機硬件的直觀理解,并且都未設計浮點乘法等復雜指令。文獻[4]設計了一個8位模型機,設計了14條指令,但未設計浮點乘法等復雜指令。文獻[5]設計了加法等指令,但并未設計浮點乘法指令等復雜指令。文獻[6]要求學生至少設計實現(xiàn)7條指令,但并未要求設計浮點乘法等復雜指令。

        文獻[7]介紹了TH-union 教學機微程序控制器的原理及實驗步驟,沒有擴展新指令。文獻[8]在TEC-2000教學機微程序控制器中設計實現(xiàn)了4條簡單的擴展指令。文獻[9]在TEC-2000教學機微程序控制器中設計實現(xiàn)了2條簡單的擴展指令。文獻[8]和文獻[9]在TEC-2000教學機微程序控制器中擴展的指令都比較簡單。文獻[10]研究了在TEC-XP16組合邏輯控制器中擴展簡單指令的方法。文獻[11]提出一種微程序控制器中8位無符號乘法指令與8位無符號除法指令的設計方法,均需要二十多條微指令組成的微程序來實現(xiàn),設計好微程序后都采用手工方式修改控制器源程序,其效率低、速度慢且容易出錯。

        本文基于TEC-XP16教學機,提出微程序控制器中32位浮點乘法指令的一種快速的設計方法。為解決人工方式將每條匯編指令轉換成一條或多條微指令速度慢且容易出錯等問題,設計了匯編程序表和微程序表,并設計了一個Python程序,能夠根據(jù)匯編程序直接自動生成微程序。同時,為解決手工修改控制器ABEL語言源程序速度慢及容易出錯等問題,提出一種能夠自動修改控制器的ABEL語言源程序的方法。實驗結果表明,所設計的32位浮點乘法指令的功能是正確的,平均只需要1.9 s就能根據(jù)匯編程序表自動生成微程序表,平均只需0.7 s就能根據(jù)微程序表、微指令轉移判斷條件表和微程序入口地址表自動修改并生成控制器ABEL語言源程序,極大提高了浮點乘法指令的設計速度。該方法也可推廣到其他復雜指令的設計過程上。

        1 在微程序控制器中設計浮點乘法指令

        在TEC-XP16教學機微程序控制器中擴展指令時,首先,設計新指令對應的微程序,根據(jù)微程序修改描述 MACH 芯片功能的 ABEL語言源程序[12],然后將修改后的ABEL語言程序用ISP LEVER軟件編譯成.jed文件,接著將.jed文件下載到MACH芯片中,最后,在教學機上調試運行包含新指令的教學機程序。

        在現(xiàn)有的 TEC-XP16 教學機中,微程序控制器只能執(zhí)行29條基本指令。本文在TEC-XP16 教學機微程序控制器中設計實現(xiàn)了一種32位浮點數(shù)乘法指令。

        在TEC-XP16教學機的微程序控制器中設計浮點乘法指令的主要過程如下:

        1) 首先,確定32位浮點乘法指令FMUL的格式和功能,如表1所示。

        表1 FMUL指令的指令格式與功能

        2) 按32位浮點乘法指令的功能和格式,設計32位浮點乘法算法,如算法1所示。

        算法132位浮點數(shù)乘法運算算法

        被乘數(shù)與乘數(shù)都用32位IEEE 754浮點數(shù)表示,被乘數(shù)存放在R1、R0寄存器,乘數(shù)存放在R3、R2寄存器,乘積為32位IEEE 754浮點數(shù),最后,乘積存放在R1、R0寄存器中。

        (1) 如果R1和R0都是0,即被乘數(shù)近似為0,則結果近似為0,否則,轉步驟(2)。

        (2) 如果R3和R2都是0,即乘數(shù)近似為0,則結果近似為0,否則,轉步驟(3)。

        (3) 取被乘數(shù)階碼部分,并右移一位,保存在R6寄存器中,R6中結果為 00JJ JJJJ JJ00 0000,其中J表示階碼部分。

        (4) 取乘數(shù)階碼部分,并右移一位,保存在R7寄存器中,R7中結果為 00JJ JJJJ JJ00 0000。

        (5) 階碼求和:(R6)+(R7)→R6。

        (6) 浮點數(shù)中階碼用移碼表示,移碼是在階碼真值基礎上加127,階碼相加時,127被加了2次,因此,需要把階碼和減去127。即(R6)-(0001 1111 1100 0000)2→R6。

        (7) 將乘積的符號位保存在R7最高位。

        (8) 取被乘數(shù)的尾數(shù)部分,并恢復隱藏位,存放在R1、R0寄存器中,R1、R0中結果為 0000 0000 1WWW WWWW WWWW WWWW WWWW WWWW,其中W表示階碼部分。

        (9) 取得乘數(shù)的尾數(shù)部分,并恢復隱藏位,存放在R3、R2寄存器,R3、R2中結果為 0000 0000 1WWW WWWW WWWW WWWW WWWW WWWW。

        (10) 將R9、R8清為0,R9、R8存放部分積。

        (11) 如果R2為0,只需移位8次,則令R15為1,R10為8,將R3內容傳送到R2,R3清為0;如果R2為非0,則令R15為0,R10為16。

        (12) 將R2右移一位,R2最低位移入C觸發(fā)器。

        (13) 如果C=1,則 R1//R0 + R9//R82→ R9//R8;如果C=0,則轉移到步驟(15)。

        (14) 如果R10不等于1,則執(zhí)行步驟(15);如果R10為1,并且R15為1,則轉移到步驟(18)(尾數(shù)最高位為整數(shù)1,所以不需要右移);如果R10為1,且R15為0,則執(zhí)行步驟(15)。

        (15) 將R9//R8//R2聯(lián)合右移一位。

        (16) R10減1。

        (17) 如果R10為0,則執(zhí)行步驟(18),否則轉步驟(13)。

        (18) 如果R3為0,則執(zhí)行步驟(19);否則,令R15為1,R10為8,將R3內容傳送到R2,R3清為0,轉步驟(12)。

        (19) 將R9、R8內容分別送到R1、R0,將R2內容送到R9。

        (20) 如果R1中尾數(shù)最高位為0,則執(zhí)行步驟(21),否則,執(zhí)行步驟(22)。

        (21) 將R1//R0//R9聯(lián)合右移一位,階碼加1,轉步驟(20)。

        (22) 如果R9最高位為1,則R1//R0 +1 → R1//R0,否則,R1//R0不變。

        (23) 如果R1中尾數(shù)最高位的左邊一位為1,則執(zhí)行步驟(24),否則,執(zhí)行步驟(25)。

        (24) 將R1//R0//R9聯(lián)合右移一位,階碼加1。

        (25) 如果R6最高位為1,則為下溢,結果為0,結束;如果R6次高位為1,則為上溢,令C=1,結束;如果R6最高兩位為00,則執(zhí)行步驟(26)。

        (26) R6最高兩位為00表示結果沒有溢出,令C=0,將R6左移一位,調整R1寄存器的內容,R1最高位即R7最高位,R1次高位開始的8位即R6中階碼部分,R1低7位即高7位尾數(shù)不變,結束。

        如圖1所示,在IEEE 754格式的32位浮點數(shù)中最高位是數(shù)符,表示浮點數(shù)的正負,階碼用移碼表示,階碼的真值都被加上一個偏移量,對于32位浮點數(shù)的偏移量為127。

        1位數(shù)符8位階碼7位尾數(shù) 16位尾數(shù)

        在IEEE 754格式浮點數(shù)中尾數(shù)部分通常都是規(guī)格化表示的,即非0的有效位最高位總是1,有效位呈如下形式:1.ffff…fff,在實際的表示中,對于32位浮點數(shù),這個整數(shù)位的1被省略,稱為隱藏位。

        TEC-XP16教學機中共有16個16位的通用寄存器R0~R15。32位浮點數(shù)需要用兩個通用寄存器來表示。

        3) 根據(jù)算法1,用TEC-XP16教學機的匯編指令編寫程序實現(xiàn)算法1。同時,設計數(shù)據(jù)庫表。

        Python語言具有簡單易學、免費開源和可擴展移植性好等特性[13],因此,選擇Python語言作為程序設計語言。

        如圖2所示,TEC-XP16教學機中,一條微指令由16位的下地址字段和32位的控制命令字段共同組成[14]。

        下地址命令碼微轉移條件MRWI2-I0I8-I6I5-I3B口地址A口地址SSTSSHSCIDC2DC116位下地址字段32位控制命令字段

        根據(jù)TEC-XP16教學機微指令的格式,設計了微程序表MProgram,如表2所示,用于保存32位浮點數(shù)乘法指令對應的由微指令組成的微程序。

        表2 MProgram微程序表

        為了實現(xiàn)根據(jù)匯編程序自動生成微程序這一功能,設計了匯編程序表AsblProgram,如表3所示,用于保存根據(jù)32位浮點數(shù)乘法運算算法編寫的100條匯編指令組成的匯編程序。

        表3 AsblProgram匯編程序表

        圖2中,命令碼用于控制微指令的執(zhí)行順序,命令碼CI3-CI0為1110時,順序執(zhí)行。命令碼CI3-CI0為0010時,根據(jù)指令的操作碼確定該指令對應的微程序的入口地址。設計了微程序入口地址表MPFAdr,如表4所示,用于保存32位浮點數(shù)乘法指令對應的微程序的第一條微指令的地址。

        表4 MPFAdr微程序入口地址表

        命令碼CI3-CI0為0011時,用于條件微轉移控制,如表5所示,微轉移條件SCC3-SCC0用于條件微轉移時給出轉移依據(jù)的條件,條件滿足時發(fā)生轉移,下一條微指令的地址為當前微指令中下地址字段的內容;條件不滿足,順序執(zhí)行[15]。

        表5 條件微指令轉移所依據(jù)的判斷條件表

        根據(jù)表5設計了CC微指令轉移判斷條件表,用于保存微指令轉移的條件,如表6所示。

        表6 CC微指令轉移判斷條件表

        由于每一條匯編指令轉換后的微指令數(shù)目不同,設計了ISEA表(如表7所示)用于存儲每一條匯編指令轉換成為微指令后,對應的第一條微指令地址start和最后一條微指令的地址end。

        表7 ISEA匯編指令微指令地址表

        4) 在匯編程序表AsblProgram中輸入實現(xiàn)32位浮點數(shù)乘法運算算法的匯編程序,共有100條匯編指令,在微程序入口地址表MPFAdr 中輸入FMUL指令的操作碼1110 1100,微程序入口地址為0011 1100。

        5) 根據(jù)算法2和算法3,用Python語言編程(記為程序1),能夠自動將AsblProgram表中的匯編程序轉換成微程序并寫入MProgram表,根據(jù)算法4為JRZ/JRNZ/JRC/JRNC/JRS/JRNS/JR轉移類指令更新其微指令中的下地址字段Nadr,根據(jù)算法5為JRZ/JRNZ/JRC/JRNC/JRS/JRNS指令生成CC表。

        算法2根據(jù)AsblProgram表中的匯編程序生成MProgram表和ISEA表的算法

        (1) 從AsblProgram表中查找所有記錄的最大Number字段值,記為maxNum,令i=1。

        (2) 查找AsblProgram表中Number字段等于i的記錄,記為AsbInsti。

        (3) 如果記錄AsbInsti的Itype為2,即為MVRD指令,則根據(jù)算法3將MVRD Ri,DATA指令轉換成微指令并寫入MProgram表,同時在ISEA表中寫入MVRD指令對應的第一條微指令的地址start和最后一條微指令地址end;如果記錄AsbInsti的Itype為1,即為MVRR指令,則只需轉換成一條相應的微指令并寫入MProgram表,同時在ISEA表中寫入MVRR指令對應的第一條微指令的地址start和最后一條微指令地址end;如果記錄AsbInsti的Iname為OR、AND、ADD、SUB、XOR、TEST、ADC、CMP、SHR、RCR、SHL、INC、DEC、JR、JRZ、JRNZ、JRC、JRNC、JRS、JRNS、CLC、RET指令,則只需要轉換成一條相應的微指令并寫入MProgram表,同時在ISEA表中寫入待轉換匯編指令對應的第一條微指令的地址start和最后一條微指令地址end;如果記錄AsbInsti的Iname為PSHF、POPF指令,則需要轉換成兩條相應的微指令并寫入MProgram表,同時在ISEA表中寫入待轉換匯編指令對應的第一條微指令的地址start和最后一條微指令地址end。

        (4)i=i+1,重復步驟(2)和步驟(3),直到i>maxNum結束。

        在本文設計的實現(xiàn)FMUL指令的匯編程序中,用到的MVRD Ri,DATA指令中,DATA值有7F80、1FC0、8000、007F、0010、0001、0008、0040、0080、0100。根據(jù)DATA值的特點,設計了算法3,算法3的設計目標是盡量用最少的微指令實現(xiàn)MVRD指令。

        算法3MVRD Ri,DATA指令轉換成微指令算法

        (1) 將DATA轉換成16位二進制數(shù)a。

        (2) 計算a中1的位數(shù),記為num_1(a)。

        (3) 如果num_1(a)大于1,則執(zhí)行步驟(4),否則,執(zhí)行步驟(12)。

        (4) MVRD指令的第一條微指令為SUB指令對應的微指令,該微指令執(zhí)行后得到 1111 1111 1111 1111。

        (5) 計算將1111 1111 1111 1111采用先左移后右移的方法得到a的次數(shù),記為shiftlr(a)。

        (6) 計算將1111 1111 1111 1111采用先右移后左移的方法得到a的次數(shù),記為shiftrl(a)。

        (7) 如果shiftlr(a)小于等于shiftrl(a),則執(zhí)行步驟(8),否則,執(zhí)行步驟(10)。

        (8) 生成16-num_1(a)條SHL指令對應的微指令。

        (9) 生成shiftlr(a)+num_1(a)-16條SHR指令對應的微指令,結束。

        (10) 生成16-num_1(a)條SHR指令對應的微指令。

        (11) 生成shiftrl(a)+num_1(a)-16條SHL指令對應的微指令,結束。

        (12) 計算由0000 0000 0000 00001得到a的次數(shù),記為leftshift2(a),則由DATA得到a需要leftshift2(a)+2條微指令。

        (13) 計算由1111 1111 1111 11111得到a的次數(shù),記為shiftlr(a),則由DATA得到a需要shiftlr(a)+1條微指令。

        (14) 如果leftshift2(a)+2小于等于shiftlr(a)+1,則執(zhí)行步驟(15),否則執(zhí)行步驟(18)。

        (15) 生成SUB指令對應的微指令,該微指令執(zhí)行后得到0000 0000 0000 0000。

        (16) 生成INC指令對應的微指令,該微指令執(zhí)行后得到0000 0000 0000 0001。

        (17) 生成leftshift2(a)條SHL指令對應的微指令,結束。

        (18) 生成SUB指令對應的微指令,該微指令執(zhí)行后得到 1111 1111 1111 1111。

        (19) 生成shiftlr(a)條SHL指令對應的微指令,結束。

        算法4為JRZ/JRNZ/JRC/JRNC/JRS/JRNS/JR轉移類指令生成微指令中的下地址字段Nadr算法

        JRZ、JRNZ、JRC、JRNC、JRS、JRNS都只需要轉換成一條微指令即可,但是要根據(jù)轉移目標地址更新Nadr字段值。

        (1) 從AsblProgram表中查找Itype為3或4的所有記錄(JRZ、JRNZ、JRC、JRNC、JRS、JRNS指令的Itype為3,JR指令的Itype為4),假設查詢結果有n條記錄,令i=1。

        (2) 根據(jù)查詢結果中記錄i的Number字段值在ISEA表中查找start字段值,并轉換成微指令地址,記為kkk。

        (3) 在AsblProgram表中查找Label字段等于查詢結果中記錄i的DstAdr字段值的記錄的Number字段值,記為number。

        (4) 在ISEA表中查找Number字段等于number的記錄的start字段值,并轉換成8位二進制,記為start66。

        (5) 更新MProgram表中MIadr字段等于kkk的記錄的Nadr字段值為start66。

        (6)i=i+1,重復步驟(2)-步驟(5),直到i>n結束。

        算法5為JRZ/JRNZ/JRC/JRNC/JRS/JRNS指令生成CC表算法

        (1) 從AsblProgram表中查找Iname為JRZ/JRNZ/JRC/JRNC/JRS/JRNS的所有記錄,假設查詢結果有n條記錄,令i=1。

        (2) 在AsblProgram表中查找Label字段等于查詢結果中記錄i的DstAdr字段值的記錄的Number字段值,記為number。

        (3) 在ISEA表中查找Number字段等于number的記錄的start字段值,并轉換成8位二進制,記為start66。

        (4) 如果CC表中還沒有Nadr等于start66的記錄,則在CC表中插入一條記錄,否則,轉步驟(5)。

        (5)i=i+1,重復步驟(2)-步驟(4),直到i>n結束。

        6) 根據(jù)算法6和算法7,用Python語言編程(記為程序2),能夠根據(jù)MPFAdr表以及程序1生成的MProgram表、CC表自動生成實現(xiàn)了32位浮點乘法指令的控制器源文件m256c6.abl。

        算法6自動修改并生成微程序控制器源程序的Python語言實現(xiàn)的算法

        (1) 打開控制器源程序文件m256c.abl,讀取m256c.abl文件的所有行存放在list1列表對象中。

        with open('m256c.abl', 'r') as f1:

        list1 = f1.readlines()

        (2) 連接mpdatabase.db數(shù)據(jù)庫。

        db=sqlite3.connect('mpdatabase.db')

        (3) 從MPFAdr表中讀取所有記錄,將所有記錄的Iname字段值和Opcode字段值組成一個字符串a,字符串a為:FMUL=(IR==[1,1,1,0,1,1,0,0]);在list1列表對象中找到“Expand Instruction here ”字符串,將該字符串替換為字符串a。

        (4) 從CC表中讀取所有記錄,根據(jù)這些記錄的SCC字段值、Iname字段值、Nadr字段值和Condition字段值修改CC0表達式,如圖3所示,圖3中黑底部分為增加的部分。

        圖3 修改后的CC0表達式

        (5) 對MPFAdr表中的每一條記錄,根據(jù)MPadr字段值,在list1列表對象中找到D0-D7邏輯表達式所在的行并進行修改,例如,F(xiàn)MUL指令的MPadr字段值為0011 1100,則D2、D3、D4、D5表達式中需增加FMUL信號;由于m256c.abl文件中D0-D7表達式出現(xiàn)在CC0表達式后面,因此,在list列表中查找D0-D7時,可以從CC0表達式的下一行開始查找,這樣可提高查找速度。

        (6) 根據(jù)算法7,由MProgram表中記錄修改list1列表對象。

        (7) 將list1列表對象寫入一個新文件m256c6.abl,然后,關閉該文件。

        算法7根據(jù)MProgram表中記錄修改list1列表對象的算法

        (1) 從MProgram表中讀取所有記錄,假設有n條記錄。

        (2) 令i=1。

        (3) 根據(jù)記錄i的Nadr字段值,在list1列表對象中找到NADR7-NADR0邏輯表達式所在的行并進行修改。

        (4) 根據(jù)記錄i的Cmd字段值,在list1列表對象中找到CI3-CI0邏輯表達式所在的行并進行修改。

        (5) 根據(jù)記錄i的SCC字段值,在list1列表對象中找到SCC3-SCC0邏輯表達式所在的行并進行修改。

        (6) 根據(jù)記錄i的MRW字段值,在list1列表對象中找到!_MIO00、REQ00、_WE00邏輯表達式所在的行并進行修改。

        (7) 根據(jù)記錄i的I2-I0字段值,在list1列表對象中找到I200、I100、!I000邏輯表達式所在的行并進行修改。

        (8) 根據(jù)記錄i的I5-I3字段值,在list1列表對象中找到I500、I400、I300邏輯表達式所在的行并進行修改。

        (9) 根據(jù)記錄i的I8-I6字段值,在list1列表對象中找到I800、I700、!I600邏輯表達式所在的行并進行修改。

        (10) 根據(jù)記錄i的SST字段值,在list1列表對象中找到SST200、SST100、SST000邏輯表達式所在的行并進行修改。

        (11) 根據(jù)記錄i的SSHSCI字段值,在list1列表對象中找到SSH00、SCI100、SCI000邏輯表達式所在的行并進行修改。

        (12) 根據(jù)記錄i的DC2字段值,在list1列表對象中找到DC2_200、DC2_100、DC2_000邏輯表達式所在的行并進行修改。

        (13) 根據(jù)記錄i的DC1字段值,在list1列表對象中找到DC1_200、DC1_100、DC1_000邏輯表達式所在的行并進行修改。

        (14) 如果記錄i的Bp字段值為“DR”,則list1列表對象的B30表達式增加當前記錄的MIadr字段值;如果記錄i的Bp字段值為“SR”,則list1列表對象的B301表達式增加當前記錄的MIadr字段值;如果記錄i的Bp字段值為數(shù)字字符,則修改list1列表對象的B300、B20、B10、B00邏輯表達式的值。

        (15) 如果記錄i的Ap字段值為“DR”,則list1列表對象的A301表達式增加當前記錄的MIadr字段值;如果記錄i的Ap字段值為“SR”,則list1列表對象的A30表達式增加當前記錄的MIadr字段值;如果記錄i的Ap字段值為數(shù)字字符,則修改list1列表對象的A300、A20、A10、A00邏輯表達式的值。

        (16)i=i+1,若i≤n,則轉到步驟(3),否則,結束。

        2 實 驗

        按照上述方法在Access 2010中設計好數(shù)據(jù)庫表后,為了方便Python語言編程,使用SQLite Expert工具將Access數(shù)據(jù)庫轉換成SQLite數(shù)據(jù)庫。

        用Python語言編寫兩個程序,程序1能夠自動將AsblProgram表中的匯編程序轉換成微程序并寫入MProgram表、CC表和ISEA表;程序2能根據(jù)MPFAdr表和程序1生成的MProgram、CC表中的內容自動修改微程序控制器源程序文件,根據(jù)MPFAdr表在控制器源程序中自動添加擴展指令的操作碼與匯編語句的關系表達式以及自動添加擴展指令的微程序入口地址,根據(jù)CC表在控制器源程序中CC信號的邏輯表達式中自動添加擴展指令的條件微指令轉移所依據(jù)的判斷條件,根據(jù)MProgram表在控制器源程序中16位下地址字段與32位控制信號的邏輯表達式中自動添加相應的微指令地址。先后運行這兩個程序后,會自動生成一個名為m256c6.abl的包括了FMUL指令的控制器源程序文件。

        將能夠自動把AsblProgram表中的匯編程序轉換成微程序并寫入MProgram表、CC表和ISEA表的程序1運行50次,結果如圖4所示,最快只需1.8 s,平均需要1.945 s;將能根據(jù)MPFAdr表和程序1生成的MProgram、CC表中的內容自動修改微程序控制器源程序文件的程序2運行50次,結果如圖5所示,最快只需0.67 s,平均需要0.71 s。

        圖4 由AsblProgram表自動生成MProgram表的時間

        圖5 由MProgram表、CC表等自動產生abl文件的時間

        在TEC-XP16教學機微程序控制器中擴展FMUL指令的完整過程如下:

        (1) 在Access 2010數(shù)據(jù)庫中創(chuàng)建AsblProgram匯編程序表、MProgram微程序表、CC微指令轉移判斷條件表、MPFAdr微程序入口地址表和匯編指令微指令地址表ISEA,并且在AsblProgram表輸入實現(xiàn)32位浮點乘法指令FUML的100條匯編指令,在MPFAdr表中輸入FMUL指令對應的微程序入口地址0011 1100。

        (2) 使用SQLite Expert工具將Access數(shù)據(jù)庫轉換成SQLite數(shù)據(jù)庫。

        (3) 用Python語言編寫程序1,該程序能從SQLite數(shù)據(jù)庫自動讀取AsblProgram表中的匯編指令并自動生成微程序、微指令轉移條件、每條匯編指令的微指令起始地址并分別寫入MProgram表、CC表和ISEA表。

        (4) 用Python語言編寫程序2,該程序能從SQLite3數(shù)據(jù)庫自動讀取并根據(jù)MProgram表、CC表和MPFAdr表中的內容自動修改m256c.abl文件并生成一個新的微程序控制器源程序文件。

        (5) 先后運行程序1和程序2,會自動生成一個名為m256c6.abl的實現(xiàn)了FMUL指令的控制器源程序文件。

        (6) 將m256c6.abl文件重命名為m256c.abl。

        (7) 啟動Lattice ispLEVER Classic Project Navigator軟件,新建一個名為lc4256的項目文件,將m256c.abl添加到項目中,然后,將m256c.abl編譯后生成名為lc4256.jed的文件,將lc4256.jed下載到教學機MACH芯片中。方法詳見文獻[11]。

        (8) 啟動WinPcec16軟件,然后啟動教學機監(jiān)控程序。

        (9) 在WinPcec16軟件中編寫一個實現(xiàn)2個32位浮點數(shù)乘法的教學機程序,如圖6-圖7所示,教學機中規(guī)定擴展指令必須用E命令寫入教學機內存,F(xiàn)MUL指令的二進制代碼為EC00(十六進制形式),EC為FMUL指令的操作碼,被乘數(shù)存放在R1、R0寄存器中,乘數(shù)存放在R3、R2寄存器中,乘積保存在R1、R0寄存器中。

        圖6中,被乘數(shù)和乘數(shù)都是0100 0000 0000 0000 0000 0000 0000 0000,即1.0×21,乘積為0100 0000 1000 0000 0000 0000 0000 0000,即1.0×22,程序運行結果驗證了本文所設計和實現(xiàn)的32位浮點乘法指令的功能是正確的。

        圖7中,被乘數(shù)和乘數(shù)都是0100 0000 0001 0000 0000 0000 0000 0000,即1.001×21,乘積為0100 0000 1010 0010 0000 0000 0000 0000,即1.010 001×22,程序運行結果驗證了本文所設計和實現(xiàn)的32位浮點乘法指令的功能是正確的。

        3 結 語

        目前國內外還沒有研究在TEC-XP16教學機的微程序控制器中擴展較復雜指令,如32位浮點數(shù)乘法指令的文獻。本文對TEC-XP16 教學機微程序控制器中擴展32位浮點數(shù)乘法指令進行了嘗試,設計一種32位IEEE 754浮點數(shù)乘法指令,測試結果表明,采用本文方法在TEC-XP16教學機上設計的32位浮點數(shù)乘法指令的功能是正確的。

        為解決原來采用人工方式將TEC-XP16教學機匯編程序轉換成微程序速度慢、效率低且容易出錯等問題,設計匯編程序表和微程序表,并設計一個Python程序,能夠根據(jù)匯編程序直接自動生成微程序。同時,為解決手工修改控制器源程序速度慢及容易出錯等問題,提出一種能夠根據(jù)微程序自動修改微程序控制器源程序的方法。實驗結果表明,所設計的32位浮點乘法指令的功能是正確的,平均只需要1.9 s就能根據(jù)匯編程序表自動生成微程序表,平均只需0.7 s就能根據(jù)微程序表、微指令轉移判斷條件表和微程序入口地址表自動修改并生成控制器ABEL語言源程序,極大提高了32位浮點乘法指令的設計速度。本文方法也可推廣到其他復雜指令的設計上。

        下一步將嘗試在TEC-XP16教學機微程序控制器中設計32位浮點數(shù)除法指令等復雜指令,以及進一步研究在TEC-XP16教學機組合邏輯控制器中設計復雜指令的方法。

        猜你喜歡
        指令設計
        聽我指令:大催眠術
        何為設計的守護之道?
        《豐收的喜悅展示設計》
        流行色(2020年1期)2020-04-28 11:16:38
        ARINC661顯控指令快速驗證方法
        測控技術(2018年5期)2018-12-09 09:04:26
        LED照明產品歐盟ErP指令要求解讀
        電子測試(2018年18期)2018-11-14 02:30:34
        瞞天過海——仿生設計萌到家
        藝術啟蒙(2018年7期)2018-08-23 09:14:18
        設計秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設計叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        殺毒軟件中指令虛擬機的脆弱性分析
        電信科學(2016年10期)2016-11-23 05:11:56
        一種基于滑窗的余度指令判別算法
        欧美在线成人免费国产| 免费大黄网站| 色爱区综合五月激情| 日韩av二区三区一区| 国产少妇露脸精品自拍网站| 好大好爽我要高潮在线观看| 任你躁国产自任一区二区三区| 在线观看视频一区| 精品国产亚洲人成在线观看| 黄色av亚洲在线观看| 亚洲国产午夜精品理论片在线播放 | 国产美女一级做a爱视频| 日本特殊按摩在线观看| 日韩在线 | 中文| 欧产日产国产精品精品| 92精品国产自产在线观看48页 | 欧美人与物videos另类| 一区二区三区av在线| 老师露出两个奶球让我吃奶头| 无码少妇一级AV便在线观看 | 久久久久亚洲av无码网站| 大肥婆老熟女一区二区精品| 精品国产三级a在线观看不卡| 日本丰满熟妇videossex8k| 永久国产盗摄一区二区色欲| 亚洲av午夜福利一区二区国产| 色噜噜亚洲男人的天堂| 亚洲色无码播放| 国产av大片在线观看| 一本色道久久亚洲加勒比| 免费人成再在线观看视频| 98精品国产综合久久| 亚洲女同一区二区三区| 无码人妻精品一区二区三区9厂| 亚洲国产成人久久综合一区77| 亚洲一区二区不卡日韩| 四虎永久在线精品免费网址| 亚洲av成人无码久久精品| 亚洲人成绝费网站色www| 日本五十路人妻在线一区二区| 国产成人无码免费视频在线 |