單周期CPU設(shè)計_第1頁
單周期CPU設(shè)計_第2頁
單周期CPU設(shè)計_第3頁
單周期CPU設(shè)計_第4頁
單周期CPU設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、信息科學與工程學院課程設(shè)計報告 課程名稱: 計算機組成原理與結(jié)構(gòu) 題目: 單周期CPU邏輯設(shè)計 年級/專業(yè): XXXXXXXXXXXXXXX X 學生姓名: 王俠俠、李懷民 學號: XXXXXXXXXXXXXXXXXXX 指導老師: XXXX 開始時間:2016年9月15日結(jié)束時間:2016年11月15日目 錄摘 要一、 設(shè)計目的與目標1.1設(shè)計目的1.2設(shè)計目標二、 課程設(shè)計器材2.1 硬件平臺2.2 軟件平臺三、CPU邏輯設(shè)計總體方案3.1 指令模塊3.2 部件模塊四、模塊詳細設(shè)計4.1 指令設(shè)計模塊4.2 部件設(shè)計模塊五、實驗數(shù)據(jù)5.1 初始數(shù)據(jù)5.2 指令數(shù)據(jù)六、結(jié)論和體會七、參考文獻

2、摘 要本CPU設(shè)計實驗以Quartus II 9.0為軟件設(shè)計平臺,以Cyclone采III型號EP3C16F484C6為FPGA實測板。此CPU設(shè)計采用模塊化設(shè)計方案,首先設(shè)計指令格式模塊,此模塊決定CPU各個部件的接口數(shù)據(jù)容量及數(shù)量,再對CPU各個部件獨立設(shè)計實現(xiàn),主要涉及的部件有:寄存器組、控制器、存儲器、PC計數(shù)器、數(shù)據(jù)選擇器、ALU單元以及擴展單元。分部件的設(shè)計通過軟件平臺模擬仿真各部件的功能,在確保各部件功能正確的情況下,將所有部件模塊整合在一起實現(xiàn)16位指令的CPU功能。再按照指令格式設(shè)計的要求,設(shè)計出一套能完整運行的指令,加載到指令存儲器中,最終通過在FPGA實測板上實現(xiàn)了加2

3、減1的循環(huán)運算效果,若要實現(xiàn)其他效果,也可更改指令存儲器或數(shù)據(jù)存儲器的數(shù)據(jù)而不需要對內(nèi)部部件進行更改元件。關(guān)鍵詞:CPU設(shè)計、16位指令格式、模塊化設(shè)計、Quartus軟件、CPU各部件18 / 22一、 設(shè)計目的與目標1.1 設(shè)計目的1) 了解Quartus II軟件的使用,學習軟件環(huán)境下設(shè)計CPU的基本過程;2) 在Quartus II平臺上完成各個單元的設(shè)計,加深對每個單元(控制器、寄存器、存儲器等)工作原理的理解;3) 對各個單元組合而成的CPU進行指令測試,配合使用模擬仿真,了解指令和數(shù)據(jù)在各個單元中的傳輸過程及方向。1.2 設(shè)計目標1) 設(shè)計一個單周期CPU,能實現(xiàn)基本的指令功能,

4、如ADD,SUB指令實現(xiàn)對操作數(shù)加減功能,LW,SW指令實現(xiàn)從存儲器取數(shù)和存數(shù),J指令實現(xiàn)指令間的跳轉(zhuǎn)。2) 采用模塊化設(shè)計CPU,通過模擬仿真保證各模塊的正確性,以保證最終CPU功能的正確性,能正確地在FPGA板上完成指令設(shè)計的效果。3) 通過設(shè)計合理的16位指令,實現(xiàn)從存儲器取初始數(shù)和存數(shù),對初始數(shù)進行加減操作,通過修改存儲器初始數(shù)據(jù),實現(xiàn)FPGA上LED顯示無限加n減m的效果。二、 課程設(shè)計器材2.1 硬件平臺本實驗所需的硬件主要有:PC微型計算機和FPGA板-Cyclone III系列,型號EP3C16U484C6實驗開發(fā)板以及USB連接線。2.2 軟件平臺1) 操作系統(tǒng):Win 7;

5、2) 開發(fā)平臺:Quartus II 9.0集成開發(fā)軟件;3) 編程語言:VerilogHDL硬件描述語言。三、 CPU邏輯設(shè)計總體方案單周期CPU設(shè)計方案從宏觀上把握主要分為器件模塊和指令/數(shù)據(jù)模塊這兩大模塊,器件模塊是指令模塊的載體,指令數(shù)據(jù)在器件上流動,指令數(shù)據(jù)的格式是器件模塊的主宰。所以當設(shè)計CPU時,我們采用模塊化設(shè)計,單獨對著兩模塊進行設(shè)計,考慮到指令數(shù)據(jù)模塊的格式?jīng)Q定指令器件模塊接口的數(shù)據(jù)容量大小,所以應(yīng)先完成指令數(shù)據(jù)模塊的格式設(shè)計。圖1 CPU宏觀設(shè)計方案3.1 指令模塊3.1.1指令格式簡要設(shè)計本CPU實驗是針對16位指令數(shù)據(jù)設(shè)計的,所以應(yīng)當合理劃分指令數(shù)據(jù)區(qū)間段的指令相應(yīng)的

6、功能。從下圖2可以看出,16位指令數(shù)據(jù)劃分為5個區(qū)間段,指令的15-12位作為控制位傳入控制器產(chǎn)生控制信號,指令11-9位作為位置1從寄存器取數(shù)輸出數(shù)據(jù)到寄存器1號輸出口,指令8-6位作為位置2從寄存器取數(shù)輸出數(shù)據(jù)到寄存器2號輸出口,指令5-3位與指令8-6位作為數(shù)據(jù)選擇器選擇位置輸入寄存器寫位置口,指令5-0位作為擴展單元輸入,擴展數(shù)據(jù)成16位。另外指令11-0位作為擴展輸入,擴展成16位數(shù)據(jù)作為PC計數(shù)器的選擇器一端。圖2 指令格式簡要設(shè)計圖3.2 器件單元模塊此模塊的設(shè)計是CPU設(shè)計的核心部分,它主要涉及到CPU中多個器件的設(shè)計。我們依然采用模塊設(shè)計方案,把總體設(shè)計拆分成多個相互獨立的器

7、件,再對每部分器件單獨設(shè)計。在此模塊中包括:寄存器組、控制器、存儲器、PC計數(shù)器、數(shù)據(jù)選擇器、ALU單元這六大主要單元。如下圖2所示,展示出六大單元的設(shè)計方案以及六大單元之間的了解。圖3 器件模塊設(shè)計方案圖從上圖我們可以看出各單元之間的了解:初始數(shù)據(jù)從數(shù)據(jù)存儲器RAM中取出,通過兩種數(shù)據(jù)傳入方式:一種是不經(jīng)過數(shù)據(jù)選擇器,另一種是經(jīng)過數(shù)據(jù)選擇器,數(shù)據(jù)傳入到寄存器組中作為寄存器數(shù)據(jù)。而后當傳入的是位置 數(shù)據(jù)時,就從寄存器取出,經(jīng)過ALU運算單元,將數(shù)據(jù)傳入寄存器組中保存或傳入數(shù)據(jù)存儲器中保存。在整個過程中,PC計數(shù)器自動加1作為位置去指令存儲器ROM中取指令作為此輪執(zhí)行的指令數(shù)據(jù),而控制器在整個過

8、程中依據(jù)指令數(shù)據(jù)的指令碼產(chǎn)生相應(yīng)的控制信號(操作碼)控制器件的運作,從而完成整個CPU的執(zhí)行功能。下面我們將對主要的單元進行簡要概述。3.1.1 寄存器組寄存器組是作為保存數(shù)據(jù)的器件,故應(yīng)使用時鐘觸發(fā)的D觸發(fā)器(DFFE),等待一個時鐘到來將數(shù)據(jù)傳出去。本實驗設(shè)計為16位CPU,故每個寄存器應(yīng)為16位,即每個寄存器是由16個D觸發(fā)器擴展而成??紤]到指令從寄存器取數(shù)位數(shù)為3位,所以可以設(shè)置8個寄存器用于保存數(shù)據(jù),如果是寫位置的3位指令通過74138(3-8譯碼器)譯碼作為寄存器的有效EN使能端輸出數(shù)據(jù);如果是讀位置的3位指令數(shù)據(jù)通過8位擴展數(shù)據(jù)選擇器(LPM-MUX)選擇數(shù)據(jù)輸出。3.1.2 控

9、制器控制器是作為CPU控制信號產(chǎn)生的器件,通過產(chǎn)生控制信號,使其他器件有效或無效,因此控制器的設(shè)計顯得尤為重要??刂破鞯脑O(shè)計主要如下:先必須自己設(shè)計好各功能指令的4位01碼(指令的15-12),然后針對某個控制信號,找出使其為1的功能指令,對每個功能指令的0位上取非,然后4位相與,之后將所有為1的功能指令相或,結(jié)果作為此控制信號。對每個控制信號執(zhí)行重復操作,控制器也就是這些信號的組合。3.1.3 存儲器存儲器分為兩種類型:一種是數(shù)據(jù)存儲器RAM,另一種是位置存儲器ROM。考慮到設(shè)計的方便,否則使用寄存器設(shè)計存儲器也是可行的。3.1.3.1數(shù)據(jù)儲存器數(shù)據(jù)存儲器為RAM型,表示可讀可寫,所以數(shù)據(jù)儲

10、存器有4個端口,當寫信號有效時,應(yīng)給出寫的位置及數(shù)據(jù),再加上時鐘信號,這里的數(shù)據(jù)存儲器采用軟件封裝好的RAM-1-PORT存儲器。3.1.3.2指令存儲器指令存儲器為ROM型,表示只讀,所以位置存儲器有2個端口,應(yīng)給出讀的位置信號以及時鐘信號這里的數(shù)據(jù)存儲器采用軟件封裝好的ROM-1-PORT存儲器。3.1.4 PC計數(shù)器PC計數(shù)器主要作為執(zhí)行一條指令后,位置自動加1到指令存儲器中取16位指令作為此輪操作。故PC計數(shù)器應(yīng)能等待一個時鐘后將加1后的數(shù)據(jù)送至指令存取器中,所以它應(yīng)包括ALU累加器(一端為1)和寄存器(當一個時鐘信號到來,將數(shù)據(jù)輸出),書中還包括一個數(shù)據(jù)選擇器,用于設(shè)置PC的值,以至

11、于不會無限增長,實現(xiàn)J指令。3.1.5 數(shù)據(jù)選擇器數(shù)據(jù)選擇器主要是解決數(shù)據(jù)來源問題,通過控制信號使數(shù)據(jù)選擇器選擇的數(shù)據(jù)端口不同,此數(shù)據(jù)選擇器可選用軟件封裝的2選1選擇器。3.1.6 ALU單元ALU單元主要用于將輸入端的兩個數(shù)做加減操作,通過控制信號01的變化產(chǎn)生運算,該ALU可以使用軟件封裝的加減ALU(LPM-ADD-SUB),當控制信號為1時作加法,為0時作減法。3.1.7 符號擴展單元符號擴展單元主要用于將不夠16位的指令數(shù)據(jù)擴展成16位,作為輸入數(shù)據(jù)的一端參與數(shù)據(jù)選擇器運算,這里我們僅考慮最簡單的擴展方式:將不足16位的指令數(shù)據(jù)由高位向低位依次補0直至數(shù)據(jù)長度為16位。四、 模塊詳細

12、設(shè)計4.1指令設(shè)計模塊4.1.1 指令處理流程一般來說,CPU在處理指令時需要經(jīng)過以下幾個過程:(1)取指令(IF):根據(jù)程序計數(shù)器PC中的指令位置,從指令存儲器中取出一條指令,同時PC根據(jù)指令字長度自動遞增產(chǎn)生下一條指令所需要的指令位置,但遇到“位置轉(zhuǎn)移”指令時,則控制器把“轉(zhuǎn)移位置”送入PC,當然得到的“位置”需要做些變換才送入PC。     (2)指令譯碼(ID):對取指令操作中得到的指令進行分析并譯碼,確定這條指令需要完成的操作,由指令的15-12位產(chǎn)生相應(yīng)的操作控制信號,用于驅(qū)動執(zhí)行狀態(tài)中的各種操作。 (3)指令執(zhí)行(EXE

13、):根據(jù)指令譯碼得到的操作控制信號,具體地執(zhí)行指令動作,然后轉(zhuǎn)移到結(jié)果寫回狀態(tài)。 (4)存儲器訪問(MEM):所有需要訪問存儲器的操作都將在這個步驟中執(zhí)行,該步驟給出存儲器的數(shù)據(jù)位置,把數(shù)據(jù)寫入到存儲器中數(shù)據(jù)位置所指定的存儲單元或者從存儲器中得到數(shù)據(jù)位置單元中的數(shù)據(jù)。(5)結(jié)果寫回(WB):指令執(zhí)行的結(jié)果或者訪問存儲器中得到的數(shù)據(jù)寫回相應(yīng)的目的寄存器中。圖4 單周期CPU指令處理過程4.1.2 指令格式詳細設(shè)計本次CPU設(shè)計主要有5條功能指令,分別為ADD、SUB、LW、SW、J指令,對這5個功能指令的控制碼分別設(shè)定為0101/0110/1001/0001/1010,現(xiàn)對5條指令各自

14、的指令格式進行設(shè)計:(1) ADD指令0101(4位)rs(3位)rt(3位)rd(3位)reserved此ADD加法指令完成的功能是:將rs3位對應(yīng)的寄存器的數(shù)和rt3位對應(yīng)的寄存器的數(shù)相加,結(jié)果數(shù)據(jù)存放至rd3位對應(yīng)的寄存器的位置,reserved作為保留位。(2) SUB指令0110(4位)rs(3位)rt(3位)rd(3位)reserved此SUB減法指令完成的功能是:將rs3位對應(yīng)的寄存器的數(shù)和rt3位對應(yīng)的寄存器的數(shù)相減,結(jié)果數(shù)據(jù)存放至rd3位對應(yīng)的寄存器的位置,reserved作為保留位。(3) LW指令1001(4位)base(3位)rt(3位)offset(6位)此LW指令完

15、成的功能是:將base3位對應(yīng)的寄存器的數(shù)和offset6位擴展成16位數(shù)據(jù)相加,結(jié)果作為數(shù)據(jù)存儲器位置,取出位置對應(yīng)的數(shù)據(jù)存放到rt3位對應(yīng)的寄存器中。(4) SW指令0001(4位)base(3位)rt(3位)offset(6位)此SW指令完成的功能是:將base3位對應(yīng)的寄存器的數(shù)和offset6位擴展成16位數(shù)據(jù)相加,結(jié)果作為數(shù)據(jù)存儲器位置A,將rt3位對應(yīng)的寄存器的數(shù)據(jù)取出來,存放到A位置對應(yīng)的存儲器單元中。(5)J指令1010(4位)target(12位)此J指令完成的功能是:將12位位置零擴展成16位,作目標跳轉(zhuǎn)位置。4.2 器件單元模塊此模塊的設(shè)計是CPU設(shè)計的核心部分,它是將

16、眾多模塊整合在一起,在此模塊中主要包括:寄存器組、控制器、存儲器、PC計數(shù)器、數(shù)據(jù)選擇器、ALU單元這六大單元。如下圖5所示,展示出模塊間整合的總體效果,可以看出,每個模塊的功能還是顯而易見的,各模塊間通過命名一致達到數(shù)據(jù)雙向傳輸效果。圖5 CPU綜合模塊示意圖4.2.1寄存器組由上面總體設(shè)計方案中指出,每個寄存器應(yīng)該由16個D觸發(fā)器構(gòu)成,為了避免設(shè)計復雜,我們采用迭代的設(shè)計方法,即先由單個D觸發(fā)器設(shè)計成包含2個D觸發(fā)器模塊,圖6示出了由單個D觸發(fā)器構(gòu)成2個D觸發(fā)器模塊。為了避免篇幅頗多,這僅展示由8個D觸發(fā)器構(gòu)成最終16個D觸發(fā)器的示意圖,如圖7,以及最終16位D觸發(fā)器綜合模塊效果,如圖8。

17、圖6 單個D觸發(fā)器構(gòu)成2個觸發(fā)器圖7 8個D觸發(fā)器構(gòu)成16個D觸發(fā)器 圖8 16位D觸發(fā)器綜合模塊寄存器組作為數(shù)據(jù)保存的器件,當讀取寄存器中的數(shù)據(jù)時,涉及讀位置端口以及對應(yīng)的輸出數(shù)據(jù)端口,故應(yīng)該有兩個讀位置端口,兩個寫位置端口;當寫入寄存器數(shù)據(jù)時,涉及寫的信號、寫的位置以及寫的數(shù)據(jù)也應(yīng)該準備好,故應(yīng)有一個寫位置端口,一個數(shù)據(jù)準備端口以及一個寫信號,同時數(shù)據(jù)的傳送需要在一個時鐘信號到來的上升沿操作,故應(yīng)有一個時鐘信號CLK,所以總共端口共有8個。在圖9中展示出寄存器組的綜合模塊。圖9 寄存器組綜合模塊下面我們來看寄存器組綜合模塊的詳細設(shè)計,如圖10所示。主要有3處值得注意:l 因為我們設(shè)計的從寄

18、存器取數(shù)的指令位數(shù)為3位,所以最多可尋8個寄存器,所以可看到圖中示出了8個16位D觸發(fā)器的綜合模塊。l 圖中還有一個74138譯碼器,G1端為WE寫信號,當要向寄存器存數(shù)時,應(yīng)使寫信號有效,同時給出3位需要寫的位置,將要寫入的數(shù)據(jù)存至譯碼生成對應(yīng)的寄存器中。l 同時圖中還有2個8位數(shù)據(jù)選擇器,主要是用于當讀取寄存器數(shù)據(jù)時,給出讀取寄存器的位置,對應(yīng)8位數(shù)據(jù)選擇器輸出對應(yīng)寄存器中的數(shù)據(jù)。圖10 寄存器組詳細設(shè)計4.2.2控制器控制器的設(shè)計是整個CPU的命脈,因為控制器產(chǎn)生的控制信號用于整個CPU運作,針對某條功能指令,控制信號要能準確控制器件的運作。因此必須明確各個控制信號的作用,如下表1所示以

19、及控制信號和功能指令之間的關(guān)系,如下表2所示:表1 控制信號的作用信號名無效時作用(0)有效時作用(1)RegDst寫寄存器在寄存器堆的位置來自于rt 字段寫寄存器在寄存器堆的位置來自于rd字段ALUSrcB寄存器堆Data2 輸出符號擴展的立即數(shù)ALUOp減法加法RegWrite無在時鐘上升沿,寫寄存器MemtoReg送往寄存器組寫數(shù)據(jù)輸入的值來自ALU送往寄存器組寫數(shù)據(jù)輸入的值來自存儲器MemWr無在時鐘上升沿,寫存儲器PCSourcePC+1擴展的立即數(shù)表2 控制信號和功能指令對應(yīng)表控制信號ADDSUBLWSWJ功能操作碼01010110100100011010RegDst11000AL

20、USrcB00110ALUOp10110RegWrite11100MemtoReg00100MemWr00010PCSource00001由上表所示,我們可以容易得到每個控制信號的邏輯表達式,方法如下:找出某個信號在所有功能指令中為1的量,對相應(yīng)功能操作碼為0的位置改為非,再將4位相與,對不同的功能指令之間相或。假設(shè)功能操作碼的4位從左向右依次對應(yīng)S3、S2、S1、S0,則可以得出所以控制信號表達式:RegDst=S3S2S1S0+S3S2S1S0;ALUSrcB=S3S2S1S0+S3S2S1S0;ALUOp=S3S2S1S0+ S3S2S1S0+S3S2S1S0;RegWrite=S3S2

21、S1S0+S3S2S1S0+ S3S2S1S0;MemtoReg= S3S2S1S0;MemWr=S3S2S1S0;PCSource=S3S2S1S0;對應(yīng)的邏輯電路圖即是與非門的組合,如圖11,示出了ALUOp的電路圖實現(xiàn),輸入指令15-12的4位,通過功能指令內(nèi)的相與和功能指令間的相或得出最后控制信號ALUOp的值,對于其他信號的電路實現(xiàn)這里就不舉例了。圖11 ALUOp控制信號的電路實現(xiàn)按照上述示例對所有控制信號的電路都能實現(xiàn),則需要將所有控制信號模塊整合在一起,因此可以得出如圖12的控制器詳細設(shè)計:輸入的是指令15-12的控制碼,輸出7個控制信號,從圖13可以看到控制器的綜合模塊接口。

22、圖12 控制器的信號組合圖13 控制器綜合模塊4.2.3存儲器為了省去不必要的設(shè)計,存儲器模塊我們采用的是軟件封裝好的Memory。本次設(shè)計將存儲器分為數(shù)據(jù)存儲器和指令存儲器:數(shù)據(jù)存儲器使用RAM-1-PORT,可讀可寫,主要用于存放數(shù)據(jù),用于寄存器取數(shù)和存數(shù);指令存儲器使用ROM-1-PORT,只讀,用于存放16位指令數(shù)據(jù)。4.2.3.1 數(shù)據(jù)存儲器從圖14可以看出,數(shù)據(jù)存儲器RAM有4個輸入端和1個輸出端,能夠?qū)崿F(xiàn)將數(shù)據(jù)寫入存儲器操作,應(yīng)該要有準備寫入的數(shù)據(jù),要寫入的位置以及內(nèi)存寫操作控制信號,同時應(yīng)有時鐘信號控制,對應(yīng)的輸出端即從內(nèi)存取出的數(shù)據(jù)。圖14 數(shù)據(jù)存儲器RAM4.2.3.2 指

23、令存儲器從圖15可以看出,指令存儲器ROM有2個輸入端和1個輸出端,能夠?qū)崿F(xiàn)將指令數(shù)據(jù)從指令存儲器中取出,輸入端應(yīng)有準備要取出指令的位置以及時鐘信號,輸出端即從指令存儲器中取出的16位指令。圖15 指令存儲器ROM4.2.4 PC計數(shù)器程序計數(shù)器是用于當每個時鐘的上升沿到來后,PC計數(shù)器就自增1從指令存儲器中取出對應(yīng)增1的位置的指令數(shù)據(jù),作為本輪運算的指令。所以PC計數(shù)器模塊應(yīng)該由圖16所示的三部分組成:自增1的ALU單元、PC跳轉(zhuǎn)數(shù)據(jù)選擇器(主要用于實現(xiàn)J指令)以及暫存增1的指令數(shù)據(jù)的16位寄存器。從圖中可以看出,PC計數(shù)器只要在時鐘信號上升沿到來時就將增1的位置送入指令存儲器中,因為在暫存

24、增1位置的寄存器輸出端的16位位置,不經(jīng)任何信號控制就送入ALU的一端,與1相加,在本次時鐘上升沿就能將結(jié)果送入暫存寄存器中,等待下次時鐘信號的到來,輸出去的是已經(jīng)增1的位置了,或是由J指令直接指定的目標位置。圖16 PC計數(shù)器綜合模塊4.2.5數(shù)據(jù)選擇器數(shù)據(jù)選擇器主要用于根據(jù)控制信號,來選擇對應(yīng)的數(shù)據(jù)端輸入,在本次設(shè)計中用到4處數(shù)據(jù)選擇器,其內(nèi)部實現(xiàn)都是采用軟件封裝的2選1數(shù)據(jù)選擇器,在圖19中展示出PC數(shù)據(jù)選擇器具體實現(xiàn)方法,其他數(shù)據(jù)選擇武器實現(xiàn)類似。下面介紹4處數(shù)據(jù)選擇器,分別是:l 根據(jù)MemtoReg信號判斷寫入寄存器的數(shù)據(jù)是來自于ALU或是存儲器,如圖17所示;圖17 寫入寄存器數(shù)

25、據(jù)選擇器l 根據(jù)PCSource控制信號,判斷PC計數(shù)器的下一條位置是來自于PC+1還是來自于J指令指出的目標位置,主要用于J指令的跳轉(zhuǎn),如圖18是PC數(shù)據(jù)選擇器的綜合模塊,圖19是其具體實現(xiàn)方案,主要采用2選1數(shù)據(jù)選擇器。圖18 PC數(shù)據(jù)選擇器圖19 PC數(shù)據(jù)選擇器內(nèi)部實現(xiàn)l 根據(jù)RegDst信號確定寫入寄存器的位置是來自于指令數(shù)據(jù)的5-3位還是8-6位,如圖20所示。圖20 寫入寄存器位置數(shù)據(jù)選擇器l 根據(jù)ALUSrcB控制信號確定ALU單元的輸入B端的數(shù)據(jù)來源,主要用于LW指令中,判斷存儲器位置是由寄存器的1端和2端相加得到還是由寄存器的1端和指令后6位擴展成16位相加得到,如圖21所示

26、。圖21 ALU的B端數(shù)據(jù)選擇器4.2.6 ALU單元ALU單元主要用于將兩端輸入數(shù)據(jù)進行加或減操作,從圖22可以看到,ALU綜合模塊,有3個輸入端,分別是輸入數(shù)據(jù)A、B端和控制信號,對應(yīng)輸出端是AB端加或減的結(jié)果。從圖23我們了解ALU模塊的內(nèi)部實現(xiàn),ALU的實現(xiàn)主要是應(yīng)用軟件的ALU_ADD_SUB,器件做加或減的操作來自于ALUOp的控制,當ALUOp位1時,做加法;當為0時,做減法。圖22 ALU綜合模塊圖23 ALU模塊內(nèi)部實現(xiàn)4.2.7 擴展單元擴展單元主要用于填補數(shù)據(jù)的不足,此次設(shè)計的擴展單元為最簡單的擴展,即對于輸入不足的數(shù)據(jù),在其高位上依次補0直至湊夠16位數(shù)。設(shè)計中主要用到

27、兩處擴展:l 當執(zhí)行LW指令時,基址中的數(shù)據(jù)和指令后6位數(shù)據(jù)擴展成16位數(shù)據(jù)相加,結(jié)果作為存儲器的位置,從存儲器取數(shù),如圖24所示。圖24 指令后6位擴展16位l 當執(zhí)行J指令時,由J指令的后12位擴展成16位作為目標跳轉(zhuǎn)位置,如圖25所示。圖25 指令后12位擴展16位作為跳轉(zhuǎn)目標位置4.2.8 FPGA實驗板數(shù)碼管顯示此模塊主要解決結(jié)果輸出顯示在FPGA實驗板上的問題。設(shè)計的CPU位16位,但是FPGA實驗板的數(shù)碼管每個數(shù)字有8位,有4個數(shù)碼管,所以應(yīng)該讓結(jié)果的4位對應(yīng)數(shù)碼管的8位顯示,故需要使用Verilog語言按照引腳對應(yīng)編寫,如下是4位結(jié)果對應(yīng)數(shù)碼管8位顯示。圖26是對應(yīng)策略的模塊,

28、可以看到,使用了4個此模塊,分別將結(jié)果數(shù)據(jù)的3-0、7-4、11-8、15-12對應(yīng)顯示管的7-0、15-8、23-16、31-24。module changer(IN,OUT);input 3:0IN;output 7:0OUT;reg7:0 OUT;alwaysbegincase(IN)'b0000 : OUT = 'b11000000;'b0001 : OUT = 'b11111001;'b0010 : OUT = 'b10100100;'b0011 : OUT = 'b10110000;'b0100 : OUT =

29、 'b10011001;'b0101 : OUT = 'b10010010;'b0110 : OUT = 'b10000010;'b0111 : OUT = 'b11111000;'b1000 : OUT = 'b10000000;'b1001 : OUT = 'b10010000;'b1010 : OUT = 'b10001000;'b1011 : OUT = 'b10000011;'b1100 : OUT = 'b11000110;'b1101 :

30、 OUT = 'b10100001;'b1110 : OUT = 'b10000110;'b1111 : OUT = 'b10001110;endcaseendendmodule圖26 顯示對應(yīng)模塊顯示還有一步驟是將上述總模塊編譯成功后,會有32個輸出端口,按照引腳對應(yīng)接在如圖27的引腳圖上。圖27 實驗板引腳圖另外還有一個顯示問題是:時鐘信號太快,人肉眼來不及觀察,所以應(yīng)將時鐘延長,所以采用如圖28所示的時鐘計數(shù)器,輸入的時鐘信號經(jīng)過時鐘計數(shù)器產(chǎn)生24個時鐘信號,器件使用最高位時鐘信號,即C23,這樣相當于延長了時鐘信號,便于人眼觀察數(shù)碼管的顯示。圖2

31、8 時鐘計數(shù)器五、 實驗數(shù)據(jù)實驗數(shù)據(jù)包括兩大部分:數(shù)據(jù)存儲器中存儲初始數(shù)據(jù)、指令存儲器中存儲指令數(shù)據(jù),現(xiàn)分別對兩部分數(shù)據(jù)展示。5.1 數(shù)據(jù)存儲器初始數(shù)據(jù)數(shù)據(jù)存儲器中存放初始數(shù)據(jù)如表3,在數(shù)據(jù)存儲器中以二進制存在,這里表述使用16進制,表示的意思是:在數(shù)據(jù)存儲器中,位置0H,1H,2H,3H存放的初始數(shù)據(jù)是0002H,0001H,0003H,0004H。表3 數(shù)據(jù)存儲器數(shù)據(jù)表Address+00+01+10+110000000000000000100000000000000001000000000000001100000000000001005.2 指令存儲器指令數(shù)據(jù)指令存儲器中存放指令數(shù)據(jù)如表

32、4,在指令存儲器中以二進制存在。它表達的意思需要結(jié)合功能指令的格式進行分析。具體分析如下:表4 指令存儲器數(shù)據(jù)表Address+000+001+010+011+100+10100100100000100000010010000100000010101000001000000101000000000010001100000100000001010000000000010前兩條指令的前4位功能操作碼為1001,是LW指令。根據(jù)LW指令的格式,第一條指令將寄存器000中的數(shù)據(jù)和000000擴展成16位0000H相加結(jié)果為0000H(初始寄存器000數(shù)據(jù)為0000H)作為數(shù)據(jù)存儲器的位置(實驗中取結(jié)果

33、的4-0位作為位置)0H號位置取出原始數(shù)據(jù)0002H,存放至寄存器001號中;第二條指令將寄存器000中的數(shù)據(jù)和000001擴展成16位0001H相加結(jié)果為0001H(初始寄存器000數(shù)據(jù)為0000H)作為數(shù)據(jù)存儲器的位置1H號位置取出原始數(shù)據(jù)0001H,存放至寄存器010號中;第三條指令的前4位功能操作碼為0101,是ADD指令。根據(jù)ADD指令的格式,將寄存器000號中的數(shù)據(jù)(初始還是0000H)和寄存器001號中的數(shù)據(jù)0002H(存儲器取出放至寄存器001中的)相加結(jié)果送入寄存器000號中。第四條指令的前4位功能操作碼為1010,是J指令。根據(jù)J指令的格式,將指令后12位11-0數(shù)據(jù)004H零擴展成16位0004H,即跳轉(zhuǎn)至位置為0004H(此處即為下一條指令,這里設(shè)置J指令主要是為了解決加減顯示的時間不一致性)。第五條指令的前4位功能操作碼為0110,是SUB指令

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論