楊銳++翟社平++焦繼業



摘 要:結合計算機系統能力培養目標,以設計一個基于FPGA的模型計算機作為計算機組成原理課程設計樣例,說明模型機的組織結構,給出指令系統和構成部件的設計與實現,展示功能仿真測試。
關鍵詞:模型機;計算機組成原理;FPGA
0 引 言
計算機組成原理課程是計算機專業的一門重要專業基礎課,在培養學生計算機系統能力的過程中起著承上啟下的重要作用[1]。通過課程理論學習,學生理解計算機內部各功能部件的組成、設計方法及邏輯實現,建立計算機系統層次結構的概念。課程實驗使學生進一步掌握計算機硬件系統分析設計方法,有助于學生深入理解課程的內容,對于培養學生的系統設計能力、工程應用能力和創新能力具有重要的意義。
傳統的基于專用實驗箱的實踐教學模式無法滿足系統能力的培養要求[2-3]。在計算機組成原理實踐教學中,可以采用基于FPGA的EDA方式進行模型計算機的設計與實踐,有效解決傳統實踐模式中實驗效率低、實驗內容驗證多設計少、不利于學生構建整機概念等問題,培養學生分析設計能力,滿足系統能力培養要求。筆者結合計算機組成原理基本理論,采用VerilogHDL完成一個功能較完整的片上模型計算機系統設計實例,包括ALU、微程序控制器、時序產生電路、存儲器、指令系統等的設計。功能仿真正確,并在Vavido中完成綜合并下板,對于學生實現基于FPGA的模型機設計具有很好的指導意義。通過在FPGA平臺上設計完成一個具有CPU、存儲器、端口并能執行一個指令系統的模型機,有助于學生計算機系統能力的培養。
1 模型機架構分析
該模型機包括運算器、控制器、程序存儲器、數據寄存器、微程序存儲器和輸入輸出端口組成 ,模型機數據通路見圖1。
模型機采用學生熟悉的74181作為算術邏輯運算單元,運算操作數均為4bit數據。一個操作數來源于累加器,另一個操作數通過4位數據總線從內存、寄存器和輸入端口發送給ALU。地址總線為8位。數據通路中包含累加器、16個通用寄存器、4個輸入輸出端口。模型機采用8位程序計數器、微程序解釋的方法執行指令,指令存儲器為256字節,控制存儲器為1K位。指令系統有16條8位的機器指令,包括數據傳送指令、算術邏輯運算指令、比較和跳轉指令。此模型機為實驗教學引入,用VerilogHDL語言設計實現。
2 模型機設計
2.1 模型機指令系統設計
模型機的指令由高4位操作碼和低4位地址碼構成,1條指令字長為1個字節。由于操作碼為4位,指令集里一共有16條指令,表1為模型機指令集。
指令集包括算術邏輯運算指令、比較和跳轉指令和數據傳輸指令。
指令#4、#5、#6、#7、#8、#9為算術邏輯運算指令。運算器的設計采用74181作為算術邏輯運算部件。為了讓模型機可以完成74181支持的32種算術邏輯運算,首先通過指令#4設置“S3—S0”的值并存入alu-func寄存器,再通過指令#5或指令#6完成算術運算,指令#7或指令#8完成邏輯運算。相同類型運算區別在于第2操作數是來自立即數還是寄存器。指令#9完成對CF的置位或復位。
指令#1、#2、#3、#E、#F為數據傳輸指令,數據的傳送都經過累加器。指令#1將4位立即數操作數從程序存儲器送到累加器。累加器和寄存器之間的數據傳輸由指令#2和指令#3實現。指令#E和指令#F實現累加器和4個輸入輸出端口的數據傳輸。
指令#0、#C、#D實現無條件跳轉和條件跳轉。條件跳轉之前需要執行比較指令#A和#B,算術邏輯部件74181完成累加器和立即數或者寄存器的比較,并設置ZF、CF標志位。通過把跳轉指令中給出4位立即數作為目標地址的高4位,累加器中的數作為目標地址的低4位,組合成8位的絕對地址從而尋址到整個256字節的程序空間。
2.2 微指令設計
指令操作碼字段決定控制存儲器的微指令入口地址,每條機器指令的執行都是通過執行控制存儲器中的4個微指令序列來完成。由于每個時鐘周期完成1條微指令,1條機器指令的執行需要4個時鐘周期。定義微指令字長為16位,從高位到低位依次為F15—F0,表2顯示了對應信號的含義。
每個機器指令對應4個微指令序列,相應的控制存儲器存儲64條微指令,表3為控存中微指令真值表。
2.3 模型機硬件系統設計
模型機由運算器、程序計數器、程序存儲器、微程序控制器、輸入輸出端口等部分構成,采用Verilog HDL語言實現模型機各功能模塊設計。
(1)程序存儲器u_prog_memory容量為256字節,存儲機器指令,最多可以存儲256條8位指令。
(2)程序計數器u_prog_counter模塊實現8位程序指針pc,指明下一條指令的地址。順序執行指令,pc每次自加;若為跳轉指令,pc修改為要跳轉的絕對地址。該模塊也提供2位微地址指針。
(3)指令的執行是通過微指令解釋實現的:4位指令操作碼和2位微程序指針被送入控制存儲器u_control_memory,控制存儲器的輸出為16位。每條機器指令對應4條微指令,根據操作碼和微指針,每個時鐘周期微程序存儲器都有1個16位的輸出F15—F10,輸出的值與表3中對應單元的編碼一致。
(4)運算器包含算術邏輯運算模塊u_alu_74181、累加器u_acc、數據寄存器u_reg、標志寄存器u_alu_flag和181功能選擇寄存器u_alu_func。模塊u_alu_74181實現74181的32個算術邏輯運算功能[4],模塊u_alu_func存儲指令#4給出的功能選擇編號并提供給u_alu_74181[s3:0]。操作數A來源于累加器u_acc,另一個操作數B來源于立即數u_prog_memory[inst3:0],或者數據寄存器u_reg,或者輸入輸出端口u_port。運算結果影響標志位,存儲在標志寄存器u_alu_flag中。模型機設計實現16個通用寄存器,4個輸入輸出端口。endprint
(5)頂層exe_model中將以上9個模塊實例化并連接用來構成完整模型機。exe_model定義的clk為外部輸入的時鐘,res為外部輸入的復位信號,port為連接外設的雙向數據線。圖2為最終的完整模型機設計圖。
3 模型機功能測試
設計好各模塊后,對模型機進行功能仿真測試。在完成每條指令的功能測試后,用模型機指令設計程序,圖3的程序實現先將R1賦初值0,再循環自減。
在模塊u_prog_memory中通過系統任務 “$readmemh("./code.txt",mem);”將程序存入模型機程序存儲器中。圖4為在Debussy下通過調用Modelsim生成的波形圖。從圖4中可以看出,模型機運行正確。
進一步優化程序,將R1遞減的值以1秒頻率在數碼管顯示。首先在Vivado里綜合仿真過的Verilog文件。此時微程序存儲器模塊和程序存儲器模塊均在Vivado下通過ip核實例化實現,初值通過對應的coe文件進行初始化。經過綜合、布局布線、管腳映射等步驟后,將生成的exe_model.bit下載到Spartan開發板進行電路驗證。數碼管循環依次顯示F—0,見圖5[5-7]。
4 結 語
模型機的設計開展隨著理論教學同步進行。結合課程教學采用的教材[8],計算方法和運算器學習結束后完成74181模塊設計和仿真;存儲器學習結束后完成指令存儲器、控制存儲器模塊的描述和仿真;指令系統和處理器學習結束后學生理解模型機數據通路,進行指令系統和微指令分析設計,并完成累加器、標志寄存器等模塊設計;在學期末組成原理課程設計的集中實踐時間里進行頂層電路設計,實例化各功能模塊并連接,完成模型機功能仿真然后下板進行電路測試。
從實施效果來看,通過EDA在FPGA平臺上完成模型計算機設計,學生不僅建立了整機概念,具備了基本的系統分析設計能力,更激發了學習熱情和創新能力,培養了計算機系統分析設計能力。目前的模型機不支持堆棧和子程序調用等功能,后續可以考慮提升課程設計的復雜度,擴大指令規模,引入具有中斷、Cache等工作機制的模型機設計,充分激發學生的能動性和創造性,進一步加強學生系統設計能力的培養。
參考文獻:
[1] 袁春風, 楊若瑜, 王帥, 等. 計算機組成與其他課程之間的關聯內容分析[J]. 計算機教育, 2015(17): 35-38, 87.
[2] 譚志虎, 胡迪青, 秦磊華. 計算機組成原理課程設計的改革[J]. 電氣電子教學學報, 2016(6): 110-112.
[3] 袁春風, 張澤生, 蔡曉燕, 等. 計算機組成原理課程實踐教學探索[J]. 計算機教育, 2011(17): 110-114.
[4] 潘松, 潘明. 現代計算機組成原理[M]. 北京: 科學出版社, 2007.
[5] 張勝, 胡建明, 蔡虹. 基于FPGA技術的8位模型機設計與實現[J]. 南昌航空大學學報(自然科學版), 2010(3): 21-26.
[6] 徐愛萍, 張玉萍, 涂國慶. 基于VHDL 之CPU 設計與實踐[J]. 實驗室研究與探索, 2014(5): 120-124.
[7] 肖鐵軍, 劉芳. 基于FPGA的“計算機組成原理”模型機設計[J]. 電氣電子教學學報, 2009(4): 81-82, 85.
[8] 白中英, 戴志濤. 計算機組成原理[M]. 北京: 科學出版社, 2015.
(編輯:孫怡銘)endprint