基于VHDL語(yǔ)言的8位RISC-CPU的設(shè)計(jì) 答辯_第1頁(yè)
基于VHDL語(yǔ)言的8位RISC-CPU的設(shè)計(jì) 答辯_第2頁(yè)
基于VHDL語(yǔ)言的8位RISC-CPU的設(shè)計(jì) 答辯_第3頁(yè)
基于VHDL語(yǔ)言的8位RISC-CPU的設(shè)計(jì) 答辯_第4頁(yè)
基于VHDL語(yǔ)言的8位RISC-CPU的設(shè)計(jì) 答辯_第5頁(yè)
已閱讀5頁(yè),還剩32頁(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、 畢業(yè)設(shè)計(jì)說(shuō)明書(shū)基于VHDL語(yǔ)言的8位RISC-CPU的設(shè)計(jì)學(xué) 院: 專(zhuān) 業(yè): 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 201 年 月摘 要RISC即精簡(jiǎn)指令集計(jì)算機(jī)Reduced Instruction Set Computer的縮寫(xiě)。RISC-CPU與一般的CPU相比,通過(guò)簡(jiǎn)化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加簡(jiǎn)單合理,從而提高了運(yùn)算速度。本文對(duì)RISC-CPU的架構(gòu)進(jìn)行了分析,并使用VHDL語(yǔ)言設(shè)計(jì)了8位RISC-CPU IP軟核。RISC-CPU由八大根本模塊構(gòu)成:時(shí)鐘發(fā)生器、指令存放器、累加器、算術(shù)邏輯單元、數(shù)據(jù)輸出控制器、地址多路器、程序計(jì)數(shù)器、狀態(tài)控制器。本設(shè)計(jì)中借助MAX+PLUS軟件平臺(tái)對(duì)

2、各模塊進(jìn)行時(shí)序仿真,并最終給出了指令執(zhí)行的仿真波形,驗(yàn)證了CPU的功能。設(shè)計(jì)仿真結(jié)果說(shuō)明,該8位RISC-CPU能夠完成既定的任務(wù)指標(biāo),而且在運(yùn)行效率上有一定程度改善。關(guān)鍵詞:RISC-CPU、VHDL、MAX+PLUS、IP軟核、時(shí)序仿真AbstractRISC reduced instruction set computer that (Reduced Instruction Set Computer) acronym. RISC-CPU and CPU in general compared to instruction by simplifying the structure of t

3、he computer is more simple and reasonable, thereby increasing processing speed. In this paper, RISC-CPU architecture is analyzed, and by using the VHDL language, I designed an 8-bit RISC-CPU IP soft core.RISC-CPU is based on 8 modules: clock generator, instruction register, accumulator, arithmetic l

4、ogic unit, data output controller, address multiplexer, program counter, state controller. In the design, each module are timing simulated on MAX+PLUS software platform, and finally the simulated waveform of instruction execution that verifies the CPU features is given.Design and simulation results

5、show that the 8-bit RISC-CPU can complete the tasks, and also has a certain degree of improvement on operational efficiency.Keywords: RISC-CPU, VHDL, MAX+PLUS, IP soft core, Timing Simulation目 錄 TOC o 1-3 h z u HYPERLINK l _Toc295176393 摘 要 PAGEREF _Toc295176393 h I HYPERLINK l _Toc295176394 Abstrac

6、t英文摘要 PAGEREF _Toc295176394 h II HYPERLINK l _Toc295176395 目 錄 PAGEREF _Toc295176395 h III HYPERLINK l _Toc295176396 第一章引言 PAGEREF _Toc295176396 h 1 HYPERLINK l _Toc295176397 課題背景與開(kāi)展現(xiàn)狀 PAGEREF _Toc295176397 h 1 HYPERLINK l _Toc295176398 1.1.1 課題背景 PAGEREF _Toc295176398 h 1 HYPERLINK l _Toc295176399

7、1.1.2 RISC-CPU的開(kāi)展現(xiàn)狀 PAGEREF _Toc295176399 h 1 HYPERLINK l _Toc295176400 1.2 RISC-CPU優(yōu)勢(shì)與現(xiàn)實(shí)意義 PAGEREF _Toc295176400 h 1 HYPERLINK l _Toc295176401 1.2.1 RISC-CPU具備的優(yōu)勢(shì) PAGEREF _Toc295176401 h 1 HYPERLINK l _Toc295176402 1.2.2 本課題的現(xiàn)實(shí)意義 PAGEREF _Toc295176402 h 2 HYPERLINK l _Toc295176403 1.3 本設(shè)計(jì)的主要內(nèi)容 PAGE

8、REF _Toc295176403 h 2 HYPERLINK l _Toc295176404 第二章RISC-CPU的架構(gòu)設(shè)計(jì) PAGEREF _Toc295176404 h 3 HYPERLINK l _Toc295176405 2.1 RISC-CPU根本架構(gòu) PAGEREF _Toc295176405 h 3 HYPERLINK l _Toc295176406 2.2 RISC-CPU模塊的劃分 PAGEREF _Toc295176406 h 4 HYPERLINK l _Toc295176407 第三章八位RISC-CPU各模塊設(shè)計(jì)與仿真 PAGEREF _Toc295176407

9、h 6 HYPERLINK l _Toc295176408 3.1 時(shí)鐘發(fā)生器 PAGEREF _Toc295176408 h 6 HYPERLINK l _Toc295176409 3.2 指令存放器 PAGEREF _Toc295176409 h 7 HYPERLINK l _Toc295176410 3.3 累加器 PAGEREF _Toc295176410 h 10 HYPERLINK l _Toc295176411 3.4 算術(shù)邏輯單元 PAGEREF _Toc295176411 h 11 HYPERLINK l _Toc295176412 3.5 數(shù)據(jù)輸出控制器 PAGEREF _

10、Toc295176412 h 13 HYPERLINK l _Toc295176413 3.6 地址多路器 PAGEREF _Toc295176413 h 14 HYPERLINK l _Toc295176414 3.7 程序計(jì)數(shù)器 PAGEREF _Toc295176414 h 15 HYPERLINK l _Toc295176415 3.8 狀態(tài)控制器 PAGEREF _Toc295176415 h 17 HYPERLINK l _Toc295176416 第四章RISC-CPU的綜合及操作時(shí)序 PAGEREF _Toc295176416 h 25 HYPERLINK l _Toc2951

11、76417 4.1 RISC-CPU各模塊綜合 PAGEREF _Toc295176417 h 25 HYPERLINK l _Toc295176418 4.2 CPU復(fù)位啟動(dòng)操作時(shí)序 PAGEREF _Toc295176418 h 29 HYPERLINK l _Toc295176419 結(jié)論 PAGEREF _Toc295176419 h 30 HYPERLINK l _Toc295176420 參考文獻(xiàn) PAGEREF _Toc295176420 h 31 HYPERLINK l _Toc295176421 致謝 PAGEREF _Toc295176421 h 32引 言 題背景與開(kāi)展現(xiàn)

12、狀 課題背景CPU是Central Processing Unit中央處理器的縮寫(xiě),它是計(jì)算機(jī)中最重要的一個(gè)局部。CPU由運(yùn)算器和控制器組成,其內(nèi)部結(jié)構(gòu)歸納起來(lái)可以分為控制單元、邏輯單元和存儲(chǔ)單元三大局部,這三個(gè)局部相互協(xié)調(diào),便可以進(jìn)行分析,判斷、運(yùn)算并控制計(jì)算機(jī)各局部協(xié)調(diào)工作。CPU從最初開(kāi)展至今已經(jīng)有幾十年的歷史了,這期間,按照其處理信息的字長(zhǎng),CPU可以分為:四位微處理器、八位微處理器、十六位微處理器、三十二位微處理器以及六十四位微處理器。而RISC處理器的出現(xiàn)標(biāo)志著計(jì)算機(jī)體系結(jié)構(gòu)中的一個(gè)根本性變革。RISC即精簡(jiǎn)指令集計(jì)算機(jī)(Reduced Instruction Set Comput

13、er)的縮寫(xiě)。從實(shí)現(xiàn)的途徑看,RISC-CPU與一般的CPU的不同處在于:它的時(shí)序控制信號(hào)形成部件是用硬布線邏輯實(shí)現(xiàn)的而不是采用微程序控制的方式。所謂硬布線邏輯也就是用觸發(fā)器和邏輯門(mén)直接連線所構(gòu)成的狀態(tài)機(jī)和組合邏輯,故產(chǎn)生控制序列的速度比用微程序控制方式快得多,因?yàn)檫@樣做省去了讀取微指令的時(shí)間。 RISC-CPU的開(kāi)展現(xiàn)狀I(lǐng)BM公司在1975年成功開(kāi)發(fā)出第一款RISC處理器,從此RISC架構(gòu)開(kāi)始走進(jìn)超級(jí)計(jì)算機(jī)中。由于指令高度簡(jiǎn)約,RISC處理器的晶體管規(guī)模普遍都很小而性能強(qiáng)大,深受超級(jí)計(jì)算機(jī)廠商所青睞。很快,許多廠商都開(kāi)發(fā)出了自己的RISC指令系統(tǒng),除了IBM的Power和PowerPC外,還

14、有DEC的Alpha、SUN的SPARC、HP的PA-RISC、MIPS技術(shù)公司的MIPS、ARM公司的ARM等。它的應(yīng)用范圍也遠(yuǎn)比X86來(lái)得廣泛,大到各種超級(jí)計(jì)算機(jī)、工作站、高階效勞器,小到各類(lèi)嵌入式設(shè)備、家用游戲機(jī)、消費(fèi)電子產(chǎn)品、工業(yè)控制計(jì)算機(jī),都可以看到RISC的身影。1.2 RISC-CPU優(yōu)勢(shì)與現(xiàn)實(shí)意義 RISC-CPU具備的優(yōu)勢(shì)RISC有一套優(yōu)化過(guò)的指令架構(gòu),它是根據(jù)著名的80/20法那么所訂立。早在上個(gè)世紀(jì)60年代,計(jì)算機(jī)科學(xué)家們發(fā)現(xiàn),計(jì)算機(jī)中80%的任務(wù)只是動(dòng)用了大約20%的指令,而剩下20%的任務(wù)才有時(shí)機(jī)使用到其他80%的指令。如果對(duì)指令系統(tǒng)作相應(yīng)的優(yōu)化,就可以從根本上快速提

15、高處理器的執(zhí)行效率。RISC與CISC一般指普通的X86CPU比擬,有以下優(yōu)勢(shì):指令簡(jiǎn)單而且少;指令系統(tǒng)選用那些使用頻度高的簡(jiǎn)單指令和一些實(shí)用的但不十分復(fù)雜的指令,一般指令不超過(guò)100條;指令字長(zhǎng)固定,尋址方式一般不超過(guò)四種,指令格式也不超過(guò)四種;所有指令(幾乎所有指令)均在單指令周期完成;指令系統(tǒng)中只允許存(STORE)和取(LOAD)指令訪問(wèn)主存,其它指令均在存放器之間進(jìn)行;CPU中設(shè)置大量的存放器,稱(chēng)作存放器堆;指令的運(yùn)行采用高效的流水線方式;以硬布線控制邏輯為主,不用或少用微碼;優(yōu)化的編譯程序,簡(jiǎn)單有效地支持高級(jí)語(yǔ)言;超低功耗。 本課題的現(xiàn)實(shí)意義本課題的設(shè)計(jì)具有重要的意義:從IP設(shè)計(jì)技

16、術(shù)層面看,本課題按照自頂向下(Top-Down)的設(shè)計(jì)方法,從系統(tǒng)級(jí)結(jié)構(gòu)和模塊劃分到硬件描述、綜合、仿真燈,研究了Altera公司的MAX+plusII工具的使用,掌握了IP正向設(shè)計(jì)的根本方法,積累了珍貴經(jīng)驗(yàn)。從RISC-CPU設(shè)計(jì)技術(shù)層面看,通過(guò)本課題的設(shè)計(jì)過(guò)程,了解掌握了MIPS指令系統(tǒng)CPU體系結(jié)構(gòu)設(shè)計(jì)的關(guān)鍵技術(shù)。從嵌入式系統(tǒng)設(shè)計(jì)技術(shù)層面看,集成電路開(kāi)展已進(jìn)入IP core復(fù)用的SoC時(shí)代,8位嵌入式微處理器開(kāi)展的一個(gè)重要特點(diǎn)是片上系統(tǒng)SoC化。本課題也為基于IP核的嵌入式系統(tǒng)設(shè)計(jì)積累了珍貴經(jīng)驗(yàn)。從市場(chǎng)應(yīng)用層面看,8位RISC-CPU是目前市場(chǎng)上同類(lèi)產(chǎn)品占市場(chǎng)份額最大的一塊,符合我國(guó)集成

17、電路當(dāng)前的設(shè)計(jì)水平,以它作為參與市場(chǎng)競(jìng)爭(zhēng)的突破口,來(lái)提高企業(yè)的市場(chǎng)競(jìng)爭(zhēng)能力和技術(shù)創(chuàng)新能力,是一個(gè)切實(shí)可行的方案。1.3 本設(shè)計(jì)的主要內(nèi)容本文對(duì)RISC-CPU的架構(gòu)進(jìn)行了探討,介紹了如何設(shè)計(jì)RISC-CPU,并且立足于八位的 RISC-CPU設(shè)計(jì)實(shí)例,應(yīng)用硬件描述語(yǔ)言VHDL語(yǔ)言實(shí)現(xiàn)8位簡(jiǎn)化RISC-CPU IP軟核的設(shè)計(jì),通過(guò)對(duì)RISC-CPU結(jié)構(gòu)和指令執(zhí)行的分析將整個(gè)系統(tǒng)劃分為各個(gè)功能模塊,并說(shuō)明各模塊間的接口信號(hào),給出了每個(gè)模塊內(nèi)部設(shè)計(jì)實(shí)現(xiàn)的詳細(xì)表達(dá),最后介紹對(duì)設(shè)計(jì)的綜合和驗(yàn)證工作,給出了仿真驗(yàn)證數(shù)據(jù)以及時(shí)序圖。設(shè)計(jì)需要實(shí)現(xiàn)的這個(gè)簡(jiǎn)化的8位 RISC-CPU采用MIPS的局部指令集,同時(shí)

18、對(duì)MIPS CPU的結(jié)構(gòu)進(jìn)行一定的修改。RISC-CPU的架構(gòu)設(shè)計(jì)2.1 RISC-CPU根本架構(gòu)一個(gè)根本的CPU要包括三局部功能:數(shù)據(jù)的存儲(chǔ)、數(shù)據(jù)的運(yùn)算和控制局部。與之相對(duì)應(yīng)的硬件結(jié)構(gòu)也分為三局部:存儲(chǔ)器、數(shù)據(jù)通路和控制器。存儲(chǔ)器存放指令和數(shù)據(jù);數(shù)據(jù)通路包括ALU、程序計(jì)數(shù)器等,主要功能是對(duì)操作數(shù)進(jìn)行運(yùn)算,得到結(jié)果,并產(chǎn)生程序計(jì)數(shù)器的值,作為要執(zhí)行的下一條指令的地址;控制器內(nèi)有指令存放器,它對(duì)指令進(jìn)行譯碼,產(chǎn)生相應(yīng)的控制信號(hào),完成對(duì)存儲(chǔ)器和數(shù)據(jù)通路局部的控制。存儲(chǔ)器、數(shù)據(jù)通路和控制器這三局部的根本關(guān)系下列圖所示:圖2-1 CPU根本結(jié)構(gòu)存儲(chǔ)器中存放了要執(zhí)行的指令和相應(yīng)數(shù)據(jù)。存儲(chǔ)器的讀寫(xiě)信號(hào)由

19、控制器給出。存儲(chǔ)器的地址來(lái)源有兩個(gè):程序計(jì)數(shù)器和指令存放器。在取新指令時(shí),用程序計(jì)數(shù)器的值作為存儲(chǔ)器地址;在執(zhí)行指令時(shí),用指令中的地址局部作為存儲(chǔ)器地址。數(shù)據(jù)通路主要包括累加器、程序計(jì)數(shù)器和算術(shù)邏輯單元。累加器用于保存參加運(yùn)算的數(shù)據(jù)以及運(yùn)算的中間結(jié)果。實(shí)際上,累加器也是存放器,不過(guò),它有特殊性,即許多指令執(zhí)行過(guò)程以累加器為中心。往往在運(yùn)算指令前,累加器中存放一個(gè)操作數(shù),指令執(zhí)行后,由累加器保存運(yùn)算結(jié)果。另外輸入輸出指令一般也通過(guò)累加器來(lái)完成。程序計(jì)數(shù)器指向下一條要執(zhí)行的指令。由于程序一般存放在內(nèi)存的一個(gè)連續(xù)區(qū)域,所以,順序執(zhí)行程序時(shí),每取一個(gè)指令字節(jié),程序計(jì)數(shù)器便加一。算術(shù)邏輯單元是專(zhuān)門(mén)用來(lái)處

20、理各種運(yùn)算的數(shù)據(jù)信息的,它可以進(jìn)行加、減、乘、除算術(shù)運(yùn)算和與、或、非、異或等邏輯運(yùn)算??刂破鳟a(chǎn)生相應(yīng)的控制信號(hào)送到時(shí)序和控制邏輯電路,從而,組合成外部電路所需要的時(shí)序和控制信號(hào)。這些信號(hào)送往其他部件,以控制這些部件協(xié)調(diào)工作。對(duì)圖2-1中的結(jié)構(gòu)進(jìn)行細(xì)化,可以得到一個(gè)簡(jiǎn)單的架構(gòu),如下列圖所示。該CPU采用總線結(jié)構(gòu),即控制器所需的指令和數(shù)據(jù)通路所需的數(shù)據(jù)都是從總線上得到的。圖2-2 CPU的簡(jiǎn)單架構(gòu)2.2 RISC-CPU模塊的劃分計(jì)算機(jī)進(jìn)行信息處理可分為兩個(gè)步驟:一、將數(shù)據(jù)和程序即指令序列輸入到計(jì)算機(jī)的存儲(chǔ)器中。二、從第一條指令的地址起開(kāi)始執(zhí)行該程序,得到所需結(jié)果,結(jié)束運(yùn)行。CPU的作用是協(xié)調(diào)并控

21、制計(jì)算機(jī)的各個(gè)部件執(zhí)行程序的指令序列,使其有條不紊地進(jìn)行。因此它必須具有以下根本功能:取指令:當(dāng)程序已在存儲(chǔ)器中時(shí),首先根據(jù)程序入口地址取出一條程序,為此要發(fā)出指令地址及控制信號(hào)。分析指令:即指令譯碼。是對(duì)當(dāng)前取得的指令進(jìn)行分析,指出它要求什么操作,并產(chǎn)生相應(yīng)的操作控制命令。執(zhí)行指令:根據(jù)分析指令時(shí)產(chǎn)生的“操作命令形成相應(yīng)的操作控制信號(hào)序列,通過(guò)運(yùn)算器,存儲(chǔ)器及輸入/輸出設(shè)備的執(zhí)行,實(shí)現(xiàn)每條指令的功能,其中包括對(duì)運(yùn)算結(jié)果的處理以及下條指令地址的形成。由功能分析,RISC-CPU應(yīng)至少包含八個(gè)根本組成部件,即:時(shí)鐘發(fā)生器、指令存放器、累加器、算術(shù)邏輯單元、數(shù)據(jù)輸出控制器、地址多路器、程序計(jì)數(shù)器、

22、狀態(tài)控制器,各個(gè)模塊之間的互連關(guān)系如下列圖:圖2-3 RISC-CPU結(jié)構(gòu)圖1時(shí)鐘發(fā)生器(clkgen):產(chǎn)生一系列的時(shí)鐘信號(hào)送往 CPU 其他部件;2指令存放器(register):存儲(chǔ)指令;3累加器(accum):存放算術(shù)邏輯單元當(dāng)前的結(jié)果,它也是算術(shù)邏輯單元雙目運(yùn)算中的一個(gè)數(shù)據(jù)來(lái)源;4算術(shù)邏輯單元(alu):根據(jù)輸入的 8 種不同操作碼分別實(shí)現(xiàn)相應(yīng)的加、與、讀、寫(xiě)、異或,跳轉(zhuǎn)等指令;5數(shù)據(jù)輸出控制器(datactl):控制累加器的數(shù)據(jù)輸出;6狀態(tài)控制器(control):CPU 的控制核心,用于產(chǎn)生一系列的控制信號(hào),啟動(dòng)或停止某些部件;7程序計(jì)數(shù)器(counter):提供指令地址,以便讀

23、取指令;8地址多路器(adr):選擇輸出的地址是 PC程序計(jì)數(shù)地址還是跳轉(zhuǎn)的目標(biāo)地址。八位RISC-CPU各模塊設(shè)計(jì)與仿真3.1 時(shí)鐘發(fā)生器圖3-1 時(shí)鐘發(fā)生器時(shí)鐘發(fā)生器Clock Generator如上圖所示,利用外來(lái)時(shí)鐘信號(hào)CLK來(lái)生成一系列時(shí)鐘信號(hào)CLK1、FETCH、ALU_CLK送往CPU的其他部件,各分頻時(shí)鐘信號(hào)功能如下:CLK1信號(hào)經(jīng)CLK反相后用作指令存放器、累加器、狀態(tài)控制器的時(shí)鐘信號(hào)。FETCH是外來(lái)時(shí)鐘CKL的8分頻信號(hào),其上升沿觸發(fā)CPU控制器開(kāi)始執(zhí)行一條指令,該信號(hào)同時(shí)還控制地址多路器輸出指令地址和數(shù)據(jù)地址。ALU電路的時(shí)鐘信號(hào)ALU_CLK,由CLK的2分頻信號(hào)、4

24、分頻信號(hào)和FETCH的反相信號(hào)相與得到,用于觸發(fā)算術(shù)邏輯單元。時(shí)鐘發(fā)生器源程序如下:library ieee;use ieee.std_logic_1164.all;entity clkgen isport(clk: in std_logic; clk1: buffer std_logic; fetch: buffer std_logic:=0; alu_clk: out std_logic);end clkgen;architecture behave of clkgen issignal clk2: std_logic:=0;signal clk4: std_logic:=1;begin

25、alu_clk=clk2 and clk4 and (not fetch);process(clk1)beginclk1=not clk; if clk1event and clk1=1then clk2=not clk2; end if;end process;process(clk2)begin if clk2event and clk2=0 then clk4=not clk4; end if;end process;process(clk4)begin if clk4event and clk4=1 then fetch=not fetch; end if;end process;en

26、d behave;us,取每格41.6ns。仿真波形如下:圖3-2 時(shí)鐘發(fā)生器仿真波形3.2 指令存放器指令存放器Instruction Register用于存放指令。如圖3-3,指令存放器的觸發(fā)時(shí)鐘是CLK1,在CLK1的上升沿觸發(fā)下,存放器將數(shù)據(jù)總線送來(lái)的指令存入高8位或低8位存放器中。但并不是每個(gè)CLK1的上升沿都存放數(shù)據(jù)總線的數(shù)據(jù),因?yàn)閿?shù)據(jù)總線上有時(shí)傳輸指令,有時(shí)傳輸數(shù)據(jù)。存放與否,由CPU狀態(tài)控制器的IR_ENA信號(hào)控制。IR_ENA信號(hào)通過(guò)ENA口輸入到指令存放器。當(dāng)數(shù)據(jù)總線傳輸?shù)氖侵噶顣r(shí),ENA置1,指令存放;當(dāng)數(shù)據(jù)總線傳輸?shù)氖菙?shù)據(jù)時(shí),ENA置0,指令存放器不工作。每條指令為2個(gè)

27、字節(jié),即16位。高3位是操作碼,低13位是地址CPU的地址總線為13位,尋址空間為8K字節(jié)。本設(shè)計(jì)的數(shù)據(jù)總線為8位,所以每條指令需取兩次。先取高8位,后取低8位。而當(dāng)前取的是高8位還是低8位,由變量STATE記錄。STATE為零表示取的高8位,存入高8位存放器,同時(shí)將變量STATE置為1。再次存放時(shí),因STATE為1,取低8位并存入低8位存放器中,同時(shí)將STATE置為0,如此往復(fù)。指令存放時(shí),將高3位和低13位分別存放到操作碼存放器OPCODE和地址存放器IR_ADDR。復(fù)位后,指令存放器被清為零。圖3-3指令存放器指令存放器源程序如下:library ieee;use ieee.std_lo

28、gic_1164.all;entity ir isport(clk1, rst, ena: in std_logic; data: in std_logic_vector(7 downto 0); opcode: out std_logic_vector(2 downto 0); ir_addr: out std_logic_vector(12 downto 0);end ir;architecture behave of ir issignal opc_iraddrs: std_logic_vector(15 downto 0);beginprocess(clk1)variable stat

29、e: std_logic:=0;begin if(clk1event and clk1=1)then if rst=1then opc_iraddrs0); elsif ena=1 then case state is when 0 =opc_iraddrs(15 downto 8)opc_iraddrs(7 downto 0)null; end case; else state:=0; end if;end if;end process; opcode=opc_iraddrs(15 downto 13); ir_addr=opc_iraddrs(12 downto 0);end behave

30、;仿真波形如下列圖:(續(xù))圖3-4 指令存放器仿真波形在此仿真波形圖中,clk1為時(shí)鐘輸入信號(hào),ena為使能輸入端口,rst為置位端口,這里假設(shè)在ena=1之前data=00000000,ena=1后傳輸了10011001、01100110、11001100、00110011四個(gè)數(shù)據(jù),那么當(dāng)state為0時(shí),傳輸高八位,當(dāng)state為1時(shí),傳輸?shù)桶宋?。其中?5至第13位存入opcode中并替換舊數(shù)據(jù),第12至第0位存入str_addr中并替換舊數(shù)據(jù)。3.3 累加器圖3-5 累加器累加器Accumulator用于存放當(dāng)前的結(jié)果,它也是雙目運(yùn)算其中的一個(gè)數(shù)據(jù)來(lái)源,同時(shí)累加器還用來(lái)存放算術(shù)運(yùn)算指令

31、的結(jié)果,如圖3-5所示。累加器采用同步復(fù)位方式,即當(dāng)RST信號(hào)為高電平時(shí),累加器的值為零。當(dāng)累加器通過(guò)ENA口收到來(lái)自CPU狀態(tài)控制器ACC_ENA信號(hào)時(shí),即ENA=1時(shí),在CLK1時(shí)鐘正跳沿時(shí)就收到來(lái)自于數(shù)據(jù)總線的數(shù)據(jù),由DATA7.0輸入;而當(dāng)ENA=0時(shí),累加器保持不變。累加器源程序如下:library ieee;use ieee.std_logic_1164.all;entity acc isport(clk1,rst,ena:in std_logic; data:in std_logic_vector(7 downto 0); accum:out std_logic_vector(7

32、 downto 0);end acc;architecture art of acc isbeginprocess(clk1, ena)beginif clk1event and clk1=1then if rst=1then accum=00000000; elsif ena=1then accum=data; end if;end if;end process;end art;在仿真時(shí),設(shè)定6個(gè)周期假設(shè)中,data端每周期輸入不同的8位二進(jìn)制數(shù),觀察accum端輸出數(shù)據(jù)與rst和ena值的對(duì)應(yīng)關(guān)系,仿真波形如下:圖3-6 累加器仿真波形如下圖,當(dāng)復(fù)位信號(hào)rst=0、使能信號(hào)ena=1時(shí),在

33、每個(gè)clk1上升沿到來(lái)后,accum接收來(lái)自于數(shù)據(jù)總線的數(shù)據(jù);當(dāng)?shù)?周期ena=0時(shí),accum保持01010101不變,故該數(shù)據(jù)占兩個(gè)周期;當(dāng)ena又變?yōu)橛行盘?hào),因同時(shí)rst由0變?yōu)?,累加器復(fù)位,accum輸出清零。3.4 算術(shù)邏輯單元算術(shù)邏輯單元ALU的全稱(chēng)是Arithmetic Logic Unit,該模塊用來(lái)執(zhí)行諸如加減乘除以及存放器中的值之間的邏輯運(yùn)算,通常在一般的處理器上被設(shè)成一個(gè)周期上升沿運(yùn)行一次,這主要是由附屬于ALU的輸入輸出存放器以及在ALU輸入處插入旁路乘法器來(lái)決定的。算術(shù)邏輯單元根據(jù)輸入的8種不同操作碼分別實(shí)現(xiàn)相應(yīng)的加、與、異或、跳轉(zhuǎn)等8種根本操作運(yùn)算,利用這幾種根

34、本運(yùn)算可以實(shí)現(xiàn)很多種其它運(yùn)算以及邏輯判斷等操作。圖3-7 算術(shù)邏輯單元算術(shù)邏輯單元如上圖所示,其各端口功能如下:ALU_CLOCK為ALU的時(shí)鐘信號(hào),由時(shí)鐘發(fā)生器輸出;OPCODE取自指令存放器的高3位,ALU根據(jù)輸入OPCODE的8種不同操作碼分別實(shí)現(xiàn)相應(yīng)的加、與、異或、跳轉(zhuǎn)等根本操作運(yùn)算;DATA輸入來(lái)自數(shù)據(jù)總線上的數(shù)據(jù);ACCUM輸入來(lái)自累加器的一個(gè)操作數(shù);ALU_OUT用來(lái)保存或輸出操作后的值;ZERO用于標(biāo)志ACCUM是否為0,其值為0時(shí)標(biāo)ZERO=1,否那么ZERO=0。算術(shù)邏輯單元源程序如下:library ieee;use ieee.std_logic_1164.all;use

35、 ieee.std_logic_unsigned.all;entity alu isport(alu_clk: in std_logic; opcode: in std_logic_vector(2 downto 0); data,accum: in std_logic_vector(7 downto 0); zero: out std_logic; alu_out: out std_logic_vector(7 downto 0);end alu;architecture behave of alu issignal alu_out_latch: std_logic_vector(7 dow

36、nto 0);constant HLT: std_logic_vector(2 downto 0):=000;constant SKZ: std_logic_vector(2 downto 0):=001;constant ADD: std_logic_vector(2 downto 0):=010;constant AN_D: std_logic_vector(2 downto 0):=011;constant XO_R: std_logic_vector(2 downto 0):=100;constant LDA: std_logic_vector(2 downto 0):=101;con

37、stant STO: std_logic_vector(2 downto 0):=110;constant JMP: std_logic_vector(2 downto 0):=111;begin zeroalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latch=XXXXXXXX; end case;end if;end process; alu_out=alu_out_latch;end behave;在仿真過(guò)程中,

38、假設(shè)操作碼依次為上述8種操作碼。數(shù)據(jù)值為5,累加器值為由3變0,以此來(lái)驗(yàn)證zero作用。仿真波形下列圖所示:圖3-8 算術(shù)邏輯運(yùn)算單元仿真波形alu_clk為時(shí)鐘信號(hào)輸入端口,zero為判accum是否為零的輸出端口。opcode為操作碼輸入端,data為數(shù)據(jù)輸入端,accum為累加器輸入端口。opcode不同的值代表不同的操作。alu_out中的06代表5(轉(zhuǎn)化為二進(jìn)制=101)異或3(轉(zhuǎn)化為二進(jìn)制=011)得6(二進(jìn)制=110),而其他數(shù)值均正確反映不同操作碼下的運(yùn)算結(jié)果。 數(shù)據(jù)輸出控制器數(shù)據(jù)輸出控制器Data Control的作用是控制累加器數(shù)據(jù)輸出,如圖3-9由于數(shù)據(jù)總線是各種操作時(shí)傳

39、送數(shù)據(jù)的公共通道,不同的情況下傳送不同的內(nèi)容。有時(shí)要傳輸指令,有時(shí)要傳送RAM區(qū)或接口的數(shù)據(jù)。累加器的數(shù)據(jù)只有在需要往RAM區(qū)或端口寫(xiě)時(shí)才允許輸出,否那么應(yīng)呈現(xiàn)高阻態(tài),以允許其它部件使用數(shù)據(jù)總線。所以任何部件往總線上輸出數(shù)據(jù)時(shí),都需要控制信號(hào)。而此控制信號(hào)的啟、停,那么由CPU狀態(tài)控制器輸出的各信號(hào)控制決定。數(shù)據(jù)控制器何時(shí)輸出累加器的數(shù)據(jù)那么由狀態(tài)控制器輸出的控制信號(hào)DATACTL_ENA決定。圖3-9 數(shù)據(jù)輸出控制器數(shù)據(jù)控制電路源程序如下:library ieee;use ieee.std_logic_1164.all;entity datactrl isport(data_ena: in

40、std_logic; alu_out: in std_logic_vector(7 downto 0); data: out std_logic_vector(7 downto 0);end datactrl;architecture behave of datactrl isbegin data=alu_out when data_ena=1 else ZZZZZZZZ;end behave;在此波形圖3-10中,假設(shè)累加器輸出值由00000000遞增,驗(yàn)證當(dāng)data_ena為0時(shí),data輸出alu_out的值,當(dāng)data_ena為1時(shí),data輸出ZZZZZZZZ。圖3-10 數(shù)據(jù)輸出控

41、制器仿真波形 地址多路器地址多路器ADDR用于選擇輸出的地址是PC程序計(jì)數(shù)地址還是數(shù)據(jù)/端口地址,如圖3-11所示。每個(gè)指令周期的前4個(gè)時(shí)鐘周期用于從ROM中讀取指令,輸出PC地址。后4個(gè)時(shí)鐘周期用于對(duì)RAM或端口的讀寫(xiě),輸出數(shù)據(jù)或端口地址。地址的選擇輸出信號(hào)由時(shí)鐘信號(hào)的8分頻信號(hào)FETCH提供,其上升沿到來(lái)時(shí)輸出PC地址,其他時(shí)候輸出數(shù)據(jù)或端口地址。圖3-11 地址多路器地址多路器源程序如下:library ieee;use ieee.std_logic_1164.all;entity addr_mux isport(fetch:in std_logic; pc_addr, ir_addr:

42、 in std_logic_vector(12 downto 0); addr: out std_logic_vector(12 downto 0);end addr_mux;architecture behave of addr_mux isbegin addr=pc_addr when fetch=1 else ir_addr;end behave;圖3-12 地址多路器仿真波形當(dāng)fetch=0時(shí)addr輸出ir_addr的值,當(dāng)fetch=1時(shí)addr輸出pc_addr的值。3.7 程序計(jì)數(shù)器程序計(jì)數(shù)器Program Counter用于提供指令地址,如圖3-13,以便讀取指令,指令按地址

43、順序存放在存儲(chǔ)器中。有兩種途徑可形成指令地址:其一是順序執(zhí)行的情況,其二是遇到要改變順序執(zhí)行程序的情況,例如執(zhí)行JMP指令后,需要形成新的指令地址。復(fù)位后,指令指針為零,即每次CPU重新啟動(dòng)將從ROM的零地址開(kāi)始讀取指令并執(zhí)行。指令為雙字節(jié),每條指令執(zhí)行完需2個(gè)時(shí)鐘,這時(shí)PC_ADDR已被增2,指向下一條指令。如果正執(zhí)行的指令是跳轉(zhuǎn)語(yǔ)句,這時(shí)CPU狀態(tài)控制器將會(huì)輸出PC_ENA信號(hào),通過(guò)LOAD口進(jìn)入程序計(jì)數(shù)器。程序計(jì)數(shù)器PC_ADDR將裝入目標(biāo)地址IR_ADDR,而不是增2。圖3-13 程序計(jì)數(shù)器程序計(jì)數(shù)器源程序如下:library ieee;use ieee.std_logic_1164.

44、all;use ieee.std_logic_unsigned.all;entity pc isport(clk, rst, ena: in std_logic; ir_addr: in std_logic_vector(12 downto 0); pc_addr: out std_logic_vector(12 downto 0);end pc;architecture behave of pc issignal pc_addr_latch: std_logic_vector(12 downto 0);beginprocess(clk)begin if clkevent and clk=1t

45、hen if rst=1then pc_addr_latch0); elsif ena=1 then pc_addr_latch=ir_addr; elsif ena=0 then pc_addr_latch=pc_addr_latch+1; end if; end if;end process; pc_addr=pc_addr_latch;end behave;假設(shè)指令地址為0、1、2、3,為便于顯示,設(shè)置地址指令和程序計(jì)數(shù)器輸出為數(shù)制十進(jìn)制,仿真波形如下列圖:圖3-14 程序計(jì)數(shù)電路仿真波形clk的上升沿啟動(dòng)電路,當(dāng)rst為低電平, ena為低電平時(shí),pc_addr自身加1;ena為高電平

46、那么pc_addr輸出ir_addr的值。rst為高電平時(shí)輸出清0。3.8 狀態(tài)控制器圖3-15 狀態(tài)控制器狀態(tài)控制器State Control是CPU的控制核心,用于產(chǎn)生一系列的控制信號(hào),啟動(dòng)或停止某些部件,由狀態(tài)機(jī)(STATE_MACHINE)和狀態(tài)機(jī)控制器(MACH_CTR)組成,如上圖。狀態(tài)機(jī)控制器接受復(fù)位信號(hào)RST,當(dāng)RST有效時(shí)通過(guò)信號(hào)ENA使其為0,輸入到狀態(tài)機(jī)中停止?fàn)顟B(tài)機(jī)的工作。狀態(tài)機(jī)的當(dāng)前狀態(tài),由變量STATE記錄,STATE的值就是當(dāng)前這個(gè)指令周期中已經(jīng)過(guò)的時(shí)鐘數(shù)。指令周期是由8個(gè)時(shí)鐘周期組成,每個(gè)時(shí)鐘周期都要完成固定的操作。狀態(tài)轉(zhuǎn)換如下列圖:圖3-16 狀態(tài)控制器狀態(tài)轉(zhuǎn)換

47、圖 (1) 第1個(gè)時(shí)鐘S0,CPU狀態(tài)控制器的輸出:RD和IR_ENA為高電平,其余均為低電平。指令存放器存放由ROM送來(lái)的高8位指令代碼。(2) 第2個(gè)時(shí)鐘S1,與上一時(shí)鐘相比只是PC_CLK從0變?yōu)?,故PC增1;同時(shí)ROM送來(lái)低8位指令代碼,指令存放器存放該8位代碼。(3) 第3個(gè)時(shí)鐘S2,空操作。(4) 第4個(gè)時(shí)鐘S3,PC增1,指向下一條指令。假設(shè)操作符為HLT,那么輸出信號(hào)HLT為高。如果操作符不為HLT,除了PC增1外指向下一條指令,其它各控制線輸出為零。(5)第5個(gè)時(shí)鐘S4,假設(shè)操作符為AND、ADD、XOR或LDA,讀相應(yīng)地址的數(shù)據(jù);假設(shè)為JMP,將目的地址送給程序計(jì)數(shù)器;假

48、設(shè)為STO,輸出累加器數(shù)據(jù)。(6) 第6個(gè)時(shí)鐘S5,假設(shè)操作符為AND、ADD或XOR,算術(shù)邏輯單元就進(jìn)行相應(yīng)的運(yùn)算;假設(shè)為L(zhǎng)DA,就把數(shù)據(jù)通過(guò)算術(shù)邏輯單元送給累加器;假設(shè)為SKZ,先判斷累加器的值是否為0,如果為0,PC就增1,否那么保持原值;假設(shè)為JMP,鎖存目的地址;假設(shè)為STO,將數(shù)據(jù)寫(xiě)入地址處。(7) 第7個(gè)時(shí)鐘S6,空操作。(8) 第8個(gè)時(shí)鐘S7,假設(shè)操作符為SKZ且累加器值為0,那么PC值再增1,跳過(guò)一條指令,否那么PC無(wú)變化。在實(shí)體編寫(xiě)過(guò)程中,首先定義8個(gè)狀態(tài)為S0S7,然后定義8個(gè)指令代碼為常量。由于只有8條指令,所以采用3位二進(jìn)制數(shù)編碼。因AND和XOR指令為VHDL關(guān)鍵字

49、,故用AN_D和XO_R代替。指令HLTSKZADDAN_DXO_RLDASTOJMP代碼000001010011100101110111狀態(tài)機(jī)控制器源程序如下:library ieee;use ieee.std_logic_1164.all;entity mach_ctr isport(fetch,rst: in std_logic; ena: out std_logic);end mach_ctr;architecture behave of mach_ctr isbeginprocess(fetch)begin if fetchevent and fetch=1 then if rst=

50、1then ena=0; else ena=1; end if; end if;end process;end behave;狀態(tài)機(jī)源程序如下:library ieee;use ieee.std_logic_1164.all;entity state_machine isport(clk1, ena, zero: in std_logic; opcode: in std_logic_vector(2 downto 0); pc_clk, acc_ena, pc_ena, rd, wr, ir_ena, halt, datactl_ena: out std_logic);end state_ma

51、chine;architecture behave of state_machine istype state_type is (s0, s1,s2, s3, s4, s5, s6, s7);signal state: state_type;constant HLT: std_logic_vector(2 downto 0):=000;constant SKZ: std_logic_vector(2 downto 0):=001;constant ADD: std_logic_vector(2 downto 0):=010;constant AN_D: std_logic_vector(2 d

52、ownto 0):=011;constant XO_R: std_logic_vector(2 downto 0):=100;constant LDA: std_logic_vector(2 downto 0):=101;constant STO: std_logic_vector(2 downto 0):=110;constant JMP: std_logic_vector(2 downto 0):=111;beginprocess(clk1)begin if clk1event and clk1=1then if ena=0 then state=s0;pc_clk=0; acc_ena=

53、0; pc_ena=0; rd=0; wr=0; ir_ena=0; halt=0; datactl_enapc_clk=0; acc_ena=0; pc_ena=0; rd=1; wr=0; ir_ena=1; datactl_ena=0; halt=0; statepc_clk=1; acc_ena=0; pc_ena=0; rd=1; wr=0; ir_ena=1; datactl_ena=0; halt=0; statepc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; stateif

54、(opcode=HLT) then pc_clk=1; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=1; else pc_clk=1; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; end if; stateif (opcode=JMP) then pc_clk=1; acc_ena=0; pc_ena=1; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; elsif (opcode=A

55、DD or opcode=AN_D or opcode=XO_R or opcode=LDA) then pc_clk=0; acc_ena=0; pc_ena=0; rd=1; wr=0; ir_ena=0; datactl_ena=0; halt=0; elsif opcode=STO then pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=1;halt=0; else pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; h

56、alt=0; end if; stateif (opcode=ADD or opcode=AN_D or opcode=XO_R or opcode=LDA) then pc_clk=0; acc_ena=1;pc_ena=0; rd=1; wr=0; ir_ena=0; datactl_ena=0; halt=0; elsif(opcode=SKZ and zero=1) then pc_clk=1; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; elsif opcode=JMP then pc_clk=1

57、; acc_ena=0; pc_ena=1;rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; elsif opcode=STO then pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=1;ir_ena=0; datactl_ena=1; halt=0; else pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0;ir_ena=0; datactl_ena=0; halt=0; end if; statepc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0;

58、ir_ena=0; datactl_ena=0; halt=0; stateif (opcode=SKZ and zero=1) then pc_clk=1;acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; else pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; end if; state=s0; end case; end if; end if;end process;end behave;狀態(tài)控制器源程序

59、如下: library ieee;use ieee.std_logic_1164.all;package mypack is component mach_ctr port(fetch,rst: in std_logic; ena: out std_logic); end component; component state_machine port(clk1, ena, zero: in std_logic; opcode: in std_logic_vector(2 downto 0); pc_clk,acc_ena,pc_ena,rd,wr,ir_ena,halt,datactl_ena

60、:out std_logic); end component;end mypack;library ieee;use ieee.std_logic_1164.all;use work.mypack.all;entity state_contrl isport(clk1,zero,fetch,rst: in std_logic; opcode: in std_logic_vector(2 downto 0); pc_clk,acc_ena,pc_ena,rd,wr,ir_ena,halt,datactl_ena:out std_logic);end state_contrl;architectu

溫馨提示

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