楊銳++翟社平++焦繼業(yè)



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