魯東大學信息與電氣工程學院 山東煙臺 264025
計算機組成原理是計算機科學與技術專業(yè)的核心專業(yè)必修課程,也是軟件工程專業(yè)的重要選修課程,為了提高課程的授課效果,許多院校都開設了與之匹配的實踐課程—計算機組成原理課程設計。通過課程設計的實施,可從整機的角度加深學生對計算機系統(tǒng)及工作原理、實現(xiàn)方法的理解,形象地建立層次結構的計算機系統(tǒng)的概念,培養(yǎng)計算機系統(tǒng)思維能力,外延并提升組成原理課程的授課效果。
組成原理課程設計的內容一般均為構建一個模型計算機系統(tǒng),通過CU設計使該模型機支持一個較為完備的指令系統(tǒng),成為一個可執(zhí)行命令的計算機。根據CU設計采用的是微程序還是硬布線方式,課程設計的實施方案可分為:基于FPGA平臺采用HDL語言方式和基于專用組成原理實驗平臺采用微程序方式兩類方案。國內一些一流院校多采用第一種方式,這種方式可以從部件設計入手,至CU設計完成,構建一個完整的模型機系統(tǒng),的確可以較好地鍛煉學生的能力。但前提是學生具有較為扎實的HDL語言基礎和設計能力,并且學時充足,要求較高,實施起來難度較大。
作為普通的地方院校,學院在計算機專業(yè)建設方面,主要面向就業(yè)需求,培養(yǎng)上層數(shù)據處理和智能控制方向的工程應用型人才,學時所限,并未開設HDL語言硬件設計類課程,而且課程設計學時有限,僅為16學時,無法承載HDL內容的講授,開設基于FPGA的課程設計顯然是不可行的。因此,教研組提出了一種基于微程序方式的、易于實施的組成原理課程設計方案,降低了實施難度,充分利用了課程設計時間。通過合理的方案設計,同樣可在多方面鍛煉學生的能力,達到課程在能力培養(yǎng)方面的預期要求。
通過課程設計的實施,幫助學生進一步建立整機概念,加深對層次結構的計算機系統(tǒng)的理解。圍繞這一實施理念,在充分考慮學時、學生能力和實驗條件的情況下,將課程設計分為3個相互聯(lián)系的模塊,分別是指令系統(tǒng)設計、指令系統(tǒng)實現(xiàn)—微程序設計,以及利用該指令系統(tǒng)進行的應用程序設計。各模塊與計算機系統(tǒng)層次的對應關系如圖1所示,涉及計算機系統(tǒng)的ISA層、微體系結構層、編程語言層和應用層[1],縱向貫穿各層次,構建簡單的模型機系統(tǒng),體驗課堂理論知識的具體應用,體會各層次角度觀察的計算機系統(tǒng),加深計算機各層次之間的聯(lián)系,將學生對計算機系統(tǒng)的理解提升到一個新的高度。
圖1 系統(tǒng)層次結構與設計模塊之間的對應關系
基于實驗室教學使用的組成原理專用實驗箱,對課程設計各模塊的具體內容規(guī)劃如下。
1.1.1 指令系統(tǒng)設計
該模塊要求學生根據第三階段—匯編程序設計的功能需求,充分考慮實驗臺在功能、數(shù)據通路和指令格式要求等各方面的因素,設計一個最多包含16條指令的指令系統(tǒng)。以TEC-9實驗臺為例,支持的機器指令有單字節(jié)/雙字節(jié)兩種長度,操作碼位數(shù)固定為4位,單/雙地址碼可采用立即數(shù)、寄存器、直接、間接、寄存器間接和相對尋址共6種尋址方式。該模塊實施的主要難度在于大部分學生此前未接觸過具體處理器指令集架構,對于處理器指令集應提供的功能指令類型、高級語言程序與底層匯編實現(xiàn)之間的關系缺乏認識,因此需要在實施階段進行示范講解,補充相應的知識,使學生建立程序功能到匯編實現(xiàn)再到指令功能支持的概念,才能進行合理的指令集設計。
1.1.2 微程序設計
該模塊的主要任務是由學生通過微程序設計的方式,在實驗臺上實現(xiàn)其設計的指令系統(tǒng),使實驗臺模型機可以理解并執(zhí)行指令,進而可在下一模塊運用指令編寫程序。在這一階段,學生需要仔細分析并掌握實驗臺支持的微指令格式,包括操作控制字段支持的控制信號、順序控制字段的下地址長度以及條件碼的使用方法。并在實施過程中通過示例講解,引導學生將指令集中每條指令分解成微操作序列,結合微指令地址分配和條件碼的使用,將微操作序列繪制成微操作流程圖。最后,利用實驗工具,填充微操作碼點表,生成每一條微指令,并學習逐條調試、驗證機器指令和微指令的方法。
1.1.3 匯編程序設計
頂層模塊是學生利用自己設計的指令系統(tǒng)編寫一個能夠實現(xiàn)一定功能的機器指令/匯編指令程序,體會高級語言程序是通過怎樣的機器指令序列實現(xiàn)的,理解機器的指令集架構ISA對實現(xiàn)上層程序功能的支持與限制。同時,在此過程中,提供簡單的匯編器,學生可通過定義、修改規(guī)則文件,支持機器指令的助記符格式—匯編指令,由此構成高級語言—匯編語言—機器指令之間的認知關聯(lián)。
課程設計的實施是基于專用組成原理實驗箱的,因此在開展課程設計之前,學生必須準確理解實驗箱構建的模型機結構,熟練掌握實驗箱的使用方法,充分了解實驗箱的功能和限制。
1.2.1 課內實驗打基礎
在開設課程設計之前,計算機組成原理課程先開設了16學時的課內實驗。課內實驗在開設時間和開設內容上,與課堂教學同步,主要為部件單元實驗,分別為互聯(lián)方式—總線、存儲器、運算器、執(zhí)行部件和中斷系統(tǒng)。課內實驗可將課堂授課的抽象內容具體化、形象化,幫助學生理解各大功能部件的工作方式和控制方法。通過課內實驗的鍛煉,學生應該熟悉實驗臺模型機的主要功能部件的具體結構和控制信號,并能從整體上理解實驗臺模型機采用的雙總線結構,為后續(xù)課程設計的實施打下堅實的基礎。
1.2.2 課前預備提問題
由于采用專用實驗臺模擬實現(xiàn)計算機組成,因此在某些方面已經從硬件電路上固定,不能隨意更改。在進行課程設計之前,將詳細的設計說明書分發(fā)給學生,要求學生詳細閱讀,提前了解課程設計的內容,并針對自身不明白、不明確的內容,進行匯總,帶著問題進入課程設計,有的放矢,達到設計時間的最佳利用。
1.2.3 設計分組練協(xié)作
考慮課程設計的完成難度,采用分組進行的方式,每組2~3人,由學生根據自己的能力,根據強弱組合的原則,在設計開始前,自愿組成設計小組。通過采用小組制方式,組內成員合理分工、強弱幫帶,發(fā)揮每個人的能力,通力合作完成設計,既降低了設計的難度,增加了設計的樂趣,還鍛煉了參與團隊合作與溝通的能力[2]。
在課程設計的前期準備工作中,學生已經對實驗臺的基本情況有了比較充分的了解,盡管如此,對于初次接觸CU設計的學生而言,要在16學時內完成模型機的設計,仍然存在一定困難。因此,將課程設計的實施分為思路建立和實現(xiàn)設計兩個過程(如圖2所示)。
圖2 課程設計的實施過程安排示意圖
1.3.1 思路建立過程
實驗臺提供一個實現(xiàn)了12條指令的指令系統(tǒng),在課程設計的前半部分,通過充分利用該示例,幫助學生建立思路、掌握方法,進而在后續(xù)開展自己的設計。
過程1:編寫匯編小程序
教師講解示例指令系統(tǒng)的指令格式、功能和使用方法,要求學生利用這些指令編寫一個具有一定功能的小程序,例如:排序、數(shù)據傳送等。通過這一過程,不僅可幫助學生理解底層機器指令的功能,使學生掌握利用實驗環(huán)境編寫、調試匯編程序的方法,還可達到關聯(lián)高級語言程序與底層實現(xiàn)方法、培養(yǎng)學生的機器級程序編程思路的效果。從而使學生對于在底層實現(xiàn)某種程序功能需要怎樣的功能指令有一定的認識,以便根據后期匯編程序功能的規(guī)劃,完成指令系統(tǒng)的功能設計。
過程2:分析、修改示例指令系統(tǒng)的微程序
通過示例上述指令系統(tǒng)中典型機器指令在實驗臺的微程序編寫方法,講解實驗臺的微程序流程設計、微指令格式要求及微指令編碼方法。在此基礎上,要求學生通過逐一分析給定指令系統(tǒng)全部指令的微程序流程,建立機器指令功能與微程序實現(xiàn)之間的關聯(lián),熟知微指令格式中操作控制字段支持哪些控制信號的發(fā)出,順序控制字段中有哪些可用條件、轉移方式以及微地址范圍,了解機器指令操作碼編碼與微程序入口地址的分配關系,掌握微程序對操作數(shù)不同尋址方式的支持方法,建立如何利用實驗臺進行微程序設計的綜合認識。
通過以上兩個過程的學習,學生還應對專用實驗臺的設計實施能力有所掌握,對實驗臺數(shù)據通路、寄存器數(shù)量、機器指令格式、微指令格式、控存容量等方面的可用情況有準確的理解,避免設計中出現(xiàn)天馬行空、不可實現(xiàn)的情況。
1.3.2 設計實現(xiàn)過程
本課程設計的實現(xiàn)過程與普通程序設計不同,是一種逆向思維過程。一般程序編寫是學生想辦法利用編程語言實現(xiàn)要求的程序功能,而組成原理的課程設計則是由學生先確立一個可實現(xiàn)的程序功能,然后想辦法自己設計并完成一個指令系統(tǒng)來支持這個功能程序的編寫。
在明確程序功能需要的底層指令后,根據實驗臺機器指令格式的操作碼編碼、地址碼格式及尋址方式的要求和限制,逐一完成每條機器指令的格式設計,從而完成整個指令系統(tǒng)的初步設計。下一步通過微程序來支持這些指令功能的運行。
根據每條指令的功能,繪制其微程序流程圖,根據操作碼散轉規(guī)則和轉移分支方法,標定每條微指令的地址。根據流程圖,填寫微指令碼點表,完成指令系統(tǒng)的微指令編碼,并逐一測試每條機器指令微程序是否支持該指令的功能。調試并修改微程序,完成模型機的指令系統(tǒng)設計。
運用該指令系統(tǒng),編寫既定功能程序,并測試該程序是否達到預期功能效果。其間存在問題,可能需要從添加、修改機器指令開始,重復上述過程,直至完成課程設計的全部要求。
課程設計評價采用形成性評價與終結評價相結合的方式。終結評價采用小組答辯的方式進行,答辯時要求提交完整、規(guī)范的設計文檔,由小組成員演示所設計的模型機情況,并由教師針對其設計對每一位小組成員進行提問,根據設計的難易程度、完成情況、創(chuàng)新性、報告書寫情況以及回答問題的準確度,給出答辯成績。同時,根據學生在設計過程中的日常表現(xiàn),包括認真好學、刻苦鉆研的精神,分析和解決問題的思路及方法,出勤率及任務達成度等生成形成性評價。兩者結合,給出學生課程設計的最終考核成績。這種綜合考核方式,能夠起到以考促學,促進學生知識和能力的全面發(fā)展,達到提高課程實施效果的作用。
課程設計中模型計算機系統(tǒng)的構建,涉及組成原理課程學習內容的大多數(shù)知識點(如表1所示),既包括馮·諾依曼計算機各大部件的基本控制方法,也包括將指令系統(tǒng)設計技術、CU控制信號分析方法、CU微程序設計技術等復雜的原理性知識付諸實踐。這種理論與實踐的有效結合,使學生對于課程的核心知識內容有了更加形象、深刻的認識,從而達到實踐課程對理論授課效果的提升作用。
表1 課程設計中涉及的理論知識點
如圖1所示,課程設計的內容貫穿了層次結構的計算機系統(tǒng),不僅從系統(tǒng)級設計的角度有效地關聯(lián)了課程自身各個知識模塊,還通過底層-微體系層和上層—編程語言層的功能設計,使學生能夠從高級語言、匯編語言、機器語言及其硬件實現(xiàn)等多個層次上思考同一個問題的解決方法,縱向打通學生知識平臺中軟、硬件知識的壁壘,深化了各系統(tǒng)層次之間的聯(lián)系,有效地提升了學生的整機概念和系統(tǒng)能力。
作為實踐課程,課程設計除了對以上知識能力的培養(yǎng),對工程素養(yǎng)和工程技術能力的培養(yǎng)也發(fā)揮著重要的作用。在以小組為單位,獨立設計、完成任務的過程中,既能夠鍛煉學生的團隊協(xié)作和交流能力,也能夠發(fā)揮學生的思維拓展和創(chuàng)新能力;較為緊張的時間安排,則對學生的自我學習能力、分析問題解決問題的能力都提出了考驗;評價形式—答辯,則從總結歸納問題能力、文檔撰寫能力和語言表達能力等方面鍛煉了學生。
基于微程序CU進行的組成原理課程設計,盡管沒有采用VHDL硬件設計,但相對于學時和前序課程基礎不足等困難,這種方式具有易于上手及實施的優(yōu)點。通過該課程設計方案的實施,不僅加深了學生對課程知識的理解,學生知識平臺的搭建和綜合能力培養(yǎng)也取得了良好的效果。在今后的教學工作中,將不斷總結經驗,優(yōu)化課程設計的環(huán)節(jié),以便更好地利用課程設計環(huán)節(jié)提升學生的培養(yǎng)質量。