




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第一章 引言1.1研究基于RISC結(jié)構(gòu)微控制器的重要性和意義不同機器的指令系統(tǒng)是各不相同的.從指令的操作碼功能來考慮,一個較完善的指令系統(tǒng),應(yīng)當(dāng)包括數(shù)據(jù)傳送指令、算術(shù)運算指令、程序控制類指令、輸入輸出類指令、字符串類指令、系統(tǒng)控制類指令等。CISC(復(fù)雜指令系統(tǒng)計算機)的指令系統(tǒng)一般多達二三百條。但對CISC機進行的測試表明,最常使用的是一些最簡單最基本的指令,僅占指令總數(shù)的20%,但在程序中出現(xiàn)的頻率卻占到80%。同時在CISC系統(tǒng)中往往配備有大量的尋址方式,這就使得CISC處理器存在執(zhí)行效率不高,開發(fā)成本過大等缺點。上世紀(jì)80年代初,計算機的設(shè)計者們就對計算機系統(tǒng)使用復(fù)雜指令級這一做法提出
2、了質(zhì)疑,通過對CISC計算機進行研究,發(fā)現(xiàn)大約有80%的指令很少被使用,而經(jīng)常被使用的指令只占到了指令集的20%。根據(jù)以上的情況,設(shè)計者們越來越傾向設(shè)計帶有更少指令集和結(jié)構(gòu)更簡單的計算機。這種類型的計算機被歸類為RISC(精簡指令系統(tǒng))計算機。RISC處理器有三個基本的要素(1)一個有限的簡單的指令集。(2)CPU配備大量的通用寄存器。(3)強調(diào)對指令流水線的優(yōu)化。RISC結(jié)構(gòu)的目標(biāo)決不是簡單的縮減指令系統(tǒng),而是通過對指令集進行精簡設(shè)計使處理器的結(jié)構(gòu)更簡單,更合理,具有更高的性能和執(zhí)行效率,并降低處理器的開發(fā)成本。典型的RISC機器的特征主要有以下幾點:(1).使用等長指令。(2).尋址方式少
3、且簡單。(3).只有取數(shù)指令存數(shù)指令能夠訪問存儲器。(4).指令集中的指令數(shù)目一般少于100種,指令格式少于種。(5).指令周期執(zhí)行時間多為一個時鐘周期。與此相反,CISC指令集具有復(fù)雜、龐大的指令系統(tǒng),一般可達到100到250條。具有多種指令格式(一般大于4種)和復(fù)雜的尋址方式(一般可達到5到20種),各種指令使用頻率相差很大,一些基本指令雖然只占指令總數(shù)的20%但執(zhí)行頻率卻達到了80%,各種指令執(zhí)行時間相差很大。通過對這兩種指令系統(tǒng)的比較可以看出,RISC是在繼承了CISC的成功技術(shù),并在克服了CISC及其缺點的基礎(chǔ)上發(fā)展起來的,所以對RISC微處理器的研究有著廣泛的科研價值和應(yīng)用前景。1
4、.2工作內(nèi)容與工作目標(biāo)設(shè)計微控制器的過程其實是一個提出問題,分析問題,解決問題的實踐過程。本文中的章節(jié)都是按照這個指導(dǎo)思想編寫的。這次畢業(yè)設(shè)計的目標(biāo)是期望用硬件描述語言來編寫一個基于RISC結(jié)構(gòu)的微控制器。為了達到這個目的,在設(shè)計前需要明確以下幾點:(1) RISC結(jié)構(gòu)微控制器的特點及組成結(jié)構(gòu)。(2) 微控制器的指令格式與尋址方式。(3) 微控制器執(zhí)行指令的原理與具體過程。所要設(shè)計的微控制器外部特性及指令系統(tǒng)是以ATMEL 90S2313 芯片為藍圖。因此熟悉AT90S2313的工作原理及工作方式很有必要。工作的重點有以下四個方面:首先是對ATMEL90S2313的結(jié)構(gòu)與功能進行學(xué)習(xí),以便確定
5、所要設(shè)計的微控制器組成結(jié)構(gòu)與外部特性。這些內(nèi)容主要第二章中進行闡述。其次,需要對AT90S2313指令集進行分析,總結(jié)出指令格式與尋址方式,這項工作為微控制器各功能模塊的設(shè)計做好準(zhǔn)備,以上的工作成果將會在第三章指令分析中進介紹。再次,需要確定流水指令執(zhí)行方式的概念,并對其具體實現(xiàn)方式進行研究與討論,這是第四章的主要內(nèi)容。最后根據(jù)先前工作中的積累,設(shè)計出微控制器的總體結(jié)構(gòu)并編寫各功能模塊的軟核,具體的實現(xiàn)過程將會在第五章中詳細討論。需要說明的是,AT90S2313芯片中的模擬部分不在這次設(shè)計的考慮中,例如可編程的看門狗定時器,片內(nèi)模擬比較器等部件。第二章 RISC微控制器結(jié)構(gòu)2.1 CPU的功能
6、圖1.1計算機基本結(jié)構(gòu)圖1.1展示了一個標(biāo)準(zhǔn)計算機系統(tǒng)的基本結(jié)構(gòu)。一個計算機系統(tǒng)應(yīng)當(dāng)包括以下設(shè)備:CPU,內(nèi)存設(shè)備和I/O接口。以上所有設(shè)備之間的通信憑借系統(tǒng)總線來開展,具體而言是通過數(shù)據(jù)總線,地址總線和控制總線來進行各個設(shè)備之間信息傳遞的。CPU全稱叫做中央處理單元(CENTRAL PROCESSING UNIT),它就像是計算機的大腦,對整個計算機系統(tǒng)的運行起著重要的作用,有如下四方面的基本功能:指令控制程序的順序控制,稱為指令控制。由于程序是一個指令序列,這些指令的相互順序不能任意顛倒,需要嚴(yán)格按程序規(guī)定的順序進行,因此,保證計算機按順序執(zhí)行程序是CPU的首要任務(wù)。操作控制一條指令功能是
7、由若干個操作信號的組合來實現(xiàn)的,因此,CPU管理并產(chǎn)生由內(nèi)存取出的每條指令的操作信號,把各操作信號送往相應(yīng)的部件,從而控制這些部件按指令要求進行動作。時間控制在計算機中,各種指令的操作信號均受到時間的嚴(yán)格定時。一條指令的整個執(zhí)行過程也受到時間的嚴(yán)格定時。而CPU通過對操作信號的定時控制而達到使整個系統(tǒng)自動工作的目的。數(shù)據(jù)加工CPU可以對數(shù)據(jù)進行算術(shù)運算和邏輯運算。對數(shù)據(jù)的加工處理,是 CPU的根本任務(wù)。因為原始數(shù)據(jù)只有通過加工處理后才能對人們有用。、CPU憑借二進制編碼來解讀和執(zhí)行指令,指令通常是關(guān)于算術(shù)運算,邏輯運算,數(shù)據(jù)處理和系統(tǒng)控制之類的操作。以上的操作實現(xiàn)了計算機的基本控制。2.2 A
8、tmel AVR AT90S2132 簡介2.2.1特點描述AT90S2313 是一款基于AVR RISC 的低功耗CMOS 的8 位單片機。通過在一個時鐘周期內(nèi)執(zhí)行一條指令,AT90S2313 可以取得接近1MIPS/MHz 的性能。微控制器的AVR 核將32 個工作寄存器和豐富的指令集聯(lián)結(jié)在一起。所有的工作寄存器都與ALU(算術(shù)邏輯單元)直接相連,允許在一個時鐘周期內(nèi)執(zhí)行的單條指令同時訪問兩個獨立的寄存器。這種結(jié)構(gòu)提高了代碼效率,使AVR 得到了比普通CISC 單片機高將近10 倍的性能。AT90S2313 具有以下特點:2K字節(jié)FLASH ,128字節(jié)EEPROM ,128字節(jié)SRAM,
9、 15個通用I/0口,32個通用工作寄存器,具有比較模式的靈活的定時器/計數(shù)器,內(nèi)外中斷源,可編程的UART ,可編程的看門狗定時器,下載程序用的SPI 口以及兩種可通過軟件選擇的省電模式。工作于空閑模式時CPU 將停止運行而寄存器定時器/計數(shù)器看門狗和中斷系統(tǒng)繼續(xù)工作;掉電模式時振蕩器停止工作,所有功能都被禁止而寄存器內(nèi)容得到保留。只有外部中斷或硬件復(fù)位才可以退出以上狀態(tài)。從以上特點可以看出AT90S2313功能強大易于擴展。在本章中主要學(xué)習(xí)其工作原理及工作方式,這為以后RISC微控制器的設(shè)計提供了很好的借鑒。2.2.2組成結(jié)構(gòu)從圖2.2中可以看出AT90S2132基本的邏輯構(gòu)成部件,各部件
10、的特性如下所示:快速訪問寄存器文件包含32 個8 位可單周期訪問的通用寄存器,這意味著在一個時鐘周期內(nèi)ALU 可以完成一次如下操作讀取寄存器文件中的兩個操作數(shù),執(zhí)行操作,將結(jié)果存回到寄存器文件。ALU 支持兩個寄存器之間、寄存器和常數(shù)之間的算術(shù)和邏輯操作,以及單寄存器的操作。除了寄存器操作模式,通常的內(nèi)存訪問模式也適用于寄存器文件。這是因為AT90S2313 為寄存器文件分配了32 個最低的數(shù)據(jù)空間地址($00 - $1F )允許其象普通內(nèi)存地址一樣訪問。I/O 內(nèi)存空間包括64 個地址作為CPU 外設(shè)的控制寄存器,T/C ,以及其他I/O 功能I/O 內(nèi)存可以直接訪問,也可以作為數(shù)據(jù)地址($
11、20 - $5F)來訪問。AT90S2313采用了HARVARD 結(jié)構(gòu):程序和數(shù)據(jù)總線分離,程序內(nèi)存通過兩段式的管道流水進行訪問,CPU 在執(zhí)行一條指令的同時取下一條指令。這種預(yù)取指的概念使得指令可以在一個時鐘完成。相對跳轉(zhuǎn)和相對調(diào)用指令可以直接訪問1K 地址空間。所有的AVR 指令都為16 位長,每個程序內(nèi)存地址都包含一條16 位或32 位的指令。當(dāng)執(zhí)行中斷和子程序調(diào)用時,返回地址存儲于堆棧中,堆棧分布于通用數(shù)據(jù)SRAM 之中,所以堆棧大小只受SRAM 數(shù)量的限制。 微控制器結(jié)構(gòu)的內(nèi)存空間是線性的如下圖2.3。圖2.2 AT90S2313邏輯結(jié)構(gòu)圖2.3內(nèi)存空間結(jié)構(gòu)中斷模塊由I/O 空間中的
12、控制寄存器和狀態(tài)寄存器中的全局中斷使能位組成。每個中斷都具有一個中斷向量,由中斷向量組成的中斷向量表位于程序存儲區(qū)的最前面。中斷向量地址低的中斷具有高的優(yōu)先級。因為在對微控制器的設(shè)計中會大量的用到通用寄存器和指令尋址方式,所以將對這兩個問題專門加以詳細的討論2.2.3通用寄存器文件格式圖2.4通用寄存器文件格式如上圖所示每個寄存器都對應(yīng)一個內(nèi)存地址,通用寄存器文件中有32個寄存器。寄存器R26R31 除了用作通用寄存器外還可以作為間接尋址用的地址指針。以上寄存器統(tǒng)稱為X 、Y、Z 寄存器。如圖:圖2.5 X ,Y, Z寄存器結(jié)構(gòu)數(shù)據(jù)尋址模式分為5 種:直接,帶偏移量的間接,間接,預(yù)減的間接,后
13、加的間接,寄存器R26 到R31 為間接尋址的指針寄存器。直接尋址范圍可達整個數(shù)據(jù)空間。帶偏移量的間接尋址模式尋址到Y(jié)、 Z 指針給定地址附近的63 個地址。帶預(yù)減和后加的間接尋址模式要用到X、 Y、 Z 指針。32 個通用寄存器64 個I/O 寄存器和128 字節(jié)的SRAM 可以被所有的尋址模式訪問。 下面這節(jié)將著重對尋址方式進行探討。2.2.4程序和數(shù)據(jù)尋址模式AT90S2132支持5種數(shù)據(jù)尋址模式(直接尋址、帶便移量的間接尋址、間接尋址、預(yù)減的間接、后接的間接)和3種程序?qū)ぶ纺J剑?使用LPM指令尋址常數(shù)、間接程序?qū)ぶ?IJMP 和ICALL、相對程序?qū)ぶ?RJMP 和RCALL)。其中
14、數(shù)據(jù)尋址中的直接尋址又可細分為4種方式:單寄存器直接尋址、雙寄存器直接尋址、I/O直接尋址、數(shù)據(jù)直接尋址。單寄存器直接尋址雙寄存器直接尋址I/O直接尋址數(shù)據(jù)直接尋址數(shù)據(jù)間接尋址帶預(yù)減的數(shù)據(jù)間接尋址帶后加的數(shù)據(jù)間接尋址帶偏移的數(shù)據(jù)間接尋址使用LPM指令尋址常數(shù)間接程序?qū)ぶ稩JMP 和ICALL相對程序?qū)ぶ稲JMP 和RCALL第三章 指令集分析3.1指令集概述CPU要執(zhí)行某種操作的命令叫做指令。在本章中主要介紹的是機器指令,每一條機器指令可以完成一個獨立的運算,如算術(shù)運算、邏輯運算等。多條機器指令可以組成程序運行。在CPU的指令集中包括了該CPU可執(zhí)行的所有指令,因為指令集決定了微控制器中數(shù)據(jù)通
15、路和所有功能模塊的結(jié)構(gòu),所以本章中對指令集的學(xué)習(xí)是及其必要的。如下圖所示:指令集Rd目的寄存器 Rr源寄存器K常數(shù) k常數(shù)表示的地址 b寄存器文件或I/O寄存器的位 s狀態(tài)寄存器中的位 Z、Y、XR31到R26寄存器AI/O地址 q偏移量(6位)14 圖3.1指令集列表圖3.1中羅列微控制器AT90S2313的指令集。雖然在設(shè)計的開始就說明了使用AT90S2313指令集作為設(shè)計的原型,但因為不考慮微控制器的模擬部分,以及設(shè)計指令集中所有指令過于復(fù)雜等多方面原因,這里一共對92條指令進行了分析。這些指令被分成了4種類別:算術(shù)和邏輯運算指令A(yù)DD、ADC、SUB SUBI 、SBC、 SBCI、
16、AND、 ANDI、 OR、 ORI、 EOR、COM、 NEG、 SBR、 CBR、 INC、 DEC、 TST、 CLR、 SER。跳轉(zhuǎn)指令RJMP、 RCALL、 RET 、RETI、 CPSE、 CP 、CPC 、CPI、 SBRC、 SBRS、 SBIC、 SBIS、 BRBS、 BRBC、 BREQ 、BRNE、 BRCS、 BRCC、 BRSH 、BRLO、 BRMI、 BRPL、 BRGE、 BRLT、 BRHS、 BRHC、 BRTS、 BRTC、 BRVS、 BRVC、 BRIE、 BRID。數(shù)據(jù)傳輸指令LDZ、 LDZ+、 LD-Z、 STZ、 STZ+、 ST-Z、 M
17、OV 、LDI、 IN 、OUT 。位及位測試指令SBI、 CBI、 LSL、 LSR、 ROR、 ASR、 SWAP、 BSET、 BCLR、 BST、 BLD、 SEC、 CLC、 SEN、 CLN、 SEZ、 CLZ、 SEI、 CLI 、SES、 CLS、 SEV、 CLV、 SET、 CLT、 SHE 、CLH 、NOP、 SLEEP。以上指令集的設(shè)計是基于ATMEL AVR AT90S2313微控制器的指令集,從而減少開發(fā)時間,提高設(shè)計的可靠性。RISC微控制器的特點之一就是大部分指令可以在一個時鐘周期內(nèi)執(zhí)行完成,但是跳轉(zhuǎn)指令LD(間接取數(shù))ST(間接存數(shù))和少數(shù)其他的指令是在多個
18、時鐘周期內(nèi)完成的。各指令執(zhí)行所需的時鐘周期可以在圖4.1時鐘數(shù)一項中查出。3.2尋址方式RISC微控制器被設(shè)計了7種尋址方式,用來滿足上一節(jié)指令集的執(zhí)行需要。Rd和Rr分別代表目的寄存器和源寄存器。寄存器即可以存放數(shù)據(jù)又可以存放指令。因此當(dāng)操作數(shù)或某條指令存放在存儲單元時,其存儲單元的編號就是該操作數(shù)或指令在存儲器中的地址。1.單寄存器直接尋址寄存器直接尋址是一種基本的尋址方法,其特點是操作數(shù)直接存放在目的寄存器(Rd)中。2.雙寄存器直接尋址在這種尋址方式中操作數(shù)存放在Rd和Rr中,并將運算后的結(jié)果保存在Rd中。3.輸入輸出直接尋址第一個操作數(shù)包含在I/O寄存器中,地址由指令中的6位代碼組成
19、。第二個操作數(shù)保存在Rd或Rr中。并通過IN和OUT指令對I/O寄存器進行讀出或是寫入操作。4.數(shù)據(jù)間接尋址操作數(shù)的地址包含在Z指針中(R30寄存器)的尋址方式。在尋址時通過Z指針中的地址去數(shù)據(jù)存儲器中找操作數(shù)。5.帶預(yù)減的數(shù)據(jù)間接尋址這種尋址方式是在執(zhí)行前先將Z指針減1。此時在Z指針中的操作數(shù)地址為原地址減1。6.帶后加的數(shù)據(jù)間接尋址在執(zhí)行后對Z指針加1。此時Z指針中的操作數(shù)地址為原地址加15、6這兩種尋址方式使得寄存器的內(nèi)容規(guī)律變化而不改變指令本身,從而是有效地址規(guī)律變化。7.帶偏移的數(shù)據(jù)間接尋址在這種尋址方式中程序計數(shù)器(PC)中的地址為PC+偏移量。偏移量在指令中被定義。無條件跳轉(zhuǎn)指令
20、(RJMP相對跳轉(zhuǎn),RCALL相對調(diào)用)用此種尋址方式可以從任何位置尋址所有的內(nèi)存單元。雖然這里有7種尋址方式,但是直接寄存器尋址是被應(yīng)用的最多的尋址方式。而其它的尋址方式只有在訪問I/O設(shè)備,訪問SRAM和執(zhí)行跳轉(zhuǎn)指令時才被用到。3.3指令格式在前幾章提到,RISC指令有著固定的長度且易于解碼。按照這個設(shè)計原則微控制器的所有指令被設(shè)計為固定的16位字長,指令格式比較簡單且易于解碼。通過對指令集的分析,一共需要建立9種指令格式。(1)指令需要用到兩個寄存器,d 被用來選擇目的寄存器,r被用來選擇源寄存器。每個寄存器用5位來表示,所以一共可以尋址32個寄存器。ADD,SUB和AND等指令就是采用
21、這種指令格式。(2)指令只需要一個寄存器,這時就用d來選擇目的和源寄存器。這種指令格式包括了NEG,ST和IN等指令。(3)指令中需要調(diào)用立即數(shù)。K用8位的字長來表示立即數(shù)(常數(shù)),用d來選擇目的寄存器。這個指令格式與上面兩個格式有些不同的地方是,用了4位字長來表示目的寄存器,所以只能尋址16個寄存器。使用這種指令格式的有CPI,SUBI,SBCI,ORI,ANDI和LDI等指令。(4)在無條件跳轉(zhuǎn)指令中,K被用來定義偏移量。12位字長的偏移量可以使得跳轉(zhuǎn)指令對-2048到2047的范圍內(nèi)尋址。RJMP、RCALL等指令使用這種指令格式。(5)在有條件跳轉(zhuǎn)指令中,k被用來定義偏移量,s位被用來
22、選擇狀態(tài)寄存器中的那一位被用來對跳轉(zhuǎn)進行測試。(the s-bits addressed which bit in the status register is to be tested for the branch)7位字長的偏移量可以使得跳轉(zhuǎn)的范圍從-64到63。使用這種指令格式的指令有BRBC和BRBS等。(6)I/O尋址指令有兩種格式。第一種是用A來定義I/O地址并用d來選擇的相應(yīng)的目的寄存器。這種方式使用了6位字長A來定義I/O地址,從而可以對尋址64個I/O地址。IN和OUT等指令使用這種指令格式另一種格式是用A來定義I/O地址但是用d來選擇I/O中相應(yīng)的位。在這種方式中用了5位的
23、字長A來定義I/O地址,所以只能尋址32個I/O地址。CBI,SBI,SBIC和SBIS等指令使用這種指令格式。(7)狀態(tài)寄存器指令的清零和設(shè)置位,用s(3位)來定義所需進行清零和設(shè)置具體的位置,從而可以對8位的狀態(tài)寄存器中的任意一位進行清零或設(shè)置操作。這種指令格式被用在BCLR(清除標(biāo)志)和BSET(設(shè)置標(biāo)志)指令中。(8)最后一種指令中,只需要用到寄存器中的一位,所以使用d來定義寄存器,用b來選擇寄存器中的那一位。因為在設(shè)計中通用寄存器被定義為8位的所以b只需要3位就可以選擇寄存器8位中的相關(guān)位。BLD,BST,SBRC和SBRS等指令使用這種指令格式。3.4機器碼雖然指令集包括了92條指
24、令,但指令集中并沒有像通常認(rèn)為的那樣有92個不同的機器碼指令。事實上,這里僅有51條機器碼。這是因為有41條指令通用了其他指令的機器代碼。圖3.2列舉了這些共用機器代碼的指令。圖3 .2共用機器碼指令列表例如ADD指令與LSL指令共用了同一個機器代碼。LSL(邏輯左移)的操作為Rd(n+1) Rd(n+1);可以認(rèn)為是原操作數(shù)的自加,如1000_0001邏輯左移后是0000_0010,也就是1000_0001 ADD 1000_0001 =0000_0010的運算。ADD(不帶進位的加)的操作是RdRr +Rd。所以當(dāng)目的寄存器和源寄存器為同一個寄存器時ADD能夠執(zhí)行LSL的操作。如圖4.4.
25、2所示。圖3.3 ADD 和 LSI 機器碼BCLR(清除標(biāo)志位)、BSET(設(shè)置標(biāo)志位)、BRBC(狀態(tài)標(biāo)志清零跳轉(zhuǎn))和BRBS(狀態(tài)標(biāo)志置位跳轉(zhuǎn))這4個指令能夠選擇狀態(tài)寄存器8個標(biāo)志位中的1個作為操作數(shù)。在圖4.4.1中可以查到與這些指令等同的指令。如BCLR的指令是清楚一個標(biāo)志位,與其等同的指令CLI,CLT,CLH,CLS,CLV,CLN,CLZ,20 CLC,這些指令分別是對狀態(tài)寄存器8個標(biāo)志位中的第I,T,H,S,V,N,Z,C位清零。所以可以作為BCLR的等同指令。BSET此類似,其等同指令只是規(guī)定精確的操作范圍,這可以使得編寫程序的過程更簡便。BRBC和BRBS分別有9個細分等
26、同指令,這是因為有2條指令是對C標(biāo)志位進行測試。圖3.4指令機器碼圖3.4列舉了指令集中的51條機器碼。另外41條等同指令用括號列出在相應(yīng)指令的右側(cè)。通過這一節(jié)的分析可以知,只需要設(shè)計51條指令就可以完成92條指令的所有操作。這樣的設(shè)計體現(xiàn)了RISC微控制器有限簡單指令集的特點。第四章 流水指令系統(tǒng)4.1指令周期CPU每次取出,并執(zhí)行一條指令的時間叫做指令周期。圖5.1表示了一個指令周期的過程。在設(shè)計中,指令周期被分成了2個部分,取指令和執(zhí)行指令。在取指令階段,指令的機器碼被讀入指令寄存器。接著控制單元對指令解碼,確定需要執(zhí)行什么指令和需要調(diào)用什么操作碼。在執(zhí)行階段,按指令要求取得操作數(shù)并執(zhí)行
27、指令,在執(zhí)行完指令后寫回結(jié)果。4.1 指令周期為了更好的理解指令周期的概念,舉一個具體的例子加以說明。指令 ADD R18,R20 的意思是將寄存器R18中的數(shù)據(jù)與R20中的數(shù)據(jù)相加并將結(jié)果寫回到寄存器R18中。在取指令階段(第1個時鐘跳變時),ADD R18,R20的機器碼被讀入到指令寄存器中。在指令被取得后,CPU就得知了下一條要執(zhí)行的指令是ADD,操作數(shù)在R18和R20中。在執(zhí)行階段(第2個時鐘跳變時),R18和R20中的內(nèi)容被存入操作數(shù)寄存器A(ORA)和操作數(shù)寄存器B(ORB),這兩個寄存器直接與ALU相連。ALU對ORA和ORB執(zhí)行ADD操作,并將結(jié)果寫回到數(shù)據(jù)總線。在執(zhí)行階段的最
28、后(第3個時鐘跳變時),在數(shù)據(jù)總線中的結(jié)果被寫入了目的寄存器R18。這樣,一個指令周期就完成了。4.2 指令的流水傳遞為了體現(xiàn)流水指令的先進性,先做如下假設(shè)。假設(shè)一個指令周期有兩個部分組成(取指令Fetch和執(zhí)行指令Execute),那么順序的執(zhí)行一組連續(xù)的指令就會有以下的形式。Fetch1Execute1Fetch2Execute2Fetch3Execute3當(dāng)?shù)谝粭l指令被取出并執(zhí)行完成后,第二條指令接著被取出和執(zhí)行,以此類推,假設(shè)執(zhí)行一條指令需要兩個時鐘周期,那么執(zhí)行1000條指令需要2000個時鐘周期。這就是指令的順序傳遞。但當(dāng)指令流水傳遞時,系統(tǒng)的性能可以大幅度的提升。下圖展示了流水指
29、令的傳遞形式。在這種傳遞方式中取指令和執(zhí)行指令交替并行的執(zhí)行。也就是說在執(zhí)行當(dāng)前指令時去讀取下一條指令。圖4.2指令流水傳遞當(dāng)指令按流水方式傳遞時,在每一個時鐘周期都會有一個指令被執(zhí)行。這樣執(zhí)行一條指令只需要一個時鐘周期,按照上面的那個假設(shè),執(zhí)行1000條指令就僅僅只需要1000個時鐘周期,系統(tǒng)性能被成倍的加快。程序計數(shù)器(PC)的尋址過程就很好的體現(xiàn)了流水指令的思想。圖4.3體現(xiàn)了程序計數(shù)器中指令流水傳遞的過程。如圖,在RESET之后程序計數(shù)器被清零。當(dāng)遇到RESET之后的第一個時鐘跳變(T1)時,0地址中指令被讀取,與此同時程序計數(shù)器加1,指向地址1。當(dāng)遇到第二個時鐘跳變時(T2),0指令
30、被執(zhí)行,與此同時1指令被讀取。此時程序計數(shù)器加1,指向地址2。在第三個時鐘跳變延時(T3),0指令的結(jié)果按要求被寫回,與此同時1指令正在被執(zhí)行,2指令被讀入。此時PC指向地址3。也就時說當(dāng)?shù)贜條指令被執(zhí)行時,第N+1條指令被讀取,程序計數(shù)器PC指向第N+2條指令的地址。圖4.3 程序計數(shù)器中的流水指令5.3流水指令的沖突與解決當(dāng)執(zhí)行跳轉(zhuǎn)指令時,就不一定是順序取下條指令,而有可能要根據(jù)轉(zhuǎn)移條件去新的地址取指令,從而使指令流水線發(fā)生斷流。在這種情況下指令流水線需要重新讀入跳轉(zhuǎn)到的指令,并且需要丟棄跳轉(zhuǎn)指令之后已經(jīng)從內(nèi)存中讀入的指令。為了更好的理解這個思想,我們舉例說明。在圖5.3.1中展示了跳轉(zhuǎn)指
31、令對流水傳遞方式的影響。如圖,指令20需要跳轉(zhuǎn)到指令73。在T2時刻,跳轉(zhuǎn)指令20被執(zhí)行,與此同時指令21依然按照流水方式被讀取。在T3時刻指令22被讀入,PC指向要跳轉(zhuǎn)到的指令地址(指令73),此時指令21不是被執(zhí)行而是從流水線中被清洗掉。在T4時刻,指令73被讀取,此時指令22依然要從流水線中被清洗掉。最后在T5時刻,指令73被執(zhí)行。所以可以看出一個跳轉(zhuǎn)指令需要3個時鐘周期來完成。在這3個時鐘周期中第1個時鐘周期被用來向PC中裝填新的數(shù)值,而其后的兩個指令周期僅僅是處于等待狀態(tài),一直等待到新的指令被執(zhí)行。圖4.4流水指令傳遞中的跳轉(zhuǎn)在一些指令中,比如LD(間接取數(shù))和ST(間接存數(shù)),這些
32、指令需要兩24 個時鐘周期來執(zhí)行。這種情況也會影響到指令流水線的運行。圖5.3.2展示了2個時鐘周期指令對流水線的影響。如圖所示指令31是2個時鐘周期的指令。在T3時刻指令31被執(zhí)行,與此同時讀入指令32,程序計數(shù)器指(PC)向指令33。在T4時刻,依然執(zhí)行指令31,程序計數(shù)器(PC)不增加1,也不讀入新的指令。一直到T5時刻指令32才被執(zhí)行,與此同時指令33被讀入,PC指向指令34的地址。在這種情況下流水線需要保持一個時鐘周期。圖4.5流水指令傳遞中的2時鐘周期指令有一種情況,在一個程序中,如果必須等前一條指令執(zhí)行完畢后的結(jié)果,才能執(zhí)行后一條指令,那么這種數(shù)據(jù)相關(guān)指令的執(zhí)行需要特別加以討論。
33、有一段程序:LDI R18, $10 ; R18 = $10LDI R18, $20 ; R18 = $20INC R18 ; R18 = R18 + 1 = $21上面這段程序所描述的是,首先是將地址10送入R18寄存器中,然后又將地址20送入R18寄存器中。最后使地址R18自加1使地址20變?yōu)榈刂?1。但實際上當(dāng)執(zhí)行完上述程序后,最終的結(jié)果是11而不是21。之所以出現(xiàn)這種現(xiàn)象的原因是指令流水傳遞方式造成的。在這種方式中,第N+1條指令的操作數(shù)在第N條指令執(zhí)行的初期被存入操作數(shù)寄存器,而第N條指令執(zhí)行的結(jié)果將會在第N條指令執(zhí)行的末期寫回到目的寄存器。所以在上面這個程序中, 指令(LDI R1
34、8 $20)執(zhí)行的初期,當(dāng)其執(zhí)行結(jié)果20還未寫入到目的寄存器R18時,下一條指令(INC R18)已經(jīng)將原來存入R18中的操作數(shù)10讀入了操作數(shù)寄存器。因此,指令(INC R18)只是從目的寄存器中讀入了指令(LDI R18 $10)的執(zhí)行結(jié)果10,而不是指令(LDI R18 ,R20)的結(jié)果20。為了解決這個問題,需要用到一種叫做定向傳送的技術(shù)。如果上一條指令的目的寄存器被下一條指令當(dāng)作源寄存器使用時,ALU中的計算結(jié)果將被直接送入到操作數(shù)寄存器中。當(dāng)然這需要特別的控制邏輯用于沖突檢測和數(shù)據(jù)的定向傳送。第五章 微控制器結(jié)構(gòu)設(shè)計5.1微控制器結(jié)構(gòu)設(shè)計5.1.1引腳設(shè)計圖5.1微控制器引腳結(jié)構(gòu)圖
35、5.1是設(shè)計的微控制器的引腳結(jié)構(gòu)。如圖所示,微控制器有兩個輸入引腳和3個雙向I/O端口。每個I/O端口由8個單獨的I/O引腳組成。所以3個I/O端口一共組成了24個I/O引腳。CLOCK信號能夠直接驅(qū)動微控制器。RESET信號用于復(fù)位,當(dāng)RESET信號標(biāo)記為可用時,微控制器被初始化,這個過程無需CLOCK信號驅(qū)動。端口B,端口C和端口D都為8位,每一位都可以被設(shè)置為輸入或是輸出。引腳D7可以被用作外部中斷或外部時鐘中斷。引腳的具體實現(xiàn)方法和結(jié)構(gòu)詳細說明將會在端口模塊中進行討論。5.1.2微控制器邏輯設(shè)計圖5.2頂層模塊設(shè)計26 圖5.2是微控制器頂層模塊設(shè)計框圖,圖中簡化了總線結(jié)構(gòu),用每個框圖
36、代表了一個微控制器的功能模塊。在頂層模塊中包括了11個功能模塊,這些功能模塊被分成了3個大的部分取指令部分,執(zhí)行指令部分,和I/O端口。其中的一些模塊,像是指令寄存器和狀態(tài)寄存器設(shè)計思路比較清晰,且易于實現(xiàn)。但是有些模塊,像是ALU和控制單元,在這些模塊中包含了大量的控制信號,需要考慮的問題十分煩雜,對這些模塊的設(shè)計耗費了許多的時間,一度陷入了僵局。另外各功能模塊間的數(shù)據(jù)流向和總線結(jié)構(gòu)也需要認(rèn)真考慮,這也是微控制器設(shè)計的一大難點??偩€為各功能模塊間提供了連接。在這里基本上有兩種總線結(jié)構(gòu)直接總線連接和通用總線連接。直接總線結(jié)構(gòu)是指兩各功能模塊直接相連,它被用于特定的模塊連接。設(shè)計中有許多的直接總
37、線連接,例如:程序計數(shù)器(program couner)與程序存儲器(program rom)之間的連接;程序存儲器和指令寄存器之間的連接;寄存器文件和ALU之間的連接。直接總線連接的特點是不需要控制信號的驅(qū)動。通用總線被多個功能模塊所共享。在設(shè)計中數(shù)據(jù)總線被設(shè)計成唯一的通用總線。數(shù)據(jù)總線被通用目的寄存器,ALU,狀態(tài)寄存器,SRAM和所有的I/O端口所共享。寄存器文件只能夠從數(shù)據(jù)總線上接收數(shù)據(jù),但是其他所有的功能模塊都可以用數(shù)據(jù)總線接收或是發(fā)送數(shù)據(jù)。在微控制器中,控制信號被用來控制正確的數(shù)據(jù)流向,從而保證在每一個時刻數(shù)據(jù)總線只有唯一的一個數(shù)據(jù)來源。狀態(tài)總線被用來控制通用數(shù)據(jù)總線,它保證了正確
38、的數(shù)據(jù)源連接到數(shù)據(jù)總線上,并將其他的數(shù)據(jù)源置為高電阻使其與總線系統(tǒng)斷開。當(dāng)ALU作為數(shù)據(jù)源時,如果沒有控制邏輯來為數(shù)據(jù)的目的地產(chǎn)生使能信號,使數(shù)據(jù)可以被正確的接收,那么數(shù)據(jù)總線將被ALU產(chǎn)生的數(shù)據(jù)所淹沒,其余功能模塊將無法使用數(shù)據(jù)總線。下面我們將對整個微控制器系統(tǒng)進行概括的介紹。整個系統(tǒng)能夠被分為3個部分,取指令單元、執(zhí)行指令單元和I/O單元。取指令單元被用于取下一條指令,執(zhí)行指令單元被用于執(zhí)行當(dāng)前指令,I/O單元提供了微控制器與外界的連接。取指令單元和執(zhí)行指令單元組成了微控制器的中央處理單元。取指令單元的第一個功能模塊是程序計數(shù)器(PC)。在程序計數(shù)器中包含了下一條要執(zhí)行指令的地址,程序計數(shù)
39、器指向程序存儲器(program ROM),通過其中的地址在程序存儲器中查找相應(yīng)的指令。接著程序存儲器中的指令被送入到指令寄存器當(dāng)中??刂茊卧x取指令寄存器中的內(nèi)容并對指令解碼,接著控制單元標(biāo)記相應(yīng)的控制信號用于指令的執(zhí)行。以上所提及的功能模塊都是通過直接總線方式連接的。執(zhí)行指令單元被用來對大多數(shù)的指令進行執(zhí)行。通常情況下,為了執(zhí)行一條指令2個操作數(shù)被從寄存器文件中讀入到ALU。接著ALU對操作數(shù)進行運算并將運算結(jié)果送入到數(shù)據(jù)總線中。然后數(shù)據(jù)總線中的內(nèi)容(運算結(jié)果)被回存到寄存器文件中。同時ALU也產(chǎn)生狀態(tài)寄存器的標(biāo)志位并將其直接送入狀態(tài)寄存器中。完成所有這些操作過程需要1個時鐘周期。微控制器
40、微LD(間接取數(shù))和ST(間接存數(shù))指令設(shè)置了一個訪問內(nèi)存的通道,在微控制器中對RAM的直接尋址是不允許的,只有通過Z指針(寄存器R30)對RAM進行間接尋址。對RAM尋址時可以用間接尋址,帶預(yù)減的間接尋址和帶后加的間接尋址等方式,這些內(nèi)容在第四章指令介紹中進行過詳細討論。需要強調(diào)的是,在RAM和寄存器文件之間,讀取指令只能夠?qū)?shù)據(jù)進行傳27 送,在執(zhí)行指令時,Z指針中包含了RAM的地址,一個讀取操作通過數(shù)據(jù)總線將RAM中的數(shù)據(jù)送入通用目的寄存器,一個存儲操作將通用目的寄存器中的數(shù)據(jù)送入ALU,接著ALU將數(shù)據(jù)送入數(shù)據(jù)總線并存入RAM中。以上就是間接存取操作的過程,它們的具體功能實現(xiàn),將會在功
41、能模塊設(shè)計中詳細討論。為了實現(xiàn)取指令和執(zhí)行指令,這兩個過程的流水操作,內(nèi)存單元采用了程序和數(shù)據(jù)分開存放的結(jié)構(gòu),在圖6.2.1中可以看到,程序被存入了程序存儲器ROM,而數(shù)據(jù)被存放在數(shù)據(jù)存儲器RAM。這種結(jié)構(gòu)的先進性在于容易實現(xiàn)下一條指令的預(yù)先讀取,從而使指令的流水傳遞成為可能。在設(shè)計中RAM的初始值被設(shè)置為0。I/O單元中的功能模塊都有大量的控制寄存器。在這些模塊之間,數(shù)據(jù)通過通用數(shù)據(jù)總線被接收或發(fā)送。圖6.2.2羅列了所有的I/O控制寄存器和它們相應(yīng)的地址。IN指令和OUT指令的實質(zhì)就是在這些控制寄存器和通用目的寄存器之間傳送數(shù)據(jù)。下圖中灰色部分的控制寄存器($00-$1F)能夠直接被指令S
42、BI和CBI(對I/O相應(yīng)的位設(shè)置/清零)按位操作bit-accessible。指令SBIS和SBIC(I/O寄存器置位/清零既條)同樣也可以直接檢測這些寄存器中的每一個信號位。在設(shè)計中,列表中灰色部分的控制寄存器全部被設(shè)計成位了I/O端口控制寄存器。需要強調(diào)一點的是,PINB,PINC和PIND并不是真正的寄存器,它們只有在讀入操作數(shù)時被調(diào)用,它們可以被理解為讀入物理信號的外部引腳。圖5.3 I/O單元地址空間5.1.3寄存器間的數(shù)據(jù)傳送微控制器的設(shè)計中包括了許多寄存器,有指令寄存器(IR),指令備份寄存器(IBR),程序計數(shù)器(PC),通用目的寄存器(GPR),內(nèi)存地址寄存器(MAR),所
43、有的I/O控制寄存器等,則這里程序計數(shù)器PC被當(dāng)成了一個特殊的寄存器。28 其中大部分的寄存器可以在頂層模塊框圖中找到,而另一些寄存器則被設(shè)計在了相應(yīng)的功能模塊之中。整個系統(tǒng)的工作就是使數(shù)據(jù)在這些寄存器之間進行傳遞,一些數(shù)據(jù)不需要預(yù)先處理就可以進行傳遞,而另一些數(shù)據(jù)在處理后才能傳入下一個寄存器,也就是被這些寄存器間的組合邏輯進行處理。所以說,數(shù)據(jù)怎樣被傳送;數(shù)據(jù)在傳送前怎樣被預(yù)先處理;以及不同數(shù)據(jù)在寄存器中的含義;以上的問題決定了設(shè)計的芯片是否是一個基于RISC結(jié)構(gòu)的微控制器。也就是說,一系列的寄存器間傳送形成了微控制器的功能。圖5.4形象的表達了寄存器間傳送這個概念,可以認(rèn)為從圖中的一個寄存
44、器傳送數(shù)據(jù)到另一個寄存器,期間經(jīng)過了許多次組合邏輯處理。圖5.4寄存器間傳送圖5.5寄存器列表現(xiàn)在對寄存器傳送這個概念舉例說明。例如,狀態(tài)寄存器能夠直接將其內(nèi)容送入通用目的寄存器,而不需要對其內(nèi)容進行預(yù)先處理,這就是寄存器直接傳送而無需組合邏輯參與的形式。然而,當(dāng)Z指針中的數(shù)值需要預(yù)先減1再送入內(nèi)存地址寄存器(MAR)時,在這種情況下的組合邏輯就是減法器。當(dāng)對兩個通用寄存器進行AND操作時,在將結(jié)果寫回到目的寄存器前,將會有兩個寄存器通過組合邏輯的處理。在設(shè)計中存儲器(程序存儲器和數(shù)據(jù)存儲器)可以被看作時一種組合邏輯,程序計數(shù)器(PC)通過程序存儲器的處理找到指令并將數(shù)據(jù)傳遞到指令寄存器中。指
45、令寄存器是通過PC的尋址從程序存儲器中讀入指令。綜上所述,微控制器設(shè)計的實質(zhì)就是就是設(shè)計出所有的相關(guān)邏輯單元并用寄存器將其相互連接起來。以上這些叫做系統(tǒng)的數(shù)據(jù)通路??刂菩盘柋挥脕頉Q定寄存器間數(shù)據(jù)傳遞的發(fā)生??刂菩盘栍煽刂茊卧獊懋a(chǎn)生,控制單元與數(shù)據(jù)通路組成了微控制器。了解系統(tǒng)中的寄存器是十分有必要的,下圖羅列了所有的功能模塊和與其有關(guān)的寄存器。信號CLK被作為所有寄存器的時鐘信號,CLRN被作為所有寄存器的重置信號,當(dāng)CLRN被標(biāo)記為低電平時,所有的寄存器將被清零。5.2數(shù)據(jù)通路設(shè)計5.2.1 功能模塊總攬微控制芯片包括兩個部分,一部分是數(shù)據(jù)通路,另一部分是控制單元。 本章主要討論數(shù)據(jù)通路中各功
46、能模塊的設(shè)計思路和實現(xiàn)方法,下一章將重點對控制單元的設(shè)計加以研究。5.6圖展示了微控制芯片中除了控制單元以外的所有功能模塊,下面各節(jié)將會按照5.6圖所羅列的順序?qū)γ總€模塊的進行詳細討論。圖5.6微控制器中各模塊5.2.2 程序記數(shù)器(Program Counter).圖5.7程序計數(shù)器結(jié)構(gòu)圖圖5.7表示了程序計數(shù)器的組成原理。為了保證程序能夠連續(xù)的執(zhí)行下去,微控制器需要不斷的通過程序記數(shù)器(PC)來確定下一條指令的地址。在程序執(zhí)行時,需要將程序中存儲第一條指令內(nèi)存單元地址送入PC(具體實現(xiàn)時是存放在程序計數(shù)器中的一個9位地址寄存器),此時PC的內(nèi)容是程序存儲器的地址,在該地址中對應(yīng)存放的是程序
47、的第一條指令。程序控制器的任務(wù)就是要保證指向下一條執(zhí)行指令的地址。因為大多數(shù)指令都是按照順序來執(zhí)行的,所以在程序計數(shù)器中,地址改變的過程通常只是在每個時鐘跳變時對PC加1。但是當(dāng)遇到轉(zhuǎn)移指令時,下一個需要被執(zhí)行的指令將由當(dāng)前的轉(zhuǎn)移指令來決定,這就需要程序計數(shù)器不僅能夠順序的選取指令,還要能夠跳躍的選取指令。為了能夠完成上述功能,在程序計數(shù)器中設(shè)置了堆棧STACK來保存中斷請求和跳轉(zhuǎn)指令所返回的地址,設(shè)置了備用寄存器(PCB),用來保存PC中每次最新讀取到的地址,PCB被用于帶偏移量的尋址。在以下的三種情況下程序計數(shù)器中的地址不是按順序取得,而是通過讀入一個新的數(shù)值得到。首先,當(dāng)遇到帶條件或是不
48、帶條件的跳轉(zhuǎn)指令時;其次,當(dāng)遇到中斷請求時;最后,當(dāng)遇到子程序返回或是中斷服務(wù)返回時。在第五章對指令的流水傳遞討論中,我們得知,當(dāng)CPU正在執(zhí)行第N條指令時,程序計數(shù)器已經(jīng)指向了第N+2條指令的地址。與此同時指令寄存器讀取第N1條指令。為了描述方便,可以認(rèn)為PC就是程序計數(shù)器中指令的地址(在對程序計數(shù)器功能模塊的編寫中,我設(shè)置了一個9位的信號量PC,事實上程序計數(shù)器讀入的指令地址,都是暫存在這個PC信號中)。于是PC+1就是指下一個要執(zhí)行指令的地址。假設(shè)PC中暫存的是第N+2條指令的地址,程序計數(shù)器中的另一個寄存器程序地址備份寄存器(PCB)便存入N+1指令的地址。所以當(dāng)有跳轉(zhuǎn)指令時,PC的新
49、地址就是PCB加上跳轉(zhuǎn)偏移量(offset);而無跳轉(zhuǎn)指令時,PC的新地址是PC+1。以上的設(shè)計實現(xiàn)了,程序寄存器的順序?qū)ぶ放c跳31 轉(zhuǎn)尋址。當(dāng)有中斷請求時,程序計數(shù)器需要讀入中斷向量的地址。這里一共設(shè)計了3個中斷向量,按照其中斷優(yōu)先級被分別存放在程序存儲器中的地址$000到$002。如圖5.8。使用RJMP(相對跳轉(zhuǎn)指令)可以轉(zhuǎn)入中斷服務(wù)程序(ISR),這些中斷服務(wù)程序的入口地址存放在中斷向量表中。所以當(dāng)響應(yīng)一個中斷請求時,PC首先讀入中斷向量的地址,然后CPU執(zhí)行相應(yīng)中斷向量地址中的指令,此時就轉(zhuǎn)入了中斷服務(wù)程序。圖5.8 中斷向量表堆棧被用于存儲子程序調(diào)用返回的地址和中斷請求。程序計數(shù)器
50、中設(shè)計了4層的后進先出的堆棧(STACK0到STACK3)結(jié)構(gòu)。當(dāng)CPU響應(yīng)一個子程序調(diào)用或是中斷請求時,返回地址被壓入STACK0,而原先堆棧中的內(nèi)容被壓入到更深一層的堆棧中去。例如,STACK0的內(nèi)容被壓入STACK1,STACK1被壓入STACK2以此類推。這個過程被叫做壓棧操作。當(dāng)子程序調(diào)用或是中斷請求返回時,PC從STACK0中讀出地址,而其它棧中的地址相應(yīng)的向上傳遞一層。例如,STACK3中的數(shù)值送入到STACK2中,STACK2中的數(shù)值送入到STACK1中,以此類推。這個過程叫做出棧操作。當(dāng)子程序調(diào)用或是中斷請求多于4層時,最早被壓入堆棧的返回地址將會丟失。所以需要規(guī)定中斷嵌套的
51、深度為4層。子程序調(diào)用的返回地址時PCB,但是中斷請求的返回地址卻是PCB-1。為了更好的解釋這個現(xiàn)象,舉例一個小程序幫助說明。當(dāng)在執(zhí)行 $21 rcall make 指令時,PCB中的數(shù)值變?yōu)?22并將其壓入堆棧中。PC讀入數(shù)值$50,并且CPU開始執(zhí)行名為MAKE的子程序。當(dāng)在MAKE子程序中執(zhí)行到RET指令時,堆棧中的內(nèi)容$22被讀入到PC中,這正是 $21 rcall make 指令下一條指令的地址?,F(xiàn)在我們假設(shè),當(dāng)在執(zhí)行$21指令時,CPU響應(yīng)了超時中斷請求。此時存入32 PCB中的數(shù)值依然時$22,并被壓入了堆棧中。在超時中斷被響應(yīng)后,PC讀入中斷向量地址($02),CPU開始執(zhí)行
52、 $02 RJMP TIMER 指令,PC讀入$80,CPU開始執(zhí)行名為TIMER的子程序。當(dāng)在TIMER子程序中遇到RETI指令時,返回地址從堆棧中彈出到PC。也就是先前壓入堆棧中PCB的值$22。那么下一條要執(zhí)行的指令就是 $22 DEC R26,這是一個錯誤的順序,$21 RCALL MAKE指令因為剛才的中斷而還沒有被執(zhí)行到。所以由以上討論得出了一個結(jié)論子程序調(diào)用返回的地址是PCB,而中斷請求返回地址是PCB-1。圖5.9程序計數(shù)器模塊圖5.9展示了在程序計數(shù)器模塊中使用的信號量。PC,PCB,和4個堆棧(STACK0到STACK3)是9位字長的。所以程序計數(shù)器可以對512個單元進行尋
53、址。程序計數(shù)器于程序存儲器直接相連。OFFSET信號從控制單元中接收跳轉(zhuǎn)指令的偏移地址。信號EN一個使能信號,作用于所有的寄存器,像是PC,PCB,和STACK,只有當(dāng)EN信號被標(biāo)記為可用時(當(dāng)EN=1時),程序計數(shù)器的所有操作才開始被執(zhí)行。這個信號確保了2個時鐘周期指令的流水執(zhí)行。ADDOFFSET信號被用于跳轉(zhuǎn)標(biāo)記,當(dāng)它被標(biāo)記為可用時,PC就讀入PCB+offset,從而達到了程序計數(shù)器跳轉(zhuǎn)尋址的目的。VEC2信號是外部中斷請求標(biāo)記,當(dāng)VEC2被標(biāo)記為可用時,PC讀入中斷向量2($01)與此類似,VEC4信號被用于標(biāo)記超時中斷,當(dāng)VEC2標(biāo)記為可用時PC讀入中斷向量4($02)。PUSH信
54、號被用于人棧操作,PULL信號被用于出棧操作,以上幾個信號的使用完成了程序計數(shù)器的中斷請求和中斷地址返回的功能。當(dāng)以上信號都沒有被標(biāo)記為可用時,PC就執(zhí)行自加1操作,也就是程序計數(shù)器的順序?qū)ぶ贰?.2.3程序存儲器圖5.10 程序存儲器結(jié)構(gòu)33 程序存儲器(Program ROM)被用來儲存微控制器的程序。一個程序由許多條指令組成,被用來完成一個特別的任務(wù)。圖5.10展示了程序存儲器的結(jié)構(gòu),因為所有的指令被設(shè)置成了固定的16位,所以ROM也被設(shè)計成16位字長,從而使得每條指令都可以在單個時鐘周期內(nèi)被讀入到指令寄存器中。程序存儲器的大小被定義為512個單元,這就意味著該存儲器可以儲存512條指令
55、。為了能對512個單元尋址,程序計數(shù)器需要用9位字長來定義程序存儲器的地址。圖5.11程序存儲器模塊圖5.11展示了程序存儲器模塊使用的信號量。程序計數(shù)器通過直接總線與ROM相連,并用9位字長的地址來對ROM進行尋址,當(dāng)找到相應(yīng)的地址時,地址中的指令被送入指令寄存器。與程序計數(shù)器不同的是,程序存儲器不需要時鐘信號的驅(qū)動。如圖7.3.2 PC信號被用于存放程序存儲器的地址。INSTRUCTION信號有16位字長,用于存放尋址后地址中的相應(yīng)指令,以便下一步向指令寄存器傳送。5.2.4指令寄存器指令寄存器(IR)被用來存放指令,它通過16位的直接總線與程序存儲器相連,并從中讀取指令。圖7.4.1展示
56、了指令寄存器模塊中的信號量。只有當(dāng)EN信號標(biāo)記為可用時,指令寄存器才會將新的指令從程序存儲器中讀入,接著指令被送入控制單元去解碼,定義成立即數(shù)的位(指令中03,811位)被送去ALU參與運算。定義為目的寄存器(47位)和源寄存器(03位)的位被送入通用目的寄存器進行尋址。對指令格式的詳細討論可以查閱第四章。需要強調(diào)一點的是,在IR中暫存的指令并不是當(dāng)前正在被執(zhí)行的指令而是下一條需要執(zhí)行的指令。這個設(shè)計思想保證了在當(dāng)前指令執(zhí)行時,控制單元對下一條執(zhí)行指令解碼的要求。從而實現(xiàn)了前幾章中提到的流水指令結(jié)構(gòu)執(zhí)行當(dāng)前指令的同時讀取下一條指令。圖5.12指令寄存器模塊圖5.12展示了指令寄存器模塊使用的信
57、號。在指令寄存器模塊中只有EN信號被標(biāo)記位可用時,IR信號才能從程序存儲器中讀入數(shù)據(jù)。IMM_VALUE信號用于向ALU傳送立即數(shù),RD,RR信號分別用于存放目的寄存器和源寄存器的地址。5.2.5通用目的寄存器RISC 結(jié)構(gòu)的微處理器一般都有大量的通用目的寄存器.在這次設(shè)計包括了32個8位的通用寄存器,使用5位字長地址指令。查表Z指針需要調(diào)用R30寄存器。下圖展示了通用寄存器(R16到R31)的結(jié)構(gòu)。圖5.13通用寄存器結(jié)構(gòu)通用寄存器中目的寄存器和源寄存器與ALU保持連通。通用寄存器可以直接被指令寄存器尋址。數(shù)據(jù)總線直接與通用寄存器相連,當(dāng)WR_REG信號標(biāo)記可用時,數(shù)據(jù)可以通過數(shù)據(jù)總線寫入到目的寄存器中。通用寄存器和RAM通過地址總線相連,R30寄存器不僅能夠被用于通用寄存器,也可以被用于Z指針對RAM尋址。RAM的起始地址是$60,但是目標(biāo)設(shè)備需要RAM的起始地址是$0,所以,地址總線中傳遞的數(shù)據(jù)是Z指針中的數(shù)值(地址)減去$60。當(dāng)進行帶預(yù)減的間接尋址時,需要將Z指針中的數(shù)值減$61再送入數(shù)據(jù)總線。下圖羅列了通用寄存器模塊使用的信號:圖5.14通
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木聚糖酶產(chǎn)業(yè)分析報告
- 《藥事管理與法規(guī)》課程標(biāo)準(zhǔn)
- 剪發(fā)屬于合同范本
- 勞務(wù)合同范本定制
- 個人原因離職的辭職報告
- 各類模具加工合同范本
- 業(yè)務(wù)印章自查報告
- 接觸網(wǎng)中級工考試模擬題(附答案)
- 二手房房買賣合同范本
- 單位用工合同范本6
- 焦慮自評量表(SAS)
- 患者轉(zhuǎn)運意外應(yīng)急預(yù)案
- 大學(xué)生國防教育教案第四章現(xiàn)代戰(zhàn)爭
- 政治審查表(模板)
- AS9100航空航天質(zhì)量管理體系-要求培訓(xùn)教材
- 第2課+古代希臘羅馬【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 電工儀表與測量(第六版)中職技工電工類專業(yè)全套教學(xué)課件
- 六年級道法下冊背誦知識點
- 2024水利五大員知識題庫及答案
- TCARM 002-2023 康復(fù)醫(yī)院建設(shè)標(biāo)準(zhǔn)
- 部編版一年級語文下冊全冊教案表格(教學(xué)反思二次備課)
評論
0/150
提交評論