吳 強,彭蔓蔓,李建江
(1.湖南大學 信息科學與工程學院,湖南 長沙 410082;2. 北京科技大學 計算機與通信工程學院,北京 100083)
隨著“做中學”理念在計算機教學中的深入[1],硬件設計實驗已成為計算機硬件基礎課程,如數字邏輯、計算機組成原理、計算機系統結構等課程的重要組成部分[2-4]。CPU設計實驗在計算機系統結構教學中有著重要的作用,是學生深入了解計算機體系結構核心知識的重要手段。通常,這些實驗采用商業EDA(電子設計自動化)軟件作為設計工具,例如Altera公司(現已被Intel公司收購)的Quartus或者Xilinx公司的ISE等[5-6]。
采用商業EDA軟件作為硬件設計工具常常出現的一個問題是:商業EDA軟件功能比較龐雜,對學生來說,學習和掌握商業EDA軟件需要花費較多的時間。在實際教學中,往往發現由于學生對商業EDA軟件不熟悉,導致在硬件設計實驗初期常常受挫于一些簡單問題而產生畏難情緒,打擊了其對硬件設計的興趣,不利于實現實驗教學目標。
開源軟件由于其開放的特點,近年來在計算機實踐教學中得到了青睞和廣泛應用[7]。計算機組成原理、計算機系統結構等課程也廣泛使用了開源軟件模擬器輔助課程知識的講解,甚至安排了相關的實驗[4-8]。不過,在硬件設計實驗中采用開源軟件替代商業EDA軟件還比較少見,一方面與開源EDA軟件比較少有關,另一方面是因為FPGA實驗平臺限制了設計軟件的選擇。
計算機系統結構課程中CPU設計實驗目標主要是功能性驗證,并不強調一定要用硬件實現,因此不是必須采用支持完整硬件實現,尤其是FPGA實現流程的商業EDA軟件。根據這一特點,筆者提出采用開源EDA軟件的計算機系統結構課程CPU設計實驗方案。
計算機系統結構課程是面向非計算機科學與技術專業學生的選修課,被安排在大三上學期,開設給智能科學與技術、物聯網工程、信息安全等學科及專業的學生。這些專業的學生都已先修了計算機組成原理或類似課程,對計算機系統硬件設計有一定了解。但是,因為專業培養目標更偏向于計算機應用,因此在硬件設計上的實踐訓練要求不像計算機科學與技術專業那樣深入,主要目標是讓學生了解現代計算機系統體系結構方面的技術和特征,從而更好地利用計算機系統實現所需功能。
在課程實踐訓練安排上,本課程的實驗也不像面向計算機科學與技術專業那樣安排單獨的實驗課程,而是跟隨課堂教學過程,由教師自主安排課程實驗。這意味著本課程的實驗不會有FPGA實驗板等硬件資源支持。實際上,以往本課程的實驗通常利用各種軟件模擬器向學生演示計算機體系結構中硬件的設計方法和特性。
基于軟件模擬器的演示性實驗雖然在幫助學生了解計算機體系結構知識方面比較直觀,但是通過硬件設計掌握相關知識能產生更加深刻的理解和記憶。因此,在本課程中,筆者安排了以CPU設計為核心的實驗項目,希望貫徹“做中學”的教學理念,加深學生對相關知識的了解。由于課程實驗并不安排在FPGA實驗板上完成,因此筆者選擇了開源EDA軟件作為設計工具,以便降低軟硬件方面的學習開銷,提高學習效率。
按照學校的要求,計算機系統結構課程采用“課堂講授+課程實驗”的方式組織教學。課程共64學時,其中課堂教學48學時,課程實驗16學時,在16周內完成。
課程實驗的16個學時共安排了32節課,每次4節課,共計8次實驗課。通常這8次實驗課會根據實驗室資源利用情況安排在學期中第3周到第10周完成。如果實驗室資源緊張,可能會有所推遲,但最晚不超過第15周。
筆者給這8次實驗課安排了3個實驗項目,要求完成后演示并提交實驗報告。具體的實驗項目安排見表1。
這3個實驗項目以流水線CPU設計為核心,最終完成一個支持數據轉送(Data forwarding)和單個分支延遲的5級流水線CPU。需要說明的是,其中指令和數據存儲器設計是簡化的,假定它們能與CPU同頻率運作。
筆者根據所承擔計算機系統結構課程實驗的需要,選擇VHDL作為硬件設計描述語言,因此選擇了GHDL[9]開源軟件作為VHDL設計描述的模擬工具。為了查看電路輸出波形,筆者選擇了GTKWave[10]開源軟件作為波形查看工具。表2給出了開源EDA軟件與商業軟件Quartus Prime Lite[5]的簡單比較。
由表2可知,GHDL和GTKWave軟件功能簡單明確,文件大小適合快速下載安裝,而Quartus軟件因為功能龐雜,文件很大,下載和安裝比較耗時。除此之外,在實際使用中,GHDL軟件模擬速度比較快,而Quartus軟件模擬速度相對較慢。這主要是因為GHDL對VHDL代碼采取轉換為C++程序后編譯運行的方式,因此模擬速度相對于采用解釋方式的Quartus軟件要快。

表1 實驗項目

表2 設計工具比較
采用開源EDA軟件的設計流程與使用商業軟件設計流程基本一致,都包括硬件設計描述輸入、硬件設計描述編譯(綜合)、硬件設計模擬、模擬結果查看和驗證。在本計算機系統結構課程CPU設計實驗中,具體設計流程如下:
(1)采用gedit編寫VHDL代碼,包括測試例程(testbench);
(2)使用GHDL編譯VHDL代碼,產生可執行文件;
(3)運行第(2)步產生的可執行文件,得到模擬結果;
(4)利用GTKWave查看模擬結果的波形,檢查和驗證結果是否正確。
上述設計流程要求學生在Linux操作系統下進行。這樣做的好處是可以直接使用Linux系統附帶的各種開源軟件,例如C++編譯器;同時,可利用Linux下的MAKE工具,為上述設計流程編寫腳本,從而省去每個步驟都需要在命令行輸入相應命令的重復操作。
考慮到目前大多數學生習慣了可視化界面操作,對命令行操作方式不熟悉,為減少學生因命令行操作方式而耽誤的時間,我們閉合編寫了一個簡單的程序,把設計流程中需要用到的命令封裝在可視化界面下,以便學生能迅速使用gedit、GHDL、GTKWave等開源軟件完成CPU設計實驗。
該程序列出了文件目錄樹以及當前目錄下所有文件和子目錄,學生可以通過菜單選擇文件進行編輯、編譯或運行以及查看波形文件。程序界面見圖1。
圖中菜單選項實際都是執行相應的命令行命令。由于GHDL先將VHDL代碼轉換成C++程序,然后進行編譯和運行,因此菜單中的“分析文件(Analyze File)”是對VHDL代碼進行轉換,“編譯測試例程(Build Testbench)”是對轉換后的C++程序進行編譯,“運行測試例程(Run Testbench)”則是運行編譯后的可執行程序,產生模擬結果的波形文件,然后就可以使用菜單選項“查看波形(View Waveform)”進行檢查了。

圖1 可視化界面
筆者在2016—2017年的計算機系統結構課程中采用了上述基于開源EDA軟件的CPU設計實驗方案,學生表示他們可以接受這一實驗方案。課程實驗的討論和交流中,學生反映開源EDA軟件的編譯和模擬速度很快,能讓他們“立刻測試(對設計做的)修改”,提高了設計效率。
如筆者預料的一樣,學生在開始學習命令行操作時提出了很多問題,主要是對命令行操作方式不熟悉導致。筆者專門抽出1節課的時間向學生解釋了命令行操作的知識,大部分學生可以參考筆者給出的命令說明開始實驗。相對于以往使用商業EDA軟件的情況,雖然講解課時都是1節課,但明顯使用開源EDA軟件時學生的掌握程度較好。這是因為開源EDA軟件功能簡單明確,按照命令說明操作即可得到預期的結果。然而,商業EDA軟件功能龐雜,學生在實際操作中總是受挫于一些選項設置、流程步驟,甚至是菜單選項位置等方面的問題而停頓不前。總的來看,采用開源EDA軟件的學習開銷較使用商業EDA軟件要少。
學生在使用開源EDA軟件進行設計時,最常見的一個積極評價就是模擬速度比使用商業EDA軟件快。筆者在實驗指導時也可以看到,學生采用MAKE腳本編譯和運行測試例程的時間基本是秒級的,而不是商業EDA軟件那種分鐘級別的等待。這使學生能在修改設計后,迅速完成測試,檢查修改效果,從而不斷推進設計過程,最后得到正確結果。因此,在筆者看來,本計算機系統結構課程采用開源EDA軟件,設計效率是更高的。
在計算機系統結構課程的CPU設計實驗中采用開源EDA軟件,對降低學習開銷、提高設計效率有積極作用。不過筆者也認識到,這主要是因為本課程的CPU設計實驗基本是功能性設計和驗證,省去了硬件實現環節帶來的好處。因此,不能就此認為開源EDA軟件可以完全替代商業EDA軟件,而應該根據實際情況選擇符合要求的EDA軟件。
學生對命令行式操作的學習速度之快是筆者在實驗指導中比較意外的發現。由于以往學生總是接觸可視化操作軟件,筆者一度以為學生學習命令行操作會比較費時,因此還編寫了簡單的可視化界面程序。但在實驗中,學生只在初期使用了幾次可視化界面程序,一旦學會命令行操作,尤其使用MAKE腳本后,更傾向于使用自動化程度高的MAKE腳本,而不再使用可視化界面程序。這可能意味著在未來教學中可以嘗試更多命令行操作方式的開源軟件。
由于計算機系統結構課程CPU設計實驗不必進行FPGA實現,筆者嘗試采用開源EDA軟件作為硬件設計工具,而不是FPGA廠商的商業化EDA軟件,并規劃了相應的實驗方案和硬件設計流程。實驗教學效果表明這一實驗方案有利于降低學生的學習開銷、提高設計效率,鼓勵了筆者在未來教學中嘗試更多的開源軟件。