章復嘉, 林 菲
(杭州電子科技大學國家級計算機實驗教學示范中心,杭州 310018)
“卡脖子”事件不僅反應出我國基礎研究薄弱,特別是底層硬件知識產權的匱乏和自主研發(fā)實力的薄弱,更深層次反映出了幾十年來國內高校計算機專業(yè)人才培養(yǎng)方向上的偏差[1-3]。
國家教指委專家在分析計算技術發(fā)展特點的基礎上,介紹了系統(tǒng)能力培養(yǎng)的內涵和需求,針對我國高等教育現(xiàn)狀和系統(tǒng)能力培養(yǎng)中存在的問題,闡述國家教指委關于系統(tǒng)能力培養(yǎng)和課程體系設置的思路[4]。
針對計算機組成原理課程的系統(tǒng)化教學研究中,國內雙一流高?;?85高校起到了領軍作用。文獻[5-6]中提出了面向系統(tǒng)能力培養(yǎng)的計算機專業(yè)課程體系,開發(fā)了支持MIPS32指令集的硬件計算機系統(tǒng)THINPAD和遠程FPGA實驗系統(tǒng)。袁春風等[7]深入研究了北美名校相關課程體系,分析計算機組成與其他課程關聯(lián)關系[8]和研究生入學統(tǒng)考所反應出的計算機專業(yè)高等教育存在的問題[9-10],構建面向系統(tǒng)能力培養(yǎng)的計算機組成課程實驗體系[11-12],從“計算機組成與設計”課程改革出發(fā),重新梳理系統(tǒng)核心課程,新建計算機系統(tǒng)設計綜合實驗課程。文獻[13-15]中以數(shù)字邏輯設計、計算機組成、操作系統(tǒng)、編譯技術等課程為主線建立系統(tǒng)化的課程體系,使用EDA技術設計了兩個級別分別包含低、中、高3個階段的實踐教學方案。文獻[16-17]中對軟、硬件實踐類課程進行研究和整合,開發(fā)了Minisys系統(tǒng)并開設以大型工程項目為背景的“計算機系統(tǒng)綜合課程設計”實踐課程。
每年我國地方高校培養(yǎng)的本科生人數(shù)遠多于雙一流高校和985高校,地方高校因師資、資金、生源等原因,完全照搬上述雙一流和985高校的方案來實施教學難度較大。地方高校自行開發(fā)適合于自身人才培養(yǎng)定位的系統(tǒng)能力培養(yǎng)方案具有重大、深遠意義。
大眾化教育背景下的地方院校定位是培養(yǎng)應用型人才,教學要求體現(xiàn)在:①以簡單的方式講清楚“最基本”的原理;②注重實踐環(huán)節(jié)的實施,以實踐教學促進理論學習。
本文提出的基于32 bit的ARMv7CPU結構的中斷優(yōu)先級控制實驗方案,是“計算機組成原理”課程進行系統(tǒng)化教學改革后新開設的實驗,以EDA技術結合遠程FPGA實驗的方式,彌補原先課程中缺少的中斷內容,同時銜接了先修課“數(shù)字電路設計”、后繼課“操作系統(tǒng)”和“嵌入式系統(tǒng)原理”。
預設ARMv7模型機支持1個irq中斷源和1個fiq中斷源。如圖1所示,圖中紅色部分是fiq中斷源和CPSR[6]控制信號;綠色部分是irq中斷源和CPSR[7]控制信號;紫色部分是中斷優(yōu)先級判斷部件,其余部分有CPU控制單元和模擬中斷向量表功能的緩沖器和開關以及程序計數(shù)器PC。
圖1 fiq和irq中斷控制電路及地址轉移電路
(1)INT_fiq和INT_irq。INT_irq和INT_fiq是irq和fiq中斷請求的引腳信號線,高電平有效。注意:實際上ARMCPU芯片引腳是可重定義的,而且對定義的fiq和irq引腳,都是低電平有效。實驗中把INT_irq和INT_fiq引腳設計為高電平有效。
當fiq和irq中斷都是開中斷狀態(tài),即CPSR[7:6]=2’b00時,irq的外設中斷源和fiq的外設中斷源,同時申請了中斷,則圖1中②和④D觸發(fā)器的Q端同時輸出1。此時,非門輸出0,導致INT_irq=0,而INT_fiq仍然是1,體現(xiàn)出fiq的優(yōu)先級別比irq高。
(2)EX_fiq和EX_irq。fiq和irq各有對應的外部硬件設備,分別發(fā)起irq中斷請求EX_irq,和fiq中斷請求EX_fiq。在D觸發(fā)器③輸出Q=1時,當EX_irq從0變1時,D觸發(fā)器④的Q端將輸出1,也就是通知CPU,外設發(fā)起了一次irq中斷請求。同樣,在D觸發(fā)器①輸出Q=1時,當EX_fiq從0變1時,D觸發(fā)器②的Q端將輸出1,也就是通知CPU,外設發(fā)起了一次fiq中斷請求。
(3)CPSR[7:6]。D觸發(fā)器①在時鐘端下跳沿置數(shù),當CPSR[6]從1變0時,D端高電平傳送到Q端,Q端為1。此時D觸發(fā)器②的Q端是否輸出1,從而傳送給CPU一個irq中斷請求信號,這完全取決于D觸發(fā)器②的時鐘端信號EX_fiq。所以,CPSR[6]從1變0就達到了fiq開中斷的目的。
(1)INTA_fiq和INTA_irq。INTA_irq是irq中斷的響應信號,同時也是2個D觸發(fā)器③④的清零信號。同樣,INTA_fiq是fiq中斷的響應信號,同時也是2個D觸發(fā)器①②的清零信號。當CPU響應fiq中斷時,CPU發(fā)出中斷響應信號,即INTA_fiq=1。此時,兩個D觸發(fā)器①②的Q端都被清零,但是D觸發(fā)器③④不清零。同時,INTA_fiq信號經過或門,打開中斷向量緩沖器的三態(tài)門,使中斷向量緩沖器輸出中斷向量開關的值。
(2)中斷向量開關。中斷向量開關并非ARM所有,而是為fiq和irq中斷控制實驗專門設計的,為實驗中手動設置中斷服務程序入口地址提供途徑。
(3)中斷向量緩沖器。中斷向量開關和中斷向量緩沖器的設計,代替了中斷向量表的功能。本實驗的2個硬件中斷源對應的中斷向量都由此而來。注意,在fiq搶占irq中斷實驗過程中,不要把fiq的中斷向量和irq的中斷向量設成同一地址。應分辨CPU對fiq和irq的中斷響應時間,為兩者分別設置不同的中斷向量。
當CPU響應中斷時,執(zhí)行ARMv7模型機的隱指令如下。
第1個clk周期。判斷fiq或irq的中斷引腳有否中斷申請?是否開中斷?即(Int_irq==1)&&(CPSR[7]==0))||((Int_fiq==1)&&(CPSR[6]==0),若表達式等于1表示應該響應該fiq/irq中斷,則應保存斷點PC值,因此PC→F;
第2個clk周期。應將F中的PC值保存到LR_fiq/LR_irq中,但目前CPSR中的工作模式還不是fiq/irq模式,需要通過控制信號Change_M,強制將工作模式轉換成fiq/irq模式,才能完成本clk周期的操作。即,if(Int_fiq==1)&&(CPSR[6]==0)then{F→LR_fiq,CPSR→SPSR_fiq}else{F→LR_irq,CPSR→SPSR_irq}。
第3個clk周期。將保存原工作模式下的SP值到主堆棧指針MSP或進程堆棧指針PSP中,將中斷服務程序入口地址置入PC,通過CPSR轉換工作模式,如果響應fiq中斷,那么關fiq和irq中斷;如果響應irq中斷,那么關irq中斷。發(fā)出中斷響應信號INTA_fiq/INTA_irq,打開中斷緩沖器,將中斷向量送往PC_s數(shù)據(jù)選擇器。本clk周期的操作可描述為:
中斷向量→PC,SP→MSP/PSP
第4個clk周期。執(zhí)行MSP→SP_irq/SP_fiq。上一個clk周期下跳沿的時候,CPSR被寫入新值,系統(tǒng)切換到irq/fiq工作模式,本clk周期,不需要強制模式,就可以把MSP的值寫入SP_irq/SP_fiq。
在ARMv7模型機fiq和irq共存的中斷系統(tǒng)里,中斷隱指令需要4個clk周期。在每一條機器指令結束,準備轉去取下一條指令之前,判斷是否響應fiq/irq中斷請求。只有當響應fiq/irq請求時,才執(zhí)行以上的中斷隱指令,否則轉去取下一條指令。中斷服務程序使用的也是指令系統(tǒng)中的指令,當中斷隱指令執(zhí)行完畢,取下一條指令的時候,取出來的就是中斷服務程序里的第1條指令。
基于fiq和irq中斷控制系統(tǒng),設計一個主程序,運行在用戶模式下,設計2個中斷服務程序,功能是輸出循環(huán)次數(shù)。2個中斷服務程序分別是fiq和irq中斷服務程序,它們在內存中所處的地址段不同。中斷服務程序中第1條指令的地址便是中斷向量,用開關輸入中斷向量的時候,請注意時機。
系統(tǒng)復位Rst以后,寄存器清零、所有分模式程序狀態(tài)寄存器SPSR清零,中斷請求信號INT_irq和INT_fiq清零,中斷響應信號INTA_irq和INTA_fiq清零,外設中斷請求信號EX_irq和EX_fiq清零,CPSR初始值為0x0000_0010,MSP初始值為0x0000_0040,PSP初始值為0,數(shù)據(jù)選擇器選擇信號初始值為0x0000_00C0,所有控制信號處于無效狀態(tài)。系統(tǒng)總是從地址0開始執(zhí)行。主程序和中斷服務程序見表1~3。
表2 irq中斷服務程序
表3 fiq中斷服務程序
用ARMv7匯編器模擬器CPULator ARMv7 System Simulator對本實驗測試程序進行匯編。BCC L2和BL1這兩條指令的二進制碼的立即數(shù)字段imm24,需要分別手動計算。其他指令采用CPULator ARMv7 System Simulator生成的二進制碼。得到主程序和兩個中斷服務程序對應的指令機器碼如下:
將以上指令碼填入到和指令存儲器模塊ROM_B相關聯(lián)的*.coe文件中,也可以調用*.coe的生成軟件來完成。
在和數(shù)據(jù)存儲器模塊RAM_B相關聯(lián)的*.coe文件中,可以不賦初值,也可以填入一些數(shù)據(jù)當作初值。本實驗中,數(shù)據(jù)存儲器的作用是實現(xiàn)堆棧。
執(zhí)行指令存儲器和數(shù)據(jù)存儲器的Regenerate Core操作,更新指令存儲器和數(shù)據(jù)存儲器的初始化操作。
原有教學方案中,僅在理論課上安排2學時講解中斷知識點,沒有配套的實驗,教學效果欠佳。
教改的方案是:設計一個中斷移植虛擬仿真實驗項目,通過課后作業(yè)的形式,讓學生在線自學、在線考試,完成中斷基本知識的學習。以線上線下混合式SPOC的方式完成本文設計的中斷優(yōu)先級控制實驗,課內實驗改為3學時。
近年來高校采用翻轉教學法實施教學的課程越來越多,計算機硬件類實驗課也在積極探索采用先進的教學方法提升教學效果。使用FPGA實驗平臺完成硬件實驗教學成為計算機硬件課程實踐教學的主流趨勢。
教學實施中采用自研制的RSIE-SPOC硬件實驗課翻轉教學方法[18],借助自制可交互式FPGA實驗板卡和7×24 h開放的遠程實驗云平臺,實施中斷實驗教學。課前學生在網絡教學平臺上觀看實驗講解短視頻,按要求自行設計和編程,在遠程FPGA平臺上調試程序。課上老師驗收實驗并解答問題,課后學生修正實驗方案、改進程序,撰寫實驗報告。
網絡教學平臺提供的學習資料主要有ARMv7虛擬仿真軟件、Verilog HDL自動判題系統(tǒng)、實驗表格和實驗講解短視頻等。遠程FPGA實驗板卡布局、遠程實驗云平臺網頁和實驗教學流程如圖2~4所示。
圖2 100片遠程FPGA實驗板卡布局
自2019年上線試用以來,ARMv7中斷優(yōu)先級控制實驗已完成2輪教學試用。學生滿意度分別為82.3%和95.2%,后繼操作系統(tǒng)課程老師評價學生對中斷的掌握程度大幅度提高,課程銜接順利。
從2021年開始,依托虛擬仿真實驗項目網頁,ARMv7中斷優(yōu)先級控制實驗正式投入教學使用。
圖3 遠程實驗云平臺界面
圖4 基于RSIE-SPOC方法的中斷實驗教學方案
基于ARMv7CPU結構的中斷優(yōu)先級控制實驗設計,是地方高校探索系統(tǒng)化教學的一個實例。實踐證明,該實驗教學促進了學生對中斷理論知識的理解,特別在課程銜接上獲得了較好的教學效果。為更好地促進課程銜接,本文的后續(xù)工作需要設計異常處理機制和實驗教學方案。