王雨桐 劉威 李林瑛
摘要: FPGA技術(shù)的迅速發(fā)展,其使的應(yīng)用領(lǐng)域從最初的通訊擴(kuò)展到諸多航空,醫(yī)療等諸多領(lǐng)域。Logisim作為一個(gè)數(shù)字邏輯電路的設(shè)計(jì)與仿真軟件,具有開源免費(fèi)、可二次開發(fā)、免安裝、使用簡單、結(jié)果直觀等優(yōu)點(diǎn)。國外已有院校利用Logisim軟件完成了CPU的設(shè)計(jì),但國內(nèi)缺乏此方面的實(shí)踐經(jīng)驗(yàn)。本文將闡述如何利用Logisim設(shè)計(jì)數(shù)據(jù)通路并與Verilog結(jié)合對單周期CPU進(jìn)行FPGA設(shè)計(jì)。
關(guān)鍵詞: FPGA;MIPS CPU;單周期CPU;Verilog;計(jì)算機(jī)組成原理
中圖分類號:TP332? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)17-0278-04
開放科學(xué)(資源服務(wù))標(biāo)識碼(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 引言
本項(xiàng)目采用Logisim仿真平臺對單周期MipsCPU進(jìn)行設(shè)計(jì)并整合形成MIPS CPU數(shù)據(jù)通路圖,構(gòu)建數(shù)字電路系統(tǒng),通過Vivado平臺利用Verilog硬件描述語言對CPU進(jìn)行實(shí)現(xiàn),最后進(jìn)行仿真。
2 Logisim實(shí)現(xiàn)數(shù)據(jù)通路設(shè)計(jì)
2.1 Logisim簡介
LogiSim是一款開源的數(shù)字電路仿真軟件。通過該軟件,用戶可以使用其提供的多種元件圖仿真設(shè)計(jì)電路,并通過輸入真值表自動(dòng)生成電路,利用隧道對電路進(jìn)行簡化,同時(shí)可以對元件進(jìn)行參數(shù)設(shè)定,并將電路進(jìn)行封裝,方便多個(gè)模塊之間的聯(lián)合。該軟件還提供數(shù)據(jù)通路的錯(cuò)誤檢測,將出現(xiàn)的錯(cuò)誤顯示為設(shè)定的顏色。
2.2 基于Logisim的ALU設(shè)計(jì)
2.2.1? 32位加法器
利用logisim構(gòu)建加法器,需在構(gòu)建數(shù)據(jù)通路之前,首先確定該加法器所實(shí)現(xiàn)的功能。本項(xiàng)目所構(gòu)建的32位加法器的功能為:算術(shù)加、減、乘、除,邏輯與、或、非、異或運(yùn)算,邏輯左移、邏輯右移,算術(shù)右移運(yùn)算,支持常用程序狀態(tài)標(biāo)志(有符號溢出OF、無符號溢出CF,結(jié)果相等Equal)。
對于不同功能碼,ALU將實(shí)現(xiàn)不同功能,功能碼通過引腳ALU_OP傳輸。
ALU內(nèi)的基本加法單元是:一位全加器,實(shí)現(xiàn)對3個(gè)一位的二進(jìn)制數(shù)相加(操作數(shù)1,操作數(shù)2及進(jìn)位),取得輸出值和進(jìn)位。
在Logisim輸入真值表得到一位全加器進(jìn)位模塊。數(shù)據(jù)通路如圖1。
加法模塊符號位溢出的判斷,分為有符號情況OF及無符號情況UOF。在UOF情況下,只需對兩個(gè)輸入值與結(jié)果值的分別進(jìn)行比較。如果有至少一個(gè)輸入值大于結(jié)果則必然存在溢出,因此可以用兩個(gè)比較器將輸出結(jié)果連接到一個(gè)與門上,輸出的UOF 信號即為是否存在無符號溢出。在OF情況下,需單獨(dú)設(shè)計(jì)一個(gè)“加法有符號溢出判斷”單元。輸入端X,Y表示兩個(gè)輸入值的最高位,S表示結(jié)果的最高位(此處利用分離器提前將三個(gè)值的最高位分離出再輸入進(jìn)判斷模塊)。
在Logisim輸入邏輯真值表得到加法有符號溢出判斷單元,進(jìn)行封裝后即可設(shè)計(jì)整體的加法模塊。
整體的ADD加法模塊數(shù)據(jù)通路如圖5。
2.2.2 邏輯左移、邏輯右移和算術(shù)右移模塊
Logisim自帶的三種模塊可實(shí)現(xiàn)ALU的邏輯左移、邏輯右移和算術(shù)右移功能。
三種位移模塊的數(shù)據(jù)通路基本相同。以邏輯左移模塊為例,該模塊包含兩個(gè)位寬為32位的輸入端,其中X輸入端為數(shù)據(jù)輸入端,Y輸入端為移位輸入端。決定X引腳輸入數(shù)據(jù)的移動(dòng)位數(shù)時(shí),由于X,Y輸入引腳的數(shù)據(jù)位寬均為32位,因此通過分離器取Y引腳的低五位即可。
右移模塊設(shè)計(jì)時(shí),要注意將移位器的移位類型選擇為所需的邏輯型或算術(shù)型。
2.2.3 SUB減法模塊
本模塊利用之前設(shè)計(jì)好的32位加法器,對減數(shù)進(jìn)行取補(bǔ)碼操作,取補(bǔ)之后的減數(shù)與被減數(shù)相加得到結(jié)果。該模塊同樣需要判斷有符號溢出和無符號溢出情況,原理和加法模塊的溢出判斷基本相同,在無符號溢出的判斷直接比較被減數(shù)和結(jié)果大小即可判斷是否溢出,有符號的判斷需要利用之前設(shè)計(jì)的“加法器有符號溢出判斷”模塊。數(shù)據(jù)通路如圖6。
ALU運(yùn)算器包含12個(gè)功能模塊,數(shù)據(jù)通路功能碼定為四位二進(jìn)制。ALU的輸出除了結(jié)果外還有OF和UOF的溢位判斷和相等判斷。在溢位判斷中,分別建立加法溢位模塊和減法溢位模塊,通過檢測ALU的操作碼是加法還是減法的操作碼后輸出一個(gè)真值,與相應(yīng)的加法模塊或減法模塊的溢出信號取與后輸出,保證溢出信號的準(zhǔn)確。
加法溢位判斷模塊和減法溢位判斷模塊的數(shù)據(jù)通路僅針對特定的操作碼,不同的ALU加減法功能碼不同,連接方式也不同。利用logisim的真值表可自動(dòng)建立對應(yīng)模塊的電路。
ALU 整體數(shù)據(jù)通路圖如圖7所示:
2.3 寄存器組設(shè)計(jì)
考慮到MIPS CPU的指令結(jié)構(gòu)中目的寄存器地址僅為5位,一組由32個(gè)32位寄存器單元組成的寄存器組(零號寄存器值要始終為零)即可滿足功能要求。寄存器組中的每個(gè)寄存器單元(Logisim提供)包括五個(gè)引腳:數(shù)據(jù)輸入端(當(dāng)時(shí)鐘觸發(fā)時(shí)更新寄存器數(shù)據(jù)0),時(shí)鐘端,使能端(當(dāng)為0時(shí)忽略時(shí)鐘輸入),清空端(當(dāng)為1時(shí)異步清空寄存器單元的值),輸出端(輸出寄存器單元的值)。各寄存器單元通過一個(gè)解復(fù)用器和兩個(gè)數(shù)據(jù)選擇器組合成寄存器組。解復(fù)用器的輸入端輸入常量1,并在使能端接入寫使能WE信號,在選擇引腳接入5位二進(jìn)制用于選擇寄存器單元。最后用兩個(gè)數(shù)據(jù)選擇器對輸出數(shù)據(jù)的寄存器單元進(jìn)行選擇并輸出數(shù)據(jù)。
寄存器組的數(shù)據(jù)通路圖如圖8所示。
2.4 單周期CPU數(shù)據(jù)通路整體設(shè)計(jì)
單周期MIPSCPU的指令類型分為R, I, J,三種指令,OP操作碼字段為零的是R型指令,通過最后6個(gè)bit的功能碼可以確定指令功能,其余指令直接通過OP的值可以唯一確定指令功能,因此MIPS的指令解析非常簡潔。
在取指令的過程中,以PC為地址訪問內(nèi)存,將取出的指令字放入內(nèi)存,由于要在一個(gè)時(shí)鐘周期內(nèi)完成整個(gè)指令的取值取操作數(shù)執(zhí)行的過程,所以不能設(shè)置地址緩沖寄存器、數(shù)據(jù)緩沖寄存器以及指令寄存器,而是直接用PC訪問指令存儲器。而指令進(jìn)行執(zhí)行的過程中,取操作數(shù)和取指令都需要訪問存儲器,因此將指令存儲器和數(shù)據(jù)存儲器分開設(shè)計(jì)以防止器件的征用。同理為防止運(yùn)算器的征用,還需要將PC的地址接入一個(gè)單獨(dú)的加法器進(jìn)行PC的累加運(yùn)算。
當(dāng)PC的指令地址輸出后,通過一個(gè)分析模塊(分離器即可)將32為的地址分離出RS,RT,RD,OP,F(xiàn)UNT,IMMEDIATE等字段,傳輸至寄存器堆及控制器的相應(yīng)各個(gè)引腳,16位立即數(shù)通過位擴(kuò)展模塊進(jìn)行擴(kuò)展并輸入至ALU,寄存器堆的數(shù)據(jù)輸出后傳輸至ALU, ALU根據(jù)控制器輸出的ALUop引腳的相應(yīng)操作碼進(jìn)行計(jì)算并輸出至數(shù)據(jù)存儲器。
3 基于Verilog的單周期CPU設(shè)計(jì)
利用logisim設(shè)計(jì)單周期CPU的通路圖可更直觀了解CPU各個(gè)部件引腳之間的關(guān)系及信號的傳遞,完成數(shù)據(jù)通路設(shè)計(jì)后,即可進(jìn)行基于Verilog的處理器設(shè)計(jì)。本實(shí)驗(yàn)利用VIVADO進(jìn)行設(shè)計(jì)與modelsim仿真。
根據(jù)數(shù)據(jù)通路,分別設(shè)計(jì)各個(gè)子模塊及CPU頂層模塊。最后編寫testbench文件進(jìn)行單條指令仿真。
在進(jìn)行FPGA下板時(shí),由于自行編輯的指令存儲器中的initial指令不可綜合,因此需使用coe文件進(jìn)行內(nèi)存初始化。本實(shí)驗(yàn)用到開發(fā)板上的16個(gè)開關(guān),并用16位LED進(jìn)行輸出顯示,下載比特流文件至開發(fā)板后就可以進(jìn)行CPU運(yùn)算操作了。
4 結(jié)語
本項(xiàng)目利用FPGA設(shè)計(jì)了單周期MIPS處理器,采用Logisim仿真平臺對處理器設(shè)計(jì)方案進(jìn)行驗(yàn)證,并擴(kuò)展構(gòu)建了相應(yīng)的數(shù)字電路系統(tǒng)。該處理器支持自動(dòng)和單步運(yùn)行方式,能正確地執(zhí)行存放在主存的程序功能,對主要的數(shù)據(jù)流和控制流通過LED和數(shù)碼管進(jìn)行實(shí)時(shí)顯示,方便監(jiān)控和調(diào)試。
本課題除電路設(shè)計(jì)方面的創(chuàng)新外,還是一項(xiàng)包含教學(xué)、科研和項(xiàng)目開發(fā)一體化的能力培訓(xùn)過程。教學(xué)方面體現(xiàn)能夠綜合應(yīng)用《計(jì)算機(jī)組成原理》和《數(shù)字邏輯》中門電路、處理器、存儲器、指令系統(tǒng)和CPU的知識,同時(shí)能培養(yǎng)學(xué)生對科研及項(xiàng)目研發(fā)過程的了解及熟悉。
參考文獻(xiàn):
[1] 王志英,周興社,袁春風(fēng),等. 計(jì)算機(jī)專業(yè)學(xué)生系統(tǒng)能力培養(yǎng)和系統(tǒng)課程體系設(shè)置研究[J]. 計(jì)算機(jī)教育,2013(9):1-6.
[2] 吳繼明,曾碧卿.一種高效的CPU設(shè)計(jì)方法及其在計(jì)算機(jī)組成原理課程中應(yīng)用[J]. 實(shí)驗(yàn)室研究與探索,2018(9):147-153.
[3] 楊楊.基于FPGA的單周期CPU設(shè)計(jì)與實(shí)現(xiàn)[J].軟件開發(fā)與設(shè)計(jì),2011(22):25-28.
[4] 武杰,喬密,張俊杰. MIPS系統(tǒng)中北橋的FPGA設(shè)計(jì)[J].小型微型計(jì)算機(jī)系統(tǒng),2004,25(11):2028-2031.
[5] 鄒志斌.基于MIPS指令集的RISC微處理器控制模塊的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2008.
[6] 胡世昌.用logisim改革數(shù)字電路實(shí)驗(yàn)[J] 沈陽師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2015,33(2):3010-304.
[7] 吳容海.Logisim在“計(jì)算機(jī)組成原理”教學(xué)中的應(yīng)用實(shí)踐[J] 大理學(xué)院學(xué)報(bào),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.
【通聯(lián)編輯:王力】