王雨桐 劉威 李林瑛



摘要: FPGA技術的迅速發展,其使的應用領域從最初的通訊擴展到諸多航空,醫療等諸多領域。Logisim作為一個數字邏輯電路的設計與仿真軟件,具有開源免費、可二次開發、免安裝、使用簡單、結果直觀等優點。國外已有院校利用Logisim軟件完成了CPU的設計,但國內缺乏此方面的實踐經驗。本文將闡述如何利用Logisim設計數據通路并與Verilog結合對單周期CPU進行FPGA設計。
關鍵詞: FPGA;MIPS CPU;單周期CPU;Verilog;計算機組成原理
中圖分類號:TP332? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)17-0278-04
開放科學(資源服務)標識碼(OSID):
Abstract: With its rapid development, the use of the FPGA technology has been extended from the communication industry to many other fields such as aviation and medical treatment. As a design and simulation software, Logisim has the advantages in secondary development, needless to installation, open source, most importantly, easy to use for a beginner. Compared to that of the foreign developed countries, the experience of designing a single CPU on Logisim in China is limited. This project will demonstrate how to use Logisim to design the data path of a single MIPS CPU and realize it via Verilog on Vivado.
Key words: FPGA; MIPS CPU; single MIPS CPU; Verilog; principles of computer composition
1 引言
本項目采用Logisim仿真平臺對單周期MipsCPU進行設計并整合形成MIPS CPU數據通路圖,構建數字電路系統,通過Vivado平臺利用Verilog硬件描述語言對CPU進行實現,最后進行仿真。
2 Logisim實現數據通路設計
2.1 Logisim簡介
LogiSim是一款開源的數字電路仿真軟件。通過該軟件,用戶可以使用其提供的多種元件圖仿真設計電路,并通過輸入真值表自動生成電路,利用隧道對電路進行簡化,同時可以對元件進行參數設定,并將電路進行封裝,方便多個模塊之間的聯合。該軟件還提供數據通路的錯誤檢測,將出現的錯誤顯示為設定的顏色。
2.2 基于Logisim的ALU設計
2.2.1? 32位加法器
利用logisim構建加法器,需在構建數據通路之前,首先確定該加法器所實現的功能。本項目所構建的32位加法器的功能為:算術加、減、乘、除,邏輯與、或、非、異或運算,邏輯左移、邏輯右移,算術右移運算,支持常用程序狀態標志(有符號溢出OF、無符號溢出CF,結果相等Equal)。
對于不同功能碼,ALU將實現不同功能,功能碼通過引腳ALU_OP傳輸。
ALU內的基本加法單元是:一位全加器,實現對3個一位的二進制數相加(操作數1,操作數2及進位),取得輸出值和進位。
在Logisim輸入真值表得到一位全加器進位模塊。數據通路如圖1。
加法模塊符號位溢出的判斷,分為有符號情況OF及無符號情況UOF。在UOF情況下,只需對兩個輸入值與結果值的分別進行比較。如果有至少一個輸入值大于結果則必然存在溢出,因此可以用兩個比較器將輸出結果連接到一個與門上,輸出的UOF 信號即為是否存在無符號溢出。在OF情況下,需單獨設計一個“加法有符號溢出判斷”單元。輸入端X,Y表示兩個輸入值的最高位,S表示結果的最高位(此處利用分離器提前將三個值的最高位分離出再輸入進判斷模塊)。
在Logisim輸入邏輯真值表得到加法有符號溢出判斷單元,進行封裝后即可設計整體的加法模塊。
整體的ADD加法模塊數據通路如圖5。
2.2.2 邏輯左移、邏輯右移和算術右移模塊
Logisim自帶的三種模塊可實現ALU的邏輯左移、邏輯右移和算術右移功能。
三種位移模塊的數據通路基本相同。以邏輯左移模塊為例,該模塊包含兩個位寬為32位的輸入端,其中X輸入端為數據輸入端,Y輸入端為移位輸入端。決定X引腳輸入數據的移動位數時,由于X,Y輸入引腳的數據位寬均為32位,因此通過分離器取Y引腳的低五位即可。
右移模塊設計時,要注意將移位器的移位類型選擇為所需的邏輯型或算術型。
2.2.3 SUB減法模塊
本模塊利用之前設計好的32位加法器,對減數進行取補碼操作,取補之后的減數與被減數相加得到結果。該模塊同樣需要判斷有符號溢出和無符號溢出情況,原理和加法模塊的溢出判斷基本相同,在無符號溢出的判斷直接比較被減數和結果大小即可判斷是否溢出,有符號的判斷需要利用之前設計的“加法器有符號溢出判斷”模塊。數據通路如圖6。
ALU運算器包含12個功能模塊,數據通路功能碼定為四位二進制。ALU的輸出除了結果外還有OF和UOF的溢位判斷和相等判斷。在溢位判斷中,分別建立加法溢位模塊和減法溢位模塊,通過檢測ALU的操作碼是加法還是減法的操作碼后輸出一個真值,與相應的加法模塊或減法模塊的溢出信號取與后輸出,保證溢出信號的準確。
加法溢位判斷模塊和減法溢位判斷模塊的數據通路僅針對特定的操作碼,不同的ALU加減法功能碼不同,連接方式也不同。利用logisim的真值表可自動建立對應模塊的電路。
ALU 整體數據通路圖如圖7所示:
2.3 寄存器組設計
考慮到MIPS CPU的指令結構中目的寄存器地址僅為5位,一組由32個32位寄存器單元組成的寄存器組(零號寄存器值要始終為零)即可滿足功能要求。寄存器組中的每個寄存器單元(Logisim提供)包括五個引腳:數據輸入端(當時鐘觸發時更新寄存器數據0),時鐘端,使能端(當為0時忽略時鐘輸入),清空端(當為1時異步清空寄存器單元的值),輸出端(輸出寄存器單元的值)。各寄存器單元通過一個解復用器和兩個數據選擇器組合成寄存器組。解復用器的輸入端輸入常量1,并在使能端接入寫使能WE信號,在選擇引腳接入5位二進制用于選擇寄存器單元。最后用兩個數據選擇器對輸出數據的寄存器單元進行選擇并輸出數據。
寄存器組的數據通路圖如圖8所示。
2.4 單周期CPU數據通路整體設計
單周期MIPSCPU的指令類型分為R, I, J,三種指令,OP操作碼字段為零的是R型指令,通過最后6個bit的功能碼可以確定指令功能,其余指令直接通過OP的值可以唯一確定指令功能,因此MIPS的指令解析非常簡潔。
在取指令的過程中,以PC為地址訪問內存,將取出的指令字放入內存,由于要在一個時鐘周期內完成整個指令的取值取操作數執行的過程,所以不能設置地址緩沖寄存器、數據緩沖寄存器以及指令寄存器,而是直接用PC訪問指令存儲器。而指令進行執行的過程中,取操作數和取指令都需要訪問存儲器,因此將指令存儲器和數據存儲器分開設計以防止器件的征用。同理為防止運算器的征用,還需要將PC的地址接入一個單獨的加法器進行PC的累加運算。
當PC的指令地址輸出后,通過一個分析模塊(分離器即可)將32為的地址分離出RS,RT,RD,OP,FUNT,IMMEDIATE等字段,傳輸至寄存器堆及控制器的相應各個引腳,16位立即數通過位擴展模塊進行擴展并輸入至ALU,寄存器堆的數據輸出后傳輸至ALU, ALU根據控制器輸出的ALUop引腳的相應操作碼進行計算并輸出至數據存儲器。
3 基于Verilog的單周期CPU設計
利用logisim設計單周期CPU的通路圖可更直觀了解CPU各個部件引腳之間的關系及信號的傳遞,完成數據通路設計后,即可進行基于Verilog的處理器設計。本實驗利用VIVADO進行設計與modelsim仿真。
根據數據通路,分別設計各個子模塊及CPU頂層模塊。最后編寫testbench文件進行單條指令仿真。
在進行FPGA下板時,由于自行編輯的指令存儲器中的initial指令不可綜合,因此需使用coe文件進行內存初始化。本實驗用到開發板上的16個開關,并用16位LED進行輸出顯示,下載比特流文件至開發板后就可以進行CPU運算操作了。
4 結語
本項目利用FPGA設計了單周期MIPS處理器,采用Logisim仿真平臺對處理器設計方案進行驗證,并擴展構建了相應的數字電路系統。該處理器支持自動和單步運行方式,能正確地執行存放在主存的程序功能,對主要的數據流和控制流通過LED和數碼管進行實時顯示,方便監控和調試。
本課題除電路設計方面的創新外,還是一項包含教學、科研和項目開發一體化的能力培訓過程。教學方面體現能夠綜合應用《計算機組成原理》和《數字邏輯》中門電路、處理器、存儲器、指令系統和CPU的知識,同時能培養學生對科研及項目研發過程的了解及熟悉。
參考文獻:
[1] 王志英,周興社,袁春風,等. 計算機專業學生系統能力培養和系統課程體系設置研究[J]. 計算機教育,2013(9):1-6.
[2] 吳繼明,曾碧卿.一種高效的CPU設計方法及其在計算機組成原理課程中應用[J]. 實驗室研究與探索,2018(9):147-153.
[3] 楊楊.基于FPGA的單周期CPU設計與實現[J].軟件開發與設計,2011(22):25-28.
[4] 武杰,喬密,張俊杰. MIPS系統中北橋的FPGA設計[J].小型微型計算機系統,2004,25(11):2028-2031.
[5] 鄒志斌.基于MIPS指令集的RISC微處理器控制模塊的設計與實現[D].武漢:華中科技大學,2008.
[6] 胡世昌.用logisim改革數字電路實驗[J] 沈陽師范大學學報(自然科學版)2015,33(2):3010-304.
[7] 吳容海.Logisim在“計算機組成原理”教學中的應用實踐[J] 大理學院學報,2016,1(12):96-100.
[8] Burch C.Logisim: a graphical system for logic circuit design and simulation[J].Journal on Educational Resources in Computing( JERIC) ,2002,2(1):5-16.
【通聯編輯:王力】