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