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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、可以看出,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位作為擴(kuò)展單元輸入,擴(kuò)展數(shù)據(jù)成16位。另外指令11-0位作為擴(kuò)展輸入,擴(kuò)展成16位數(shù)據(jù)作為PC計(jì)數(shù)器的選擇器一端。圖2 指令格式簡要設(shè)計(jì)圖3.2 器件單元模塊此模塊的設(shè)計(jì)是CPU設(shè)計(jì)的核心部分,它主要涉及到CPU中多個器件的設(shè)計(jì)。我們依然采用模塊設(shè)計(jì)方案,把總體設(shè)計(jì)拆分成多個相互獨(dú)立的器件,再對每部分

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

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

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

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

11、,實(shí)現(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)生運(yùn)算,該ALU可以使用軟件封裝的加減ALU(LPM-ADD-SUB),當(dāng)控制信號為1時(shí)作加法,為0時(shí)作減法。3.1.7 符號擴(kuò)展單元符號擴(kuò)展單元主要用于將不夠16位的指令數(shù)據(jù)擴(kuò)展成16位,作為輸入數(shù)據(jù)的一端參與數(shù)據(jù)選擇器運(yùn)算,這里我們僅考慮最簡單的擴(kuò)展方式:將不足16位的指令數(shù)據(jù)由高位向低位依次補(bǔ)0直至數(shù)據(jù)長度為16位。四、 模塊詳細(xì)設(shè)計(jì)4.1指令

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

13、碼得到的操作控制信號,具體地執(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 指令格式詳細(xì)設(shè)計(jì)本次CPU設(shè)計(jì)主要有5條功能指令,分別為ADD、SUB、LW、SW、J指令,對這5個功能指令的控制碼分別設(shè)定為0101/0110/1001/0001/1010,現(xiàn)對5條指令各自的指令格式進(jìn)行

14、設(shè)計(jì):(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位擴(kuò)展成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位擴(kuò)展成16位數(shù)據(jù)相加,結(jié)果作為數(shù)據(jù)存儲器地址A,將rt3位對應(yīng)的寄存器的數(shù)據(jù)取出來,存放到A地址對應(yīng)的存儲器單元中。(5)J指令1010(4位)target(12位)此J指令完成的功能是:將12位地址零擴(kuò)展成16位,作目標(biāo)跳轉(zhuǎn)地址。4.2 器件單元模塊此模塊的設(shè)計(jì)是CPU設(shè)計(jì)的核心部分,它是將眾多模塊整合在

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

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

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

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

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

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

22、的信號組合圖13 控制器綜合模塊4.2.3存儲器為了省去不必要的設(shè)計(jì),存儲器模塊我們采用的是軟件封裝好的Memory。本次設(shè)計(jì)將存儲器分為數(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)該要有準(zhǔn)備寫入的數(shù)據(jù),要寫入的地址以及內(nèi)存寫操作控制信號,同時(shí)應(yīng)有時(shí)鐘信號控制,對應(yīng)的輸出端即從內(nèi)存取出的數(shù)據(jù)。圖14 數(shù)據(jù)存儲器RAM4.2.3.2 指令存儲器從圖1

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

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

25、據(jù)PCSource控制信號,判斷PC計(jì)數(shù)器的下一條地址是來自于PC+1還是來自于J指令指出的目標(biāo)地址,主要用于J指令的跳轉(zhuǎn),如圖18是PC數(shù)據(jù)選擇器的綜合模塊,圖19是其具體實(shí)現(xiàn)方案,主要采用2選1數(shù)據(jù)選擇器。圖18 PC數(shù)據(jù)選擇器圖19 PC數(shù)據(jù)選擇器內(nèi)部實(shí)現(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位擴(kuò)展成16位相加得到,如圖21所示。圖21 AL

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

27、當(dāng)執(zhí)行LW指令時(shí),基址中的數(shù)據(jù)和指令后6位數(shù)據(jù)擴(kuò)展成16位數(shù)據(jù)相加,結(jié)果作為存儲器的地址,從存儲器取數(shù),如圖24所示。圖24 指令后6位擴(kuò)展16位l 當(dāng)執(zhí)行J指令時(shí),由J指令的后12位擴(kuò)展成16位作為目標(biāo)跳轉(zhuǎn)地址,如圖25所示。圖25 指令后12位擴(kuò)展16位作為跳轉(zhuǎn)目標(biāo)地址4.2.8 FPGA實(shí)驗(yàn)板數(shù)碼管顯示此模塊主要解決結(jié)果輸出顯示在FPGA實(shí)驗(yàn)板上的問題。設(shè)計(jì)的CPU位16位,但是FPGA實(shí)驗(yàn)板的數(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 = 'b

29、10011001;'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 : OUT =

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

31、五、 實(shí)驗(yàn)數(shù)據(jù)實(shí)驗(yàn)數(shù)據(jù)包括兩大部分:數(shù)據(jù)存儲器中存儲初始數(shù)據(jù)、指令存儲器中存儲指令數(shù)據(jù),現(xiàn)分別對兩部分?jǐn)?shù)據(jù)展示。5.1 數(shù)據(jù)存儲器初始數(shù)據(jù)數(shù)據(jù)存儲器中存放初始數(shù)據(jù)如表3,在數(shù)據(jù)存儲器中以二進(jìn)制存在,這里表述使用16進(jìn)制,表示的意思是:在數(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ù)如表4,在指令存儲

32、器中以二進(jìn)制存在。它表達(dá)的意思需要結(jié)合功能指令的格式進(jìn)行分析。具體分析如下:表4 指令存儲器數(shù)據(jù)表Address+000+001+010+011+100+10100100100000100000010010000100000010101000001000000101000000000010001100000100000001010000000000010前兩條指令的前4位功能操作碼為1001,是LW指令。根據(jù)LW指令的格式,第一條指令將寄存器000中的數(shù)據(jù)和000000擴(kuò)展成16位0000H相加結(jié)果為0000H(初始寄存器000數(shù)據(jù)為0000H)作為數(shù)據(jù)存儲器的地址(實(shí)驗(yàn)中取結(jié)果的4-0位作為地址)0H號地址取出原始數(shù)據(jù)0002H,存放至寄存器001號中;第二條指令將寄存器000中的數(shù)據(jù)和000001擴(kuò)展成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指令。根

溫馨提示

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

評論

0/150

提交評論