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

下載本文檔

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

文檔簡(jiǎn)介

1、信息科學(xué)與工程學(xué)院課程設(shè)計(jì)報(bào)告 課程名稱: 計(jì)算機(jī)組成原理與結(jié)構(gòu) 題目: 單周期CPU邏輯設(shè)計(jì) 年級(jí)/專(zhuān)業(yè): XXXXXXXXXXXXXXX X 學(xué)生姓名: 王俠俠、李懷民 學(xué)號(hào): XXXXXXXXXXXXXXXXXXX 指導(dǎo)老師: XXXX 開(kāi)始時(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 硬件平臺(tái)2.2 軟件平臺(tái)三、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é)論和體會(huì)七、參考文獻(xiàn)

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

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

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

5、2) 開(kāi)發(fā)平臺(tái):Quartus II 9.0集成開(kāi)發(fā)軟件;3) 編程語(yǔ)言:VerilogHDL硬件描述語(yǔ)言。三、 CPU邏輯設(shè)計(jì)總體方案單周期CPU設(shè)計(jì)方案從宏觀上把握主要分為器件模塊和指令/數(shù)據(jù)模塊這兩大模塊,器件模塊是指令模塊的載體,指令數(shù)據(jù)在器件上流動(dòng),指令數(shù)據(jù)的格式是器件模塊的主宰。所以當(dāng)設(shè)計(jì)CPU時(shí),我們采用模塊化設(shè)計(jì),單獨(dú)對(duì)著兩模塊進(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指令格式簡(jiǎn)要設(shè)計(jì)本CPU實(shí)驗(yàn)是針對(duì)16位指令數(shù)據(jù)設(shè)計(jì)的,所以應(yīng)當(dāng)合理劃分指令數(shù)據(jù)區(qū)間段的指令相應(yīng)的

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23、令存儲(chǔ)器從圖15可以看出,指令存儲(chǔ)器ROM有2個(gè)輸入端和1個(gè)輸出端,能夠?qū)崿F(xiàn)將指令數(shù)據(jù)從指令存儲(chǔ)器中取出,輸入端應(yīng)有準(zhǔn)備要取出指令的位置以及時(shí)鐘信號(hào),輸出端即從指令存儲(chǔ)器中取出的16位指令。圖15 指令存儲(chǔ)器ROM4.2.4 PC計(jì)數(shù)器程序計(jì)數(shù)器是用于當(dāng)每個(gè)時(shí)鐘的上升沿到來(lái)后,PC計(jì)數(shù)器就自增1從指令存儲(chǔ)器中取出對(duì)應(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í)鐘信號(hào)上升沿到來(lái)時(shí)就將增1的位置送入指令存儲(chǔ)器中,因?yàn)樵跁捍?/p>

24、增1位置的寄存器輸出端的16位位置,不經(jīng)任何信號(hào)控制就送入ALU的一端,與1相加,在本次時(shí)鐘上升沿就能將結(jié)果送入暫存寄存器中,等待下次時(shí)鐘信號(hào)的到來(lái),輸出去的是已經(jīng)增1的位置了,或是由J指令直接指定的目標(biāo)位置。圖16 PC計(jì)數(shù)器綜合模塊4.2.5數(shù)據(jù)選擇器數(shù)據(jù)選擇器主要用于根據(jù)控制信號(hào),來(lái)選擇對(duì)應(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)類(lèi)似。下面介紹4處數(shù)據(jù)選擇器,分別是:l 根據(jù)MemtoReg信號(hào)判斷寫(xiě)入寄存器的數(shù)據(jù)是來(lái)自于ALU或是存儲(chǔ)器,如圖17所示;圖17 寫(xiě)入寄存器數(shù)

25、據(jù)選擇器l 根據(jù)PCSource控制信號(hào),判斷PC計(jì)數(shù)器的下一條位置是來(lái)自于PC+1還是來(lái)自于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信號(hào)確定寫(xiě)入寄存器的位置是來(lái)自于指令數(shù)據(jù)的5-3位還是8-6位,如圖20所示。圖20 寫(xiě)入寄存器位置數(shù)據(jù)選擇器l 根據(jù)ALUSrcB控制信號(hào)確定ALU單元的輸入B端的數(shù)據(jù)來(lái)源,主要用于LW指令中,判斷存儲(chǔ)器位置是由寄存器的1端和2端相加得到還是由寄存器的1端和指令后6位擴(kuò)展成16位相加得到,如圖21所示

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

27、兩處擴(kuò)展:l 當(dāng)執(zhí)行LW指令時(shí),基址中的數(shù)據(jù)和指令后6位數(shù)據(jù)擴(kuò)展成16位數(shù)據(jù)相加,結(jié)果作為存儲(chǔ)器的位置,從存儲(chǔ)器取數(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)板上的問(wèn)題。設(shè)計(jì)的CPU位16位,但是FPGA實(shí)驗(yàn)板的數(shù)碼管每個(gè)數(shù)字有8位,有4個(gè)數(shù)碼管,所以應(yīng)該讓結(jié)果的4位對(duì)應(yīng)數(shù)碼管的8位顯示,故需要使用Verilog語(yǔ)言按照引腳對(duì)應(yīng)編寫(xiě),如下是4位結(jié)果對(duì)應(yīng)數(shù)碼管8位顯示。圖26是對(duì)應(yīng)策略的模塊,

28、可以看到,使用了4個(gè)此模塊,分別將結(jié)果數(shù)據(jù)的3-0、7-4、11-8、15-12對(duì)應(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 顯示對(duì)應(yīng)模塊顯示還有一步驟是將上述總模塊編譯成功后,會(huì)有32個(gè)輸出端口,按照引腳對(duì)應(yīng)接在如圖27的引腳圖上。圖27 實(shí)驗(yàn)板引腳圖另外還有一個(gè)顯示問(wèn)題是:時(shí)鐘信號(hào)太快,人肉眼來(lái)不及觀察,所以應(yīng)將時(shí)鐘延長(zhǎng),所以采用如圖28所示的時(shí)鐘計(jì)數(shù)器,輸入的時(shí)鐘信號(hào)經(jīng)過(guò)時(shí)鐘計(jì)數(shù)器產(chǎn)生24個(gè)時(shí)鐘信號(hào),器件使用最高位時(shí)鐘信號(hào),即C23,這樣相當(dāng)于延長(zhǎng)了時(shí)鐘信號(hào),便于人眼觀察數(shù)碼管的顯示。圖2

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

32、4,在指令存儲(chǔ)器中以二進(jìn)制存在。它表達(dá)的意思需要結(jié)合功能指令的格式進(jìn)行分析。具體分析如下:表4 指令存儲(chǔ)器數(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ù)存儲(chǔ)器的位置(實(shí)驗(yàn)中取結(jié)果

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論