章復嘉, 謝澄揚, 高頂沖, 樊 謹
(杭州電子科技大學 a.計算機國家級實驗教學示范中心; b.計算機學院; c.圣光機聯(lián)合學院,杭州 310018)
長期以來,國內(nèi)計算機專業(yè)在人才培養(yǎng)上存在偏差,導致底層架構(gòu)設計和系統(tǒng)軟件開發(fā)的高端人才極為匱乏?!叭瞬拧背闪藝鴥?nèi)計算機行業(yè)發(fā)展的“終極瓶頸”,重視基礎研究人才培養(yǎng)成為了國家戰(zhàn)略[1-5]。危機也是契機,“卡脖子”事件促進了國內(nèi)IT龍頭企業(yè)開展校企合作辦學、共建課程等項目[6-7]。制裁和系統(tǒng)能力培養(yǎng)需求等多種原因促進了國內(nèi)高校計算機體系結(jié)構(gòu)課程改革。
在這樣的時代背景下,全國各大高校與國際同步,紛紛開展繼MIPS之后新一代教學模型機結(jié)構(gòu)研究,RISC-V和ARM是新一代教學模型機研究的兩大方向[8-13]。
袁春風等[14]率先出版了基于開源架構(gòu)的RISC-V版《計算機組成與設計》教材。陳微[15]翻譯了圖靈獎得主David A.Patterson等改版的經(jīng)典教材《計算機組成與設計(硬件/軟件接口)(ARM版)》。國內(nèi)多所雙一流和985高校基于開源的RISC-V架構(gòu),設計、研究了教學模型機和配套的實驗教學方案。
目前國內(nèi)《計算機組成原理》課程采用的主流CPU架構(gòu),包括處于研究前沿的RISC-V和Legv8(即ARMv8簡化版)教學模型機結(jié)構(gòu),都與早先的MIPS32結(jié)構(gòu)存在許多相似之處,結(jié)構(gòu)相對簡單,不支持類似ARMv7這樣多工作模式切換和基于其上的中斷優(yōu)先級等更為高階和復雜的系統(tǒng)級底層設計實驗。
多工作模式是ARM架構(gòu)CPU的特色,在實現(xiàn)上極具復雜性。開發(fā)ARMv7教學模型機并實施教學的意義在于,讓學生有機會通過多樣化實例,學到更多高端計算機底層設計的方法,促進人才培養(yǎng)國家戰(zhàn)略得以更好實現(xiàn)。
9種工作模式是ARMv7及以上架構(gòu)芯片的重要特點,也是實現(xiàn)ARM模型計算機結(jié)構(gòu)的重點和難點。本文圍繞9種工作模式可訪問的寄存器范圍和邏輯結(jié)構(gòu),提出一種實現(xiàn)多工作模式寄存器堆的設計方法。對于組成原理課程而言,多工作模式寄存器堆是計算機部件設計的一種新方法。
如圖1所示,ARMv7架構(gòu)CPU中,通用寄存器堆包含34個寬度為32 bit的寄存器。ARM狀態(tài)下有9種工作模式,見表1。當前程序狀態(tài)寄存器CPSR的最低5 bit二進制M[4∶0]代表當前處理器的工作模式。
圖1 ARM狀態(tài)的9種工作模式下的通用寄存器堆組織
表1 ARMv7 CPU的9種工作模式編碼和可訪問寄存器范圍
R0~R7、程序計數(shù)器R15(PC)和當前程序狀態(tài)寄存器CPSR是所有模式公用的寄存器。R8~R12是除快速中斷fiq模式外,其他模式公用的寄存器。除hyp、User和Sys模式外,每種模式都有自己的13、14號寄存器。User和Sys模式訪問的邏輯寄存器范圍是一樣的;hyp模式?jīng)]有14號寄存器,中斷返回地址保存在專用寄存器ELR_hyp里。
ARMv7指令集中有部分指令需要同時讀出3個寄存器的值,寫入1個寄存器,需要將通用寄存器堆設計成3個讀端口和1個寫端口。因程序計數(shù)器PC(即R15)的特殊性,在實驗教學方案中可單獨設計讀/寫控制邏輯。
圖2為通用寄存器堆模塊的讀/寫端口示意圖,表2為其功能表。寬度為4 bit的R_Addr_A、R_Addr_B和R_Addr_C分別尋址3個讀端口對應的寄存器號,讀出的32 bit數(shù)據(jù)由R_Data_A、R_Data_B和R_Addr_C分別輸出。寄存器由邊沿型D觸發(fā)器實現(xiàn),讀訪問時,無須使能或者時鐘信號控制,給出寄存器地址,便可讀出寄存器中的數(shù)據(jù)。在時鐘下降沿寫入寄存器,要求同時寫控制信號Write_Reg必須有效,才能將數(shù)據(jù)寫入寄存器。寫操作的條件是:寫寄存器地址W_Addr、寫入數(shù)據(jù)W_Data和寫控制信號Write_Reg,必須在時鐘下降沿有效。
圖2 通用寄存器堆模塊讀/寫端口示意圖
表2 通用寄存器堆功能表
用Verilog HDL編程時,建議將通用寄存器堆定義為一個reg類型的數(shù)組。對于通用寄存器堆的讀操作和寫操作的地址譯碼,只需引用寄存器地址作為數(shù)組的下標即可。
支持9種工作模式的通用寄存器堆內(nèi)部結(jié)構(gòu)如圖3所示。工作模式位的最高位M[4]必須為1,它可用作(1)~(15)所示的譯碼器、數(shù)據(jù)分配器和多路選擇器的使能端。
4∶16譯碼器(1)的作用是選擇寫端口地址。(2)~(8)這7個分配器的作用是選擇寫入何種模式下的寄存器,且(2)~(6)的結(jié)構(gòu)一樣,(7)、(8)的結(jié)構(gòu)一樣。14號寄存器比13號寄存器少一個,即R14_hyp不存在。圖3中(16)~(18)這3個16∶1多路選擇器的作用是分別根據(jù)3個讀端口的地址,選擇對應寄存器的內(nèi)容。其左邊的(9)~(13)這5個2路選擇器結(jié)構(gòu)相同,(14)、(15)這2個16∶1多路選擇器的結(jié)構(gòu)相同,(15)的輸入比(14)少一個。(9)~(15)這7個多路選擇器的作用是將當前處理器工作模式對應的所有寄存器的內(nèi)容全部讀出,然后由(16)~(18)這3個16∶1多路選擇器分別送往A~C讀端口。
圖3 ARM多模式通用寄存器堆結(jié)構(gòu)設計實驗原理圖
圖3中的數(shù)據(jù)分配器和多路選擇器的控制電路與工作模式的對應關(guān)系,見表3。表中(1)~(15)的使能端是M[4],當M[4]=1時,(1)~(15)使能。(1)~(15)的選擇信號都是M[3∶0]。在M[4]=1的前提下,根據(jù)M[3∶0]的取值,數(shù)據(jù)分配器將要寫入的數(shù)據(jù)分配給指定模式下的寄存器;數(shù)據(jù)選擇器輸出指定模式下的寄存器的讀數(shù)。
表3 分配器和多路選擇器控制表
采用自研制的RSIE-SPOC硬件實驗課翻轉(zhuǎn)教學方法[16],借助自制可交互式FPGA實驗板卡和7×24小時開放的遠程實驗云平臺,實施多工作模式寄存器堆設計實驗教學。課前學生在網(wǎng)絡教學平臺上觀看實驗講解短視頻,按要求完成寄存器堆編程,在遠程FPGA平臺上調(diào)試程序。課上驗收實驗并讓學生按小組交流展示,課后在網(wǎng)絡平臺上提交實驗報告。
學生用Verilog HDL編程完成設計,并開展仿真調(diào)試和板級調(diào)試。作品的仿真波形圖舉例如圖4所示。其中M[5∶1]是工作模式位,由圖5所示的仿真波形可知,該作品能正確實現(xiàn)讀寫寄存器的操作,且實現(xiàn)了9種工作模式下訪問不同的寄存器范圍。
圖4 學生作品舉例
圖5 學生滿意度調(diào)查
2021年,ARM多工作模式寄存器堆設計實驗正式投入教學使用。課程調(diào)查表明,學生對課程整體滿意度達到90%以上,其中90.5%學生認為實驗促進了深入理解ARM CPU結(jié)構(gòu),76.2%學生認為課程提高了對計算機硬件系統(tǒng)的學習興趣。
支持9種工作模式的ARM寄存器堆結(jié)構(gòu)設計方法是地方高校開展高端模型計算機結(jié)構(gòu)設計的研究成果。實踐證明,基于該方法設計的實驗教學,促進了學生深入理解ARM CPU結(jié)構(gòu),促進學生更好地掌握計算機底層設計技術(shù),為進一步實現(xiàn)ARM架構(gòu)系統(tǒng)級設計實驗打下基礎。