基于proteus的CPU控制器设计(微程序版)
基于proteus的CPU控制器設計(微程序版)
- 數(shù)據(jù)通路
- 微程序設計原理
- 微程序控制器
- 參考資料
數(shù)據(jù)通路
為了理解微程序控制器的設計思想,我們假設一個極簡的數(shù)據(jù)通路(如下圖1所示),由并聯(lián)在單條8位總線BUS上的三個部件組成:指令寄存器IR(寄存器74LS273構(gòu)成)、程序計數(shù)器PC(計數(shù)器74LS163構(gòu)成)、程序存儲器PROGRAM(ROM存儲器2764構(gòu)成)。
圖1. 數(shù)據(jù)通路圖
在數(shù)據(jù)通路上所能執(zhí)行的某一種操作可以看作是一條對應的“指令”,則該數(shù)據(jù)通路能執(zhí)行的所有操作可以用一個極簡的指令集(只包含四條指令)來描述,如下表1所示:
表1. 微程序控制器指令集列表
按照上述指令表1的指令格式,用戶可以編寫一段機器語言程序存放在程序存儲器PROGRAM中,如下表2所示。其中每一個存儲器單元存放一個字節(jié)的數(shù)據(jù),對應唯一的8位二進制地址(由地址寄存器AR鎖存)。若用戶需要訪問程序存儲器的某個單元,須由程序計數(shù)器PC提供該單元的地址,才能從程序存儲器取出該單元中的數(shù)據(jù)。因為程序是順序訪問的,所以程序計數(shù)器PC是由兩個計數(shù)器74LSl63級聯(lián)構(gòu)成的一個8位遞增計數(shù)器PC。當前指令從程序存儲器PROGRAM取出,并鎖存到指令寄存器IR后,PC自動執(zhí)行PC+1操作,指向相鄰下一條指令。
表2. 程序存儲器PROGRAM中的機器語言程序
微程序設計原理
仔細分析上述圖1和表1可知,數(shù)據(jù)通路的各條指令狀態(tài)圖如下圖2所示:所有指令的取指操作都是相同的,即是上圖1中紫色箭頭所示的指令流(ROM→IR):CPU從程序存儲器PROGRAM取出指令,經(jīng)過總線BUS流向指令寄存器IR。NOP和HLT指令只有上述取指操作,沒有執(zhí)行操作(HLT指令取指后硬件停機);而JMP1和JMP2指令除了上述取指操作外,實際只有一種執(zhí)行操作,即上圖1中紅色箭頭所示的數(shù)據(jù)流(ROM→PC):CPU從程序存儲器PROGRAM取出數(shù)據(jù),經(jīng)過總線BUS流向程序計數(shù)器PC。兩種跳轉(zhuǎn)指令不同之處在于:JMP1指令的第二字節(jié)是目標地址(直接尋址),只要一次數(shù)據(jù)流(ROM→PC)就把目標地址送入PC;而JMP2指令的第二字節(jié)是存放目標地址的存儲器單元地址(間接尋址),需要連續(xù)兩次數(shù)據(jù)流(ROM→PC)才能把目標地址送入PC。
圖2. 微程序控制器指令狀態(tài)圖
在上圖2中,雖然微程序控制器指令的狀態(tài)類型只有兩種(指令流和數(shù)據(jù)流),但是每一條指令擁有的狀態(tài)數(shù)目都不盡相同,其中最關(guān)鍵問題是如何根據(jù)不同的指令來判斷狀態(tài)的轉(zhuǎn)移。因此我們可以采用微程序原理來解決這個問題:圖2中每一條指令都是一個任務,一個狀態(tài)則對應一條微指令。若干條微指令組合成一段微程序,解決相對應的任務。
微指令的字長設為24位,結(jié)構(gòu)如下圖3所示:
1-5位表示該微指令執(zhí)行后,下一條微指令的地址 [uA4, uA0](即下址轉(zhuǎn)移方式);
6-7位是判斷字段Px:P1=1表示該微指令是取指微指令;,P2空缺。
8-24位是微命令字段:微命令即是圖1所示數(shù)據(jù)通路中的微操作信號,其中某位置“1”,表示該位的微命令有效;反之,置“0”則表示該位的微命令無效。
圖3. 微指令結(jié)構(gòu)圖
仔細觀察數(shù)據(jù)通路圖1,可以發(fā)現(xiàn)指令的取指或執(zhí)行過程都是指令或數(shù)據(jù)從一個部件打入總線BUS,再從總線BUS打入另一個部件的過程。為了保證上述操作先后次序,指令流(ROM→IR)和數(shù)據(jù)流(ROM→PC)都分為T1和T2兩個周期:T1周期,信息從源部件(例如程序存儲器PROGRAM)打入總線BUS;T2周期,信息從總線BUS打入目標部件(例如指令寄存器IR或者程序計數(shù)器PC),如下表3所示。因此,在圖3所示的微操作信號中,除了信號#OE(存儲器輸出使能)和#LDPC(PC加載使能)是全過程有效外,其他信號需要與T1或T2周期節(jié)拍信號邏輯“與”,產(chǎn)生新的邊沿觸發(fā)信號,在指定周期開始時刻上升沿跳變,例如AR_CLK=LDAR?T1,IR_CLK=LDIR?T2,PC_CLK=PC_INC?T2
表3. 數(shù)據(jù)通路的微操作信號列表
綜合上述微指令結(jié)構(gòu)圖3和微操作信號列表3,通過分析微程序控制器指令狀態(tài)圖2,可以得到如下圖4所示的微程序流程圖:圖中每一個方框在時間上表示一個微指令周期,包括T1(源部件→總線)和T2(總線→目標部件)兩個周期;在空間上表示一條微指令,通過一系列微操作信號使得信息從某個源部件經(jīng)過總線BUS到達目標部件。圖中每個方框的右上方是對應微指令的地址,右下方是對應微指令的下一條微指令的地址(簡稱下址)。
圖4. 指令的微程序流程圖
上述微程序流程圖4中,最上方首先執(zhí)行的方框是公共的取指微指令,即指令流(ROM→IR)。取出指令后, P1菱形框表示指令譯碼及地址轉(zhuǎn)移:根據(jù)當前指令OP碼的[I7,I6,I5]位形成其執(zhí)行周期第一條微指令地址[0,0,I7,I6,I5],從而選擇該指令的執(zhí)行周期。菱形框下的四條路徑對應指令列表1所述的四條指令的執(zhí)行周期,其中每個方框是一條執(zhí)行微指令,即數(shù)據(jù)流(ROM→PC)。值得注意的是,NOP指令和HLT指令只有取指周期,沒有執(zhí)行周期。NOP指令的OP碼是000,取指后譯碼得到的第一條微指令地址仍為[00000],即直接返回下一條指令的取指周期。而HLT指令的OP碼是111,譯碼后直接令硬件停機。在所有路徑末尾,最后一條微指令的下址[uA4-uA0]都必須是取指微指令地址[00000],即一條指令結(jié)束后必須返回取指微指令,準備取出下一條指令。如圖4左上方所示,整個數(shù)據(jù)通路的運行過程就是不斷循環(huán)的取指令和執(zhí)行指令。圖4中總共有三條微指令,其編碼如下表4所示(具體位置的微命令含義請參考微指令結(jié)構(gòu)圖3)。
表4. 微指令列表
微程序控制器
上述微指令列表4相當于一個并行的操作開關(guān)序列,用戶根據(jù)微程序流程圖4,在規(guī)定的微指令周期(方框),按照規(guī)定的節(jié)拍Tx,撥動特定的操作開關(guān)序列(微指令),就可以實現(xiàn)從程序存儲器PROGRAM中取出和執(zhí)行一條機器指令。更進一步,我們可以用時序發(fā)生器輸出預定的時序,通過微程序控制器按時序自動產(chǎn)生操作信號,代替用戶在數(shù)據(jù)通路中完成的人工操作。時序發(fā)生器(CLOCK UNIT)、微程序控制器(CONTROLL UNIT)和數(shù)據(jù)通路共同構(gòu)成一個最小版本的CPU,如下圖5所示。
圖5. 最小版本CPU電路圖
在上述CPU電路圖5中,代替用戶人工操作的CPU部件是微程序控制器(CONTROLL UNIT),由控制存儲器、微指令寄存器、微地址寄存器和地址轉(zhuǎn)移邏輯電路組成,如下圖6所示。CPU啟動或復位后,微地址寄存器清零,控制存儲器從地址[00000]開始輸出微指令。如前述微指令結(jié)構(gòu)圖3所示,微指令包括了控制字段、下址字段和判斷字段。控制字段即下圖6中的微命令字段,直接輸出微操作信號執(zhí)行當前微指令;下址字段鎖存在微地址寄存器,待當前微指令執(zhí)行完后,再從控制存儲器取出下一條微指令。若當前微指令是取指微指令,則P字段啟動地址轉(zhuǎn)移,根據(jù)指令寄存器IR中的OP碼修改微地址寄存器,轉(zhuǎn)向指令執(zhí)行周期的第一條微指令。
圖6. 微程序控制器結(jié)構(gòu)圖
存放上述微指令列表4的存儲器電路如下圖7所示:微指令存儲器字長24位,由3個2764芯片MROM1-3組成,其輸出端則連接著微指令寄存器MDR1-3(寄存器74LS273和74LS175構(gòu)成)。在系統(tǒng)啟動(信號ON=1)或T1周期開始(信號T1=1)時刻, MROM1-3輸出當前微指令的微操作信號,鎖存在MDR1-3,送往數(shù)據(jù)通路執(zhí)行。部分微操作信號(LDAR、LDIR、PC_INC)與T1或T2節(jié)拍組合,產(chǎn)生邊沿觸發(fā)信號(AR_CLK、IR_CLK、PC_CLK),在T1或T2周期開始時刻上升沿跳變。
圖7. 微程序控制器的存儲器電路
如下圖8所示,控制器的微地址寄存器字長五位(MA4-MA0),由觸發(fā)器74LS74組成,其輸入端通過NMABUS總線連接當前微指令的下址字段[uA4-uA0],其輸出端通過控制存儲器的地址總線MABUS送到控制存儲器的地址端A4~A0。值得注意的是,上述微程序控制器結(jié)構(gòu)圖6中的地址轉(zhuǎn)移邏輯(即微程序流程圖4中的菱形框P1)在下圖8中對應的就是三個三路與非門74LS10。在取指周期末尾,微指令下址字段本來是[00000];然而判斷字段P1=1,啟動地址轉(zhuǎn)移邏輯,根據(jù)指令寄存器IR的OP碼[I7,I6,I5]生成信號#SET_MAx=0,強制把微地址寄存器MA4-MA0置位為[0,0,I7,I6,I5],即該指令執(zhí)行周期的第一條微指令地址。
圖8. 微地址寄存器和地址轉(zhuǎn)移邏輯
上述微程序的地址轉(zhuǎn)移過程需要在微指令周期增加T3和T4兩個周期:T3周期,當前微指令的下址字段[uA4-uA0]通過NMABUS總線打入微地址寄存器MA4-MA0,進而通過地址總線MABUS送往微指令存儲器MROM1-3的地址端,使其輸出下一條微指令;T4周期,若當前微指令是執(zhí)行周期微指令,則P1=0,無任何操作;若當前微指令是取指周期微指令,則P1=1,啟動地址轉(zhuǎn)移邏輯,重置微指令地址,跳轉(zhuǎn)到當前指令的執(zhí)行周期第一條微指令。
綜上所述,一條CPU指令就是一段微程序,其中包含若干條微指令(至少有一條是取指微指令)。所以,“微程序”時序如下圖9(左)所示:每個指令周期都包含了若干條微指令的機器周期(即微指令周期),其中至少有一個取指微指令周期。而且,每一條微指令的運行過程都可以看成是一個狀態(tài)機,如下圖9(右)所示:狀態(tài)機有4個狀態(tài){T1,T2,T3,T4},每個狀態(tài)【Tx】完成從取指、執(zhí)行到判斷下址的相應任務,狀態(tài)轉(zhuǎn)移T1→T4的一次循環(huán)即是一個微指令周期。因此,每個微指令周期內(nèi)部包含了四個節(jié)拍信號Tx,對應“微指令”狀態(tài)機的4個狀態(tài){T1,T2,T3,T4},狀態(tài)機周而復始在四個狀態(tài)【Tx】之間順序轉(zhuǎn)移,
圖9. 微程序的時序圖和狀態(tài)機
CPU時序發(fā)生器如下圖10所示,主要功能是為上述微程序控制器提供時序控制。其中最核心的狀態(tài)轉(zhuǎn)移電路是由兩個D觸發(fā)器組成的一個2位扭環(huán)計數(shù)器,輸出節(jié)拍序列{T1,T2,T3,T4}={00,01,11,10}。CLK為整個CPU電路的時鐘信號,可以由手動按鍵MANUAL_CLK或方波信號源AUTO_CLK生成(雙擊信號源可以自行選擇方波信號頻率)。
時序發(fā)生器還提供了硬件電路實現(xiàn)HLT指令的停機功能(即斷點)。當指令寄存器IR的OP碼I7I6I5=111的時候,停機信號#HLT=0,阻塞CLK輸出,CPU停機在HLT指令的取指周期T2節(jié)拍上。跳出HLT指令斷點的復位過程與上述初始化過程相同,信號 #RESET=0令指令寄存器IR清零,OP碼[I7,I6,I5]=000,則#HLT=1,跳出“斷點”;同時,扭環(huán)計數(shù)器強制為狀態(tài)T1={00}。#RESET=1,復位成功,CPU進入HLT指令后續(xù)下一條指令的取指周期T1節(jié)拍。
此外,為了觀測微程序的運行,時序發(fā)生器電路提供了一個由節(jié)拍信號T1上升沿驅(qū)動的雙位微指令計數(shù)器MICRO-I(兩個十進制加法計數(shù)器74LS160級聯(lián)構(gòu)成),通過數(shù)碼管顯示當前運行第幾條微指令,顯示范圍是1~99,如下圖10右邊所示。
圖10. 微程序控制器的時序發(fā)生器
參考資料
本文的內(nèi)容節(jié)選自作者編撰的教材專著《基于Proteus的計算機系統(tǒng)實驗教程——邏輯、組成原理、體系結(jié)構(gòu)、微機接口》(機械工業(yè)出版社),更詳細的內(nèi)容可以直接在書中查閱。
讀者如有興趣,可以在 當當網(wǎng)圖書, 京東圖書,亞馬遜上搜索作者姓名賴曉錚即可找到這本著作。
本書詳細描述了在proteus虛擬仿真環(huán)境中,從邏輯電路開始,一步一步構(gòu)造運算器、存儲器、控制器,最終用三種CPU體系架構(gòu)(微程序、硬布線、流水線)實現(xiàn)了一個8位的CPU。并且,這個CPU不僅可以做邏輯、算術(shù)運算,擁有循環(huán)、分支、堆棧等程序結(jié)構(gòu),還可以完整實現(xiàn)對8086所有外設的控制,即替代8086完整實現(xiàn)了傳統(tǒng)《微機原理》里講到的所有外設實驗。
本書的全部proteus工程文件,PPT,實驗視頻以及配套的兩種形式課程設計(純匯編、硬件改動)的資料都放在 百度網(wǎng)盤,提取密碼:34ad
廣州風標為本書配套了實驗箱(如下圖所示),可以讓學生在電腦的proteus虛擬仿真環(huán)境中設計CPU或選擇已有的8086、8051、ARM等CPU模型,然后通過虛擬總線映射到實驗箱的物理總線,控制實驗箱面板上的真實外設。有興趣的讀者可以自行聯(lián)系 廣州風標教育技術(shù)股份有限公司。
總結(jié)
以上是生活随笔為你收集整理的基于proteus的CPU控制器设计(微程序版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 磁带机型号,请教一下,爱华的
- 下一篇: pc端和移动端的区别