王俊昌,成韶錦 ,楊 昆,李德國
(1.南京郵電大學 計算機科學與技術學院,江蘇 南京 210023;2.龍芯中科技術有限公司,北京 100089)
計算機組成原理是一門偏硬件的計算機基礎核心課程,該課程對學生了解計算機各組成部件及其內部運行機制具有重要意義。目前,國內高校普遍采用的教材介紹了計算機指令集、CPU設計、存儲器層次結構、I/O系統(tǒng)、總線系統(tǒng)等計算機核心組成部件[1-2]。該課程涉及計算機的多個部件,概念較為抽象,因此其實驗環(huán)節(jié)尤為重要。只有通過動手充分了解計算機各部件的內部運行機制,才能加深學生對計算機組成知識的理解,提升學生的實踐動手能力,并為其今后的學習和深造打好堅實的基礎。
目前高校開設計算機組成原理實驗課的主要方式如下。
(1)基于硬件的實驗方式[3-4]:給定實驗步驟,學生通過插拔線和撥動開關進行實驗,該類實驗方式在國內較為常見。這種實驗方式的優(yōu)點是讓學生接觸真實的硬件電路,增進學生對電路走線的理解,缺點是學生只能按照預設步驟,機械地完成連線,難以突破實驗箱的限制,無法了解硬件內部的運行機制。
(2)基于軟件的實驗方式:采用某類硬件平臺模擬器,學生通過在模擬器中運行代碼,達到間接觀察硬件平臺的效果。這種方式的優(yōu)點是簡單易上手,缺點是學生無法動手操作,很難形成對計算機硬件的直觀理解。
隨著計算機硬件的飛速發(fā)展,特別是以人工智能和大數(shù)據處理為代表的新興方向對學生的計算機硬件知識水平和動手能力提出了更高的要求。傳統(tǒng)的計算機組成原理實驗方式已不能滿足學生對計算機組成原理的認知需要。近年來有不少高校開始探索使用現(xiàn)場可編程門陣列(FPGA)作為計算機組成原理課程的實驗平臺[5-6]。與傳統(tǒng)實驗設備相比,基于FPGA的組成原理實驗平臺具有可編程、直觀、學生動手程度高等優(yōu)點。然而,基于FPGA的實驗平臺存在對學生的軟硬件預備知識要求高、設備調試復雜、技術支持不到位等問題,高校對是否采用基于FPGA的實驗平臺存在爭議。
硬件實驗平臺對于計算機組成原理課程的教學效果具有重要意義,因此,如何選定合適的實驗平臺是計算機組成原理課程教學改革的重點和難點問題。為此,筆者基于龍芯開源CPU的教學實驗平臺[7],就計算機組成原理課程開展了一系列教學改革嘗試,并取得了較好的效果。
實驗用到的龍芯實驗箱型號為LS-CPU-EXB-002,主要由以下部件組成:Spartan6-XC6SLX150-FGG676 FPGA芯片、雙色LED燈、單色LED燈、LED點陣、數(shù)碼管、下載JTAG接口、UART接口、VGA接口、LAN接口、USB接口、PS2接口、電源開關、撥碼開關、脈沖開關、4×4鍵盤、復位鍵、LCD顯示屏。實驗箱LS-CPU-EXB-002見圖1。
圖1 實驗箱LS-CPU-EXB-002
實驗使用的EDA軟件為ISE Design Suite[8]。ISE Design Suite14.7涉及FPGA設計的各個應用領域,包括邏輯開發(fā)、數(shù)字信號處理及嵌入式系統(tǒng)開發(fā)等,主要包括ISE Foundation、嵌入式開發(fā)套件、System Generator DSP開發(fā)工具、ChipScope Pro分析儀、PlanAhead設計和分析工具等組成部分。該軟件平臺的使用流程包括:①代碼編輯;②用PlanAhead配置管腳,生成bit流文件;③用ChipScope燒寫FPGA板,驗證功能是否正確;④根據結果對邏輯進行優(yōu)化修改。
基于龍芯開源CPU的計算機組成原理實驗包含8個難度依次增加的實驗:①定點加法;②定點乘法;③寄存器堆實驗;④ALU模塊實現(xiàn);⑤存儲器實現(xiàn);⑥單周期CPU;⑦多周期CPU;⑧靜態(tài)五級流水CPU實現(xiàn)。實驗①及實驗②的目的在于讓學生熟悉軟件與硬件平臺,掌握利用龍芯實驗箱各項功能開發(fā)組成原理實驗的方法,并熟悉開發(fā)語言verilog。實驗③、④、⑤旨在讓學生熟悉CPU內部構造的設計,鞏固理論知識,為后續(xù)設計完整CPU打下基礎。最后3個實驗由淺入深,逐步引導學生編寫五級流水CPU。通過層層深入的教學模式,引導學生積極動手,從零開始設計并實現(xiàn)一個支持五級CPU流水線的真實處理器。
本實驗的主要目的是讓學生熟悉使用ISE軟件開發(fā)FPGA的流程,幫助學生鞏固電路設計方面的知識,引導學生學習verilog語言。實驗流程為:①邏輯設計,編寫代碼;②仿真驗證;③綜合布局布線;④用Chipscope下載到試驗板上進行功能驗證。
定點乘法實驗的目的為讓學生理解定點乘法中算法的工作原理,掌握實現(xiàn)較復雜算法的技巧。該實驗最終實現(xiàn)一個基本的迭代乘法算法,理解并正確實現(xiàn)該算法對后續(xù)實驗有極大的幫助。算法基本原理為:乘數(shù)每次右移一位,根據最低位,判斷是加被乘數(shù)移位后的值還是加零,不停地累加,直到得到最終乘積。原理圖如圖2所示。
圖2 迭代乘法算法原理圖
從實驗3開始,學生開始轉入CPU內部基本結構的實現(xiàn)。寄存器堆的實現(xiàn)旨在建立一個能存放32個32位寄存器的存儲設備。學生最終實現(xiàn)的存儲設備設置有2個讀端口、2個輸出端口、1個寫地址端口、1個寫數(shù)據端口;控制信號方面,存在1個寫使能信號,控制寄存器堆的輸入。在寄存器堆進行工作時輸出標志的寄存器中的值。
本實驗設計的ALU是一個簡單的能夠處理兩個32位操作數(shù)的算數(shù)模塊,具體支持加法、減法、有符號比較、無符號比較、按位與、按位或、按位或非、按位異或、邏輯左移、邏輯右移、算術右移和高位加載。該實驗能夠幫助學生對CPU核心部件ALU的工作原理有較深入的理解。
存儲器實驗的主要目的是讓學生了解只讀存儲器ROM和隨機存取存儲器RAM的基本原理,理解同步RAM和異步RAM的區(qū)別。存儲器實驗的一種方式是調用Xilinx庫IP直接輸入參數(shù)使用,也可以自行設計存儲器,使用設計寄存器堆的設計方法,直接定義需要的32位寄存器,并且設計好端口。在教學實踐中,筆者鼓勵學生嘗試自行設計,從而加深學生對存儲器工作原理的認識。
單周期CPU實驗中,一個CPU周期實現(xiàn)一條指令,故時鐘的設定應為執(zhí)行時間最長的指令。該實驗要求學生設計一個支持16條MIPS指令的CPU。CPU具體流程為:在一個周期內,根據PC值從指令ROM中讀出相應的指令,將指令譯碼后從寄存器堆中讀出需要的操作數(shù),送往ALU模塊,ALU模塊運算得到結果。但若是跳轉指令,則不需要存儲器設備,此時需要修改PC值。單周期CPU的大致框圖如圖3所示。
該實驗是對單周期CPU實驗的拔高,也為流水線CPU實驗打下基礎。該實驗要求學生實現(xiàn)30多條指令。該實驗的難點在于CPU需要支持多周期執(zhí)行,即一條指令被分為多個步驟,在每個周期內只做一部分,如取指、譯碼、執(zhí)行、訪存、寫回。與單周期CPU相比,多周期CPU中每個部分使用單獨的模塊編寫,通過設計外圍模塊調用,而且只有前一個狀態(tài)結束時,才能進行下一步操作,以此實現(xiàn)多周期操作。該實驗對學生的理論知識和實際動手能力有較高要求,且程序調試較復雜。為此,在教學實踐中,筆者將該實驗設置為可選,鼓勵學有余力的學生完成。
圖3 單周期CPU的大致框圖
最后一個實驗要求學生設計一個五級流水CPU。該CPU的主體部分使用2.7節(jié)完成的多周期CPU,但此處要求將指令拓展到40條以上,并在此前基礎上加入延時槽技術。此外,該實驗在每個模塊中加入allow_in信號和over信號,以此使該模塊不斷運作,從而實現(xiàn)流水線效果。該實驗使用了大量的控制信號來維持流水線的秩序,要求學生對CPU功能結構有深入的了解,并能把各模塊聯(lián)系起來,最后還要通過仿真器分析設計結果,做出改進。在教學實踐中,筆者將該實驗設置為可選,鼓勵學有余力的學生完成。
近年來,龍芯公司通過硬件開源,以教學生“造”計算機為理念,通過將龍芯CPU面向合作院校進行開源,力圖使學生能夠動手實現(xiàn)“設計真實處理器”,提升計算機組成原理教學水平。筆者所在南京郵電大學通過引入基于龍芯開源CPU的教學實驗平臺,就計算機組成原理開展一系列教學改革嘗試。在實驗過程中,通過指導學生動手實踐,從零開始逐步完成一個可真實運行的CPU核心,激發(fā)了學生的學習主動性,鞏固了學生的課堂知識,使學生對所學知識融會貫通,取得了較好的教學成果?;邶埿鹃_源CPU的計算機組成原理實驗平臺已在南京郵電大學的2014、2015級計算機專業(yè)本科生中試用,在教學過程中取得了較好的教學效果。
教學過程中采用的教材為白中英編寫的《計算機組成原理》。在課堂教學過程中,筆者發(fā)現(xiàn)學生對ALU、流水線技術、總線系統(tǒng)等知識缺乏直觀認識,例如:①對小于置位運算的原理不清晰,不熟悉ALU的內部構造;②對CPU控制部件工作原理難以理解;③對總線的內部結構不明確。通過在龍芯實驗平臺上進行相關實驗,學生逐漸熟悉了ALU的內部結構,掌握了32位無符號比較小于置位運算,對指令譯碼和流水線停頓等概念有了更深入的理解。經過一個學期的實踐,學生對新實驗平臺的反映較好。
此外,龍芯具有較好的社會影響力,配套培訓較多,學生學習熱情高。例如,2017年6月,龍芯公司在南京航空航天大學進行了全國大學生計算機系統(tǒng)能力培養(yǎng)大賽的相關培訓[8],在培訓過程中,龍芯開發(fā)人員介紹了龍芯開源CPU的設計流程,對實驗箱進行了演示,詳細介紹了所用的MIPS指令集,極大地提高了學生對于計算機整體系統(tǒng)的認識。
在采用龍芯實驗平臺的過程中,筆者也發(fā)現(xiàn)了一些問題,例如:
(1)該實驗平臺采用了FPGA,但FPGA對于本科學生來說門檻較高,要求學生具有一定的基礎知識,例如:計算機組成原理、數(shù)字電路與系統(tǒng)設計、操作系統(tǒng)等。此外,學生此前并未接觸過編程語言verilog。針對該問題,筆者有選擇地給學生介紹了《Xilinx FPGA開發(fā)實用教程》等書籍中的部分內容,較好地解決了該問題。因此,筆者認為在采用該平臺的過程中,應有計劃地安排學生提前選修數(shù)字電路、FPGA開發(fā)等先導課程。
(2)使用龍芯實驗平臺調試代碼的過程中涉及邏輯和語法兩方面的內容,過程復雜,而學校的實驗課通常安排得較短、較分散,學生難以在課上解決所有問題。例如部分學生在完成五級流水CPU實驗的過程中,由于缺乏對延遲槽的理解,導致MIPS二進制執(zhí)行文件不能在CPU中正確運行,而這一問題的解決往往需要較長時間。因此,在采用該平臺的過程中,應考慮協(xié)調教務部門,將課程的實驗課集中安排,以實踐周的方式進行更有利于學生集中時間完成實驗。
基于龍芯開源CPU的計算機組成原理實驗平臺在南京郵電大學計算機科學與技術專業(yè)2014級、2015級進行了推廣,極大地調動了學生的學習積極性,取得了較好的教學效果。在實驗過程中,通過動手實踐,學生往往能夠發(fā)現(xiàn)一些新的問題和意想不到的困難,通過克服困難尋求解決方案,學生的動手能力得到較明顯的提升。此外,在今后的教學實踐中筆者還會進行一些優(yōu)化和調整,例如結合操作系統(tǒng)、數(shù)字電路等課設的實驗課程,形成更全面、更系統(tǒng)的實驗組合,以便更加全面地覆蓋計算機系統(tǒng)學科的理論知識。
[1]Patterson D A, Hennessy J L. Computer organization and design: The hardware/software interface[M]. 北京: 機械工業(yè)出版社,2014: 1-23.
[2]白中英, 戴志濤. 計算機組成原理[M]. 5版. 北京: 科學出版社, 2013: 1-30.
[3]丁紅勝. 面向計算機系統(tǒng)能力培養(yǎng)的計算機組成原理實驗教學[J]. 計算機教育, 2016(7): 20-24.
[4]李麗萍, 盛琳陽. 基于EDA技術的計算機組成原理實驗課開放性教學模式研究[J]. 計算機教育, 2010(10): 55-57.
[5]周寧寧, 程春玲. 基于FPGA技術的計算機組成原理實驗系統(tǒng)[J]. 現(xiàn)代電子技術, 2005(1): 23-25.
[6]吳迪, 謝雪炎, 吳賀俊. 基于FPGA的計算機組成原理實驗教學探索[J]. 計算機教育, 2014(18): 30-34.
[7]中科龍芯. 龍芯開源CPU項目[EB/OL]. [2017-11-15]. http://www.loongnix.org/index.php.
[8]中科龍芯. 全國并行應用挑戰(zhàn)賽[EB/OL]. [2017-11-15]. http://www.pac-hpc.com/.