柳 星,袁景凌,饒文碧,鄒承明,熊盛武
(1.武漢理工大學 計算機湖北省重點實驗教學示范中心,湖北 武漢 430070;2. 武漢理工大學 計算機科學與技術學院,湖北 武漢 430070)
當前,計算技術已從初期的科學計算與信息處理進入到以移動互聯、物聯網、云計算與大數據為主要特征的新時代,培養具備系統能力的計算機專業人才已成為國內外教育專家的共識[1]。早在2006年,教育部高等學校計算機科學與技術專業教學指導委員會便對計算機專業學生能力培養進行了研究,并出版了文獻[2—3]。書中明確指出,計算機專業學生應培養4種重要專業能力:程序設計與實現能力、計算思維能力、算法設計與分析能力以及系統能力,其中系統能力占總能力點的75%,對于計算機專業能力培養具有重要作用。2013年,ACM/IEEE起草了計算機學科課程設置報告CS2013[4],也將計算機系統能力培養作為重點內容進行闡述,認為計算機教學應樹立系統觀,指導學生從多層次的細節抽象思考問題,培養學生的軟、硬件協同設計思維,使學生具備設計并實現具有一定規模的復雜計算機系統能力。
系統能力培養實現的重要技術途徑是對計算機組成原理、操作系統、編譯原理等核心課程群進行貫通,學生具備自主開發“1個CPU、1個操作系統、1個編譯器”的能力[5-7]。學生通過計算機組成原理等課程的學習,能基于FPGA實現一個CPU;通過操作系統等課程的學習,能開發出針對此CPU的操作系統;通過編譯原理等課程的學習,將開發的操作系統編譯到CPU上運行。上述課程群的貫通教學將使學生全面掌握計算機系統知識點,并具備開發足夠規模復雜計算機系統的能力。在上述課程群中,計算機組成原理又具有承上啟下的關鍵作用[8],既以數字邏輯為先導,又為計算機系統結構、操作系統、編譯原理等后續課程提供重要支撐,是計算機學科的核心專業基礎課程。
在改革計算機組成原理實驗內容之前,我們同國內多數高校一樣,采用公司集成開發好的模型實驗箱進行實驗。實驗箱將控制器、運算器、存儲器等部件固化好,學生在實驗時只需參照指導書通過手工連線、開關控制、上傳微程序等方式與實驗系統交互。經過多年的教學,我們發現此實驗模式存在一些問題:首先,實驗設計大多以驗證型為主,學生缺乏思考過程。實驗過程也僅能觀看到系統運行演示效果,學生無法深入理解系統內部工作原理。其次,平臺上各部件功能固化,不能進行擴展與重編程,學生缺少自主創新開發的空間。此外,實驗設計側重對局部原理的簡單驗證,缺乏對復雜系統的綜合設計與實現。最后,不同課程采用不同的實驗箱,實驗課程相互獨立,不能對軟硬件核心課程進行貫通。
上述實驗模式不利于計算機專業學生系統能力的培養。為此,我們在考察浙江大學、清華大學、北京航空航天大學等兄弟院校后,對我校計算機組成原理課程教學進行了改革,提出以可編程FPGA為實驗開發平臺,以Xilinx ISE為硬件設計及仿真工具,以學生自主開發CPU為實驗目標的組成原理實驗體系。FPGA開發平臺選用Digilent公司的SWORD(simple while organic aRc design)教學實驗系統。SWORD面向計算機系統能力培養課程貫通體系而設計,內容涵蓋從數字邏輯硬件設計,到指令集架構設計與擴展,并延伸到編譯器設計,甚至涵蓋操作系統設計與實現,以及基于上述一切內容的計算機系統集成設計與應用,可較好地滿足計算機專業系統能力教學改革所涉及的各層次實驗設計需求。實驗內容以開發多流水線MIPS指令集CPU為主體,要求學生實現能支持常規定點指令及操作系統運行所需基本系統級指令的CPU,培養學生具備開發一定規模復雜系統的能力,并為后續操作系統等課程的改革打下基礎。
改革新內容的實驗教學推廣中,出現了以下問題:①CPU體系結構比較復雜,如何深入淺出地向學生講授一個復雜計算機系統的設計與實現過程;②許多學生缺乏FPGA開發基礎,如何幫助他們快速理解且靈活掌握FPGA開發技術;③如何讓學生在實驗課堂外,也能隨時隨地進行遠程實驗;④面對數十甚至上百名學生,指導教師如何在有限的教學時間內高效地指導眾多學生。
CPU體系結構具有一定復雜性,為幫助學生更好地掌握CPU設計與實現方法,可采用模塊化分解及逐級驗證的實驗方法。首先,將CPU分解為一系列功能簡單的模塊,先直接提供各模塊IP核,通過IP核集成實現一個CPU系統,讓學生從整體上認識CPU系統結構;然后,逐個去掉各模塊IP核,要求學生自主編程實現各模塊功能,并對實現的模塊功能進行逐個驗證;最后,對所有驗證正確的模塊進行綜合,達到自主設計并實現復雜CPU系統的目標。
實驗內容設計如圖1所示。實驗1通過使用IP核集成一個SOC系統,以構建一個CPU運行與調試環境,為后續CPU開發打好基礎。從實驗2開始,實驗內容將集中在SOC系統中CPU開發上。由于CPU體系結構的復雜性,實驗2首先將CPU分解為控制器與數據通路兩大子系統,子系統仍通過提供IP核集成實現,但是學生需對子系統之間的電路連接關系進行設計。實驗2完成CPU的第一次模塊化分解,是后續進一步細分的基礎。從實驗3開始,不再向學生提供IP核,學生需采用頂層原理圖及Verilog編程方式自主實現CPU各模塊功能。實驗3完成CPU控制器的設計與實現工作,實驗4則完成CPU數據通路開發工作。由于數據通路部分系統結構較復雜,實驗4進一步采用模塊化分解方法,將數據通路劃分為ALU單元、寄存器組、跳轉電路等子模塊,通過各子模塊的開發與集成實現數據通路系統。完成上述4個實驗后,學生可基本掌握CPU工作原理及設計與實現方法。在此基礎上,實驗5進一步要求學生對CPU控制器與數據通路電路進行擴展,以達到擴展CPU指令集的目標。

圖1 實驗內容設計
在實驗體系設計上,應首先向學生提供CPU所有模塊的標準IP核,集成一個CPU系統;然后,引導學生自主實現CPU各模塊功能,每開發一個模塊后,替換掉此模塊對應的IP核,再檢驗整個CPU是否運行正常。若測試無誤,則判定自主開發的模塊功能正確。如公式(1)所示,信號I為測試輸入信號,?I k(x)表示提供的標準IP核實現的模塊k功能,?V k(x)表示學生自主開發的模塊k功能,信號O表示輸出。如果O1與O2相同,則證明自主開發的模塊2功能正確。每次開發一個CPU子模塊并替換掉其對應的IP核,依此類推,最終達到自主實現整個CPU的目標。

大多數學生缺乏FPGA開發基礎,部分學生知道FPGA系統開發操作流程,但不理解為何進行這些操作。采用ISE工具基于FPGA平臺開發一個系統模塊的通用步驟如下:首先,裝載系統各組件符號表(symbol),并繪制頂層原理圖;然后,裝載對應于每個符號表的IP核或進行Verilog編程;最后,對系統進行綜合與實現。學生經過多數訓練后,容易掌握這種開發流程。然而,對于為什么要裝載符號表并繪制頂層原理圖,符號表、頂層原理圖、IP核、Verilog程序之間的關系如何,大多數學生仍未能理解這些問題,導致難以對FPGA系統開發技術進行靈活變通。為了幫助學生快速掌握FPGA開發技術并理解其本質意義,可嘗試類比教學法,以學生熟悉的C程序開發為實例,FPGA技術開發原理如下。
FPGA系統設計圖實例及對應的C語言程序如圖2所示。采用類比后,每個系統模塊可類比于C程序中一個子函數,模塊符號表可類比于函數名,模塊輸入信號類比于函數參數值,輸出信號類比于函數返回值,符號表各引腳間的連線類比于確定各函數間參數與返回值的傳遞,符號表連線后形成的頂層原理圖類比于一個主函數,鍵盤輸入類比于scanf變量賦值,七段數碼管輸出類比于printf打印顯示,模塊IO引腳定義類比于函數申明,IP核對應于函數庫,各模塊的Verilog編程則類比于各函數體的C語言編程。
理解上述類比機制后,則可采用C程序的開發流程類比推導FPGA技術的開發方法,從而達到靈活變通且創造性地使用FPGA技術的目的。例如,在C程序中,函數體可通過C編程或調用C庫實現;相對應地,FPGA系統中每個模塊功能也可以通過Verilog編程或直接調用IP核實現。在C程序中,一個主函數可調用一系列子函數,每個子函數又可繼續調用子函數;相對應地,在FPGA開發中,CPU可用頂層原理圖實現,而CPU頂層圖中每一個子模塊也可繼續采用類似于CPU頂層圖的方法進一步實現。
教學過程中,我們發現學生實驗操作存在兩方面約束:①上位機軟件環境約束。為了進行實驗,學生需在個人PC等終端上安裝ISE開發工具,安裝過程及安裝后的環境配置操作復雜。若能省去在所有用戶終端上構建軟件開發環境的過程,將大大提高實驗操作的便利性。②下位機硬件設備約束。由于實驗室管理等各種原因,許多實驗設備不允許帶出實驗室,學生只能在指定時間來實驗室進行實驗,限制了實驗操作的空間性。因此,如何能讓學生隨時隨地方便地進行實驗是實驗管理需面對的重要問題之一。

圖2 FPGA系統設計圖及類比的C語言程序
針對上述問題,我們采用云計算技術及虛擬化技術開發了一套共享云實驗平臺。實驗平臺包含兩大部分:后臺實驗設備集群和云實驗服務平臺。云平臺包含一系列虛擬服務器,每個服務器均已搭建FPGA軟件開發環境,且可與后臺任意一個實驗設備綁定。學生可采用任意PC終端在任意時間遠程登錄云服務平臺。云平臺將為每位登錄學生分配一臺虛擬服務器,學生可直接在虛擬服務器上進行實驗操作。由于服務器已搭建軟件開發環境,學生不再需要在用戶終端上安裝及配置軟件開發環境。每個服務器會關聯一臺空閑的實驗設備,用戶遠程操作實現對設備的控制,并將設備的運行狀態通過遠程視頻傳輸顯示在用戶終端上。此共享云實驗平臺不僅提高了實驗資源的利用率,還解決了上位機與下位機實驗條件對學生實驗操作的約束,使得學生能隨時(不局限在課堂時間)隨地(任選一臺PC終端即可直接開發)進行實驗。
實驗改革工作前期推廣中出現了兩大問題:①指導教師需在有限課堂時間內指導并驗收數十位甚至上百位學生,平均分配到每名學生的時間極少,那么如何在有限課堂時間內讓每位學生得到充分指導。②指導教師對改革新內容不熟悉,且無法及時得到充分的幫助,指導教師又該如何學習以盡快掌握改革新內容。
針對上述問題,我們在教學過程中嘗試了培養學生助教的方法,從所帶班級中選出一定比例的學生助教,讓他們與指導教師一起參與改革新內容的學習與探討中。通過不定期組織研討會,提出各個實驗中所需研究的問題,針對每個問題分析出幾種可能答案,再針對每種答案列出數種驗證方法,然后分配任務,對每種驗證方法進行實測驗證,最終尋找到問題的答案。上述方法的使用可以有效解決前期推廣中的兩大問題:①加快改革新內容的學習進程。指導教師獨自研究改革新內容時容易陷入困境,通過與多名優秀學生共同討論及分工實踐,則可以更快解決問題,保證改革新內容的教學順利推進。②每位學生可得到更充分的實驗指導。假設有90名學生,一堂實驗課90 min。若不培養學生助教,指導教師平均分到每位學生的指導時間僅為1 min。采用助教培養機制后,可從每9名學生中選出1名助教,并由此助教協助輔導8名學生的實驗操作與調試工作,較好地延長每位學生平均接受指導的時間。
我們從理論知識掌握情況、復雜計算機系統開發實踐技能、軟硬件課程群貫通能力培養、應用案例創新開發等方面對改革效果進行評估。
(1)理論知識的全面與深入理解。傳統計算機組成原理實驗以驗證型為主,學生主要觀看系統各部分運行演示效果,難以深入理解系統各部件內部結構及工作原理。實驗改革后,學生需學習甚至自主設計各計算機部件內部電路,并掌握其工作原理,這對于計算機組成與系統結構課程的理論學習具有重要的促進作用。
(2)復雜計算機系統綜合開發能力的提升。傳統組成原理實驗箱各部件硬件功能固化,不支持自主開發,學生以驗證系統各部件功能為主。實驗改革后,要求學生基于FPGA可重編程硬件平臺,采用整體到局部逐層模塊化分解思維、FPGA計算機系統開發技術、硬件測試及軟件仿真等系統驗證方法,自主開發一個復雜的計算機系統,增強學生對復雜計算機系統的綜合開發能力。
(3)軟硬件課程群貫通能力的培養。實施改革前,各核心基礎課程采用不同的實驗箱,實驗環節相互獨立。實施課程改革后,我們將計算機組成原理實驗與編譯原理及操作系統實驗在同一個SWORD開發板上進行了貫通。在大二上學期,我們通過數字邏輯課程改革,要求學生在SWORD開發板上開發基本的數字邏輯部件;大二下學期,我們通過計算機組成與系統結構課程的改革,要求學生對之前開發的數字邏輯部件進行綜合,從而開發出一個CPU系統;在大三學年的編譯原理及操作系統教學中,我們進一步要求學生開發出對應于此前CPU的編譯器及操作系統,并通過此編譯器將操作系統編譯到此前開發的CPU上運行。通過上述課程群的貫通,學生具備了在同一個實驗平臺上開發出一個CPU、1個編譯器及1個操作系統的系統能力。
(4)應用案例創新開發。我們鼓勵學生在所開發的CPU硬件平臺上通過匯編指令編程進行上層應用程序開發。目前,已有部分學生基于SWORD開發板所構建的CPU成功開發了一些小游戲程序,如貪吃蛇、俄羅斯方塊、LED乒乓球等。這些應用程序的開發證明學生具備了對數字邏輯、計算機組成原理、編譯原理、匯編語言等課程進行貫通的能力,對于提高學生的計算機系統能力具有重要意義。
此外,我們還收集了有關教學改革效果的調查反饋數據。在實驗內容難易程度方面,認為實驗1難、中等及容易的學生分別占14%、44%、42%,實驗2分別為8%、70%、22%,實驗3分別為18%、72%、10%,實驗4分別為16%、66%、18%,實驗5則為50%、36%、14%。從結果可看出,采用模塊化分解、逐級驗證等教學方法可有效降低復雜計算機系統的設計與實現復雜度,除了50%的學生感覺實驗5指令集擴展較難外,多數學生均認為可較好地理解與掌握其余4個CPU開發的基礎實驗,證明多數學生已具備開發CPU系統的能力。對類比教學、云實驗平臺建設、學生助教等方法的調查結果表明,92%的學生認為類比教學法具有深入淺出的教學效果,幫助他們快速且深入地掌握基于FPGA的CPU設計與實現技術;82%的學生認為共享云實驗平臺建設提高了實驗資源的利用效率,且為他們的實驗提供了較大的便捷性;96%的學生認為采用學生助教提高了實驗教學質量,且活躍了實驗課堂氣氛,擔任助教的學生則普遍認為在與教師進行集體研討的過程中,培養了團隊合作能力,學會了發現問題及分析問題的思維方式并加深了對理論知識的理解,提高了他們在就業及升學上的競爭力。
為培養學生的計算機系統能力,筆者對計算機組成原理課程進行改革,提出基于FPGA開發平臺設計并實現多流水線MIPS指令集CPU的實驗體系;針對教學改革推廣中所遇到的系統實現復雜度高、學生FPGA開發基礎薄弱、實驗場地與實驗時間受限、有限課堂時間內難以得到充分實驗輔導等問題,探索了模塊化分解與逐級驗證、類比教學、實驗云平臺建設、學生助教模式等教學方法。實踐效果證實,上述教學方法的推廣可加深學生對理論知識的理解,增強學生開發復雜計算機系統的實踐技能,并可使學生具備對多門核心專業課程進行貫通的能力,對于計算機專業人才的系統能力培養具有重要作用。
[1] 王志英, 周興社, 袁春風, 等. 計算機專業學生系統能力培養和系統課程體系設置研究[J]. 計算機教育, 2013(9): 1-6.
[2] 教育部高等學校計算機科學與技術專業教學指導委員會. 高等學校計算機科學與技術專業人才發展戰略研究報告暨專業規范[M]. 北京: 清華大學出版社, 2006: 220-227.
[3] 教育部高等學校計算機科學與技術專業教學指導委員會. 高等學校計算機科學與技術專業人才專業能力構成與培養[M]. 北京: 機械工業出版社, 2010: 72-78.
[4] ACM/IEEE–CS Joint Task Force on Computing Curricula. Computer science curricula 2013[EB/OL]. (2013-12-20) [2017-09-15].http://ai.stanford.edu/users/sahami/CS2013/.
[5] 高小鵬. 計算機專業系統能力培養的技術途徑[J]. 中國大學教學, 2014(8): 53-57.
[6] 施青松, 陳文智. 強化計算機課程貫通教學 深入面向系統能力培養[J]. 中國大學教學, 2014(12): 61-65.
[7] 劉衛東, 張悠慧, 向勇, 等. 面向系統能力培養的計算機專業課程體系建設實踐[J]. 中國大學教學, 2014(8): 48-52.
[8] 袁春風, 楊若瑜, 王帥, 等. 計算機組成與其他課程之間的關聯內容分析[J]. 計算機教育, 2015(17): 35-38.