當前,由于計算機應用的不斷普及,高校很多專業都從各自應用的角度出發開設了計算機技術類尤其是計算機軟件開發類課程。另一方面,隨著嵌入式系統的廣泛應用,我們又急需大量具有系統設計與分析能力和應用開發能力的高級嵌入式開發人才,計算機專業的本科教育應該主動適應這種情況。經過廣泛調研和長期教學、科研實踐,我們認為計算機專業本科教育的目標應該是“面向系統,兼顧應用,加強實踐,鼓勵創新”。
根據這一目標,我校從2003年開始在本科高年級學生中開設了“計算機系統綜合設計”的實踐課程。該課程縱向上融合了學生四年所學的大部分課程知識,橫向上包括了硬件設計、軟件設計以及計算機科學、自動控制、電子技術等多門學科內容。
1課程設計理念
通常計算機專業課程可以分為硬件、軟件、計算機理論和應用類課程。這些課程雖然涵蓋了計算機機科學領域的全部基礎知識,但它們只是相對獨立地介紹某方面知識,沒有串聯在一起,學生缺少從整體的角度認識計算機科學的機會。因此我們需要通過一門實踐課程,像串珍珠一樣將這些課程的主要知識點串聯起來,讓學生在系統層面上認識計算機。
一般課程中有不少都開設了課程實驗,能夠幫助學生很好地理解課程內容。如果綜合課程的實驗內容沒有上升到一個新的高度,就會和這些課程的內容重復,不僅浪費教學資源,也會使學生失去興趣,最終達不到效果。
“計算機系統綜合設計”課程開設的目的是希望學生能夠綜合利用四年所學的有關知識,通過分組合作,自行完成一個小的嵌入式系統的設計。因此我們在整體設計上強調一個系統的思想和創新意識。具體地說:
(1)強調系統軟件與硬件貫穿設計的思想
計算機系統是一個軟件與硬件結合的完整體系,通過大學本科前三年的學習,學生應該建立起軟件/硬件關聯。根據這一關聯,我們把“計算機系統綜合設計”的目標定為:以多人為一組,自行設計一個包含CPU、外圍接口、存儲部件的SOC芯片,并設計與之配套的系統軟件和簡單的應用程序。這樣整個設計過程就包含了硬件、系統軟件和應用軟件三個層面。這樣一個完整系統的設計能夠幫助學生串聯所學的分散知識,深刻理解計算機系統整個軟硬件運行流程。
(2)初步理解軟硬件協同設計思想
學生在學習過程中很容易將軟件與硬件割裂開來,這主要因為大多數學校的硬件和軟件教學分別在一條線上發展,很少有課程把這兩條線合起來。如編譯課程在講到代碼優化時,很少談到根據具體CPU的體系結構進行優化的內容;在組成原理及系統結構課程談到CPU體系結構的時候,也很少介紹利用系統軟件彌補體系結構設計不足的內容。而“計算機系統綜合設計”正好給學生提供了一次全面考慮軟硬件協同設計的實踐機會。在系統設計階段,教師引導學生根據自己的需要規劃好軟件和硬件模塊,尤其要綜合考慮設計難度、執行效率,規劃好哪些模塊用硬件完成,哪些模塊用軟件完成。比如在整個系統設計中,乘法、除法、浮點運算單元究竟用硬件實現還是用軟件來模擬等。雖然不是所有學生都能考慮到這樣的設計,但硬件軟件協同設計的思想卻得到了普及,這對培養高級嵌入式系統開發人員是大有好處的。
(3)鼓勵學生創新思維
高校學生客觀上確實存在能力差別,有些是因為基礎不同,而有些則是因為興趣不同。所以在設計“計算機系統綜合設計”課程的時候,我們做到了尊重個性,寬容失敗,嘗試了多種教學模式,努力營造寬松和諧健康向上的創新文化氛圍,收到了非常好的教學效果:
對于那些基礎好、興趣高大且有志考研的學生,我們不斷為其提供計算機系統技術的最新資料,鼓勵他們認真地實現更復雜的設計,學會用系統科學的方法研究自己設計的性能優劣、當前主流嵌入式系統的新特點等,使其盡早地適應研究型學習
對學有余力但不一定選擇考研的同學,也在完成規定任務的同時給予他們一定的彈性空間,鼓勵他們勇于探索、敢于冒尖,大膽提出新的思想,在設計的某一個方面進行一些新探索。對學生提出來的創新想法甚至是可能失敗的方案都給予肯定和贊許,并對其中不完善的部分加以積極引導
對學習有一定困難的同學,組織他們從查找資料開始積極思考,對設計方案展開討論,引導他們提出問題并考慮解決問題的方法,直到最后獨立完成實驗。學生從中體會到從耕耘到收獲的成功喜悅,一定程度上激發他們向更高目標追求的欲望
對少數沒有動手習慣的學生來說,這樣的教學對他們也是一種鞭策,會逐漸提高其緊迫感和競爭意識,促使他們奮起直追,在暫時的弱勢中獲得前進的動力
幾年的實踐表明,學生的學習熱情是可以激發出來的。每年教學都有優秀的實踐小組實現流水結構、超標量結構CPU,嘗試寫C語言的編譯器,而其他大多數組都會在某一個或幾個模塊上去做創新優化。
2課程設計內容
根據因材施教的原則,我們將課程設計的內容分為基本要求和較高要求,學生只要滿足基本要求就可以通過,而要得到好成績,則需要滿足部分較高要求。
課程設計內容的基本要求是完成一個簡單SoC系統,并為其配備相應的軟件。
(1)硬件部分設計一個可運行指定的31條MIPS指令的RISC型MiniSys微處理器,具有32位指令,32位地址線和32位數據線
處理器采用哈佛結構,有獨立的4KB指令存儲器和4KB數據存儲器
具有2個中斷源入口,兩級中斷優先級
具有2個16位定時/計數器具有一個4×4鍵盤控制器和4位7段LED控制器
具有一個簡單UART串行通信控制器
具有一個PWM控制器
具有看門狗功能
(2)軟件部分
含有編輯功能的MiniSys匯編程序
含有基本輸入輸出系統BIOS
含有硬件各部件測試程序
含有一個應用程序范例
較高要求沒有專門的指標,只是提出一些可能的建議,由學生選擇或自己設計高要求的目標,充分調動學生的積極性和創造性。通常的建議有:
添加一個中斷控制器,擴展多個中斷源
在CPU中增加異常處理功能(如跳轉地址錯,棧溢出等)
采用多周期、流水線等技術設計CPU
可以參考單片機、嵌入式芯片的最新發展的資料,增加其他使用接口部件
考慮編寫一個MiniC編譯程序
考慮用硬件或軟件實現乘法、除法或浮點運算模塊
……
3課程教學實施
為了給學生提供益于創新實踐的環境,我們在課程準備中依據兩個原則:第一,圍繞相關的理論和專業知識安排20時數的課內教學;第二,為該實踐課程建立開放式實踐環境,不定硬框框,給學生留有發揮空間,建立創新設計的軟硬件環境。
在具體實施過程中,我們將全體學生分成5-6人一組,采用組長負責制,利用項目開發的方法進行管理。制定了“四個開放”的總目標,即開放的實踐環境、開放的設計方法、開放的目標要求和開放的評價體系。提出了“四個不限定”的思路,即不限定學生設計的總體結構、不限定學生具體實施設計的步驟、不限定最終的目標與驗證方法、不限定學生實施自己設計的時間和地點。鼓勵學生自主設計,積極創新,給學生充分的自我發揮空間。教師全程跟蹤實驗過程,及時了解學生在課程設計中遇到的問題,進行啟發式指導,并及時對學生的設計提出適當的評價和改進建議。
學生設計結束后,首先要給自己一個性能的估計和分析,在驗收會上由小組推薦成員陳述本組的設計,宣傳本組特色。最后由教師針對學生設計的性能、體系結構合理性、可擴展性和其他模塊配合等進行驗收并給出合理的評價。這種評價必須是從系統的角度去分析,而且是客觀的和有建設性的。
實踐課程完成后,安排一次總結課,主要內容是對學生的設計進行綜合評價,讓學生在比較中對自己的系統進行再一次分析。這種分析往往能讓學生在處理問題的時候學會更全面的分析方法,并激發他們進一步提高自己。
4課程設計成果與進一步發展的思考
“計算機系統綜合設計”課程開設了5年,經過我們的不斷完善,該課程已日趨成熟,獲得了同行與學生的贊許。本學院一位老師評價說:“該課程的改革力度大,取得了比較好的效果。主要表現在這幾年學生在畢業設計階段表現出了比較強的獨立設計能力、團結協作能力和全局考慮問題的綜合分析和應用知識的能力。”另一位老師評價說:“我感覺到,通過這門實踐課程的鍛煉,學生在做操作系統課程設計以及畢業設計的時候,能夠較好地從系統角度全面分析問題,較好地綜合運用軟件和硬件課程所學到的知識解決實際問題,在實踐中也表現出了較強的創新意識。”該課程在建設過程中共發表教學論文5篇,教材編寫也被列入國家“十一五”規劃教材編寫計劃。這幾年,國內多所兄弟院校的同行來我校交流教學經驗,課程建設在江蘇省體系結構會議和全國計算機實踐教學研討會上都得到了同行的認可。
在課程建設過程中,我們感覺到有些地方可以改進。首先,該課程要和先期課程硬件實驗、編譯、操作系統的課程設計逐漸結合,將這些課程的設計延伸到系統綜合設計中。其次,該課程的后續就是畢業設計環節,可以將該課程延伸到畢業設計中,激勵學生設計出更加完善的系統。第三,將該綜合設計課程做到本碩貫通,對嵌入式與體系結構方向碩士生的設計要求與其研究方向相結合,使他們盡早學會資料的收集和消化,為后續研究做好鋪墊。
5總結
“計算機系統綜合設計”課程借助SoC設計思想,借鑒加州大學伯克利分校的經驗,將計算機硬件設計與系統軟件設計綜合到一起,強化了學生從系統角度分析問題和綜合運用能力,符合計算機學科本科生“面向系統,兼顧應用”的培養目標。
該課程的實施和評價體系借鑒IT行業項目開發和驗收的模式,采用組長負責制,利用項目開發的方法進行管理。驗收過程不僅展示課程設計的成果,還通過每個學生對自己設計的介紹,給學生提供了一個展示才華的舞臺,為學生走上工作崗位后很快適應新環境奠定了良好的基礎。