吳 強(qiáng),彭蔓蔓,李建江
(1.湖南大學(xué) 信息科學(xué)與工程學(xué)院,湖南 長(zhǎng)沙 410082;2. 北京科技大學(xué) 計(jì)算機(jī)與通信工程學(xué)院,北京 100083)
隨著“做中學(xué)”理念在計(jì)算機(jī)教學(xué)中的深入[1],硬件設(shè)計(jì)實(shí)驗(yàn)已成為計(jì)算機(jī)硬件基礎(chǔ)課程,如數(shù)字邏輯、計(jì)算機(jī)組成原理、計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)等課程的重要組成部分[2-4]。CPU設(shè)計(jì)實(shí)驗(yàn)在計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)教學(xué)中有著重要的作用,是學(xué)生深入了解計(jì)算機(jī)體系結(jié)構(gòu)核心知識(shí)的重要手段。通常,這些實(shí)驗(yàn)采用商業(yè)EDA(電子設(shè)計(jì)自動(dòng)化)軟件作為設(shè)計(jì)工具,例如Altera公司(現(xiàn)已被Intel公司收購(gòu))的Quartus或者Xilinx公司的ISE等[5-6]。
采用商業(yè)EDA軟件作為硬件設(shè)計(jì)工具常常出現(xiàn)的一個(gè)問(wèn)題是:商業(yè)EDA軟件功能比較龐雜,對(duì)學(xué)生來(lái)說(shuō),學(xué)習(xí)和掌握商業(yè)EDA軟件需要花費(fèi)較多的時(shí)間。在實(shí)際教學(xué)中,往往發(fā)現(xiàn)由于學(xué)生對(duì)商業(yè)EDA軟件不熟悉,導(dǎo)致在硬件設(shè)計(jì)實(shí)驗(yàn)初期常常受挫于一些簡(jiǎn)單問(wèn)題而產(chǎn)生畏難情緒,打擊了其對(duì)硬件設(shè)計(jì)的興趣,不利于實(shí)現(xiàn)實(shí)驗(yàn)教學(xué)目標(biāo)。
開(kāi)源軟件由于其開(kāi)放的特點(diǎn),近年來(lái)在計(jì)算機(jī)實(shí)踐教學(xué)中得到了青睞和廣泛應(yīng)用[7]。計(jì)算機(jī)組成原理、計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)等課程也廣泛使用了開(kāi)源軟件模擬器輔助課程知識(shí)的講解,甚至安排了相關(guān)的實(shí)驗(yàn)[4-8]。不過(guò),在硬件設(shè)計(jì)實(shí)驗(yàn)中采用開(kāi)源軟件替代商業(yè)EDA軟件還比較少見(jiàn),一方面與開(kāi)源EDA軟件比較少有關(guān),另一方面是因?yàn)镕PGA實(shí)驗(yàn)平臺(tái)限制了設(shè)計(jì)軟件的選擇。
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程中CPU設(shè)計(jì)實(shí)驗(yàn)?zāi)繕?biāo)主要是功能性驗(yàn)證,并不強(qiáng)調(diào)一定要用硬件實(shí)現(xiàn),因此不是必須采用支持完整硬件實(shí)現(xiàn),尤其是FPGA實(shí)現(xiàn)流程的商業(yè)EDA軟件。根據(jù)這一特點(diǎn),筆者提出采用開(kāi)源EDA軟件的計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程CPU設(shè)計(jì)實(shí)驗(yàn)方案。
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程是面向非計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)學(xué)生的選修課,被安排在大三上學(xué)期,開(kāi)設(shè)給智能科學(xué)與技術(shù)、物聯(lián)網(wǎng)工程、信息安全等學(xué)科及專(zhuān)業(yè)的學(xué)生。這些專(zhuān)業(yè)的學(xué)生都已先修了計(jì)算機(jī)組成原理或類(lèi)似課程,對(duì)計(jì)算機(jī)系統(tǒng)硬件設(shè)計(jì)有一定了解。但是,因?yàn)閷?zhuān)業(yè)培養(yǎng)目標(biāo)更偏向于計(jì)算機(jī)應(yīng)用,因此在硬件設(shè)計(jì)上的實(shí)踐訓(xùn)練要求不像計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)那樣深入,主要目標(biāo)是讓學(xué)生了解現(xiàn)代計(jì)算機(jī)系統(tǒng)體系結(jié)構(gòu)方面的技術(shù)和特征,從而更好地利用計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn)所需功能。
在課程實(shí)踐訓(xùn)練安排上,本課程的實(shí)驗(yàn)也不像面向計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)那樣安排單獨(dú)的實(shí)驗(yàn)課程,而是跟隨課堂教學(xué)過(guò)程,由教師自主安排課程實(shí)驗(yàn)。這意味著本課程的實(shí)驗(yàn)不會(huì)有FPGA實(shí)驗(yàn)板等硬件資源支持。實(shí)際上,以往本課程的實(shí)驗(yàn)通常利用各種軟件模擬器向?qū)W生演示計(jì)算機(jī)體系結(jié)構(gòu)中硬件的設(shè)計(jì)方法和特性。
基于軟件模擬器的演示性實(shí)驗(yàn)雖然在幫助學(xué)生了解計(jì)算機(jī)體系結(jié)構(gòu)知識(shí)方面比較直觀,但是通過(guò)硬件設(shè)計(jì)掌握相關(guān)知識(shí)能產(chǎn)生更加深刻的理解和記憶。因此,在本課程中,筆者安排了以CPU設(shè)計(jì)為核心的實(shí)驗(yàn)項(xiàng)目,希望貫徹“做中學(xué)”的教學(xué)理念,加深學(xué)生對(duì)相關(guān)知識(shí)的了解。由于課程實(shí)驗(yàn)并不安排在FPGA實(shí)驗(yàn)板上完成,因此筆者選擇了開(kāi)源EDA軟件作為設(shè)計(jì)工具,以便降低軟硬件方面的學(xué)習(xí)開(kāi)銷(xiāo),提高學(xué)習(xí)效率。
按照學(xué)校的要求,計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程采用“課堂講授+課程實(shí)驗(yàn)”的方式組織教學(xué)。課程共64學(xué)時(shí),其中課堂教學(xué)48學(xué)時(shí),課程實(shí)驗(yàn)16學(xué)時(shí),在16周內(nèi)完成。
課程實(shí)驗(yàn)的16個(gè)學(xué)時(shí)共安排了32節(jié)課,每次4節(jié)課,共計(jì)8次實(shí)驗(yàn)課。通常這8次實(shí)驗(yàn)課會(huì)根據(jù)實(shí)驗(yàn)室資源利用情況安排在學(xué)期中第3周到第10周完成。如果實(shí)驗(yàn)室資源緊張,可能會(huì)有所推遲,但最晚不超過(guò)第15周。
筆者給這8次實(shí)驗(yàn)課安排了3個(gè)實(shí)驗(yàn)項(xiàng)目,要求完成后演示并提交實(shí)驗(yàn)報(bào)告。具體的實(shí)驗(yàn)項(xiàng)目安排見(jiàn)表1。
這3個(gè)實(shí)驗(yàn)項(xiàng)目以流水線CPU設(shè)計(jì)為核心,最終完成一個(gè)支持?jǐn)?shù)據(jù)轉(zhuǎn)送(Data forwarding)和單個(gè)分支延遲的5級(jí)流水線CPU。需要說(shuō)明的是,其中指令和數(shù)據(jù)存儲(chǔ)器設(shè)計(jì)是簡(jiǎn)化的,假定它們能與CPU同頻率運(yùn)作。
筆者根據(jù)所承擔(dān)計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程實(shí)驗(yàn)的需要,選擇VHDL作為硬件設(shè)計(jì)描述語(yǔ)言,因此選擇了GHDL[9]開(kāi)源軟件作為VHDL設(shè)計(jì)描述的模擬工具。為了查看電路輸出波形,筆者選擇了GTKWave[10]開(kāi)源軟件作為波形查看工具。表2給出了開(kāi)源EDA軟件與商業(yè)軟件Quartus Prime Lite[5]的簡(jiǎn)單比較。
由表2可知,GHDL和GTKWave軟件功能簡(jiǎn)單明確,文件大小適合快速下載安裝,而Quartus軟件因?yàn)楣δ荦嬰s,文件很大,下載和安裝比較耗時(shí)。除此之外,在實(shí)際使用中,GHDL軟件模擬速度比較快,而Quartus軟件模擬速度相對(duì)較慢。這主要是因?yàn)镚HDL對(duì)VHDL代碼采取轉(zhuǎn)換為C++程序后編譯運(yùn)行的方式,因此模擬速度相對(duì)于采用解釋方式的Quartus軟件要快。
表1 實(shí)驗(yàn)項(xiàng)目
表2 設(shè)計(jì)工具比較
采用開(kāi)源EDA軟件的設(shè)計(jì)流程與使用商業(yè)軟件設(shè)計(jì)流程基本一致,都包括硬件設(shè)計(jì)描述輸入、硬件設(shè)計(jì)描述編譯(綜合)、硬件設(shè)計(jì)模擬、模擬結(jié)果查看和驗(yàn)證。在本計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程CPU設(shè)計(jì)實(shí)驗(yàn)中,具體設(shè)計(jì)流程如下:
(1)采用gedit編寫(xiě)VHDL代碼,包括測(cè)試?yán)蹋╰estbench);
(2)使用GHDL編譯VHDL代碼,產(chǎn)生可執(zhí)行文件;
(3)運(yùn)行第(2)步產(chǎn)生的可執(zhí)行文件,得到模擬結(jié)果;
(4)利用GTKWave查看模擬結(jié)果的波形,檢查和驗(yàn)證結(jié)果是否正確。
上述設(shè)計(jì)流程要求學(xué)生在Linux操作系統(tǒng)下進(jìn)行。這樣做的好處是可以直接使用Linux系統(tǒng)附帶的各種開(kāi)源軟件,例如C++編譯器;同時(shí),可利用Linux下的MAKE工具,為上述設(shè)計(jì)流程編寫(xiě)腳本,從而省去每個(gè)步驟都需要在命令行輸入相應(yīng)命令的重復(fù)操作。
考慮到目前大多數(shù)學(xué)生習(xí)慣了可視化界面操作,對(duì)命令行操作方式不熟悉,為減少學(xué)生因命令行操作方式而耽誤的時(shí)間,我們閉合編寫(xiě)了一個(gè)簡(jiǎn)單的程序,把設(shè)計(jì)流程中需要用到的命令封裝在可視化界面下,以便學(xué)生能迅速使用gedit、GHDL、GTKWave等開(kāi)源軟件完成CPU設(shè)計(jì)實(shí)驗(yàn)。
該程序列出了文件目錄樹(shù)以及當(dāng)前目錄下所有文件和子目錄,學(xué)生可以通過(guò)菜單選擇文件進(jìn)行編輯、編譯或運(yùn)行以及查看波形文件。程序界面見(jiàn)圖1。
圖中菜單選項(xiàng)實(shí)際都是執(zhí)行相應(yīng)的命令行命令。由于GHDL先將VHDL代碼轉(zhuǎn)換成C++程序,然后進(jìn)行編譯和運(yùn)行,因此菜單中的“分析文件(Analyze File)”是對(duì)VHDL代碼進(jìn)行轉(zhuǎn)換,“編譯測(cè)試?yán)蹋˙uild Testbench)”是對(duì)轉(zhuǎn)換后的C++程序進(jìn)行編譯,“運(yùn)行測(cè)試?yán)蹋≧un Testbench)”則是運(yùn)行編譯后的可執(zhí)行程序,產(chǎn)生模擬結(jié)果的波形文件,然后就可以使用菜單選項(xiàng)“查看波形(View Waveform)”進(jìn)行檢查了。
圖1 可視化界面
筆者在2016—2017年的計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程中采用了上述基于開(kāi)源EDA軟件的CPU設(shè)計(jì)實(shí)驗(yàn)方案,學(xué)生表示他們可以接受這一實(shí)驗(yàn)方案。課程實(shí)驗(yàn)的討論和交流中,學(xué)生反映開(kāi)源EDA軟件的編譯和模擬速度很快,能讓他們“立刻測(cè)試(對(duì)設(shè)計(jì)做的)修改”,提高了設(shè)計(jì)效率。
如筆者預(yù)料的一樣,學(xué)生在開(kāi)始學(xué)習(xí)命令行操作時(shí)提出了很多問(wèn)題,主要是對(duì)命令行操作方式不熟悉導(dǎo)致。筆者專(zhuān)門(mén)抽出1節(jié)課的時(shí)間向?qū)W生解釋了命令行操作的知識(shí),大部分學(xué)生可以參考筆者給出的命令說(shuō)明開(kāi)始實(shí)驗(yàn)。相對(duì)于以往使用商業(yè)EDA軟件的情況,雖然講解課時(shí)都是1節(jié)課,但明顯使用開(kāi)源EDA軟件時(shí)學(xué)生的掌握程度較好。這是因?yàn)殚_(kāi)源EDA軟件功能簡(jiǎn)單明確,按照命令說(shuō)明操作即可得到預(yù)期的結(jié)果。然而,商業(yè)EDA軟件功能龐雜,學(xué)生在實(shí)際操作中總是受挫于一些選項(xiàng)設(shè)置、流程步驟,甚至是菜單選項(xiàng)位置等方面的問(wèn)題而停頓不前??偟膩?lái)看,采用開(kāi)源EDA軟件的學(xué)習(xí)開(kāi)銷(xiāo)較使用商業(yè)EDA軟件要少。
學(xué)生在使用開(kāi)源EDA軟件進(jìn)行設(shè)計(jì)時(shí),最常見(jiàn)的一個(gè)積極評(píng)價(jià)就是模擬速度比使用商業(yè)EDA軟件快。筆者在實(shí)驗(yàn)指導(dǎo)時(shí)也可以看到,學(xué)生采用MAKE腳本編譯和運(yùn)行測(cè)試?yán)痰臅r(shí)間基本是秒級(jí)的,而不是商業(yè)EDA軟件那種分鐘級(jí)別的等待。這使學(xué)生能在修改設(shè)計(jì)后,迅速完成測(cè)試,檢查修改效果,從而不斷推進(jìn)設(shè)計(jì)過(guò)程,最后得到正確結(jié)果。因此,在筆者看來(lái),本計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程采用開(kāi)源EDA軟件,設(shè)計(jì)效率是更高的。
在計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程的CPU設(shè)計(jì)實(shí)驗(yàn)中采用開(kāi)源EDA軟件,對(duì)降低學(xué)習(xí)開(kāi)銷(xiāo)、提高設(shè)計(jì)效率有積極作用。不過(guò)筆者也認(rèn)識(shí)到,這主要是因?yàn)楸菊n程的CPU設(shè)計(jì)實(shí)驗(yàn)基本是功能性設(shè)計(jì)和驗(yàn)證,省去了硬件實(shí)現(xiàn)環(huán)節(jié)帶來(lái)的好處。因此,不能就此認(rèn)為開(kāi)源EDA軟件可以完全替代商業(yè)EDA軟件,而應(yīng)該根據(jù)實(shí)際情況選擇符合要求的EDA軟件。
學(xué)生對(duì)命令行式操作的學(xué)習(xí)速度之快是筆者在實(shí)驗(yàn)指導(dǎo)中比較意外的發(fā)現(xiàn)。由于以往學(xué)生總是接觸可視化操作軟件,筆者一度以為學(xué)生學(xué)習(xí)命令行操作會(huì)比較費(fèi)時(shí),因此還編寫(xiě)了簡(jiǎn)單的可視化界面程序。但在實(shí)驗(yàn)中,學(xué)生只在初期使用了幾次可視化界面程序,一旦學(xué)會(huì)命令行操作,尤其使用MAKE腳本后,更傾向于使用自動(dòng)化程度高的MAKE腳本,而不再使用可視化界面程序。這可能意味著在未來(lái)教學(xué)中可以嘗試更多命令行操作方式的開(kāi)源軟件。
由于計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程CPU設(shè)計(jì)實(shí)驗(yàn)不必進(jìn)行FPGA實(shí)現(xiàn),筆者嘗試采用開(kāi)源EDA軟件作為硬件設(shè)計(jì)工具,而不是FPGA廠商的商業(yè)化EDA軟件,并規(guī)劃了相應(yīng)的實(shí)驗(yàn)方案和硬件設(shè)計(jì)流程。實(shí)驗(yàn)教學(xué)效果表明這一實(shí)驗(yàn)方案有利于降低學(xué)生的學(xué)習(xí)開(kāi)銷(xiāo)、提高設(shè)計(jì)效率,鼓勵(lì)了筆者在未來(lái)教學(xué)中嘗試更多的開(kāi)源軟件。