王俊昌,成韶錦 ,楊 昆,李德國
(1.南京郵電大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,江蘇 南京 210023;2.龍芯中科技術(shù)有限公司,北京 100089)
計算機組成原理是一門偏硬件的計算機基礎(chǔ)核心課程,該課程對學(xué)生了解計算機各組成部件及其內(nèi)部運行機制具有重要意義。目前,國內(nèi)高校普遍采用的教材介紹了計算機指令集、CPU設(shè)計、存儲器層次結(jié)構(gòu)、I/O系統(tǒng)、總線系統(tǒng)等計算機核心組成部件[1-2]。該課程涉及計算機的多個部件,概念較為抽象,因此其實驗環(huán)節(jié)尤為重要。只有通過動手充分了解計算機各部件的內(nèi)部運行機制,才能加深學(xué)生對計算機組成知識的理解,提升學(xué)生的實踐動手能力,并為其今后的學(xué)習(xí)和深造打好堅實的基礎(chǔ)。
目前高校開設(shè)計算機組成原理實驗課的主要方式如下。
(1)基于硬件的實驗方式[3-4]:給定實驗步驟,學(xué)生通過插拔線和撥動開關(guān)進(jìn)行實驗,該類實驗方式在國內(nèi)較為常見。這種實驗方式的優(yōu)點是讓學(xué)生接觸真實的硬件電路,增進(jìn)學(xué)生對電路走線的理解,缺點是學(xué)生只能按照預(yù)設(shè)步驟,機械地完成連線,難以突破實驗箱的限制,無法了解硬件內(nèi)部的運行機制。
(2)基于軟件的實驗方式:采用某類硬件平臺模擬器,學(xué)生通過在模擬器中運行代碼,達(dá)到間接觀察硬件平臺的效果。這種方式的優(yōu)點是簡單易上手,缺點是學(xué)生無法動手操作,很難形成對計算機硬件的直觀理解。
隨著計算機硬件的飛速發(fā)展,特別是以人工智能和大數(shù)據(jù)處理為代表的新興方向?qū)W(xué)生的計算機硬件知識水平和動手能力提出了更高的要求。傳統(tǒng)的計算機組成原理實驗方式已不能滿足學(xué)生對計算機組成原理的認(rèn)知需要。近年來有不少高校開始探索使用現(xiàn)場可編程門陣列(FPGA)作為計算機組成原理課程的實驗平臺[5-6]。與傳統(tǒng)實驗設(shè)備相比,基于FPGA的組成原理實驗平臺具有可編程、直觀、學(xué)生動手程度高等優(yōu)點。然而,基于FPGA的實驗平臺存在對學(xué)生的軟硬件預(yù)備知識要求高、設(shè)備調(diào)試復(fù)雜、技術(shù)支持不到位等問題,高校對是否采用基于FPGA的實驗平臺存在爭議。
硬件實驗平臺對于計算機組成原理課程的教學(xué)效果具有重要意義,因此,如何選定合適的實驗平臺是計算機組成原理課程教學(xué)改革的重點和難點問題。為此,筆者基于龍芯開源CPU的教學(xué)實驗平臺[7],就計算機組成原理課程開展了一系列教學(xué)改革嘗試,并取得了較好的效果。
實驗用到的龍芯實驗箱型號為LS-CPU-EXB-002,主要由以下部件組成:Spartan6-XC6SLX150-FGG676 FPGA芯片、雙色LED燈、單色LED燈、LED點陣、數(shù)碼管、下載JTAG接口、UART接口、VGA接口、LAN接口、USB接口、PS2接口、電源開關(guān)、撥碼開關(guān)、脈沖開關(guān)、4×4鍵盤、復(fù)位鍵、LCD顯示屏。實驗箱LS-CPU-EXB-002見圖1。

圖1 實驗箱LS-CPU-EXB-002
實驗使用的EDA軟件為ISE Design Suite[8]。ISE Design Suite14.7涉及FPGA設(shè)計的各個應(yīng)用領(lǐng)域,包括邏輯開發(fā)、數(shù)字信號處理及嵌入式系統(tǒng)開發(fā)等,主要包括ISE Foundation、嵌入式開發(fā)套件、System Generator DSP開發(fā)工具、ChipScope Pro分析儀、PlanAhead設(shè)計和分析工具等組成部分。該軟件平臺的使用流程包括:①代碼編輯;②用PlanAhead配置管腳,生成bit流文件;③用ChipScope燒寫FPGA板,驗證功能是否正確;④根據(jù)結(jié)果對邏輯進(jìn)行優(yōu)化修改。
基于龍芯開源CPU的計算機組成原理實驗包含8個難度依次增加的實驗:①定點加法;②定點乘法;③寄存器堆實驗;④ALU模塊實現(xiàn);⑤存儲器實現(xiàn);⑥單周期CPU;⑦多周期CPU;⑧靜態(tài)五級流水CPU實現(xiàn)。實驗①及實驗②的目的在于讓學(xué)生熟悉軟件與硬件平臺,掌握利用龍芯實驗箱各項功能開發(fā)組成原理實驗的方法,并熟悉開發(fā)語言verilog。實驗③、④、⑤旨在讓學(xué)生熟悉CPU內(nèi)部構(gòu)造的設(shè)計,鞏固理論知識,為后續(xù)設(shè)計完整CPU打下基礎(chǔ)。最后3個實驗由淺入深,逐步引導(dǎo)學(xué)生編寫五級流水CPU。通過層層深入的教學(xué)模式,引導(dǎo)學(xué)生積極動手,從零開始設(shè)計并實現(xiàn)一個支持五級CPU流水線的真實處理器。
本實驗的主要目的是讓學(xué)生熟悉使用ISE軟件開發(fā)FPGA的流程,幫助學(xué)生鞏固電路設(shè)計方面的知識,引導(dǎo)學(xué)生學(xué)習(xí)verilog語言。實驗流程為:①邏輯設(shè)計,編寫代碼;②仿真驗證;③綜合布局布線;④用Chipscope下載到試驗板上進(jìn)行功能驗證。
定點乘法實驗的目的為讓學(xué)生理解定點乘法中算法的工作原理,掌握實現(xiàn)較復(fù)雜算法的技巧。該實驗最終實現(xiàn)一個基本的迭代乘法算法,理解并正確實現(xiàn)該算法對后續(xù)實驗有極大的幫助。算法基本原理為:乘數(shù)每次右移一位,根據(jù)最低位,判斷是加被乘數(shù)移位后的值還是加零,不停地累加,直到得到最終乘積。原理圖如圖2所示。

圖2 迭代乘法算法原理圖
從實驗3開始,學(xué)生開始轉(zhuǎn)入CPU內(nèi)部基本結(jié)構(gòu)的實現(xiàn)。寄存器堆的實現(xiàn)旨在建立一個能存放32個32位寄存器的存儲設(shè)備。學(xué)生最終實現(xiàn)的存儲設(shè)備設(shè)置有2個讀端口、2個輸出端口、1個寫地址端口、1個寫數(shù)據(jù)端口;控制信號方面,存在1個寫使能信號,控制寄存器堆的輸入。在寄存器堆進(jìn)行工作時輸出標(biāo)志的寄存器中的值。
本實驗設(shè)計的ALU是一個簡單的能夠處理兩個32位操作數(shù)的算數(shù)模塊,具體支持加法、減法、有符號比較、無符號比較、按位與、按位或、按位或非、按位異或、邏輯左移、邏輯右移、算術(shù)右移和高位加載。該實驗?zāi)軌驇椭鷮W(xué)生對CPU核心部件ALU的工作原理有較深入的理解。
存儲器實驗的主要目的是讓學(xué)生了解只讀存儲器ROM和隨機存取存儲器RAM的基本原理,理解同步RAM和異步RAM的區(qū)別。存儲器實驗的一種方式是調(diào)用Xilinx庫IP直接輸入?yún)?shù)使用,也可以自行設(shè)計存儲器,使用設(shè)計寄存器堆的設(shè)計方法,直接定義需要的32位寄存器,并且設(shè)計好端口。在教學(xué)實踐中,筆者鼓勵學(xué)生嘗試自行設(shè)計,從而加深學(xué)生對存儲器工作原理的認(rèn)識。
單周期CPU實驗中,一個CPU周期實現(xiàn)一條指令,故時鐘的設(shè)定應(yīng)為執(zhí)行時間最長的指令。該實驗要求學(xué)生設(shè)計一個支持16條MIPS指令的CPU。CPU具體流程為:在一個周期內(nèi),根據(jù)PC值從指令ROM中讀出相應(yīng)的指令,將指令譯碼后從寄存器堆中讀出需要的操作數(shù),送往ALU模塊,ALU模塊運算得到結(jié)果。但若是跳轉(zhuǎn)指令,則不需要存儲器設(shè)備,此時需要修改PC值。單周期CPU的大致框圖如圖3所示。
該實驗是對單周期CPU實驗的拔高,也為流水線CPU實驗打下基礎(chǔ)。該實驗要求學(xué)生實現(xiàn)30多條指令。該實驗的難點在于CPU需要支持多周期執(zhí)行,即一條指令被分為多個步驟,在每個周期內(nèi)只做一部分,如取指、譯碼、執(zhí)行、訪存、寫回。與單周期CPU相比,多周期CPU中每個部分使用單獨的模塊編寫,通過設(shè)計外圍模塊調(diào)用,而且只有前一個狀態(tài)結(jié)束時,才能進(jìn)行下一步操作,以此實現(xiàn)多周期操作。該實驗對學(xué)生的理論知識和實際動手能力有較高要求,且程序調(diào)試較復(fù)雜。為此,在教學(xué)實踐中,筆者將該實驗設(shè)置為可選,鼓勵學(xué)有余力的學(xué)生完成。

圖3 單周期CPU的大致框圖
最后一個實驗要求學(xué)生設(shè)計一個五級流水CPU。該CPU的主體部分使用2.7節(jié)完成的多周期CPU,但此處要求將指令拓展到40條以上,并在此前基礎(chǔ)上加入延時槽技術(shù)。此外,該實驗在每個模塊中加入allow_in信號和over信號,以此使該模塊不斷運作,從而實現(xiàn)流水線效果。該實驗使用了大量的控制信號來維持流水線的秩序,要求學(xué)生對CPU功能結(jié)構(gòu)有深入的了解,并能把各模塊聯(lián)系起來,最后還要通過仿真器分析設(shè)計結(jié)果,做出改進(jìn)。在教學(xué)實踐中,筆者將該實驗設(shè)置為可選,鼓勵學(xué)有余力的學(xué)生完成。
近年來,龍芯公司通過硬件開源,以教學(xué)生“造”計算機為理念,通過將龍芯CPU面向合作院校進(jìn)行開源,力圖使學(xué)生能夠動手實現(xiàn)“設(shè)計真實處理器”,提升計算機組成原理教學(xué)水平。筆者所在南京郵電大學(xué)通過引入基于龍芯開源CPU的教學(xué)實驗平臺,就計算機組成原理開展一系列教學(xué)改革嘗試。在實驗過程中,通過指導(dǎo)學(xué)生動手實踐,從零開始逐步完成一個可真實運行的CPU核心,激發(fā)了學(xué)生的學(xué)習(xí)主動性,鞏固了學(xué)生的課堂知識,使學(xué)生對所學(xué)知識融會貫通,取得了較好的教學(xué)成果。基于龍芯開源CPU的計算機組成原理實驗平臺已在南京郵電大學(xué)的2014、2015級計算機專業(yè)本科生中試用,在教學(xué)過程中取得了較好的教學(xué)效果。
教學(xué)過程中采用的教材為白中英編寫的《計算機組成原理》。在課堂教學(xué)過程中,筆者發(fā)現(xiàn)學(xué)生對ALU、流水線技術(shù)、總線系統(tǒng)等知識缺乏直觀認(rèn)識,例如:①對小于置位運算的原理不清晰,不熟悉ALU的內(nèi)部構(gòu)造;②對CPU控制部件工作原理難以理解;③對總線的內(nèi)部結(jié)構(gòu)不明確。通過在龍芯實驗平臺上進(jìn)行相關(guān)實驗,學(xué)生逐漸熟悉了ALU的內(nèi)部結(jié)構(gòu),掌握了32位無符號比較小于置位運算,對指令譯碼和流水線停頓等概念有了更深入的理解。經(jīng)過一個學(xué)期的實踐,學(xué)生對新實驗平臺的反映較好。
此外,龍芯具有較好的社會影響力,配套培訓(xùn)較多,學(xué)生學(xué)習(xí)熱情高。例如,2017年6月,龍芯公司在南京航空航天大學(xué)進(jìn)行了全國大學(xué)生計算機系統(tǒng)能力培養(yǎng)大賽的相關(guān)培訓(xùn)[8],在培訓(xùn)過程中,龍芯開發(fā)人員介紹了龍芯開源CPU的設(shè)計流程,對實驗箱進(jìn)行了演示,詳細(xì)介紹了所用的MIPS指令集,極大地提高了學(xué)生對于計算機整體系統(tǒng)的認(rèn)識。
在采用龍芯實驗平臺的過程中,筆者也發(fā)現(xiàn)了一些問題,例如:
(1)該實驗平臺采用了FPGA,但FPGA對于本科學(xué)生來說門檻較高,要求學(xué)生具有一定的基礎(chǔ)知識,例如:計算機組成原理、數(shù)字電路與系統(tǒng)設(shè)計、操作系統(tǒng)等。此外,學(xué)生此前并未接觸過編程語言verilog。針對該問題,筆者有選擇地給學(xué)生介紹了《Xilinx FPGA開發(fā)實用教程》等書籍中的部分內(nèi)容,較好地解決了該問題。因此,筆者認(rèn)為在采用該平臺的過程中,應(yīng)有計劃地安排學(xué)生提前選修數(shù)字電路、FPGA開發(fā)等先導(dǎo)課程。
(2)使用龍芯實驗平臺調(diào)試代碼的過程中涉及邏輯和語法兩方面的內(nèi)容,過程復(fù)雜,而學(xué)校的實驗課通常安排得較短、較分散,學(xué)生難以在課上解決所有問題。例如部分學(xué)生在完成五級流水CPU實驗的過程中,由于缺乏對延遲槽的理解,導(dǎo)致MIPS二進(jìn)制執(zhí)行文件不能在CPU中正確運行,而這一問題的解決往往需要較長時間。因此,在采用該平臺的過程中,應(yīng)考慮協(xié)調(diào)教務(wù)部門,將課程的實驗課集中安排,以實踐周的方式進(jìn)行更有利于學(xué)生集中時間完成實驗。
基于龍芯開源CPU的計算機組成原理實驗平臺在南京郵電大學(xué)計算機科學(xué)與技術(shù)專業(yè)2014級、2015級進(jìn)行了推廣,極大地調(diào)動了學(xué)生的學(xué)習(xí)積極性,取得了較好的教學(xué)效果。在實驗過程中,通過動手實踐,學(xué)生往往能夠發(fā)現(xiàn)一些新的問題和意想不到的困難,通過克服困難尋求解決方案,學(xué)生的動手能力得到較明顯的提升。此外,在今后的教學(xué)實踐中筆者還會進(jìn)行一些優(yōu)化和調(diào)整,例如結(jié)合操作系統(tǒng)、數(shù)字電路等課設(shè)的實驗課程,形成更全面、更系統(tǒng)的實驗組合,以便更加全面地覆蓋計算機系統(tǒng)學(xué)科的理論知識。
[1]Patterson D A, Hennessy J L. Computer organization and design: The hardware/software interface[M]. 北京: 機械工業(yè)出版社,2014: 1-23.
[2]白中英, 戴志濤. 計算機組成原理[M]. 5版. 北京: 科學(xué)出版社, 2013: 1-30.
[3]丁紅勝. 面向計算機系統(tǒng)能力培養(yǎng)的計算機組成原理實驗教學(xué)[J]. 計算機教育, 2016(7): 20-24.
[4]李麗萍, 盛琳陽. 基于EDA技術(shù)的計算機組成原理實驗課開放性教學(xué)模式研究[J]. 計算機教育, 2010(10): 55-57.
[5]周寧寧, 程春玲. 基于FPGA技術(shù)的計算機組成原理實驗系統(tǒng)[J]. 現(xiàn)代電子技術(shù), 2005(1): 23-25.
[6]吳迪, 謝雪炎, 吳賀俊. 基于FPGA的計算機組成原理實驗教學(xué)探索[J]. 計算機教育, 2014(18): 30-34.
[7]中科龍芯. 龍芯開源CPU項目[EB/OL]. [2017-11-15]. http://www.loongnix.org/index.php.
[8]中科龍芯. 全國并行應(yīng)用挑戰(zhàn)賽[EB/OL]. [2017-11-15]. http://www.pac-hpc.com/.