【正文】
址方式: ( 1) 單一寄存器尋址。其次,該微處理器實(shí)現(xiàn)了兩級(jí)指令流水線,采用哈佛結(jié)構(gòu)可使流水實(shí)現(xiàn)的難度大為降低,在采用流水線后,能夠有效地提高指令的執(zhí)行速度。這對(duì)現(xiàn)代微控制器應(yīng)用十分重要,因?yàn)闉榱耸沟綦? 后數(shù)據(jù)表不丟失,就要將它放在程序存儲(chǔ)器中, RISC 架構(gòu)很好地解 決了這個(gè)問(wèn)題。 它是在同一個(gè)存儲(chǔ)空間取指令和數(shù)據(jù), 采用單地址總線結(jié)構(gòu),即程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器共用一條地址總線 ,限制了工作帶寬,使得控制電路復(fù)雜,功耗較大 [1011]。 盡管各種 CPU 的性能指標(biāo)和結(jié)構(gòu)細(xì)節(jié)各不相同,但它們所能完成的基本功能相同,簡(jiǎn)化 CPU 內(nèi)部結(jié)構(gòu)如圖 21 所示。 分析指令:即指令譯碼,既對(duì)當(dāng)前所取的指令進(jìn)行分析,指出它要求什么 操作,并產(chǎn)生相應(yīng)的操作所需要的控制命令 。 山東大學(xué)威海分校畢業(yè)設(shè)計(jì)(論文) 4 第二章 微處理器體系結(jié)構(gòu) CPU 的功能和構(gòu)成 CPU 是計(jì)算機(jī)的核心組成部分。詳細(xì)介紹了控制單元中的控制器和狀態(tài)機(jī)的設(shè)計(jì)和 功能實(shí)現(xiàn)。研究了 CPU的整體設(shè)計(jì),指令系統(tǒng)和時(shí)序分析以及流水線的實(shí)現(xiàn)。寄存器對(duì) 寄存器的運(yùn)算有助于減少對(duì)存儲(chǔ)器的訪問(wèn)次數(shù),提高數(shù)據(jù)的存取速度 [78]。典型的 RISC 處理器具有以下特點(diǎn): ( 1) 指令功能簡(jiǎn)單,各指令的復(fù)雜度分布均衡,有利于形成流水線; ( 2) 控制電路簡(jiǎn)單,多采用硬連線方式來(lái)實(shí)現(xiàn)。內(nèi)容的不斷擴(kuò)充和兼容性的考慮,導(dǎo)致龐大的 CISC 指令系統(tǒng)形成了。 2. CISC指令集和 RISC指令集 CISC 是一種為了便于編程和提高內(nèi)存訪問(wèn)效率的芯片設(shè)計(jì)體系。 ( 3) 具有獨(dú)立于器件和工藝設(shè)計(jì)的能力 VHDL獨(dú)立于器件的特點(diǎn)可以使設(shè)計(jì)人員集中精力來(lái)進(jìn)行電子系統(tǒng)的設(shè)計(jì)和性能優(yōu)化,而不需要考慮其他問(wèn)題。不難看出,采用自頂向下的設(shè)計(jì)方法實(shí)際上就是基于芯片的系統(tǒng)設(shè)計(jì)方法,這種方法有助于在設(shè)計(jì)早期發(fā)現(xiàn)結(jié)構(gòu)設(shè)計(jì)中的錯(cuò)誤,提高設(shè)計(jì)成功率。 現(xiàn)今市場(chǎng)上流行的典型的 8位微控制器,可以在各種 FPGA上實(shí)現(xiàn),設(shè)計(jì)靈活方便而且易于進(jìn)行功能擴(kuò)展。 微處理器的概況 微處理器是計(jì)算機(jī)系統(tǒng)中非常之重要的核心組成部分,它用來(lái)控制計(jì)算機(jī)的各種操作過(guò)程,通常也被稱(chēng)為 CPU,即中央處理器。研究 SOC的設(shè)計(jì)方法和驗(yàn)證方法具有很大的現(xiàn)實(shí)意義 [23]。簡(jiǎn)單來(lái)說(shuō), SOC是一種將多個(gè)獨(dú)立的 VLSI設(shè)計(jì)拼合在一起,來(lái)形成某一應(yīng)用所需的全部功能的集成電路,以其高集成度、低功耗等優(yōu)點(diǎn)越來(lái)越受歡迎 [1]。 該微處理器主要由控制器、運(yùn)算器和寄存器組成,具有指令控制、操作控制、時(shí)間控制和數(shù)據(jù)加工等基本功能, 可實(shí)現(xiàn)四位操作數(shù)的各種運(yùn)算, 其指令長(zhǎng)度為 16位定長(zhǎng),采用 了 直接尋址方式 。 最后 采用 QUARTUSII對(duì)設(shè)計(jì)進(jìn)行了 仿真測(cè)試, 結(jié)果 表明設(shè)計(jì)實(shí)現(xiàn)了微處理器的主要 功能 。 中國(guó)的電子信息產(chǎn)業(yè)現(xiàn)在增長(zhǎng)迅速,主要集中在移動(dòng)通信設(shè)備、數(shù)據(jù)通信設(shè)備、計(jì)算機(jī)及消費(fèi)產(chǎn)品領(lǐng)域。其中 CPU是 SOC的重要組成部分,可以完成簡(jiǎn)單的數(shù)據(jù)處理,內(nèi)存的調(diào)度,中斷處理等操作。隨著科學(xué)技術(shù)的迅速發(fā)展,微處理器的發(fā)展也是非常迅速,它的處理能力已經(jīng)由過(guò)去的 4位發(fā)展到現(xiàn)在的 64位,運(yùn)算能力和處理能力大大提高,應(yīng)用領(lǐng)域也從計(jì)算機(jī)系統(tǒng)擴(kuò)展到各個(gè)相關(guān)領(lǐng)域,例如通信、航天和工業(yè)控制等。因此研究 8位 CPU內(nèi)核具有廣泛的現(xiàn)實(shí)意義 ,由于其具有較高的處理性能和較少的資源占用,故具有更加廣泛的應(yīng)用前景。 技術(shù)背景 1. 硬件描述語(yǔ)言 VHDL 如今,大多數(shù)的 EDA工具都采用 VHDL作為主要的硬件描述語(yǔ)言,這主要源于 VHDL強(qiáng)大的自身功能和特點(diǎn) ,下面介紹 一下 VHDL的優(yōu)點(diǎn)。 ( 4) 具有良好的可移植能力 。早期的計(jì)算機(jī)使用匯編語(yǔ)言編程,由于內(nèi)存速度慢且價(jià)格昂貴,使得 CISC 體系得到了用武之地。在 20 世紀(jì) 90 年代中期之前,大多數(shù)的微處理器都采用 CISC 體系 包括 Intel 的 80x86 和 Motorola 的 6sK 系列等 [6]。因?yàn)椴恍枰~外的存取微程序存儲(chǔ)器來(lái)完成指令的執(zhí)行,因此可以直接使用硬連線方式來(lái)設(shè)計(jì); ( 3) 指令定長(zhǎng),指令格式簡(jiǎn)單,指令編碼固定。 山東大學(xué)威海分校畢業(yè)設(shè)計(jì)(論文) 3 課題 工作內(nèi)容 本文一共分為七章。 第三章 CPU 數(shù)據(jù)通路設(shè)計(jì)。 第五章 CPU 的仿真驗(yàn)證。計(jì)算機(jī)進(jìn)行信息處理可分為以下兩個(gè)步驟 [9]。 執(zhí)行指令:根據(jù)分析指令時(shí)產(chǎn)生的“操作命令”形成相應(yīng)的操作控制序列, 通過(guò)運(yùn)算器、存儲(chǔ)器及輸入輸出的執(zhí)行,實(shí)現(xiàn)每條指令的功能,其中包括對(duì)運(yùn)算結(jié)果的處理及下條指令地址的形成。 圖 21 簡(jiǎn)化 CPU 內(nèi)部結(jié)構(gòu) 山東大學(xué)威海分校畢業(yè)設(shè)計(jì)(論文) 5 指令系統(tǒng)分析 指令系統(tǒng)結(jié)構(gòu)是微處理器體系結(jié)構(gòu)的一個(gè)重要部分,是微處理器設(shè)計(jì)的基礎(chǔ)。結(jié)構(gòu)見(jiàn)圖 22 所示: 圖 22 馮 .諾依曼結(jié)構(gòu)圖 這種結(jié)構(gòu)有兩個(gè)明顯的缺點(diǎn): ( 1) CPU 中控制器和運(yùn)算器的速度必須與存儲(chǔ)器的速度相匹配; ( 2) 指令和數(shù)據(jù)的流動(dòng)都通過(guò)同一條總線,使指令和數(shù)據(jù)的獨(dú)立性消弱; 目前, RISC 架構(gòu)的微處理器都采用哈佛結(jié)構(gòu),這種結(jié)構(gòu)具有分離地址總線的兩 個(gè)存儲(chǔ)器,其中一個(gè)放程序,另一個(gè)放數(shù)據(jù),其指令和數(shù)據(jù)空間完全分開(kāi),可以同時(shí)訪問(wèn),且一次讀出,簡(jiǎn)化控制電路,提高數(shù)據(jù)的吞吐率 [12]。 ( 2) 讀取指 令和存儲(chǔ)器數(shù)據(jù)交換可以在多步流水線中同時(shí)進(jìn)行,這在馮 . 諾依曼單地址總線結(jié)構(gòu)中很難實(shí)現(xiàn)。再次,該微處理器采用了硬布線邏輯代替微程序控制的方法,提高了指令的執(zhí)行速度和效 率。操作數(shù)在目的寄存器; ( 2) 雙寄存器尋址。所有的指令碼都很容易譯碼。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 d d d d 對(duì)于立即數(shù)指令 ,指令中間 8 位是 8 位常數(shù),其中 H 代表常數(shù)的高四位,L 代表常數(shù) 的低四位, d 用來(lái)尋址目的寄存器。 表 2 指令編碼 指令類(lèi)型 指令機(jī)器碼 ADD 0001 0000 r r r r d d d d SUB 0010 0000 r r r r d d d d AND 0011 0000 r r r r d d d d OR 0100 0000 r r r r d d d d LSL 0101 0000 0000 d d d d LSR 0110 0000 0000 d d d d MOV 0111 LLLL HHHH d d d d ST 1000 0000 0000 d d d d LD 1001 0000 0000 d d d d SLEEP 1011 0000 0000 0000 山東大學(xué)威海分校畢業(yè)設(shè)計(jì)(論文) 8 指令時(shí)序分析 RISC 與流水線 指令的執(zhí)行分成兩個(gè)階段:取指階段和執(zhí)行階段。 8 位 CPU 采用兩級(jí)流水 線 技術(shù),指 令的流水線可以用圖 24 來(lái)簡(jiǎn)單的示意: 圖 24 流水線指令執(zhí)行 由圖可以看出,盡管每條指令的完成需要兩個(gè)周期的時(shí)間,但是在流水線結(jié)構(gòu)中,當(dāng)前指令的取值周期和上一條指令的執(zhí)行周期在時(shí)間上是重疊的,對(duì)于這種并行操作,從平均角度來(lái)看,相當(dāng)于一個(gè)周期內(nèi)完成一條指令,因此可以大大提高指令的運(yùn)行速度 [15]。在時(shí)鐘上升沿 PC產(chǎn)生進(jìn)入PCRAM的地址,由于 PCRAM 有反應(yīng)時(shí)間,經(jīng)過(guò)一段很短的時(shí)間讀出指令,在下一個(gè)時(shí)鐘上升沿到來(lái)時(shí),指令寄存器鎖存指令,然后開(kāi)始對(duì)指令進(jìn)行譯碼,并產(chǎn)生操作數(shù)、目的存儲(chǔ)器/寄存器地址、寫(xiě)信號(hào)及各種控制信號(hào)。在程序開(kāi)始執(zhí)行前, CPU將它的起始地址送入 PC,當(dāng)指令執(zhí)行時(shí), CPU 將自動(dòng)修改 PC 的內(nèi)容,所以 PC中的內(nèi)容總是下一條指令的地址。 CPU 整體結(jié)構(gòu)即設(shè)計(jì)思想 在設(shè)計(jì) CPU 之前整個(gè)結(jié)構(gòu)的特性及由哪些模塊組成,這些模塊之間的 互連關(guān)系以及整個(gè) CPU 的最后輸出信號(hào)等都是要事先定義好的 .。當(dāng) WR 信號(hào)有效時(shí),整個(gè) CPU 進(jìn)入指令輸入狀態(tài),當(dāng) WR 低 電平時(shí)CPU 進(jìn)入指令讀取并完成指令操作的狀態(tài),當(dāng) CPU 完成全部輸入指令時(shí)進(jìn)入停機(jī)狀態(tài),此時(shí) Start 信號(hào)重新啟動(dòng) CPU,使其進(jìn)入等待狀態(tài)。有些模塊是比較簡(jiǎn)單的像指令寄存器 (IR),有些模塊則是比較難的像 ALU模塊和控制單元模塊。時(shí)鐘用來(lái)決定狀態(tài)何時(shí)被寫(xiě)入,一個(gè)狀態(tài)可以在任意時(shí)刻讀取。取指單元和執(zhí)行單元共同構(gòu)成了 CPU 的微控制單元。微處理器的功能就是體山東大學(xué)威海分校畢業(yè)設(shè)計(jì)(論文) 11 現(xiàn)在這些這些數(shù)據(jù)是如何傳遞的,在傳遞前的處理是如何處理的,所有這一系列寄存器數(shù)據(jù)之間的遷移轉(zhuǎn)換就組成了微處理器。這種劃分將 CPU 的運(yùn)算、執(zhí)行單元與控制部件分離開(kāi),是非常合理、自然的。通過(guò)上一章對(duì) CPU 的結(jié)構(gòu)劃分,已 經(jīng)知道 CPU 的整個(gè)設(shè)計(jì)分為兩個(gè)部分:數(shù)據(jù)通路和控制單元。第一種是在所有需要傳送數(shù)據(jù)的部件創(chuàng)建一條直接通路,采用多路選擇器或者緩沖器為那些有多個(gè)數(shù)據(jù)源的寄存器從多個(gè)可能的輸入中選擇一個(gè),這種方案適用于規(guī)模比較小的微處理器設(shè)計(jì)。 程序計(jì)數(shù)器模塊 PC 程序計(jì) 數(shù)器 (PC)作為指向指令地址“指針”,決定著下一條要執(zhí)行的指令。 圖 31 PC 模塊外部接口信號(hào) 圖 31 所示是從外部看的 PC 模塊的接口。 EN 信號(hào)是程序計(jì)數(shù)器 PC 的使能控制信號(hào),只有當(dāng)該信號(hào)有效時(shí) PC 的相應(yīng)才能操作才能執(zhí)行。因?yàn)槌绦蛴?jì)數(shù)器可以尋址到 256條指令,所以程序存儲(chǔ)器也必需可以至少存放 128 條 16 位的指令 ,這樣只需申請(qǐng)一個(gè)變量 Ram,有 256個(gè)元素 ,每個(gè)元素 16 位即可。這樣就可以通過(guò)存貯器數(shù)組元素和輸入地址間的相互賦值實(shí)現(xiàn)“讀存儲(chǔ)器”,“寫(xiě)存儲(chǔ)器”,既簡(jiǎn)單又容易實(shí)現(xiàn)。 通過(guò)上一章的流水線分析部分、指令時(shí)序分析部分和程序存儲(chǔ)器模塊分析部分可以得到,在指令寄存器模塊中,當(dāng)前存放的并不是 CPU正在執(zhí)行的指令,而是下一條指令 。指令寄存器外部輸入控制信號(hào) en是來(lái)自控制單元的輸入信號(hào), En高電平有效,與 PC模塊的使能 en信號(hào) 功能上基本一致,它控制著指令寄存器是否可以從程序存儲(chǔ)器中加載指令。 時(shí)鐘發(fā)生器的外部接口如圖 35。 將指定 源操作寄存器地址中的數(shù)據(jù)讀出。 toreg_rd=ram(conv_integer(fromrd))。在 ALU 中還可以細(xì)化成兩個(gè)功能單元 :取操作數(shù)單元、執(zhí)行運(yùn)算單元。取操作數(shù)單元在數(shù)據(jù)選擇的控制信號(hào)控制下,可以選取一個(gè)或者兩個(gè)操作數(shù)輸入執(zhí)行單元。 在 ALU 的設(shè)計(jì)中主要還是根據(jù)指令來(lái)的, ALU 所能執(zhí)行的 指令是很多的,基本的指令可以分為 4 類(lèi),即 ADD, SUB, LOGIC, LSL、 LSR。 LSR 指令組分為帶進(jìn)位的循環(huán)左移和不帶進(jìn)位的算術(shù)左移操作 。 end process。 elsif fload =39。 由這段代碼可以看出 ALU 模塊是雙進(jìn)程模塊,操作數(shù)運(yùn)算是不受時(shí)鐘控制的,由控制信號(hào)直接控制并計(jì)算。因此這個(gè)模塊在整個(gè) CPU的設(shè)計(jì)中是最關(guān)鍵的也是最難精準(zhǔn)實(shí)現(xiàn)的模塊。 控制器 Control 模塊 控制器則是一個(gè)微處理器的核心部件之一,在每一個(gè)時(shí)鐘周期的上升沿 ,指令寄存器 IR 從內(nèi)存中讀取指令字后 ,送入控制器中,控制器能夠根據(jù)輸入的 4位操作碼進(jìn)行譯碼,為其他每個(gè)功能單元產(chǎn)生相應(yīng)的主控制信號(hào),并發(fā)出信號(hào)狀態(tài)信號(hào)控制狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換,最終實(shí)現(xiàn)對(duì) CPU各個(gè)功能單元的控制 ,實(shí)現(xiàn)指令的順利執(zhí)行。狀態(tài)機(jī)FSM的當(dāng)前狀態(tài),由變量 state記錄。 Moore型狀態(tài)機(jī)的輸出則僅由當(dāng)前狀態(tài)控制,這類(lèi)狀態(tài)機(jī)在輸入發(fā)生變化還必須等待時(shí)鐘的到來(lái),時(shí)鐘使?fàn)顟B(tài)發(fā)生變化時(shí)才導(dǎo)致輸出變化。 圖 42 狀態(tài)轉(zhuǎn)移圖 利用 的 VHDL 語(yǔ)言進(jìn)行 狀態(tài)機(jī) 描述 本 次設(shè)計(jì)采用 2個(gè)進(jìn)程模塊,一個(gè)模塊用同步時(shí)序描述狀態(tài)轉(zhuǎn)移;另一個(gè)模塊用組合邏輯判斷 狀態(tài)的 邏輯輸出 , 其 VHDL代碼如下: process (clk,wr,input,start) begin //第一個(gè)進(jìn)程模塊用同步時(shí)序描述狀態(tài)轉(zhuǎn)移 if wr = 39。139。 //通過(guò) ifthenelse語(yǔ)句指定相應(yīng)次態(tài) when sp = when tj = end case。 end process。 在本次設(shè)計(jì)中由于各個(gè)模塊的互連信號(hào)比較多,所以將采用硬件語(yǔ)言描述的方法將各個(gè)模塊連接起來(lái),即用 VHDL語(yǔ)言將各個(gè)模塊組合起來(lái)從而形成一個(gè)最頂層的模塊。 pcout : out unsigned(7 downto 0) ) 。 SIGNAL en, nrst ,clkr: STD_LOGIC。用 QUARTUSII對(duì)設(shè)計(jì)模塊進(jìn)行編譯及綜合后 生成的 RTL綜合電路圖如 圖 5— 1示。驗(yàn)證的工作是給它一個(gè)特定的程序,從軟件仿真 看它的運(yùn)行結(jié)果是否符合設(shè)計(jì)的原來(lái)