賴曉錚,畢 盛,李垚圣,黃永燊
(華南理工大學 計算機科學與工程學院,廣東 廣州 510641)
隨著計算機科學技術的飛速發展,計算機系統應用日益深化和多元化,對計算機專業人才培養提出了巨大的挑戰。如何適應計算機技術發展的新趨勢,培養具備系統能力的計算機專業人才,已成為國內外教育領域關注的焦點。國外CS2013(Computer Science Curricula 2013, ACM&IEEE)提出,計算機科學本科畢業生應具備系統層次的視野,強調學生需從多層次的細節抽象思考問題,對計算機的理解要從計算機系統結構和構建分析過程出發[1]。我國高校計算機科學與技術專業教指委從能力培養的角度,強調要重視計算機系統類核心課程教學及對學生計算機系統能力的培養[2]。
計算機系統類核心課程包括計算機組成原理、操作系統和編譯原理這3門課程,其中計算機組成原理是唯一的“硬件”核心課程,重點論述計算機的邏輯結構組成,其前導課程數字邏輯偏重于講解邏輯結構部件的電子(器件)實現,后續課程計算機體系結構側重于講解由邏輯結構部件組成的CPU整體架構,再后續的課程微機接口則著眼于CPU與各種外設接口組成不同的微型計算機系統。上述課程前后銜接,共同構成計算機專業的硬件課程群[3-5]。計算機硬件課程把具體的硬件電路和抽象的邏輯結構有機結合,是編譯原理、操作系統等其他核心課程的基礎,有利于鍛煉學生的動手實踐能力,培養學生計算機系統設計的全局觀念[6]。清華大學、北京航空航天大學、南京大學等國內高校以各種形式從不同程度對計算機硬件課程的實驗教學改革進行了卓有成效的實踐與探索[7-9]。
傳統的計算機硬件課程實驗一般在計算機模型實驗箱上進行,實驗箱上的ALU、控制器、RAM、ROM等各個計算機部件已經固定,操作實驗時,學生參照實驗指導書上的說明,通過插拔連線、撥動開關、編寫微程序等方式與實驗箱交互。該實驗模式存在以下問題:實驗箱結構普遍老化,缺少流水線、堆棧等計算機體系結構的最新發展成果;學生每次實驗都需要大量繁瑣的連線操作,而且只能做驗證實驗,不能自主設計CPU電路,嚴重降低了學習興趣,影響實驗教學效果[10]。
近年來,國內高校一直致力于探索基于可編程邏輯器件FPGA的硬件實驗改革,讓學生在實驗中直接利用硬件描述語言HDL實現計算機功能組件的描述和連接[10-12]。這種新興的實驗模式亦存在以下問題:學生需要有相當的FPGA基礎才能開始學習,但是現有的課程安排缺乏足夠的課時和熟練的師資去培養學生的FPGA設計能力;此外,學生容易誤把硬件描述語言HDL等同于高級編程語言,不利于建立起對硬件電路的正確認識[13]。
虛擬仿真技術可以較好地解決上述計算機硬件課程實驗教學中存在的問題:在proteus軟件的虛擬仿真環境中,運用常見的中小邏輯器件“積木式”搭建計算機組成部件,設計CPU,甚至組裝外設接口,構成微型計算機系統。上述實驗過程與傳統的“模型實驗箱”的面板插線過程非常類似,不需要任何專業知識就能操作,而且所有硬件電路都是“透明”的,可以直觀地看到每根導線和每個器件管腳上的電平高低;同時,上述實驗過程具有“可編程邏輯FPGA”的高度靈活性,學生不僅可以根據教科書上的計算機體系結構知識,自主設計不同架構的CPU,如經典的流水線架構,還可以自定義CPU的指令集,也可以采用最底層的機器語言實現對CPU的編程。虛擬仿真實驗技術所具備的“低門檻”和“高靈活性”特點,有利于降低計算機硬件類課程的實驗門檻,提高學生對計算機硬件課程的學習興趣;有利于增強學生的自主創新意識,提升學生的計算機硬件系統分析能力和設計能力。
以虛擬仿真技術為手段,可以構建數字邏輯、計算機組成原理、計算機體系結構和微機接口技術的貫通式硬件課程實驗教學體系,如圖1所示。各階段的實驗從簡到難依次遞進,有效銜接,讓學生逐步建立起完整的計算機系統分析和設計觀。

圖1 計算機硬件課程群的實驗教學體系
數字邏輯課程是計算機硬件課程群的先導課程,計算機硬件電路設計中所涉及的邏輯器件,如寄存器、譯碼器、計數器等都必須在該課程中熟練掌握。表1中的5個數字邏輯實驗,遵循“邏輯門→算術電路→組合邏輯電路”和“觸發器→寄存器→計數器”兩條主線展開。上述實驗的設計吸收了國外教材的先進經驗[14],不僅介紹集成器件的功能和使用方法,還用邏輯門搭建對應的等效電路,如圖2中的74LS153數據選擇器及等效的4選1數據選擇電路,能讓學生更清晰地了解邏輯器件的工作原理和結構。
計算機組成原理課程是計算機系統類核心課程,課程內容包含表2中的5個實驗,系統地介紹組成CPU的三大部件:運算器、存儲器和控制器。其中,控制器是最重要的內容,而狀態機則是控制器中最核心的部分,用以產生控制器所需的自動時序。“狀態機”實驗則分別介紹兩種經典的狀態轉移電路:環形計數器和扭環計數器(Johnson計數器)。在兩個“控制器”實驗中構建一個“最小版本”CPU,且只具有程序跳轉功能,這樣可以讓學生注意力集中在控制器運行機制上。該“最小版本”CPU框架分別提出3種控制器設計方案:微程序、單周期和多周期硬布線控制器。

表1 數字邏輯實驗內容

圖2 數據選擇器74LS153及其等效電路

表2 計算機組成原理實驗內容
CPU設計是計算機系統能力培養中一個至關重要的環節,包括表3中的4個實驗。該系列實驗的總體設計思想是在一個統一的CPU指令集框架下,主要是38條機器指令,采用不同的CPU架構如微程序、硬布線、流水線等來實現CPU。從編程角度看,4個實驗所設計的CPU程序基本一致,除了流水線CPU需要考慮指令相關性,而底層的硬件架構則互不相同,學生能通過比較深入理解CPU架構的細節。學生甚至可以通過“搭積木”的方式,圍繞自定義的指令集,循序漸進地組裝定制版CPU,并且運用自定義的指令編寫機器語言程序,實現特定的功能,如循環、程序分支、數組處理、子程序調用等。此外,嵌套中斷CPU實驗硬件實現了CPU的PC和PSW“斷點”堆棧,從而支持CPU(微程序/硬布線/流水線)的四級嵌套中斷機制。通過上述CPU設計,學生能對CPU有全面的理論認識和切身的設計體會。
“流水線CPU”實驗中首次實現了完全由邏輯門構建的具有中斷功能的流水線CPU,這在現有的國內外公開文獻里尚未有報道。如圖3所示,該CPU采用“取指(F)→譯碼(D)→執行(E)→寫回(W)”四級流水線架構,其中譯碼、執行和寫回階段有各自獨立的指令寄存器D_IR、E_IR和W_IR。流水線CPU的數據通路嚴格按照國外經典教材[15]講授的寄存器傳輸級(RTL)描述方式構建,分為譯碼、執行和寫回的三級結構;數據通路的每一級都有獨立的硬布線控制器,由該級指令寄存器譯碼生成微操作信號,級間設有寄存器組,用以保存指令相關數據經過該級硬布線邏輯執行后的中間結果。當某條指令在流水線CPU的指令寄存器流水線“D_IR→E_IR→W_IR”上推進時,指令相關數據亦在CPU數據通路的各級同步推進。

表3 計算機體系結構實驗內容

圖3 流水線CPU電路圖
CPU設計完成后,學生還需要把CPU與不同的外設接口進行組合,才能構成一個完整的計算機系統。微機接口實驗提供了CPU常見的8種外設:①并行IO端口芯片8255;②定時器/計數器芯片8253;③串口通信芯片8251;④模數轉換芯片ADC0809;⑤數模轉換芯片DAC0832;⑥液晶屏模塊LCD1602;⑦中斷控制器8259;⑧DMA實驗8237。8種外設形成8個實驗,均能使用計算機體系結構實驗定義的指令集中的38條機器指令,在微程序CPU上編寫機器語言程序驅動外設,能完全重現傳統微機原理課程實驗中8086CPU驅動外設所實現的功能。
學生除了在proteus虛擬仿真環境中進行實驗之外,還可以通過“軟硬一體化”的實驗箱模式在實際環境中動手驗證,如圖4所示。硬件實驗箱采用模塊化設計,眾多外設模塊都掛在由核心模塊——通用仿真器延伸出來的16位地址和數據總線上,除了包括上述微機接口實驗系列中涉及的8種外設,即8255、8253、8251、ADC0809、DAC0832、液晶屏、8259和8237之外,還有串口轉USB模塊(連接PC)、矩陣鍵盤、數碼管、流水燈、撥碼開關、交通燈模型等。

圖4 “軟硬一體化”實驗箱
核心模塊——通用仿真器,是一個帶USB接口的ARM單片機,其主要功能是以高頻率定期掃描上述外設所掛的數據和地址總線上的高低電平,然后打包成USB協議的數據塊,通過USB線傳送到PC機的proteus虛擬仿真軟件中,在虛擬仿真環境總線模型延伸出來的虛擬總線上形成相對應的高低電平;同樣,總線模型也解析虛擬總線上的高低電平信號,通過USB總線傳送到通用仿真器上,并在實驗箱的物理總線上模擬出相對應的高低電平。因此,PC虛擬仿真環境的虛擬總線和實驗箱上的物理總線互相映射,可以看成是一條“總線”。
如圖4所示,在PC機的虛擬仿真環境中,學生可以開放式自定義CPU及其指令集,也可以選擇8086、8051、ARM等CPU模型進行編程,然后通過虛擬總線映射到實驗箱的物理總線,控制實驗箱面板上的真實外設。這樣,借助虛擬仿真技術,學生不需要繁瑣的接插線,就能快速設計和搭建CPU,大大提高實驗速度和可靠性;同時,學生可以觀察實驗箱面板上的物理外設并動手實踐,實現“軟硬一體化”的實驗效果。
隨著計算機科學技術不斷發展,計算機專業學生已經從過去的應用開發者,向計算機系統分析和設計者轉變。工程師要了解軟件,程序員也要熟悉硬件,軟硬件協同設計成為必然發展趨勢。虛擬仿真教學路線就是讓計算機專業的學生“零基礎”進行計算機硬件課程實驗,不追求“高大上”的實驗技術,只追求“直觀、便捷、高效”的實驗效果,降低學習門檻,提高學習興趣,貼近實際為基礎課程實驗教學服務。我們采用的所有實驗都是“拋磚引玉”的開放式實驗,僅僅為師生提供啟發和參考,教師和學生可以自由探索,設計定制自己的CPU,或者把CPU與多個外設組成更加復雜的計算機系統。未來的工作重點是嘗試通過虛擬仿真技術設計更復雜的32位CPU,如MIPS架構、RISC-V架構等;同時,在機器語言編程的基礎上,結合編譯原理課程,鼓勵學生自行設計編譯器和匯編器,甚至在自己設計的CPU上移植嵌入式操作系統,真正實現計算機核心類課程,如計算機組成原理、編譯原理和操作系統的大綜合。
[1]The joint task force on computing curricula of ACM/IEEE. Computer science curricula 2013 ironman draft(version 0.8)[EB/OL].(2013-03-26)[2016-06-07]. http://ai.stanford.edu/users/sahami/CS2013/ironman-draft/cs2013-ironman-v0.8.pdf.
[2]教育部高等學校計算機科學與技術專業教學指導分委員會. 高等學校計算機科學與技術專業人才專業能力構成與培養[M].北京: 機械工業出版社, 2010: 19-20.
[3]唐志強, 朱子聰. 計算機專業硬件課程體系的改革[J]. 計算機工程與科學, 2014(增刊2): 159-161.
[4]施青松, 陳文智. 強化計算機課程貫通教學深入面向系統能力培養[J]. 中國大學教學, 2014(12): 61-65.
[5]盛建倫, 鞏玉璽, 劉淑霞, 等. 計算機專業硬件基礎課程實驗教學體系的研究[J]. 實驗室研究與探索, 2013(10): 387-391.
[6]肖娟, 龔德良, 陸武魁, 等. 計算機硬件基礎課程實驗改革與實踐[J]. 計算機教育, 2014(5): 43-45.
[7]王志英, 周興社, 袁春風, 等. 計算機專業學生系統能力培養和系統課程體系設置研究[J]. 計算機教育, 2013(9): 1-6.
[8]高小鵬. 計算機專業系統能力培養的技術途徑[J]. 中國大學教學, 2014(8): 53-57.
[9]劉衛東, 張悠慧, 向勇, 等. 面向系統能力培養的計算機專業課程體系建設實踐[J]. 中國大學教學, 2014(8): 48-52.
[10]楊銳, 翟社平, 寧曉菊. 面向系統能力培養的計算機組成原理實踐教學改革[J]. 計算機教育, 2016(12): 24-27.
[11]何紅旗, 常瑞, 張有為, 等. 計算機硬件類課程實踐教學的困境與思考[J]. 計算機教育, 2016(2): 34-36.
[12]董梁, 翟社平, 王曉婕, 等. 計算機硬件實踐教學改進探索[J]. 計算機教育, 2016(7): 55-59.
[13]馮國富, 馬玉奇, 易叢琴, 等. 面向數字邏輯與計算機組成原理銜接的實踐環節[J]. 計算機教育, 2017(2): 141-145.
[14]Mano M M. 邏輯與計算機設計基礎[M]. 4版. 北京: 機械工業出版社, 2012.
[15]Bryant R E, O’Hallaron D. 深入理解計算機系統[M]. 2版. 北京: 機械工業出版社, 2010.