劉 芹,涂國慶
(武漢大學(xué) 國家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072)
“計算機組成原理”是信息安全專業(yè)學(xué)生接觸到的第一門硬件專業(yè)基礎(chǔ)課程,向?qū)W生綜合展示計算機系統(tǒng)的基本結(jié)構(gòu)和工作原理,為后續(xù)的專業(yè)課程學(xué)習(xí)做好準(zhǔn)備,CPU原理和設(shè)計是這門課程的核心[1]。以CPU為核心的各類芯片也是構(gòu)建信息產(chǎn)業(yè)的核心基礎(chǔ),是影響“自主可控”國家信息產(chǎn)業(yè)戰(zhàn)略實施的關(guān)鍵,對信息安全專業(yè)的學(xué)生尤為重要[2]。
目前高校開設(shè)“計算機組成原理”實驗課的主要方式如下[3-6]:(1)使用純硬件搭建實驗平臺,雖然該方式可深入接觸計算機硬件模塊,但實驗操作機械死板,硬件平臺開發(fā)成本較高;(2)采用軟件系統(tǒng)仿真的方式,該方法不依賴硬件,成本較低、易于上手,但學(xué)生不能在實驗過程中較好體會到計算機與硬件的緊密結(jié)合;(3)基于FPGA的組成原理實驗平臺具有可編程、直觀、學(xué)生動手程度高等優(yōu)點,然而存在對學(xué)生的軟硬件預(yù)備知識要求高、設(shè)備調(diào)試復(fù)雜的缺點,難以在較短的實驗課時內(nèi)完成。
武漢大學(xué)信息安全專業(yè)曾開展過基于FPGA的開放式CPU教學(xué)實踐,學(xué)生普遍反映課程難度高。由于學(xué)生初次涉足CPU結(jié)構(gòu),對計算機原理尚處于初步認識和理解階段,CPU設(shè)計實踐只是初試身手,要求過高容易使部分學(xué)生在遇到問題時無法解決,產(chǎn)生迷茫和挫敗感,導(dǎo)致學(xué)生對硬件課程失去興趣,這更為短時間內(nèi)(例如24課時)完成實驗任務(wù)提出了巨大的挑戰(zhàn)。
CPU設(shè)計過于專業(yè),相關(guān)書籍晦澀難懂,相關(guān)設(shè)計工具不易上手。面對復(fù)雜系統(tǒng)、陡峭的學(xué)習(xí)曲線,教育經(jīng)驗表明模仿是最佳的學(xué)習(xí)方法。筆者所在的教學(xué)團隊對“計算機設(shè)計實踐”課程進行了教學(xué)改革,為學(xué)生提供了一個極簡功能的MIPS單周期CPU示例SCCPU0。SCCPU0支持少量指令,僅能完成非常簡單的處理。學(xué)生無需對SCCPU0做任何修改或代碼補充即可較快上手,這與提倡“從零”開始設(shè)計CPU不同。學(xué)生通過SCCPU0掌握實驗環(huán)境的使用,初步了解CPU設(shè)計的全流程,理解CPU實現(xiàn)框架,學(xué)習(xí)Verilog HDL代碼風(fēng)格和編寫規(guī)范。SCCPU0是實驗的起點,后續(xù)任務(wù)是對SCCPU0進行迭代擴展,使CPU功能更加完善和復(fù)雜。精心的課程設(shè)計和任務(wù)分解可引導(dǎo)學(xué)生在比較有限的課時內(nèi)在FPGA上完成驗證CPU的目標(biāo)。教學(xué)團隊還設(shè)計了用戶友好的仿真驗證平臺和SOC驗證平臺,統(tǒng)一的驗證平臺既方便了學(xué)生調(diào)試和驗證CPU,也為教師現(xiàn)場驗收實驗提供了便利。教學(xué)改革成效證明多種課程改革措施有效地平緩了“計算機設(shè)計實踐”課程陡峭的學(xué)習(xí)曲線,激發(fā)了學(xué)生學(xué)習(xí)硬件課程的興趣和潛力。
“計算機設(shè)計實踐”課程的目的是融會貫通“計算機組成原理”課程所教授的知識,通過對知識的綜合應(yīng)用,加深對CPU系統(tǒng)各模塊的工作原理及相互聯(lián)系的認識;學(xué)習(xí)采用EDA(electronic design automation)技術(shù)設(shè)計MIPS單周期CPU、多周期CPU和流水線CPU的技術(shù)與方法;培養(yǎng)科學(xué)研究的獨立工作能力,取得CPU設(shè)計與仿真的實踐和經(jīng)驗;了解SOC系統(tǒng),并在FPGA開發(fā)板上實現(xiàn)簡單的SOC系統(tǒng)。
使用Verilog HDL設(shè)計實現(xiàn)支持指定MIPS指令子集的單周期、多周期和流水線CPU,并在CPU上運行某任務(wù)程序(例如學(xué)號數(shù)位排序),在FPGA開發(fā)板上通過七段數(shù)碼管等外設(shè)顯示任務(wù)處理結(jié)果。
實驗需要使用如下軟硬件。
1.Nexys4-DDR 數(shù)字電路開發(fā)板。Nexys4-DDR采用了Xilinx Artix-7 FPGA芯片,它是一款簡單易用的數(shù)字電路開發(fā)平臺,可以支持在課堂環(huán)境中設(shè)計一些行業(yè)應(yīng)用。
2.MARS。MARS是一個輕量級的、用于教學(xué)的MIPS匯編語言集成開發(fā)環(huán)境(IDE)。本課程使用MARS進行MIPS匯編語言的學(xué)習(xí)、編寫和運行。
3.ModelSim。Mentor公司的ModelSim是業(yè)界最優(yōu)秀的HDL語言仿真軟件,它能提供友好的仿真環(huán)境,是業(yè)界唯一的單內(nèi)核支持VHDL和Verilog混合仿真的仿真器。
4.Vivado。該設(shè)計套件是Xilinx公司最新為其產(chǎn)品定制的集成開發(fā)環(huán)境,可以完成從設(shè)計輸入、綜合適配、仿真到下載的完整FPGA設(shè)計流程。
本課程的實驗環(huán)境包括多種功能繁雜、使用較復(fù)雜的工業(yè)級軟件和硬件,實驗?zāi)繕?biāo)CPU設(shè)計本身就具有較高的挑戰(zhàn)性,這兩大困難是學(xué)習(xí)曲線陡峭的主要原因。我們通過精心的課程設(shè)計和任務(wù)分解引導(dǎo)學(xué)生在比較有限的課時內(nèi)在FPGA上完成驗證CPU的目標(biāo)。實驗被分解為任務(wù)1—6,其中任務(wù)1—4是必做任務(wù),任務(wù)5—6是選做任務(wù)。
為了幫助學(xué)生在較短的時間內(nèi)清晰理解實驗環(huán)境各組成部分的作用并熟練掌握其使用方法,建立對以Verilog VDL實現(xiàn)的CPU框架的基本認知,筆者所在的教學(xué)團隊為學(xué)生提供了一個極簡功能的MIPS單周期CPU示例SCCPU0。SCCPU0實現(xiàn)了add、sub、and、slt、or、addi、ori、lw、sw、beq、j共11條指令,支持少量算術(shù)邏輯運算、存儲器讀寫、條件轉(zhuǎn)移和無條件跳轉(zhuǎn),僅能完成非常簡單的處理。
SCCPU0是任務(wù)1的操作學(xué)習(xí)對象。SCCPU0在平緩學(xué)生學(xué)習(xí)曲線方面有以下作用:(1)使用SCCPU0進行仿真、綜合和下載,初步了解CPU 設(shè)計的全流程,掌握實驗環(huán)境的使用;(2)理解CPU實現(xiàn)框架,把CPU 原理與具體實現(xiàn)建立連接;(3)將SCCPU0的源碼作為Verilog代碼的示范,快速理解各種語法規(guī)則和編碼規(guī)范。
與以往的教學(xué)方法不同,SCCPU0“麻雀雖小,五臟俱全”,學(xué)生無需對SCCPU0做任何修改或代碼補充即可較快上手。即使在課程初期給學(xué)生安排簡單的設(shè)計型任務(wù),學(xué)生也有可能由于對實驗環(huán)境熟悉、操作失誤導(dǎo)致無法及時完成任務(wù),從而失去繼續(xù)學(xué)習(xí)的興趣和信心。
SCCPU0 是實驗的起點,后續(xù)任務(wù)是對SCCPU0進行迭代擴展,使CPU功能更加完善和復(fù)雜。為了幫助學(xué)生進一步理解CPU功能的擴展方法,任務(wù)2是在SCCPU0中添加對jal指令的支持形成單周處理器SCCPU1。教學(xué)團隊通過現(xiàn)場授課方式,逐步演示添加jal指令的過程,并講解如何對新擴展的指令進行測試。雖然任務(wù)2只包括少量的設(shè)計工作,但它已能清楚地展示指令擴展從什么地方入手,涉及哪些方面的修改以及測試方法。值得注意的是,擴展CPU后不僅需要驗證新增指令的功能是否正確,還需確認原有指令功能是否會因新增指令引入的bug而受到影響。
任務(wù)1~2對學(xué)生沒有太多設(shè)計要求,但它們對降低課程初始的難度具有重要的作用。當(dāng)CPU設(shè)計下載到FPGA開發(fā)板上運行結(jié)果正確時,微小的成功也會激發(fā)學(xué)生學(xué)習(xí)硬件的熱情,提高學(xué)習(xí)的積極性。任務(wù)1和任務(wù)2可消除復(fù)雜實驗環(huán)境對學(xué)生造成的困擾,也有利于學(xué)生更準(zhǔn)確地理解實驗?zāi)繕?biāo)。
任務(wù)3是對SCCPU1擴展指令sll、nor、sltu、lui、slti、bne、andi、srl、sllv、srlv、jr、jalr,形成單周期處理器SCCPU2,SCCPU2共支持24條指令,已經(jīng)可以完成相對復(fù)雜的算法,例如排序。任務(wù)3由學(xué)生完全獨立完成。由于已提供單周期CPU的設(shè)計框架,該任務(wù)的設(shè)計工作量中等。
任務(wù)4是實現(xiàn)多周期處理器MCCPU,MCCPU實現(xiàn)的指令與SCCPU2相同。多周期CPU設(shè)計的難點是如何通過有限狀態(tài)機實現(xiàn)控制器,教學(xué)團隊會為該任務(wù)提供一個簡單的有限狀態(tài)機FSM代碼示例,其余部分由學(xué)生獨立完成。由于沒有提供多周期CPU的設(shè)計框架,該任務(wù)的設(shè)計工作量較高。
任務(wù)5是實現(xiàn)五級流水線處理器PLCPU,MIPS五級流水線需要處理數(shù)據(jù)相關(guān)和冒險相關(guān),實現(xiàn)比較復(fù)雜,該任務(wù)是可選任務(wù),供學(xué)有余力的學(xué)生選做,設(shè)計工作量高。
任務(wù)6是在SCCPU2、MCCPU或PLCPU上實現(xiàn)具有異常和中斷功能的處理器ECPU,該任務(wù)是可選任務(wù),供學(xué)有余力的學(xué)生選做,設(shè)計工作量較高。
計算機設(shè)計實踐以CPU設(shè)計為核心,為了驗證CPU功能的正確性,需要搭建用戶友好的驗證平臺。CPU功能的驗證通過兩個步驟進行,首先使用ModelSim完成仿真驗證,再通過Vivado綜合、下載比特流文件至FPGA開發(fā)板完成SOC驗證。為了方便使用,搭建CPU驗證平臺需滿足:(1)仿真驗證平臺中的CPU模塊與SOC驗證平臺中的CPU模塊接口完全相同,即仿真驗證平臺測試通過的CPU可完全不做修改用于SOC驗證;(2)驗證平臺中的CPU模塊可指單周期CPU、多周期CPU和流水線CPU,因為它們的外部接口完全一致。
Modelsim仿真驗證平臺包含了CPU模塊、指令存儲器im和數(shù)據(jù)存儲器dm。MIPS程序二進制文件固化在指令存儲器im中,當(dāng)testbench提供時鐘激勵信號時,CPU從im中不斷取指令、執(zhí)行指令。需要指出的是,當(dāng)驗證多周期CPU時,只需使用同時存放代碼和數(shù)據(jù)的存儲器mem。
SOC驗證框架中除了CPU、指令存儲器和數(shù)據(jù)存儲器以外,還包含時鐘分頻模塊、多數(shù)據(jù)通路模塊、總線譯碼模塊和七段數(shù)碼管接口模塊,以利用Nexys4-DDR上的IO部件實現(xiàn)數(shù)據(jù)輸入(開關(guān)輸入)和結(jié)果輸出(七段數(shù)碼管),這些模塊的源碼提供學(xué)生直接使用。指令存儲器可由Vivado的IP核生成。
當(dāng)比特流文件下載至FPGA后,CPU運行的結(jié)果只能通過開發(fā)板上的IO部件如七段數(shù)碼管顯示。SOC驗證平臺通過多數(shù)據(jù)通路模塊對開發(fā)板上的開關(guān)設(shè)置進行了配置,不同的開關(guān)設(shè)置可在七段數(shù)碼管上顯示不同的內(nèi)容。當(dāng)CPU運行不正確時,開發(fā)者可將開關(guān)撥動到相應(yīng)位置,從七段數(shù)碼管上觀察關(guān)注的內(nèi)容,協(xié)助代碼調(diào)試。需要說明的是,調(diào)試時將開關(guān)SW15置為1,CPU慢速運行(利用時鐘分頻得到的慢速時鐘提供給CPU),模擬指令單步執(zhí)行,方便觀察。
以在CPU上運行學(xué)號數(shù)位排序為例說明CPU的功能驗證。每位學(xué)生使用各自學(xué)號的后8位作為待排序的數(shù)據(jù),學(xué)號的每一位采用BCD編碼,構(gòu)成32位二進制數(shù)據(jù),MIPS程序?qū)W(xué)號的各數(shù)位按升序排列,例如某學(xué)生的學(xué)號后8位為“54873530”,排序后應(yīng)為“03345578”,排序前后的數(shù)值能夠通過開關(guān)控制在七段數(shù)碼管上顯示。由于每位學(xué)生的學(xué)號不同,待排序的數(shù)據(jù)不同。差異化的任務(wù)對減少學(xué)生抄襲作弊有一定的作用,也方便教學(xué)團隊進行驗收。
筆者所在的武漢大學(xué)國家網(wǎng)絡(luò)安全學(xué)院自2018年以來推行計算機實踐設(shè)計改革,取得了顯著成效。調(diào)查表明,在改革前,學(xué)生平均累計花費12小時才能比較熟練地掌握實驗環(huán)境使用和擴展指令的方法,學(xué)習(xí)曲線陡峭;在改革后,學(xué)生平均累計花費4小時即可達到同等效果,實驗完成度也明顯提高。改革鞏固了學(xué)生的理論知識,使學(xué)生對所學(xué)知識融會貫通,取得了較好的教學(xué)成果。越來越多學(xué)有余力的學(xué)生選做具有異常和中斷功能的流水線CPU,提升了學(xué)生學(xué)習(xí)硬件課程的興趣,提高了硬件設(shè)計水平。教學(xué)團隊近4年的評教成績位于學(xué)院前列,常有學(xué)生在評教系統(tǒng)中留言表明“終于真正理解CPU了”“這是到目前為止(大學(xué)二年級)收獲最大的課程”。
“計算機設(shè)計實踐”課程改革幫助學(xué)生克服了害怕甚至反感硬件課程的情緒,極大地調(diào)動了學(xué)生的學(xué)習(xí)積極性,取得了較好的教學(xué)效果,使學(xué)生更加深刻地理解了MIPS單周期CPU、多周期CPU、流水線CPU的設(shè)計方法,學(xué)生的動手能力得到較明顯的提升。精心細致的課程設(shè)計和任務(wù)分解有效地降低了課程初期的學(xué)習(xí)難度,多項課程支持措施進一步推進了改革的成效。我們建立了課程師生群,教學(xué)團隊及時解答學(xué)生問題,實驗初期學(xué)生的問題大多與實驗環(huán)境有關(guān)。課程還設(shè)立了FAQ列表,對常見的問題進行收集、分類和解答,方便學(xué)生搜索,自行解決一些共性問題,培養(yǎng)學(xué)生自主解決問題的能力。在今后的教學(xué)實踐中筆者還會進行一些優(yōu)化和調(diào)整,通過更有趣味的實驗任務(wù)充分利用Nexys4-DDR開發(fā)板,挖掘?qū)W生的創(chuàng)造性,增強學(xué)生的社會競爭能力。