張前賢+莫毓昌+潘竹生
摘要:已有的計(jì)算機(jī)體系結(jié)構(gòu)教學(xué)模擬器主要是面向馮諾依曼體系結(jié)構(gòu)。針對(duì)缺乏面向哈佛體系結(jié)構(gòu)模擬器這一問(wèn)題,本文提出并設(shè)計(jì)了基于開(kāi)源軟件包Multimedia Logic(MML)[1]哈佛體系結(jié)構(gòu)模擬器。該模擬器不僅具有軟件的易動(dòng)態(tài)運(yùn)行、易修改、易二次開(kāi)發(fā)的優(yōu)點(diǎn),同時(shí)還實(shí)現(xiàn)了硬件結(jié)構(gòu)的邏輯門(mén)級(jí)映射[2],從而在課程教學(xué)和實(shí)驗(yàn)設(shè)計(jì)方面對(duì)哈佛體系結(jié)構(gòu)教學(xué)提供了很好的支持。
關(guān)鍵詞:模擬器;哈佛體系結(jié)構(gòu);MML
在計(jì)算機(jī)體系結(jié)構(gòu)課程教學(xué)過(guò)程中,馮諾依曼體系結(jié)構(gòu)和哈佛體系結(jié)構(gòu)是重點(diǎn)教授的兩種體系結(jié)構(gòu)類(lèi)型。[3]馮諾依曼結(jié)構(gòu),又稱(chēng)為普林斯頓結(jié)構(gòu),是一種經(jīng)典的體系結(jié)構(gòu),由CPU,存儲(chǔ)設(shè)備,I/O設(shè)備組成。[4]這種體系結(jié)構(gòu)采用指令與數(shù)據(jù)合并存儲(chǔ)的方式,程序指令寬度與數(shù)據(jù)寬度一樣。隨著CPU設(shè)計(jì)技術(shù)的發(fā)展,片內(nèi)數(shù)據(jù)傳輸路徑的增加,指令和數(shù)據(jù)的互斥讀取很大程度上影響了CPU運(yùn)行效率。為此,哈佛大學(xué)提出一種新的體系結(jié)構(gòu),在這種結(jié)構(gòu)中數(shù)據(jù)存儲(chǔ)器與程序代碼存儲(chǔ)器分開(kāi),各自有自己的數(shù)據(jù)總線(xiàn)與地址總線(xiàn),實(shí)現(xiàn)指令和數(shù)據(jù)的并行讀取。由于哈佛結(jié)構(gòu)需要CPU提供大量的數(shù)據(jù)線(xiàn),因而很少作為CPU外部構(gòu)架來(lái)使用。但是對(duì)于CPU內(nèi)部,通過(guò)使用不同的數(shù)據(jù)和指令緩存,可以有效地提高指令執(zhí)行的效率,因而目前大部分計(jì)算機(jī)體系結(jié)構(gòu)都是CPU內(nèi)部的哈佛結(jié)構(gòu)和CPU外部的馮諾依曼結(jié)構(gòu)并存。
在馮諾依曼體系結(jié)構(gòu)教學(xué)方面,許多大學(xué)已經(jīng)開(kāi)始研發(fā)各種基于軟件和硬件模擬器來(lái)輔助課程教學(xué)和實(shí)驗(yàn)教學(xué)。[5]但在哈佛體系結(jié)構(gòu)教學(xué)方面仍然缺乏有效的模擬器。[6]針對(duì)這一問(wèn)題,本文介紹了我們基于開(kāi)源軟件包Multimedia Logic(MML)所開(kāi)發(fā)的用于哈佛體系結(jié)構(gòu)教學(xué)的模擬器。
● 模擬器結(jié)構(gòu)和指令
1.總體結(jié)構(gòu)
哈佛體系結(jié)構(gòu)具有程序與數(shù)據(jù)物理上分開(kāi)存儲(chǔ)的特點(diǎn),從而提供了較大的數(shù)據(jù)存儲(chǔ)器帶寬。哈佛體系結(jié)構(gòu)的工作原理是:CPU控制器首先到程序指令存儲(chǔ)器中讀取程序指令內(nèi)容,根據(jù)指令中操作數(shù)的地址,再到相應(yīng)的數(shù)據(jù)存儲(chǔ)器中讀取數(shù)據(jù),并進(jìn)行下一步的運(yùn)算。
圖1給出了我們所開(kāi)發(fā)的哈佛體系結(jié)構(gòu)模擬器框圖。其中M1(DataMem)作為數(shù)據(jù)存儲(chǔ)器,其主要功能是用于存放執(zhí)行的中間結(jié)果和過(guò)程數(shù)據(jù)。M2(ProgramMem)作為程序存儲(chǔ)器,其主要功能是用于存儲(chǔ)程序指令。M3(OpDecode)作為指令譯碼器,其主要功能是將操作碼信號(hào)翻譯成機(jī)器能夠識(shí)別的控制信號(hào)。M4(RI)作為輸入寄存器,其主要功能是用于暫時(shí)存放數(shù)據(jù)存儲(chǔ)器輸出的數(shù)據(jù)。M5(RO)作為輸出寄存器,其主要功能是用于暫時(shí)存放運(yùn)算結(jié)果。M6(PC)作為程序計(jì)數(shù)器,其主要功能是用于存放下一條指令所在單元的地址。ALU1和ALU2是算術(shù)邏輯單元,其功能分別是控制程序計(jì)數(shù)器的地址和執(zhí)行相關(guān)的邏輯運(yùn)算。Display作為顯示器,其主要功能是輸出相關(guān)的結(jié)果。
2.指令系統(tǒng)
在哈佛體系結(jié)構(gòu)模擬器設(shè)計(jì)中涉及的指令有5條[7],分別是加法指令、跳轉(zhuǎn)指令、加載指令、存儲(chǔ)指令和輸出指令。這些指令的具體說(shuō)明詳見(jiàn)下頁(yè)表1。在這些指令中,涉及尋址方式有立即尋址和直接尋址。
● 模擬器設(shè)計(jì)
1.數(shù)據(jù)寄存器設(shè)計(jì)
在哈佛體系結(jié)構(gòu)模擬器設(shè)計(jì)中涉及的數(shù)據(jù)寄存器有輸入寄存器M4和輸出寄存器M5。
其中輸入寄存器M4的數(shù)據(jù)輸入端與數(shù)據(jù)存儲(chǔ)器的輸出端相連;地址輸入端與低電平相連;將控制信號(hào)DC1和時(shí)鐘信號(hào)作為與門(mén)的兩個(gè)輸入端,再與輸入寄存器的讀寫(xiě)控制端相連;將輸入寄存器的輸出端與ALU2的其中一個(gè)輸入端相連。圖2給出了輸入寄存器的設(shè)計(jì)圖。[8]
輸出寄存器M5的數(shù)據(jù)輸入端與ALU2的輸出端相連;地址輸入端與低電平相連;將控制信號(hào)DC2和時(shí)鐘信號(hào)作為與門(mén)的兩個(gè)輸入端,再與輸入寄存器的讀寫(xiě)控制端相連;將輸出寄存器的輸出端通過(guò)信號(hào)I-Mem與數(shù)據(jù)存儲(chǔ)器的輸入端相連。圖3給出了輸出寄存器的設(shè)計(jì)圖。
2.存儲(chǔ)器設(shè)計(jì)
在哈佛體系結(jié)構(gòu)模擬器設(shè)計(jì)中涉及的存儲(chǔ)器有數(shù)據(jù)存儲(chǔ)器M1和程序存儲(chǔ)器M2。
圖4給出了數(shù)據(jù)存儲(chǔ)器的設(shè)計(jì)圖。數(shù)據(jù)存儲(chǔ)器M1的數(shù)據(jù)輸入端通過(guò)信號(hào)I-Mem與輸出寄存器的輸出端相連;地址輸入端通過(guò)信號(hào)Imm與程序存儲(chǔ)器的指令地址碼(由于程序存儲(chǔ)器M2輸出的地址碼Imm只有五位,故在其高位補(bǔ)零使其成為八位Imm)相連;將控制信號(hào)DC5和時(shí)鐘信號(hào)作為與門(mén)的兩個(gè)輸入端,再與數(shù)據(jù)存儲(chǔ)器的讀寫(xiě)控制端相連;將數(shù)據(jù)存儲(chǔ)器的輸出端通過(guò)信號(hào)Mem與輸入寄存器的輸入端相連。
圖5給出了程序存儲(chǔ)器的設(shè)計(jì)圖。程序存儲(chǔ)器的數(shù)據(jù)輸入端與低電平相連;地址輸入端與程序計(jì)數(shù)器的輸出端相連;將讀寫(xiě)控制端直接與低電平相連;將程序存儲(chǔ)器輸出端的高三位作為指令譯碼器的操作碼與指令譯碼器相連,低五位作為地址碼與數(shù)據(jù)存儲(chǔ)器的地址輸入端相連。
3.指令設(shè)計(jì)
哈佛體系結(jié)構(gòu)模擬器采用的指令格式為:每條指令長(zhǎng)度為11位,其中操作碼長(zhǎng)度為三位,地址碼長(zhǎng)度為八位。三位操作碼在經(jīng)過(guò)指令譯碼器之后,可以形成8個(gè)八位的控制信號(hào)DC0~DC7。由于程序存儲(chǔ)器M2的高位輸出端有三位操作碼,低位輸出端的地址碼只有五位,故在其高位補(bǔ)零使其成為八位地址碼。表2給出各條指令的操作碼和控制碼分配方案。
● 應(yīng)用
我們以計(jì)算y=x+1為例說(shuō)明模擬器應(yīng)用操作過(guò)程。在應(yīng)用操作過(guò)程中,程序存儲(chǔ)器中存儲(chǔ)的內(nèi)容既和程序的操作碼有關(guān),同時(shí)與地址碼也有一定關(guān)系,所以在設(shè)計(jì)程序存儲(chǔ)器相關(guān)程序時(shí),要考慮到操作碼和地址碼兩部分。在設(shè)計(jì)程序存儲(chǔ)器時(shí),需要注意一點(diǎn):由于程序存儲(chǔ)器輸出端只有3位操作碼,故在設(shè)置時(shí),當(dāng)程序指令為“0*”時(shí),操作碼指向指令譯碼器的第0位;當(dāng)程序指令為“2*”時(shí),操作碼指向指令譯碼器的第1位;當(dāng)程序指令為“4*”時(shí),操作碼指向指令譯碼器的第2位;當(dāng)程序指令為“6*”時(shí),操作碼指向指令譯碼器的第3位;余下幾位,以此類(lèi)推。以上所用“*”表示指令的地址碼。endprint
在設(shè)計(jì)數(shù)據(jù)存儲(chǔ)器時(shí),需要事先在數(shù)據(jù)存儲(chǔ)器的地址端存入十六進(jìn)制數(shù)“79,3D,78,2B,31,0D,78,3D,34,0D,79,3D”,其所對(duì)應(yīng)的ASCII值為“y=x+1_x=4_y=”,其中“_”代表回車(chē)。這樣的數(shù)據(jù)安排,能夠使指令順序執(zhí)行,使顯示器依次輸出想要的結(jié)果。十六進(jìn)制數(shù)“34”所對(duì)應(yīng)的ASCII碼值為4,其值可以修改為30~38中的任意值,最終的輸出結(jié)果也會(huì)隨之改變。
在整個(gè)程序的執(zhí)行過(guò)程中,前12個(gè)周期是按照指令存儲(chǔ)的順序依次執(zhí)行,其功能是為了實(shí)現(xiàn)“y=x+1_x=4_y=”,其中“_”表示回車(chē)。第13個(gè)周期是一條跳轉(zhuǎn)指令,其功能是將第9條指令輸出的數(shù)據(jù)取來(lái),也就是輸出“4”;第14個(gè)周期是一條跳轉(zhuǎn)指令,其功能是將第4條指令輸出的數(shù)據(jù)取來(lái),也就是輸出“+”;第15個(gè)周期是采用立即尋址的方式,通過(guò)指針PC指向程序存儲(chǔ)器所在的位置,使信號(hào)Imm成為00000001,并通過(guò)信號(hào)Bin傳輸?shù)紸LU的輸入端,最終使顯示器輸出“1”;第16個(gè)周期是一條跳轉(zhuǎn)指令,其功能是將第2條指令輸出的數(shù)據(jù)取來(lái),也就是輸出“=”;接下來(lái)的幾個(gè)周期,使DC6為低電平,使顯示器無(wú)法輸出,將信號(hào)RIO中的內(nèi)容與信號(hào)Bin中的內(nèi)容相加,并在經(jīng)過(guò)兩個(gè)周期后,傳輸至信號(hào)Mem,此時(shí)再將DC6設(shè)為高電平,使下一個(gè)時(shí)鐘信號(hào)由低電平變?yōu)楦唠娖綍r(shí),將信號(hào)Mem中的內(nèi)容輸出至顯示器。
● 結(jié)論
面向本科生“計(jì)算機(jī)體系結(jié)構(gòu)”課程教學(xué)的模擬器有很多,但由于MML一方面具有軟件的易動(dòng)態(tài)運(yùn)行、易修改、易二次開(kāi)發(fā)的優(yōu)點(diǎn),同時(shí)實(shí)現(xiàn)了硬件結(jié)構(gòu)的邏輯門(mén)級(jí)映射,彌補(bǔ)了其他計(jì)算機(jī)組成結(jié)構(gòu)模擬器的不足之處,因而,本文推薦使用MML模擬器來(lái)進(jìn)行教學(xué)活動(dòng)。同時(shí),計(jì)算機(jī)體系結(jié)構(gòu)主要有兩類(lèi):馮諾依曼體系結(jié)構(gòu)和哈佛體系結(jié)構(gòu)。由于筆者近期已經(jīng)提出了基于開(kāi)源軟件包Multimedia Logic (MML)·馮諾依曼模擬器ARCH,因而,筆者在本文中提出了另一種想法——用于計(jì)算機(jī)體系結(jié)構(gòu)教學(xué)的哈佛體系結(jié)構(gòu)模擬器。這樣就彌補(bǔ)了MML模擬器在哈佛體系結(jié)構(gòu)教學(xué)方面的不足,從而使MML模擬器能夠更好地用于計(jì)算機(jī)體系結(jié)構(gòu)的教學(xué)工作。
通過(guò)本文設(shè)計(jì)的用于計(jì)算機(jī)體系結(jié)構(gòu)教學(xué)的哈佛體系結(jié)構(gòu)模擬器,學(xué)生能夠更加輕松且深刻地理解哈佛體系結(jié)構(gòu),從而為以后步入社會(huì)打下堅(jiān)實(shí)的基礎(chǔ)。
參考文獻(xiàn):
[1]Multimedia Logic(Version 1.4)Emulator Program. http://www.softronix.comllogic.html.
[2]莫毓昌,張前賢,陳榮根.ARCH:用于計(jì)算機(jī)組成與結(jié)構(gòu)課程教學(xué)的模擬器[J].計(jì)算機(jī)教育,2013(10):56-61.
[3]W.Stallings.Computer Organization and Architecture[M].5th edition NJ: Prentice Hall, 2000:1-98.
[4]A. Tanenbaum. Structured Computer Organization[M].4th edition, NJ: Prentice Hall, 1999:1-320.
[5]C Yehezkel, W. Yurcik, M. Pearson, and D. Armstrong. Three Simulator Tools For Teaching Computer Architecture: EasyCPU, Little Man Computer, and RTLSim [J]. Journal on Educational Resources in Computing, 2001,1(4):60-80.
[6]D.Colton, G.Embrey, L.Fife, S.Mikolyski, D.Prigmore, and T.D.Stanley. From Architecture to Architecture: Undergraduate Students Design and Implement Computers Using the Multimedia Logic Emulator [J].Computer Science Education, 2007, 17(2):141-152.
[7]H.Oztekin, F.Temurtas1, A.Gulbag. BZK.SAU Implementing a Hardware and Software-based Computer Architecture Simulator for Educational Purpose [C].Proceedings of the 201O International Conference On Computer Design And Appliations (ICCDA 2010), 2010:90-97.
[8]T.D.Stanley, T.Q.Xuan, L.Fife, D.Colton, Simple Eight Bit, Emulated Computers for IllustratingComputer Architecture Concepts and Providing a Starting Point for Student Designs [R].Ballarat, Victoria, Australia, January 2007.endprint