MIPS程序設(shè)計(jì)報(bào)告_第1頁(yè)
MIPS程序設(shè)計(jì)報(bào)告_第2頁(yè)
MIPS程序設(shè)計(jì)報(bào)告_第3頁(yè)
MIPS程序設(shè)計(jì)報(bào)告_第4頁(yè)
MIPS程序設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

PAGEPAGE11組成原理實(shí)驗(yàn)報(bào)告姓名學(xué)號(hào)陳寶可07055004劉睿07055013林建財(cái)07055040指導(dǎo)老師:姜欣寧2010年4月22日一、總體設(shè)計(jì)思想1.1CPU簡(jiǎn)介CPU是計(jì)算機(jī)的核心,其重要性好比大腦對(duì)于人一樣,它負(fù)責(zé)處理、運(yùn)算計(jì)算機(jī)內(nèi)部的所有數(shù)據(jù)。CPU的種類決定了操作系統(tǒng)和相應(yīng)的軟件。CPU主要由運(yùn)算器、控制器、寄存器組和內(nèi)部總線等構(gòu)成,是PC的核心,再配上儲(chǔ)存器、輸入/輸出接口和系統(tǒng)總線組成為完整的PC(個(gè)人電腦)。單周期CPU的特點(diǎn)是每條指令的執(zhí)行只需要一個(gè)時(shí)鐘周期,一條指令執(zhí)行完再執(zhí)行下一條指令。再這一個(gè)周期中,完成更新地址,取指,解碼,執(zhí)行,內(nèi)存操作以及寄存器操作。由于每個(gè)時(shí)鐘上升沿時(shí)更新地址,因此要在上升沿到來(lái)之前完成所有運(yùn)算,而這所有的運(yùn)算除可以利用一個(gè)下降沿外,只能通過(guò)組合邏輯解決。這給寄存器和存儲(chǔ)器RAM的制作帶來(lái)了些許難度。且因?yàn)槊總€(gè)時(shí)鐘周期的時(shí)間長(zhǎng)短必須統(tǒng)一,因此在確定時(shí)鐘周期的時(shí)間長(zhǎng)度時(shí),要依照最長(zhǎng)延遲的指令時(shí)間來(lái)定,這也限制了它的執(zhí)行效率。下圖是cpu設(shè)計(jì)的思路:1.2系統(tǒng)主要框架第一臺(tái)電子計(jì)算機(jī)與1946年2月14日誕生至今,計(jì)算機(jī)的發(fā)展迅速,經(jīng)歷了電子管,晶體管管,集成電路,大規(guī)模集成電路,超大規(guī)模集成電路的時(shí)代,現(xiàn)在集成電路的設(shè)計(jì)已經(jīng)接近極限,不過(guò)在發(fā)展歷程中,計(jì)算機(jī)的核心框架并沒(méi)有太多的改變,仍然是由五大部件組成:存儲(chǔ)器、運(yùn)算器、控制器、I/O設(shè)備。設(shè)計(jì)過(guò)程中主要以CPU(運(yùn)算器+控制器)為中心。如圖是計(jì)算機(jī)組成原理圖: CPU的功能: 設(shè)計(jì)的cpu主要是由ALU(運(yùn)算器)和CU(控制器)兩個(gè)核心部件構(gòu)成,另外設(shè)計(jì)一些輔助器件。ALU處理整個(gè)計(jì)算機(jī)的計(jì)算,設(shè)計(jì)的ALU只能進(jìn)行簡(jiǎn)單的算術(shù)運(yùn)算,并不能夠?qū)崿F(xiàn)很強(qiáng)大的計(jì)算功能,CU是整個(gè)計(jì)算機(jī)的控制部分,它能夠接收外界的響應(yīng),并控制計(jì)算機(jī)的其他部件完成特定的功能,CU和ALU共同組成cpu的核心部件,處理整個(gè)計(jì)算機(jī)的事件。CPU開(kāi)發(fā)的進(jìn)程:設(shè)計(jì)初始時(shí),成員討論cpu所能實(shí)現(xiàn)的功能,cpu的組成部分,所需要的開(kāi)發(fā)工具、語(yǔ)言、平臺(tái)、參考資料等,明確了設(shè)計(jì)思想后,小組進(jìn)行明確的分工,現(xiàn)在設(shè)計(jì)過(guò)程已經(jīng)從最初的討論進(jìn)入初步的實(shí)踐,小組成員正按照各自的分工進(jìn)行cpu的設(shè)計(jì)開(kāi)發(fā)。設(shè)計(jì)成員的分工:本小組由三名成員,林建財(cái)主要完成設(shè)計(jì)思路提出和最終的整合,陳寶可主要完成各個(gè)模塊的設(shè)計(jì),劉睿主要完成報(bào)告的編寫(xiě)以及提出相關(guān)的意見(jiàn),設(shè)計(jì)過(guò)程中成員需要相互配合,相互支持分工沒(méi)有明顯的界限,成員可以揚(yáng)長(zhǎng)避短,各展所長(zhǎng)。CPU設(shè)計(jì)的工具:現(xiàn)在存在很多的cpu開(kāi)發(fā)語(yǔ)言,如VHDL硬件描述語(yǔ)言,VerilogHDL描述語(yǔ)言等等,它們都是非常優(yōu)秀的開(kāi)發(fā)工具,鑒于知識(shí)的局限性,這里只列出我們所學(xué)的工具。

Quartus®IIdesign是最高級(jí)和復(fù)雜的,用于system-on-a-programmable-chip(SOPC)的設(shè)計(jì)環(huán)境。QuartusIIdesign提供完善的timingclosure和LogicLock?基于塊的設(shè)計(jì)流程。QuartusIIdesign是唯一一個(gè)包括以timingclosure和基于塊的設(shè)計(jì)流為基本特征的programmablelogicdevice(PLD)的軟件。QuartusII設(shè)計(jì)軟件改進(jìn)了性能、提升了功能性、解決了潛在的設(shè)計(jì)延遲等,在工業(yè)領(lǐng)域率先提供FPGA與mask-programmeddevices開(kāi)發(fā)的統(tǒng)一工作流程。EDA技術(shù)EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺(tái)上,用硬件描述語(yǔ)言HDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化、布局、布線和仿真,直至對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動(dòng)強(qiáng)度。利用EDA工具,以從概念、算法、協(xié)議等開(kāi)始設(shè)計(jì)電子系統(tǒng),大量工作可以通過(guò)計(jì)算機(jī)完成,并可以將電子產(chǎn)品從電路設(shè)計(jì)、性能分析到設(shè)計(jì)出IC版圖或PCB版圖的整個(gè)過(guò)程的計(jì)算機(jī)上自動(dòng)處理完成。CPU開(kāi)發(fā)的步驟設(shè)計(jì)過(guò)程中,小組成員考慮的步驟如下1、設(shè)計(jì)定義和可綜合的HDL代碼2、邏輯綜合3、版圖規(guī)劃4、單元布局和優(yōu)化5、靜態(tài)時(shí)序分析(STA)、形式驗(yàn)證(FV)和可測(cè)性電路插入(DFT)。6、后布局優(yōu)化,時(shí)鐘樹(shù)綜合和布線設(shè)計(jì)7、寄生參數(shù)的提取8、后仿真,以及時(shí)序和功耗分析9、ECO(工程修改命令)修改。10、物理驗(yàn)證。目前已經(jīng)完成了初期的開(kāi)發(fā)過(guò)程,在后續(xù)時(shí)間中將完成后續(xù)步驟。具體步驟如下圖CPU的開(kāi)發(fā)周期根據(jù)設(shè)計(jì)的具體步驟以及前期所做的工作,我們大概需要4-5周的時(shí)間來(lái)完成設(shè)計(jì),cpu的開(kāi)發(fā)過(guò)程中主要花費(fèi)的時(shí)間是在后期的調(diào)試和實(shí)現(xiàn)上,前期相對(duì)比較容易實(shí)現(xiàn),大概需要1周左右的時(shí)間,后期需要投入較多的精力和時(shí)間。1.3參考資料《精通VerilogHDL語(yǔ)言編程》劉波電子工業(yè)出版社VerilogHDL設(shè)計(jì)實(shí)踐與指導(dǎo)劉秋云等機(jī)械工業(yè)出版社1.4相關(guān)信息主頻主頻也叫時(shí)鐘頻率,單位是MHz(或GHz),用來(lái)表示CPU的運(yùn)算、處理數(shù)據(jù)的速度外頻外頻是CPU的基準(zhǔn)頻率,單位是MHz。CPU的外頻決定著整塊主板的運(yùn)行速度。CPU的位和字長(zhǎng)位:在數(shù)字電路和電腦技術(shù)中采用二進(jìn)制,代碼只有“0”和“1”,其中無(wú)論是“0”或是“1”在CPU中都是一“位”。

字長(zhǎng):電腦技術(shù)中對(duì)CPU在單位時(shí)間內(nèi)(同一時(shí)間)能一次處理的二進(jìn)制數(shù)的位數(shù)叫字長(zhǎng)。所以能處理字長(zhǎng)為8位數(shù)據(jù)的CPU通常就叫8位的CPU。同理32位的CPU就能在單位時(shí)間內(nèi)處理字長(zhǎng)為32位的二進(jìn)制數(shù)據(jù)。字節(jié)和字長(zhǎng)的區(qū)別:由于常用的英文字符用8位二進(jìn)制就可以表示,所以通常就將8位稱為一個(gè)字節(jié)。字長(zhǎng)的長(zhǎng)度是不固定的,對(duì)于不同的CPU、字長(zhǎng)的長(zhǎng)度也不一樣。8位的CPU一次只能處理一個(gè)字節(jié),而32位的CPU一次就能處理4個(gè)字節(jié),同理字長(zhǎng)為64位的CPU一次可以處理8個(gè)字節(jié)。倍頻系數(shù)倍頻系數(shù)是指CPU主頻與外頻之間的相對(duì)比例關(guān)系。在相同的外頻下,倍頻越高CPU的頻率也越高。緩存緩存大小也是CPU的重要指標(biāo)之一,而且緩存的結(jié)構(gòu)和大小對(duì)CPU速度的影響非常大,CPU內(nèi)緩存的運(yùn)行頻率極高,一般是和處理器同頻運(yùn)作,工作效率遠(yuǎn)遠(yuǎn)大于系統(tǒng)內(nèi)存和硬盤(pán)。實(shí)際工作時(shí),CPU往往需要重復(fù)讀取同樣的數(shù)據(jù)塊,而緩存容量的增大,可以大幅度提升CPU內(nèi)部讀取數(shù)據(jù)的命中率,而不用再到內(nèi)存或者硬盤(pán)上尋找,以此提高系統(tǒng)性能。但是由于CPU芯片面積和成本的因素來(lái)考慮,緩存都很小。

CPU擴(kuò)展指令集CPU依靠指令來(lái)計(jì)算和控制系統(tǒng),每款CPU在設(shè)計(jì)時(shí)就規(guī)定了一系列與其硬件電路相配合的指令系統(tǒng)。指令的強(qiáng)弱也是CPU的重要指標(biāo),指令集是提高微處理器效率的最有效工具之一。從現(xiàn)階段的主流體系結(jié)構(gòu)講,指令集可分為復(fù)雜指令集和精簡(jiǎn)指令集兩部分,CPU內(nèi)核和I/O工作電壓從586CPU開(kāi)始,CPU的工作電壓分為內(nèi)核電壓和I/O電壓兩種,通常CPU的核心電壓小于等于I/O電壓。其中內(nèi)核電壓的大小是根據(jù)CPU的生產(chǎn)工藝而定,一般制作工藝越小,內(nèi)核工作電壓越低;I/O電壓一般都在1.6~5V。低電壓能解決耗電過(guò)大和發(fā)熱過(guò)高的問(wèn)題。制造工藝制造工藝的微米是指IC內(nèi)電路與電路之間的距離。制造工藝的趨勢(shì)是向密集度愈高的方向發(fā)展。密度愈高的IC電路設(shè)計(jì),意味著在同樣大小面積的IC中,可以擁有密度更高、功能更復(fù)雜的電路設(shè)計(jì)。現(xiàn)在主要的180nm、130nm、90nm、65nm、45納米。最近inter已經(jīng)有32納米的制造工藝的酷睿i3/i5系列了。指令集(1)CISC指令集

CISC指令集,也稱為復(fù)雜指令集,英文名是CISC,(ComplexInstructionSetComputer的縮寫(xiě))。在CISC微處理器中,程序的各條指令是按順序串行執(zhí)行的,每條指令中的各個(gè)操作也是按順序串行執(zhí)行的。順序執(zhí)行的優(yōu)點(diǎn)是控制簡(jiǎn)單,但計(jì)算機(jī)各部分的利用率不高,執(zhí)行速度慢。(2)RISC指令集

RISC是英文“ReducedInstructionSetComputing”的縮寫(xiě),中文意思是“精簡(jiǎn)指令集”。它是在CISC指令系統(tǒng)基礎(chǔ)上發(fā)展起來(lái)的,有人對(duì)CISC機(jī)進(jìn)行測(cè)試表明,各種指令的使用頻度相當(dāng)懸殊,最常使用的是一些比較簡(jiǎn)單的指令,它們僅占指令總數(shù)的20%,但在程序中出現(xiàn)的頻度卻占80%。復(fù)雜的指令系統(tǒng)必然增加微處理器的復(fù)雜性,使處理器的研制時(shí)間長(zhǎng),成本高。并且復(fù)雜指令需要復(fù)雜的操作,必然會(huì)降低計(jì)算機(jī)的速度(3)IA-64

EPIC(ExplicitlyParallelInstructionComputers,精確并行指令計(jì)算機(jī))是否是RISC和CISC體系的繼承者的爭(zhēng)論已經(jīng)有很多,單以EPIC體系來(lái)說(shuō),它更像Intel的處理器邁向RISC體系的重要步驟。從理論上說(shuō),EPIC體系設(shè)計(jì)的CPU,在相同的主機(jī)配置下,處理Windows的應(yīng)用軟件比基于Unix下的應(yīng)用軟件要好得多。

超流水線與超標(biāo)量在解釋超流水線與超標(biāo)量前,先了解流水線(pipeline)。流水線是Intel首次在486芯片中開(kāi)始使用的。流水線的工作方式就象工業(yè)生產(chǎn)上的裝配流水線。在CPU中由5—6個(gè)不同功能的電路單元組成一條指令處理流水線,然后將一條X86指令分成5—6步后再由這些電路單元分別執(zhí)行,這樣就能實(shí)現(xiàn)在一個(gè)CPU時(shí)鐘周期完成一條指令,因此提高CPU的運(yùn)算速度。經(jīng)典奔騰每條整數(shù)流水線都分為四級(jí)流水,即指令預(yù)取、譯碼、執(zhí)行、寫(xiě)回結(jié)果,浮點(diǎn)流水又分為八級(jí)流水。

超標(biāo)量是通過(guò)內(nèi)置多條流水線來(lái)同時(shí)執(zhí)行多個(gè)處理器,其實(shí)質(zhì)是以空間換取時(shí)間。而超流水線是通過(guò)細(xì)化流水、提高主頻,使得在一個(gè)機(jī)器周期內(nèi)完成一個(gè)甚至多個(gè)操作,其實(shí)質(zhì)是以時(shí)間換取空間封裝形式CPU封裝是采用特定的材料將CPU芯片或CPU模塊固化在其中以防損壞的保護(hù)措施,一般必須在封裝后CPU才能交付用戶使用。CPU的封裝方式取決于CPU安裝形式和器件集成設(shè)計(jì),從大的分類來(lái)看通常采用Socket插座進(jìn)行安裝的CPU使用PGA(柵格陣列)方式封裝,而采用Slotx槽安裝的CPU則全部采用SEC(單邊接插盒)的形式封裝?,F(xiàn)在還有PLGA(PlasticLandGridArray)、OLGA(OrganicLandGridArray)等封裝技術(shù)。多線程同時(shí)多線程Simultaneousmultithreading,簡(jiǎn)稱SMT。SMT可通過(guò)復(fù)制處理器上的結(jié)構(gòu)狀態(tài),讓同一個(gè)處理器上的多個(gè)線程同步執(zhí)行并共享處理器的執(zhí)行資源,可最大限度地實(shí)現(xiàn)寬發(fā)射、亂序的超標(biāo)量處理,提高處理器運(yùn)算部件的利用率,緩和由于數(shù)據(jù)相關(guān)或Cache未命中帶來(lái)的訪問(wèn)內(nèi)存延時(shí)。多核心多核心,也指單芯片多處理器(Chipmultiprocessors,簡(jiǎn)稱CMP)。CMP是由美國(guó)斯坦福大學(xué)提出的,其思想是將大規(guī)模并行處理器中的SMP(對(duì)稱多處理器)集成到同一芯片內(nèi),各個(gè)處理器并行執(zhí)行不同的進(jìn)程。SMPSMP(SymmetricMulti-Processing),對(duì)稱多處理結(jié)構(gòu)的簡(jiǎn)稱,是指在一個(gè)計(jì)算機(jī)上匯集了一組處理器(多CPU),各CPU之間共享內(nèi)存子系統(tǒng)以及總線結(jié)構(gòu)。在這種技術(shù)的支持下,一個(gè)服務(wù)器系統(tǒng)可以同時(shí)運(yùn)行多個(gè)處理器,并共享內(nèi)存和其他的主機(jī)資源。亂序執(zhí)行技術(shù)亂序執(zhí)行(out-of-orderexecution),是指CPU允許將多條指令不按程序規(guī)定的順序分開(kāi)發(fā)送給各相應(yīng)電路單元處理的技術(shù)。1.5CPU、主存和指令集的基本功能主存分為兩個(gè),一個(gè)是指令存儲(chǔ)器,一個(gè)是數(shù)據(jù)存儲(chǔ)器。指令集實(shí)現(xiàn)一些基本的計(jì)算功能如:四則運(yùn)算、跳轉(zhuǎn)指令等。cpu的基本功能已經(jīng)在前面有了比較詳細(xì)的介紹,先從指令存儲(chǔ)器中取得指令,分析指令的功能,取相應(yīng)的數(shù)據(jù),完成相應(yīng)的功能。二、設(shè)計(jì)方法2.1系統(tǒng)的總體框圖如下圖中只是初步的設(shè)計(jì)圖,有些器件并沒(méi)有畫(huà)上,在后續(xù)設(shè)計(jì)中可能需要增加一些工具,大體設(shè)計(jì)思想入上圖2.2主要器件介紹CPU主要功能部件是ALU和CU,對(duì)此我們作出詳細(xì)介紹,對(duì)其他簡(jiǎn)單部件我們做出簡(jiǎn)單介紹。因?yàn)槲覀円呀?jīng)實(shí)現(xiàn)部件模塊化設(shè)計(jì)故在此我們顯示出我們的模塊化設(shè)計(jì)。1、寄存器組的設(shè)計(jì)——用來(lái)輸出所需要的操作數(shù)。2、控制器Contral用來(lái)控制整個(gè)設(shè)計(jì)的功能波形圖如下:其波形具體分析見(jiàn)下面的CU分析。3數(shù)據(jù)擴(kuò)展器件Extended由于指令集存在立即數(shù)的運(yùn)算,用來(lái)將16位立即數(shù)擴(kuò)展位32位立即數(shù)4組合跳轉(zhuǎn)指令I(lǐng)RPC4 選擇跳轉(zhuǎn)或者順序執(zhí)行的指令5運(yùn)算器ALU用來(lái)實(shí)現(xiàn)基本的運(yùn)算功能波形圖如下:其中000表示ADD,001表示SUB,010表示AND,011表示OR,100表示XOR6、二路選擇器MUX_2en選擇操作數(shù)的類型7、數(shù)據(jù)存儲(chǔ)器——Data_Memory用來(lái)輸出操作數(shù)到寄存器中8、指令暫存PC存放下一條指令9、指令寄存器IR_Memory輸出指令10、跳轉(zhuǎn)Jmp_pc實(shí)現(xiàn)跳轉(zhuǎn)指令的功能11、五位二路選擇器——fw2s1(前面的都是32位)存在立即數(shù)和存儲(chǔ)器兩種尋找方式,用來(lái)確定目的地址其中重點(diǎn)說(shuō)明寄存器、ALU和CU部件算術(shù)邏輯部件ALU他是一個(gè)組合邏輯部件,具有兩路數(shù)據(jù)輸入(ALU_A,ALU_B)一個(gè)進(jìn)位輸入C、三位操作碼ALUOP,還有32位數(shù)據(jù)輸出ALU_OUT,判斷結(jié)果是否為零的輸出ZERO,及進(jìn)位輸出COUT。該算術(shù)邏輯部件僅僅支持ADDSUBANDORXOR等基本操作。其結(jié)構(gòu)圖如下:ALU功能表操作數(shù)選擇碼操作具體執(zhí)行結(jié)果000ADDA+B001SUBA-B010ANDAANDB011ORAORB100XORAXORBCU控制部件的指令集如下:一條指令的執(zhí)行過(guò)程一般有下面的五個(gè)階段,指令的執(zhí)行過(guò)程就是這五個(gè)狀態(tài)的重復(fù)過(guò)程:CU部件就是設(shè)計(jì)完成這個(gè)過(guò)程,從而控制指令的執(zhí)行。指令集1

R-typeOprsrtrdshamtfunctOp:Op:操作碼6位rs:寄存器源操作數(shù)15位rt:寄存器源操作數(shù)25位rd:寄存器目的操作數(shù)5位shamt:移位次數(shù)5位funct:功能6位舉例:加法add$t0,$s1,$s2Oprsrtrdshamtfunct00000010001100100100000000000000減法

例:sub$t0,$s1,$s2Oprsrtrdshamtfunct00000010001100100100000000000001與

例:and$t0,$s1,$s2Oprsrtrdshamtfunct00000010001100100100000000000010或

例:or$t0,$s1,$s2Oprsrtrdshamtfunct00000010001100100100000000000011非

例:nor$t0,$s1,$s2Oprsrtrdshamtfunct00000010001100100100000000000100指令集2

I-typeOprsrtconstantoraddressOp:操作碼6位rs:源操作數(shù)5位rt:目的操作數(shù)5位constantoraddress:常數(shù)或地址16位舉例:

加法-

addi$s6,$s0,4;Op000001rs10000rt10110constantoraddress0000000000000100減法

subi$s6,$s0,4;Op000010rs10000rt10110constantoraddress0000000000000100訪存lw$t0,1200($t1)Op000011rs01001rt01000constantoraddress0000010010110000寫(xiě)存sw$t0,1200($t1)Op000100rs01001rt01000constantoraddress0000010010110000相等

beq$s6,$s0,5;相等就跳到該指令的后5位Op000101rs10000rt10110constantoraddress0000000000000101if(CONDeq0) PC<-PC+4+(SignExt(imm16)x4) elsePC<-PC+44.4指令集3

J-type狀態(tài)結(jié)構(gòu)圖:SequencingControl(SequencingControl(順序控制):

ExplicitNextStateFunction(顯式表示下一狀態(tài)功能)OpcodeStateRegInputsOutputsControlLogicMulticycleDatapath2.3初步的系統(tǒng)結(jié)構(gòu)圖設(shè)計(jì)過(guò)程中的基本元器件都已經(jīng)設(shè)計(jì)完成,下圖是初步的實(shí)現(xiàn)方案,由于存在一些小的bug,暫時(shí)不能實(shí)現(xiàn),但是這是大體的結(jié)構(gòu)圖,后續(xù)結(jié)果會(huì)在此基礎(chǔ)上進(jìn)行改進(jìn)和實(shí)現(xiàn)2.4流程圖三計(jì)算機(jī)整機(jī)系統(tǒng)所需部件代碼實(shí)現(xiàn)寄存器組的設(shè)計(jì)—RegistersmoduleRegisters(R_num1,R_num2,W_num,DIN,RegWrite,DOUT1,DOUT2);inut[5:1]R_num1,R_num2,W_num;input[32:1]DIN;inputRegWrite;output[32:1]DOUT1,DOUT2;reg[32:1]zero=32'b0;reg[32:1]at,v0,v1,a0,a1,a2,a3,t0,t1,t2,t3,t4,t5,t6,t7;reg[32:1]s0,s1,s2,s3,s4,s5,s6,s7,t8,t9,k0,k1,gp,sp,fp,ra;reg[32:1]DOUT1,DOUT2;always@(RegWriteorW_num)beginif(RegWrite)case(W_num)5'b00001:at=DIN;5'b00010:v0=DIN;5'b00011:v1=DIN;5'b00100:a0=DIN;5'b00101:a1=DIN;5'b00110:a2=DIN;5'b00111:a3=DIN;5'b01000:t0=DIN;5'b01001:t1=DIN;5'b01010:t2=DIN;5'b01011:t3=DIN;5'b01100:t4=DIN;5'b01101:t5=DIN;5'b01110:t6=DIN;5'b01111:t7=DIN;5'b10000:s0=DIN;5'b10001:s1=DIN;5'b10010:s2=DIN;5'b10011:s3=DIN;5'b10100:s4=DIN;5'b10101:s5=DIN;5'b10110:s6=DIN;5'b10111:s7=DIN;5'b11000:t8=DIN;5'b11001:t9=DIN;5'b11010:k0=DIN;5'b11011:k1=DIN;default:;endcaseendalways@(R_num1)begincase(R_num1)5'b00001:DOUT1=at;5'b00010:DOUT1=v0;5'b00011:DOUT1=v1;5'b00100:DOUT1=a0;5'b00101:DOUT1=a1;5'b00110:DOUT1=a2;5'b00111:DOUT1=a3;5'b01000:DOUT1=t0;5'b01001:DOUT1=t1;5'b01010:DOUT1=t2;5'b01011:DOUT1=t3;5'b01100:DOUT1=t4;5'b01101:DOUT1=t5;5'b01110:DOUT1=t6;5'b01111:DOUT1=t7;5'b10000:DOUT1=s0;5'b10001:DOUT1=s1;5'b10010:DOUT1=s2;5'b10011:DOUT1=s3;5'b10100:DOUT1=s4;5'b10101:DOUT1=s5;5'b10110:DOUT1=s6;5'b10111:DOUT1=s7;5'b11000:DOUT1=t8;5'b11001:DOUT1=t9;5'b11010:DOUT1=k0;5'b11011:DOUT1=k1;default:DOUT1=5'H0;endcaseendalways@(R_num2)begincase(R_num2)5'b00001:DOUT2=at;5'b00010:DOUT2=v0;5'b00011:DOUT2=v1;5'b00100:DOUT2=a0;5'b00101:DOUT2=a1;5'b00110:DOUT2=a2;5'b00111:DOUT2=a3;5'b01000:DOUT2=t0;5'b01001:DOUT2=t1;5'b01010:DOUT2=t2;5'b01011:DOUT2=t3;5'b01100:DOUT2=t4;5'b01101:DOUT2=t5;5'b01110:DOUT2=t6;5'b01111:DOUT2=t7;5'b10000:DOUT2=s0;5'b10001:DOUT2=s1;5'b10010:DOUT2=s2;5'b10011:DOUT2=s3;5'b10100:DOUT2=s4;5'b10101:DOUT2=s5;5'b10110:DOUT2=s6;5'b10111:DOUT2=s7;5'b11000:DOUT2=t8;5'b11001:DOUT2=t9;5'b11010:DOUT2=k0;5'b11011:DOUT2=k1;default:DOUT2=5'H0;endcaseendendmodule控制器ControlmoduleControl(op,fun,pc,pc4en,s_pc,s_pc_s,D_en,D_s,Ex_en,LF2_en,D3_en,D3_s,ALU_clr,ALU_op,DM_em,RegW_en,RegW_s,RegWrite);input[5:0]op;input[5:0]fun;outputpc,pc4en,s_pc,s_pc_s,D_en,D_s,Ex_en,LF2_en,D3_en,ALU_clr,DM_em,RegW_en,RegW_s,RegWrite;output[1:0]D3_s;output[2:0]ALU_op;regpc,pc4en,s_pc,s_pc_s,D_en,D_s,Ex_en,LF2_en,D3_en,ALU_clr,DM_em,RegW_en,RegW_s,RegWrite;reg[1:0]D3_s;reg[2:0]ALU_op;always@(oporfun)begincase(op)6'b000000:begin case(fun) 6'b000000:beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=1;Ex_en=0;LF2_en=0;D3_en=1;D3_s=2'B01;ALU_clr=1;ALU_op=3'B000;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end 6'b000001:beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=1;Ex_en=0;LF2_en=0;D3_en=1;D3_s=2'B01;ALU_clr=1;ALU_op=3'B001;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end 6'b000010:beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=1;Ex_en=0;LF2_en=0;D3_en=1;D3_s=2'B01;ALU_clr=1;ALU_op=3'B010;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end 6'b000011:beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=1;Ex_en=0;LF2_en=0;D3_en=1;D3_s=2'B01;ALU_clr=1;ALU_op=3'B011;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end 6'b000100:beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=1;Ex_en=0;LF2_en=0;D3_en=1;D3_s=2'B01;ALU_clr=1;ALU_op=3'B100;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end endcase end 6'b000001: beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=0;Ex_en=1;LF2_en=0;D3_en=1;D3_s=2'B10;ALU_clr=1;ALU_op=3'B000;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end 6'b000010: beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=0;Ex_en=1;LF2_en=0;D3_en=1;D3_s=2'B10;ALU_clr=1;ALU_op=3'B001;DM_em=0;RegW_en=1;RegW_s=1;RegWrite=1;end 6'b000011: beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=0;Ex_en=1;LF2_en=0;D3_en=1;D3_s=2'B10;ALU_clr=1;ALU_op=3'B000;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end 6'b000100: beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=1;D_s=0;Ex_en=1;LF2_en=0;D3_en=1;D3_s=2'B10;ALU_clr=1;ALU_op=3'B000;DM_em=1;RegW_en=0;RegW_s=0;RegWrite=0;end 6'b000101: beginpc=1;pc4en=1;s_pc=1;s_pc_s=1;D_en=0;D_s=0;Ex_en=0;LF2_en=0;D3_en=1;D3_s=2'B01;ALU_clr=1;ALU_op=3'B001;DM_em=0;RegW_en=0;RegW_s=0;RegWrite=0;end 6'b000110: beginpc=1;pc4en=1;s_pc=1;s_pc_s=0;D_en=1;D_s=0;Ex_en=1;LF2_en=0;D3_en=1;D3_s=2'B10;ALU_clr=1;ALU_op=3'B000;DM_em=0;RegW_en=1;RegW_s=0;RegWrite=1;end endcaseendendmodule 數(shù)據(jù)擴(kuò)展器件ExtendedmoduleExtended(EN,in,out);input[15:0]in;inputEN;output[31:0]out;reg[31:0]out;always@(EN)beginif(EN)beginout[15:0]<=in[15:0];out[31:16]<=0;endelseout<=0;endendmodule三路選擇器MUX_3moduleMUX_3(EN,S,D1,D2,D3,O);inputEN;input[2:1]S;input[32:1]D1,D2,D3;output[32:1]O;reg[32:1]O;always@(ENorS)if(!EN)O<=0;elsebegincase(S)2'b01:O<=D1;2'b10:O<=D2;2'b11:O<=D3;default:O<=0;endcaseendendmodule組合跳轉(zhuǎn)指令I(lǐng)RPC4 modulePC4(s,zero,Jmp,in,out);inputzero;inputs;input[31:0]in;input[15:0]Jmp;output[31:0]out;reg[31:0]out;reg[31:0]Jm;alwaysbeginJm[15:0]=Jmp[15:0];Jm[31:16]=0;endalways@(s)if(!s)out=in;elsebeginif(!zero)out=in+1+Jm;elseout=in+1;endendmodule運(yùn)算器ALUmoduleALU(ALU_op,clr,ALU_A,ALU_B,Zero,ALU_out);inputclr;input[3:1]ALU_op;input[32:1]ALU_A,ALU_B;outputZero;output[32:1]ALU_out;regZero;reg[32:1]ALU_out;always@(clrorALU_op)beginif(!clr)ALU_out=0;elsebegincase(ALU_op)3'b000:beginALU_out=ALU_A+ALU_B;Zero=0;end3'b001:beginALU_out=ALU_A-ALU_B;if(ALU_out==0)Zero=1;elseZero=0;end3'b010:beginALU_out=ALU_A&ALU_B;Zero=0;end3'b011:beginALU_out=ALU_A|ALU_B;Zero=0;end3'b100:beginALU_out=~(ALU_A|ALU_B);Zero=0;enddefault:beginALU_out=0;Zero=0;endendcaseendendendmodule二路選擇器MUX_2moduleMUX_2(EN,S,D1,D2,O);inputEN;inputS;input[32:1]D1,D2;output[32:1]O;reg[32:1]O;always@(ENorS)if(!EN)O<=0;elsebegincase(S)0:O<=D1;1:O<=D2;default:O<=0;endcaseendendmodule移位器件—LF2moduleLF2(en,in,out);inputen;input[31:0]in;output[31:0]out;reg[31:0]out;always@(enorin)beginif(en)out=in+4;elseout=in;endendmodule數(shù)據(jù)存儲(chǔ)器——Data_MemorymoduleData_Memory(inputclk,inputw_en,input[31:0]data_in,input[31:0]addr,output[31:0]outp);reg[31:0]ram[31:0];reg[31:0]a;initialbegin$readmemh("Data_m.hex",ram);endalways@(posedgeclk)if(w_en)beginram[8'h000003ff-addr]=data_in;endelsebegina=ram[8'h000003ff-addr];endassignoutp=a;endmodule指令暫存PCmodulePC(en,clk,D,O);inputen,clk;input[32:1]D;output[32:1]O;reg[32:1]O;always@(posedgeclk)beginif(en)O<=D;elseO<=0;endendmodule指令寄存器IR_Memory moduleIR_Memory(inputclk,input[31:0]addr,output[31:0]outp);reg[31:0]ram[31:0];reg[31:0]a;initialbegin$readmemh("IR_m.hex",ram);endalways@(posedgeclk)begina=ram[8'h000003ff-addr];endassignoutp=a;endmodule跳轉(zhuǎn)Jmp_pcmoduleJmp_pc(in1,in2,out);input[3:0]in1;input[25:0]in2;output[31:0]out;reg[31:0]out;always@(in1orin2)beginout[31:28]<=in1;out[27:2]<=in2;out[1:0]<=2'b0;endendmodule五位

溫馨提示

  • 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)論