專利名稱:一種新型risc流水線微控制器構(gòu)架及其操作方法
技術(shù)領(lǐng)域:
本發(fā)明總體上屬于半導體集成電路設(shè)計領(lǐng)域的微控制器(MCU)領(lǐng)域,具體為執(zhí)行精簡指令集的微控制器。
背景技術(shù):
隨著深亞微米CMOS集成電路生產(chǎn)工藝的不斷進步,目前技術(shù)上已經(jīng)可以把復雜的微控制器(MCU)內(nèi)核集成在一塊芯片上,同時留有足夠的硅片面積用于實現(xiàn)復雜的存儲器和外設(shè)邏輯,過去用于高端32位和64位CPU的設(shè)計方法和構(gòu)架現(xiàn)在已經(jīng)能夠有效的用于低價8位微控制器系統(tǒng)。利用這些功能強大而且便宜的微控制器,全系統(tǒng)的集成度不斷提高。硬件結(jié)構(gòu)可執(zhí)行更復雜高效的程序,集成更多的硬件功能。
近年來,微控制器的精簡指令集(RISC)結(jié)構(gòu)獲得了廣泛的普及。雖然RISC處理器應該具有什么特征還有不同的看法,但是各種RISC結(jié)構(gòu)都有一些特征(1)多數(shù)指令是單周期指令,以便于實現(xiàn)結(jié)構(gòu)流水化;(2)獨立而且簡單的加載和存儲指令都是雙周期指令;(3)指令解碼通常都是硬連線實現(xiàn)而不是微解碼,以便加快執(zhí)行速度;(4)多數(shù)指令具有固定格式,以簡化指令編碼和譯碼;(5)較小的指令集和少數(shù)幾種尋址模式;(6)數(shù)據(jù)通道流水線化,使處理過程高度并行;(7)采用大容量高速寄存器堆(或稱為寄存器文件),盡量避免與速度較低的系統(tǒng)RAM交換數(shù)據(jù)。
RISC微控制器的這些特征也帶來了一些本質(zhì)的缺陷和不足(1)指令集不可擴展;(2)流水線段及級數(shù)較多,帶來了流水線段數(shù)據(jù)相關(guān)性判據(jù)的復雜性,有時甚至影響到流水線數(shù)據(jù)吞吐率;(3)數(shù)據(jù)存儲器與程序存儲器復用,沒有專門的寄存器堆,或者是特殊寄存器堆與通用寄存器堆沒有分開,影響了對這些寄存器的訪問速度,限制了運行速度的提高;(4)沒有采用可測性設(shè)計(DFT),在應用中無法保證產(chǎn)品的制造生產(chǎn)質(zhì)量。
現(xiàn)在有很多公司生產(chǎn)RISC微控制器,如Microchip、Motorola、NEC、Hitachi、Atmel、Holtek等。雖然Texas Instruments公司的TMS370Cx1x系列8位微控制器并沒有利用RISC構(gòu)架,但提供了可用于RAM和通用寄存器的一組RAM模塊,Motorola的8位微控制器MC6805也有類似的雙用途RAM。Microchip公司有PIC16C5X、7X和9X系列,使用了Harvard結(jié)構(gòu),數(shù)據(jù)和程序(指令)使用不同的存儲器和總線;指令處理部分采用了二級指令流水線,同時處理二條指令;系統(tǒng)RAM兼作寄存器組,并不存在真實的內(nèi)部寄存器。由于所有存儲器最終都由靜態(tài)RAM實現(xiàn),在運行大量涉及寄存器操作的程序時會使性能大幅度降低。為了加快運行速度,常常采用很大的數(shù)據(jù)存儲器,甚至達16M字節(jié),有一些微控制器采用SRAM與由觸發(fā)器實現(xiàn)的內(nèi)部寄存器共存的方法。這樣都不可避免的增大了芯片面積和造價。
快速設(shè)計周期在微控制器系統(tǒng)開發(fā)中是非常重要的,而且軟件在計算機系統(tǒng)里有著不容置疑的重要地位。微控制器系統(tǒng)的使用跟軟件編程與硬件設(shè)計之間的規(guī)格接口密切相關(guān),這個接口就是微控制器的指令集。指令集必須完備,使所有可計算的功能都在合理的程序空間內(nèi)得以實現(xiàn)。而且指令集必須是高效的,以便使常用的功能可以用相對少的指令實現(xiàn)。
因此,提供給應用軟件開發(fā)的微控制器系統(tǒng)必須有一個完備而高效的指令集。
發(fā)明內(nèi)容
一個哈佛型結(jié)構(gòu)的微控制器構(gòu)架,其結(jié)構(gòu)包括程序總線、數(shù)據(jù)總線、程序存儲器、通過程序總線連接到程序存儲器的的指令譯碼器、數(shù)據(jù)隨機存儲器(RAM)、寄存器堆、通用算術(shù)邏輯單元(ALU)和地址總線等,這些部件是通過微碼操作控制結(jié)構(gòu)實現(xiàn)的;它還包括一個二級四段流水線結(jié)構(gòu),由四相時鐘驅(qū)動工作,每一段流水線在對應時鐘相內(nèi)完成功能,它包括取址和譯碼裝置,用于從程序存儲器取出指令并進行譯碼操作;讀寄存器裝置,用于從工作寄存器和數(shù)據(jù)寄存器讀出數(shù)據(jù);算術(shù)邏輯運算裝置(ALU),用于算術(shù)和邏輯運算;回寫寄存器及內(nèi)部中斷和堆棧處理裝置,用于將ALU操作結(jié)果回寫到寄存器里,同時進行內(nèi)部中斷和堆棧處理,以備下一級流水線使用;時鐘發(fā)生器,用于為上述裝置提供四相時鐘信號,同時產(chǎn)生所述二級四段流水線結(jié)構(gòu)所需的同步時鐘信號。
根據(jù)本發(fā)明第1方面的微控制器構(gòu)架,所述中斷處理和內(nèi)部堆棧處理裝置可以自動進行壓棧和出棧處理。
根據(jù)本發(fā)明第2方面的微控制器構(gòu)架,所述取址和譯碼裝置包括指令譯碼器、多路器、程序計數(shù)器、指令存儲器;根據(jù)本發(fā)明第3方面的微控制器構(gòu)架,所述讀寄存器裝置包括數(shù)據(jù)存儲器、工作寄存器;根據(jù)本發(fā)明第4方面的微控制器構(gòu)架,所述回寫寄存器及內(nèi)部中斷和堆棧處理裝置包括中斷處理器、內(nèi)部堆棧、數(shù)據(jù)存儲器、工作寄存器;根據(jù)本發(fā)明第1到5方面的微控制器構(gòu)架,所述指令譯碼器的輸出指令碼分成3類寄存器操作類、位操作類和立即數(shù)類。
根據(jù)本發(fā)明第1方面的微控制器構(gòu)架,還包括一套指令集,該指令集屬于精簡指令集,包含38條指令。
根據(jù)本發(fā)明第7方面的微控制器構(gòu)架,其中所述指令集包含一條乘法指令multAf。該指令有自己的機器操作碼,指定了第一和第二寄存器。指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一和第二寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。
根據(jù)本發(fā)明第8所述的控制器,其指令集中包含一條程序執(zhí)行分支控制指令jumpf。該指令有自己的機器操作碼。指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,改變程序計數(shù)器的值,采用立即數(shù)相對尋址方式控制指令的執(zhí)行順序,在寄存器堆的頁內(nèi)跳轉(zhuǎn)。
根據(jù)本發(fā)明第9方面的微控制器構(gòu)架,所述指令集包括6條運算指令,每一條指令都有各自的機器操作碼,指定了第一和第二寄存器。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一和第二寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。這一類指令有addAf、andAf、iorAf、subAf和xorAf。
根據(jù)本發(fā)明第10方面的微控制器構(gòu)架,包括4條位操作指令,每一條指令都有各自的機器操作碼,指定了一個寄存器。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,清除或置位寄存器的所有位或指定位。這一類指令有clr、clrA、bitclr和bitset。
根據(jù)本發(fā)明第11方面的微控制器構(gòu)架,包括1條求補指令com,該指令有獨立的機器操作碼,指定了第一和第二寄存器。該指令執(zhí)行時,根據(jù)標志位的值把結(jié)果輸出存回上述第一或第二寄存器。
根據(jù)本發(fā)明第12方面的微控制器構(gòu)架,包括4條遞增和遞減指令,每一條指令都有各自的機器操作碼,指定了第一和第二寄存器。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。這一類指令有dec、decsz、inc和incsz。
根據(jù)本發(fā)明第13方面的微控制器構(gòu)架,包括3條數(shù)據(jù)移動指令,每一條指令都有各自的機器操作碼,指定了一個或二個寄存器。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,把一個寄存器的內(nèi)容或立即數(shù)保存到另一個寄存器中。這一類指令有mov、movAf和movlA。
根據(jù)本發(fā)明第14方面的微控制器構(gòu)架,包括1條空操作指令nop,該指令有獨立的機器操作碼。該指令執(zhí)行時,不執(zhí)行任何操作。
根據(jù)本發(fā)明第15方面的微控制器構(gòu)架,包括2條移位指令,每一條指令都有各自的機器操作碼,指定了第一和第二寄存器。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。這一類指令有rol和ror。
根據(jù)本發(fā)明第16方面的微控制器構(gòu)架,包括1條交換指令swap,該指令有獨立的機器操作碼,指定了第一和第二寄存器。該指令執(zhí)行時,交換第一寄存器高位和低位的值,再把操作的輸出存回上述第一或第二寄存器。
根據(jù)本發(fā)明第17方面的微控制器構(gòu)架,包括4條程序執(zhí)行分支控制指令,每一條指令都有各自的機器操作碼。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,改變程序計數(shù)器的值,控制指令的執(zhí)行順序。這一類指令有btsc、btss、bsf和goto。
根據(jù)本發(fā)明第18方面的微控制器構(gòu)架,包括5條立即數(shù)運算指令,每一條指令都有各自的機器操作碼,指定了一個寄存器。指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)把寄存器的內(nèi)容與立即數(shù)相運算;(II)把運算結(jié)果保存回寄存器。這一類指令有AddlA、andlA、iorlA、sublA和xorlA。
根據(jù)本發(fā)明第19方面的微控制器構(gòu)架,包括4條子程序調(diào)用及返回指令,每一條指令都有各自的機器操作碼。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,能夠自動地進行壓棧和出棧出操作,把當前程序計數(shù)器的值壓入堆棧,或從堆棧頂部彈出當前地址,裝載到程序計數(shù)器中。這一類指令有call、return、retie和retlA。
根據(jù)本發(fā)明第20方面的微控制器構(gòu)架,包括2條看門狗控制指令指令,每一條指令都有各自的機器操作碼。這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,能夠重置看門狗的值。這一類指令有clrwdt和sleep。
根據(jù)本發(fā)明第1方面的微控制器構(gòu)架,其數(shù)據(jù)存儲器包括特殊寄存器和通用寄存器,利用地址映射電路把分布在不同的區(qū)和數(shù)據(jù)空間的特殊寄存器和通用寄存器的物理地址映射到連續(xù)的物理地址上。
根據(jù)本發(fā)明第1方面的微控制器構(gòu)架,所述微控制器構(gòu)架包括中斷處理和內(nèi)部堆棧處理方式,在調(diào)用子程序或中斷處理時自動進行壓棧和出棧操作,實現(xiàn)中斷的高效處理。
一種用于操作微控制器構(gòu)架的方法,所述方法包括下述步驟時鐘發(fā)生器同時產(chǎn)生四相時鐘信號,提供給所述二級四段流水線結(jié)構(gòu);在Q1時鐘周期,從程序存儲器取出指令并進行譯碼操作;在Q2時鐘周期,從工作寄存器和數(shù)據(jù)寄存器讀出數(shù)據(jù);在Q3時鐘周期,根據(jù)譯碼操作對所述數(shù)據(jù)進行算術(shù)和邏輯運算;在Q4時鐘周期,將ALU操作結(jié)果回寫到寄存器里,同時進行內(nèi)部中斷和堆棧處理,以備下一級流水線使用。
根據(jù)本發(fā)明第24方面的方法,還包括在所述第四時鐘周期進行中斷處理的操作。
根據(jù)本發(fā)明第25方面的方法,還包括在所述第一時鐘周期判斷是否在進行中斷處理的操作。
本發(fā)明是一種新型RISC流水線微控制器構(gòu)架及實現(xiàn),該微控制器構(gòu)架的指令集為精簡指令集(RISC),數(shù)據(jù)總線寬度為8位,采用兩級流水線并行處理和執(zhí)行指令,數(shù)據(jù)存儲采用RAM方式實現(xiàn),作為通用寄存器堆,有176字節(jié),用存儲器編譯器設(shè)計,其物理地址是按順序從8h’00到8’h5f,需要用一個映射表映射到邏輯地址上。另外還有80字節(jié)的特殊寄存器用于各種中斷和狀態(tài)位的存儲,其物理地址也要映射到邏輯地址上。這樣通用寄存器堆和特殊寄存器使用的邏輯地址正好達到256字節(jié),完全發(fā)揮8位地址的容量。
在8位微控制器芯片領(lǐng)域,大多數(shù)芯片的指令集復雜,結(jié)構(gòu)繁瑣,運行速度較低,指令可擴展性較差,編譯器復雜等特點,難以滿足高速控制和通信的要求。為提高8位微控制器運行速度,簡化指令并使其具有可擴展性,實現(xiàn)精簡系統(tǒng)結(jié)構(gòu),簡化編譯器的目的,本發(fā)明提供一種可靠的而有效的系統(tǒng)構(gòu)架,采用38條精簡指令,兩級流水線,哈佛型結(jié)構(gòu),達到了運行速度快,指令簡單,系統(tǒng)構(gòu)架明晰,編譯器簡單的目的,完全可以滿足高速控制和實時通信的要求。
本發(fā)明微控制器構(gòu)架的核心結(jié)構(gòu)是一個2級4段流水線。指令寄存器在譯碼時把指令分成3大類,產(chǎn)生3個相應的輸出,算術(shù)邏輯單元ALU在四相時鐘的第3相Q3內(nèi)完成算術(shù)和邏輯運算。
由于本發(fā)明采用全同步設(shè)計,在設(shè)計流程中時序收斂比較快速,并且各階段之間沒有時序上的耦合,在前端設(shè)計和版圖設(shè)計階段引入了時鐘樹調(diào)整方法,大大提高了芯片運行速度。為了在把本發(fā)明微控制器構(gòu)架最終應用于實際產(chǎn)品時能夠檢測出芯片的制造缺陷,設(shè)計時引入了DFT設(shè)計方法,測試結(jié)構(gòu)用掃描鏈實現(xiàn)全掃描,對電路的所有觸發(fā)器都進行掃描測試。在系統(tǒng)設(shè)計階段,必須采用同步設(shè)計和純組合電路設(shè)計,盡量避免電平鎖存器設(shè)計。
圖1是本發(fā)明微控制器構(gòu)架的系統(tǒng)框圖。
圖2是流水線基本電路。
圖3是本發(fā)明微控制器構(gòu)架的應用環(huán)境及外圍模塊資源配置圖。
圖4是地址映射關(guān)系圖。
圖5是本發(fā)明微控制器構(gòu)架內(nèi)核。
圖6是本發(fā)明中的算術(shù)邏輯運算單元。
圖7是實現(xiàn)所提出指令集的四個流水線段原理圖。
圖8是向左循環(huán)移動指令(rlf)的具體操作說明。
圖9是向右循環(huán)移動指令(rrf)的具體操作說明。
圖10是二級四段流水線結(jié)構(gòu)框圖。
具體實施例方式
下面詳細描述與微控制器構(gòu)架功能特征相關(guān)的硬件細節(jié)。
如圖10是一個二級四段流水線結(jié)構(gòu),由四相時鐘驅(qū)動工作,每一段流水線在對應時鐘相內(nèi)完成功能,它包括取址和譯碼裝置80,用于從程序存儲器2取出指令并進行譯碼操作,它包括指令譯碼器32、多路器75、程序計數(shù)器27、程序存儲器2;讀寄存器裝置,用于從工作寄存器36和數(shù)據(jù)寄存器1讀出數(shù)據(jù),它包括數(shù)據(jù)存儲器1、工作寄存器36;算術(shù)邏輯運算裝置(ALU 37)82,用于算術(shù)和邏輯運算;回寫寄存器及內(nèi)部中斷和堆棧處理裝置83,用于將ALU操作結(jié)果回寫到寄存器里,同時進行內(nèi)部中斷和堆棧處理,以備下一級流水線使用,它包括中斷處理器28、內(nèi)部堆棧29、數(shù)據(jù)存儲器1、工作寄存器36;時鐘發(fā)生器14,用于為上述裝置提供四相時鐘信號,同時產(chǎn)生所述二級四段流水線結(jié)構(gòu)所需的同步時鐘信號。
根據(jù)上述框圖10,本發(fā)明提供了一種操作二級四段流水線結(jié)構(gòu)的方法。在流水線工作時,時鐘發(fā)生器把外部時鐘74分成四相時鐘,分別為Q1(第一時鐘),Q2(第二時鐘),Q3(第三時鐘),Q4(第四時鐘),這就是控制4個流水線段的時鐘。在Q1相時鐘內(nèi),向程序存儲器進行取指并譯碼,臨時程序指針指向下一條指令,同時進行中斷處理判斷。在Q2相時鐘內(nèi),進行讀數(shù)據(jù)存儲器操作。在Q3相時鐘內(nèi)由ALU進行算術(shù)和邏輯運算。在Q4相時鐘內(nèi)將運算后的結(jié)果寫回工作寄存器4或數(shù)據(jù)存儲器5(由通用寄存器堆構(gòu)成),同時將程序指針6指向下一條指令,并且處理堆棧,開放中斷。這樣,4條指令并行進行處理,大大加快了運行速度。
參考圖1,這是本發(fā)明微控制器構(gòu)架的系統(tǒng)結(jié)構(gòu)。首先,程序指針(13位)從程序存儲器取出指令,把指令送到指令寄存器中存儲起來,然后進行相應的譯碼。由于指令分三大類字節(jié)操作類指令,位操作指令,立即數(shù)操作和控制操作類指令,所以譯碼時輸出也會分成三大類,參考圖5。譯碼完成后,進行讀寄存器或者把立即數(shù)送往ALU(算術(shù)邏輯運算單元)37,然后在ALU完成算本和邏輯運算,然后將運算結(jié)果回送到工作寄存器A或數(shù)據(jù)存儲器(8位),同時將程序指針加1,取出下一條指令,如此不斷循環(huán),形成流水線作業(yè)。本發(fā)明中指令集的大部分為單周期指令,比較容易實現(xiàn)流水線。實現(xiàn)流水線框架的基本電路如圖2所示。
68是15位程序總線,69是13位程序總線,70是13位內(nèi)部堆棧輸出總線,71是13位內(nèi)部堆棧輸入總線,72是8位數(shù)據(jù)總線,73是程序計數(shù)器控制信號。
圖3是本發(fā)明微控制器構(gòu)架的應用環(huán)境及資源配置圖。
異步靜態(tài)數(shù)據(jù)存儲器1的存儲深度為176,位數(shù)為8位,它是寄存器堆的一部分,用作通用數(shù)據(jù)寄存器,與特殊寄存器堆分離。特殊寄存器用D型邊沿觸發(fā)器實現(xiàn)。異步靜態(tài)數(shù)據(jù)存儲器1與Sram接口電路3一起組成了通用數(shù)據(jù)寄存器電路。在實現(xiàn)時異步靜態(tài)數(shù)據(jù)存儲器1是用標準RAM COMPILER生成的,其地址在0~175之間連續(xù),同時CPU核中寄存器堆尋址空間在0~255之間連續(xù)。本發(fā)明寄存器堆分成兩個區(qū)0區(qū)和1區(qū)。每一個區(qū)有128個寄存器,包括特殊寄存器和通用寄存器。由于在CPU核中特殊寄存器分布在不同的區(qū)和數(shù)據(jù)空間,因此需用接口電路3來進行地址映射,見圖4。寄存器堆里,0區(qū)從8’h00到8’h1f,1區(qū)從8’h80到8’haf,都用D型觸發(fā)器來實現(xiàn)。其中包含一個Status寄存器。0區(qū)從8’h20到8’h7f映射到異步數(shù)據(jù)存儲器堆從8’h00到8’h5f,1區(qū)從8’hb0到8’hff映射到異步數(shù)據(jù)存儲器堆從8’h60到8’haf。
程序存儲器2的存儲深度為8K,單元長度為15位,采用異步方式與CPU核進行數(shù)據(jù)交換。它利用了第三方IP的FLASH存儲器。這樣本發(fā)明可進行多次編程,易于擦除和重編程,可提高應用系統(tǒng)編程靈活度。從圖3中可以看到,本發(fā)明的程序存儲器2和數(shù)據(jù)存儲器分開,屬于哈佛型結(jié)構(gòu),二者帶有各自的總線,數(shù)據(jù)傳輸速率比共享總線增加1倍。
時鐘發(fā)生器電路14為本發(fā)明芯片提供所有的時鐘信號,如四相時鐘CLK1,CLK2,CLK3,CLK4和測試時鐘test_clk等。復位電路15為本發(fā)明的其它部分提供所有必要的復位信號,如上電復位電路,啟動延時定時器,WDT復位信號,外部復位信號等。
本發(fā)明的新型構(gòu)架7是一個RISC兩級流水線結(jié)構(gòu)的CPU核,是本發(fā)明的核心部分,具體構(gòu)架參考圖5。
時鐘發(fā)生器14產(chǎn)生輸出時鐘信號43,對內(nèi)部堆棧29,內(nèi)部中斷處理器28和程序計數(shù)器27進行時鐘同步;產(chǎn)生輸出時鐘信號59,對指令譯碼器32進行時鐘同步;同時還產(chǎn)生時鐘信號38,時鐘信號39,時鐘信號41,分別對算術(shù)邏輯運算單元ALU 37,特殊寄存器堆35,工作寄存器A 36進行時鐘同步。這些時鐘信號就構(gòu)成了前述兩級流水線(如圖2所示)運行節(jié)奏。組成流水線的流水線段有四段。這樣大大降低了各流水線段的數(shù)據(jù)相關(guān)性判斷,同時降低了流水線實現(xiàn)結(jié)構(gòu)的復雜度。
復位電路15產(chǎn)生復位信號42,對程序計數(shù)器27,內(nèi)部中斷處理器28,內(nèi)部堆棧29和多路選擇器30進行復位;復位電路15還產(chǎn)生復位信號62,對指令寄存器組31進行復位;本發(fā)明芯片指令寄存器組31在復位狀況下,總是指向0地址即首地址;復位電路15還產(chǎn)生復位信號60,復位信號52和復位信號61,分別對指令譯碼器32,特殊寄存器堆35,工作寄存器A 36進行復位。
復位電路對本芯片發(fā)明很重要,復位可使本發(fā)明電路按實際應用的需要回到初始狀態(tài),有效地開始工作。
首先,復位電路15產(chǎn)生復位信號,使程序計數(shù)器27的內(nèi)容為0,而且多路選擇器30選擇程序計數(shù)器27,程序計數(shù)器27輸出13位地址指針57,此時13位地址指針57指向指令寄存器組31的首地址(為0)處,取出首地址處指令代碼,傳送給15位程序數(shù)據(jù)代碼信號58。指令譯碼器32接收到15位程序數(shù)據(jù)代碼信號58并開始譯碼,譯碼后產(chǎn)生三大類控制信號56,即寄存器操作類控制信號、位操作類控制信號、立即數(shù)和控制類信號。控制器33根據(jù)這三大類信號,產(chǎn)生正邏輯的控制信號47,控制信號50,控制信號55,控制信號48,控制信號49和控制信號51,分別控制數(shù)據(jù)通道34,特殊寄存器堆35,算術(shù)邏輯運算單元ALU 37,程序計數(shù)器27,內(nèi)部中斷處理器28,內(nèi)部堆棧29,多路選擇器30,工作寄存器A 36。
下面就本發(fā)明所涉及的控制信號進行歸類。正邏輯控制信號47主要有二個,即fout_re和fin_we。其中fout_re表示從寄存器堆讀出數(shù)據(jù)使能信號,fin_we表示將數(shù)據(jù)寫進寄存器堆里(參考圖4)。它包含特殊D型寄存器堆和用SRAM實現(xiàn)的通用寄存器堆,用正邏輯控制信號50來區(qū)分,其信號為special_reg_flag,當信號值為“1”時,它表示指令訪問的是內(nèi)部用特殊D型觸發(fā)器實現(xiàn)的特殊寄存器堆;當其值為“0”時,它表示指令訪問的是外部通用寄存器堆。正邏輯控制信號51表示將數(shù)據(jù)寫進工作寄存器的使能信號wwe。正邏輯控制信號48表示在執(zhí)行完一條指令后先判斷是否有中斷和是否有程序指針從內(nèi)部堆棧彈出和壓入,如果沒有上述情況發(fā)生就給出程序計數(shù)器27的計數(shù)器使能信號,讓程序指針指向下一條指令??刂菩盘?9表示在內(nèi)部中斷處理器28內(nèi)有中斷,內(nèi)部堆棧有彈出地址的情況下進行內(nèi)部地址指針優(yōu)先排序,確定多路選擇器30選擇其中一個地址指針。正邏輯控制信號55表示送給算術(shù)邏輯運算單元ALU 37的各種操作數(shù)包括邏輯和算術(shù)操作數(shù)。ALU37根據(jù)正邏輯控制信號55操作數(shù)進行算術(shù)邏輯運算,并將運算后的結(jié)果通過8位數(shù)據(jù)總線到達數(shù)據(jù)通道34,經(jīng)過數(shù)據(jù)通道和各種控制信號,將結(jié)果寫回寄存器堆(包括通用寄存器堆和特殊寄存器堆)或工作寄存器A 36中。
算術(shù)邏輯運算單元37的結(jié)構(gòu)具體參考圖6。2選1多路選擇器63的輸入為工作寄存器A和常數(shù)8’h1,輸出為alub。同樣,2選1多路選擇器66的輸入k表示從指令直接譯碼過來的立即數(shù),fout表示從寄存器堆里輸出的數(shù)據(jù)。對這些輸入的選擇需要根據(jù)當前執(zhí)行的指令來判斷。多路選擇器66的輸出為alua,它一方面輸入進算術(shù)邏輯運算部分,另一方面通過2選1多路選擇器64,輸入進算術(shù)邏輯運算部分。多路選擇器64由信號alubf來控制,信號alubf主要由清零指令產(chǎn)生。如果有清零信號產(chǎn)生,就選通alua輸入進算術(shù)邏輯運算部分65。算術(shù)邏輯運算部分65是算術(shù)邏輯運算單元最核心的部分,它包含有移位運算、與非、或非、異或、非、加法、減法、乘法和比較等運算。這些運算根據(jù)opcode[3:0]來進行選擇,3-8譯碼器67主要用來進行位操作。另一個信號“status[2]”是進位或借位,用于進行加法,減法,移位運算。算術(shù)邏輯運算部分65輸出有三種信號即運算結(jié)果aluout,運算零標志aluz,運算進位標志alucout。
圖7說明實現(xiàn)所提出指令集的四個流水線段的工作原理。在時鐘的Q1相內(nèi),進行取指、譯碼及判斷中斷處理。Q2相內(nèi),進行譯碼操作,指令碼共分成三類寄存器操作類、位操作類和立即數(shù)類。這種劃分方法最容易實現(xiàn)四個流水線段,結(jié)構(gòu)簡單,而且沒有復雜的數(shù)據(jù)相關(guān)性判斷,也沒有復雜的條件相關(guān)性判斷,大大加快流水線的運行速度。Q3相時鐘內(nèi)完成算術(shù)和邏輯運算。Q4相時鐘內(nèi)將運算結(jié)果寫回工作寄存器或通用寄存器堆,并將程序指針指向下一條指令并釋放中斷,設(shè)置中斷寄存器位。
在執(zhí)行call、returnf等指令時,內(nèi)部中斷處理器28和內(nèi)部堆棧處理電路可以自動進行壓棧和出棧處理,把當前程序地址從程序計數(shù)器取出來,壓入堆棧,或把堆棧頂部彈出,作為當前地址裝載到程序計數(shù)器中。這種方式大大加快了中斷處理速度。
本發(fā)明微控制器構(gòu)架支持常見微控制器的典型程序指令,包括算術(shù)和邏輯指令、分支指令、數(shù)據(jù)傳輸指令和位測試及位設(shè)置指令。這些指令能由前面敘述和附圖中給出的微控制器構(gòu)架電路支持實現(xiàn)。以下是本發(fā)明微控制器構(gòu)架的指令集。
(1) 指令addAf編碼7’b0000111操作(A)+(f)->(目標)語法[標號]addAf f,d描述把寄存器f的內(nèi)容加到寄存器A的內(nèi)容上。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
(2) 指令andAf編碼7’b0000101操作(A).AND.(f)->(目標)語法[標號]andAf f,d描述把寄存器f的內(nèi)容跟寄存器A的內(nèi)容求“與”。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
(3) 指令iorAf編碼7’b0000100操作(A).OR.(f)->(目標)語法[標號]iorAf f,d描述把寄存器f的內(nèi)容跟寄存器A的內(nèi)容求“或”。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
(4) 指令subAf編碼7’b0000010操作(f)-(A)->(目標)語法[標號]subAf f,d描述把寄存器f的內(nèi)容減去寄存器A的內(nèi)容(余2法)。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
(5) 指令xorAf編碼7’b0000110操作(A).XOR.(f)->(目標)語法[標號]xorAf f,d
描述把寄存器A的內(nèi)容跟寄存器f的內(nèi)容求異或。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
上述指令addAf、andAf、iorAf、subAf和xorAf執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一和第二寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。
(6) 指令clr編碼8’b00000011操作00h->(f)1->Z語法[標號]clr f描述清除寄存器f的內(nèi)容,并把標志位Z設(shè)為“1”。
(7) 指令clrA編碼8’b00000010操作00h->(A)1->Z語法[標號]clrA描述清除寄存器A的內(nèi)容,并把標志位Z設(shè)為“1”。
(8) 指令bitclr編碼5’b00100操作0->(f<b>)語法[標號]bitclr f,b描述寄存器f的第“b”位被清零。
(9) 指令bitset編碼5’b00101操作1->(f<b>)語法[標號]bitset f,b描述寄存器f的第“b”位被置“1”。
上述指令clr、clrA、bitclr和bitset執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,清除或置位寄存器的所有位或指定位。
(10) 指令com編碼7’b0001001操作(f)00h->(目標)語法[標號]com f,d描述把寄存器f的內(nèi)容求補。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
該指令執(zhí)行時,根據(jù)標志位的值把結(jié)果輸出存回上述第一或第二寄存器。
(11) 指令dec編碼7’b0000011操作(f)-1->(目標)語法[標號]dec f,d描述把寄存器f的內(nèi)容減“1”。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
(12) 指令decsz編碼7’b0001011操作(f)-1->(目標)如果結(jié)果為“0”則跳過下一指令語法[標號]decsz f,d描述把寄存器f的內(nèi)容減“1”。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
如果結(jié)果為“1”,則接著執(zhí)行下一條指令。如果結(jié)果為“0”,則執(zhí)行一條“NOP”指令,占據(jù)2個時鐘周期。
(13) 指令inc編碼7’b0001010操作(f)+1->(目標)語法[標號]inc f,d描述把寄存器f的內(nèi)容加“1”。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
(14) 指令incsz編碼7’b0001111操作(f)+1->(目標)
如果結(jié)果為“0”則跳過下一指令語法[標號]incsz f,d描述把寄存器f的內(nèi)容加“1”。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
如果結(jié)果為“1”,則接著執(zhí)行下一條指令。如果結(jié)果為“0”,則執(zhí)行一條“NOP”指令,占據(jù)2個時鐘周期。
上述指令dec、decsz、inc和incsz執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。
(15) 指令mov編碼7’b0001000操作(f)->(目標)語法[標號]mov f,d描述移動寄存器f的內(nèi)容,目標與“d”的狀態(tài)相關(guān)。如果d=0,則目標是寄存器A;如果d=1,則目標是寄存器堆本身?!癲=1”用于通過狀態(tài)標志位“Z”來測試寄存器堆。
(16) 指令movAf編碼8’b0000_0001操作(A)->(f)語法[標號]movAf f描述移動寄存器A的內(nèi)容到寄存器“f”上。
(17) 指令movlA編碼5’b11100操作k->(A)語法[標號]movlA k描述把8位立即數(shù)k裝載進寄存器A,k的值“don’t care”被當成0處理。
上述指令mov、movAf和movlA執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,把一個寄存器的內(nèi)容或立即數(shù)保存到另一個寄存器中。
(18) 指令nop
編碼15’b00000_000_11_00000操作空操作語法[標號]nop描述空操作。
該指令執(zhí)行時,不執(zhí)行任何操作。
(19) 指令rol編碼7’b0001101操作參見下列描述語法[標號]rol f,d描述把寄存器f的內(nèi)容通過進位標志向左循環(huán)移動一位,具體操作參見附圖8。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
(20) 指令ror編碼7’b0001100操作參見下列描述語法[標號]ror f,d描述把寄存器f的內(nèi)容通過進位標志向右循環(huán)移動一位,具體操作參見附圖9。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
上述指令rol和ror執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。
(21) 指令swap編碼7’b0001110操作(f<3:0>)->(目標<7:4>),(f<7:4>)->(目標<3:0>)語法[標號]swap f,d描述把寄存器f的內(nèi)容的上、下半位元組交換。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。
該指令執(zhí)行時,交換第一寄存器高位和低位的值,再把操作的輸出存回上述第一或第二寄存器。
(22) 指令btsc編碼5’b00110操作如果(f<b>)=0則跳過下一指令語法[標號]btsc f,b描述如果寄存器f的第“b”位是“1”,則執(zhí)行下一條指令。
如果寄存器f的第“b”位是“0”,則放棄下一條指令,執(zhí)行一條“nop”指令,一共占據(jù)2個時鐘周期。
(23) 指令btss編碼5’b00111操作如果(f<b>)=1則跳過下一指令語法[標號]btss f,b描述如果寄存器f的第“b”位是“1”,則執(zhí)行下一條指令。
如果寄存器f的第“b”位是“0”,則放棄下一條指令,執(zhí)行一條“nop”指令,共占據(jù)2個時鐘周期。
(24) 指令bsf編碼5’b01110操作1->f<b>
語法[標號]bsf f,b(0=<f=<127,b=<7)描述bsf將寄存器f的第b位置1。
(25) 指令goto編碼4’b1101操作k->PC<10:0>,(PCLATH<4:3>)->PC<12:11>
語法[標號]goto k(0<k<256)描述goto是無條件分支,可以在寄存器堆之間跳轉(zhuǎn)。11位直接地址裝載進PC的<10:0>位。PC的其余高位<12:11>從PCLATH<4:3>裝載。goto是雙周期指令。
上述指令btsc、btss、bsf和goto執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,改變程序計數(shù)器的值,控制指令的執(zhí)行順序。
(26) 指令addlA
編碼6’b111111操作(A)+k->(A)語法[標號]addlA k描述寄存器A的內(nèi)容增加一個8位數(shù)字k,結(jié)果保存回寄存器A。
(27) 指令andlA編碼7’b1111001操作(A).AND.(k)->(A)語法[標號]addlA k描述寄存器A的內(nèi)容跟8位數(shù)字k求“與”,結(jié)果保存回寄存器A。
(28) 指令iorlA編碼7’b1111000操作(A).OR.k->(A)語法[標號]iorlA k描述把寄存器A的內(nèi)容跟8位數(shù)字k求或,結(jié)果保存在寄存器A上。
(29) 指令sublA編碼6’b111110操作k-(A)->(A)語法[標號]sublA k描述8位數(shù)字減去寄存器A的內(nèi)容(余2法),結(jié)果保存在寄存器A上。
(30) 指令xorlA編碼7’b1111010操作(A).XOR.k->(k)語法[標號]xorlA k描述把寄存器A的內(nèi)容跟8位數(shù)字k求異或。結(jié)果保存在寄存器A上。
上述指令AddlA、andlA、iorlA、sublA和xorlA執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)把寄存器的內(nèi)容與立即數(shù)相運算;(II)把運算結(jié)果保存回寄存器。
(31) 指令call編碼4’b1100操作(PC)+1->TOS,k->PC<10:0>,
(PCLATH<4:3>)->PC<12:11>
語法[標號]call k描述調(diào)用子程序。首先,返回地址(PC+1)壓入堆棧。11位直接地址裝載進PC的<10:0>位。PC的其余高位<12:11>從PCLATH<4:3>裝載。call是雙周期指令。
(32) 指令return編碼15’b000000000001000操作TOS->PC語法[標號]return描述從子程序返回。堆棧上彈,堆棧的頂部(TOS)裝載到程序計數(shù)器中。這是雙周期指令。
(33) 指令retie編碼15’b000000000001001操作TOS->PC,1->GIE語法[標號]retie描述從中斷返回。
(34) 指令retlA編碼5’b11101操作k->(A),TOS->PC語法[標號]retlA k描述把8位數(shù)字裝載到寄存器A上。程序計數(shù)器從堆棧(返回的地址)的頂部裝載。這是雙周期指令。
上述指令call、return、retie和retlA執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,能夠自動地進行壓棧和出棧出操作,把當前程序計數(shù)器的值壓入堆棧,或從堆棧頂部彈出當前地址,裝載到程序計數(shù)器中。
(35) 指令clrwdt編碼15’b0000000_0110_0100操作00h->WDT,0->WDT預定標,
1->TO1->PD語法[標號]clrwdt描述clrwdt指令重置看門狗定時器,也重置看門狗定時器的預定標因子,同時置位狀態(tài)位TO和PD。
(36) 指令sleep編碼15’b0000000_0110_0011操作00h->WDT,0->WDT預定標,1->TO0->PD語法[標號]sleep描述掉電狀態(tài)位PD被清除,超時狀態(tài)位TO被置位,看門狗定時器和預定標因子被清除,處理器處于睡眠狀態(tài),時鐘振蕩器停止工作。
上述指令clrwdt和sleep執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,能夠重置看門狗的值。
(37) 指令multAf編碼7’b1000111操作(A)*(f)->(目標)語法[標號]multAf f,d描述把寄存器f的內(nèi)容與寄存器A的內(nèi)容相乘。如果d=0,則結(jié)果保存在寄存器A上;如果d=1,則結(jié)果保存回寄存器f。該條指令的引入,使本發(fā)明的計算能力大大增強,克服了現(xiàn)有微控制器構(gòu)架數(shù)據(jù)處理能力弱的缺陷,從而能適應于計算量密集型應用,如空調(diào)變頻算法等。
上述指令multAf執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一和第二寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。
(38) 指令jumpf編碼4’b1001模作k+PC<10:0>->PC<10:0>,
(PCLATH<4:3>)->PC<12:11>
語法[標號]jumpf k(k<127)描述jumpf也是無條件分支指令。與goto指令不同的地方在于,jumpf采用立即數(shù)相對尋址方式,是在寄存器堆的頁內(nèi)跳轉(zhuǎn)。11位相對地址裝載進PC的<10:0>位。PC的其余高位<12:11>從PCLATH<4:3>裝載。jump是雙周期指令。該指令豐富了本發(fā)明的尋址方式,在寄存器堆規(guī)模較大時使用更方便,運行速度快。
上述jumpf指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,改變程序計數(shù)器的值,采用立即數(shù)相對尋址方式控制指令的執(zhí)行順序,在寄存器堆的頁內(nèi)跳轉(zhuǎn)。
應用程序示例MAINCLRWDTBSF STATUS,RPOBTSSSTATUS,CGOTO LOWER..
LOWERCLRWDT..
END示例說明上電進行初始復位時,程序指針的數(shù)值為13b’0000000000000,同時程序指針6指向程序存儲器2的首地址13b’0000000000000,后者的內(nèi)容為CLRWDT。時鐘發(fā)生器14產(chǎn)生第一相時鐘Q1,此時將程序存儲器2首地址的內(nèi)容CLRWDT取出,完成二級四段流水結(jié)構(gòu)的第一級取指操作。同時,將取出的指令CLRWDT送到譯碼器32進行譯碼,產(chǎn)生對WDT10(外部看門狗)進行清零的控制信號。由于WDT10是外部獨立的計數(shù)/計時器,在其余的流水線段Q2、Q3相時鐘中為空操作。同時在Q4相四中,程序計數(shù)器27自動加1,并判斷是否有中斷正在中斷處理器28處理中,和內(nèi)部堆棧29是否為0。如果沒有中斷處理,并且中斷為空,那么程序計數(shù)器27的內(nèi)容將通過流水線的多路器傳送給程序指針,進入下一個流水線循環(huán)。此時程序指針變?yōu)?3b’0000000000001,指向流水線的程序存儲器2中地址13b’0000000000001,該地址的內(nèi)容為BSF。
BSF的主要功能是選通寄存器1區(qū),執(zhí)行時,在時鐘發(fā)生器14產(chǎn)生的下一個Q1相時鐘里,將程序存儲器13b’0000000000001中的內(nèi)容BSF取出,完成流水線段的第一段取指工作,并通過流水線段的譯碼器32進行譯碼,產(chǎn)生相應的讀、寫Status狀態(tài)寄存器信號,同時產(chǎn)生位操作控制信號,在下一個Q2相時鐘,由讀Status控制信號將Status中的內(nèi)容讀到數(shù)據(jù)總線,完成流水線的第二段操作——讀寄存器操作。在下一個Q3相時鐘中,由譯碼器32產(chǎn)生的位操作控制信號在流水線段的ALU部件進行位操作,將Status[5]相應位設(shè)置為1,在流水線的下一個Q4相時鐘,流水線段將ALU37中操作結(jié)果寫入寄存器,完成流水線段的寫入寄存器操作。此時,將程序計數(shù)器27加1,形成下一次流水線操作,同時還判斷是否有中斷在流水線段里面的中斷處理器進行處理,并判斷內(nèi)部堆棧29是否為空,如果沒有中斷發(fā)生,同時堆棧也為空,就將程序計數(shù)器27的內(nèi)容傳送給程序指針。此時程序指針的值為13b’0000000000002,并指向程序存儲器2的地址13b’0000000000002,其內(nèi)容為BTSS。
在執(zhí)行BTSS指令時,在Q1相中,從程序存儲器2里取出指令,并通過譯碼器32進行譯碼操作,產(chǎn)生讀Status寄存器控制信號及位控制信號。在Q2時鐘時,通過讀Status寄存器控制信號進行流水線段的讀寄存器內(nèi)容的操作,將相應的內(nèi)容讀到數(shù)據(jù)總線。在Q3相時鐘時,在ALU做位測試工作,將其結(jié)果送入數(shù)據(jù)總線,同時判斷ALU運算操作的零標志位,看其是否為1。如果為1,則表示該指令執(zhí)行測試跳轉(zhuǎn),否則繼續(xù)按順序執(zhí)行下一條指令。在下一個Q4相時鐘時,將運算操作零標志寫入Status寄存器的第0位Status
,同時將程序計數(shù)器加1。在下一次流水線操作時,因為ALU操作零標志為1,所以流水線段會插入一個空操作“NOP”,以繼續(xù)完成流水線。雖然此時程序存儲器2的內(nèi)容是GOTO指令,但并不執(zhí)行,而是執(zhí)行空操作??詹僮鳌癗OP”運行后,在Q4相中,程序計數(shù)器27加1,到下一條指令,如此不斷循環(huán),完成二級流水線操作。
GOTO執(zhí)行時,在Q1相時鐘,從程序存儲器2取指,并通過流水線段中的譯碼器進行譯碼,并產(chǎn)生相應的轉(zhuǎn)移地址控制信號,同時將地址暫時存儲在臨時程序指針中,在Q2、Q3相時鐘,GOTO指令基本上是空操作。在Q4相時鐘,程序計數(shù)器27內(nèi)容不會再加1,而直接載入轉(zhuǎn)移地址。在下一次流水線操作時,由于前一條指令是GOTO指令,因此流水線段中會自動插入一條空操作指令NOP,進行流水線操作。同時在NOP指令運行的Q4相時鐘內(nèi),程序計數(shù)器27中的PC值已經(jīng)轉(zhuǎn)移地址的值。在下一次流水線操作時會將轉(zhuǎn)移地址中的指令進行流水線操作。
前面所提供的對較佳實施例的描述是為了使本領(lǐng)域的熟練技術(shù)人員能完成或使用本實用新型。對于本領(lǐng)域的熟練技術(shù)人員來說,對這些實施例各種修改將是顯而易見的,并且在不使用創(chuàng)造性的情況下,在此所定義的一般原理可以應用于其他實施例。這樣,本實用新型并不是要局限于在此所示出的實施例,而是符合與在此所揭示的原理和新穎特征關(guān)聯(lián)的最寬范疇。
權(quán)利要求
1.一個哈佛型結(jié)構(gòu)的微控制器構(gòu)架,其結(jié)構(gòu)包括程序總線、數(shù)據(jù)總線、程序存儲器、通過程序總線連接到程序存儲器的的指令譯碼器、數(shù)據(jù)隨機存儲器(RAM)、寄存器堆、通用算術(shù)邏輯單元(ALU)和地址總線等,這些部件是通過微碼操作控制結(jié)構(gòu)實現(xiàn)的;其特征在于,它還包括一個二級四段流水線結(jié)構(gòu),由四相時鐘驅(qū)動工作,每一段流水線在對應時鐘相內(nèi)完成功能,它包括取址和譯碼裝置,用于從程序存儲器取出指令并進行譯碼操作;讀寄存器裝置,用于從工作寄存器和數(shù)據(jù)寄存器讀出數(shù)據(jù);算術(shù)邏輯運算裝置(ALU),用于算術(shù)和邏輯運算;回寫寄存器及內(nèi)部中斷和堆棧處理裝置,用于將ALU操作結(jié)果回寫到寄存器里,同時進行內(nèi)部中斷和堆棧處理,以備下一級流水線使用;時鐘發(fā)生器,用于為上述裝置提供四相時鐘信號,所述四相時鐘信號包括第一、第二、第三和第四時鐘信號。
2.如權(quán)利要求1所述的微控制器構(gòu)架,其特征在于,所述中斷處理和內(nèi)部堆棧處理裝置自動進行壓棧和出棧處理。
3.如權(quán)利要求2所述的微控制器構(gòu)架,其特征在于,所述取址和譯碼裝置包括指令譯碼器、多路器、程序計數(shù)器、程序存儲器;
4.如權(quán)利要求3所述的微控制器構(gòu)架,其特征在于,所述讀寄存器裝置包括數(shù)據(jù)存儲器、工作寄存器;
5.如權(quán)利要求4所述的微控制器構(gòu)架,其特征在于,所述回寫寄存器及內(nèi)部中斷和堆棧處理裝置包括中斷處理器、內(nèi)部堆棧、數(shù)據(jù)存儲器、工作寄存器;
6.如權(quán)利要求1到5所述的微控制器構(gòu)架,其特征在于,所述指令譯碼器的輸出指令碼分成3類寄存器操作類、位操作類和立即數(shù)類。
7.如權(quán)利要求1所述的微控制器構(gòu)架,其特征在于,還包括一套指令集,該指令集屬于精簡指令集,包含38條指令。
8.如權(quán)利要求7所述的微控制器構(gòu)架,其特征在于,其中所述指令集包含一條乘法指令multAf,該指令指定了第一和第二寄存器,指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一和第二寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器。
9.如權(quán)利要求8所述的控制器,其特征在于,其指令集中包含一條程序執(zhí)行分支控制指令jumpf,該指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,改變程序計數(shù)器的值,采用立即數(shù)相對尋址方式控制指令的執(zhí)行順序,在寄存器堆的頁內(nèi)跳轉(zhuǎn)。
10.如權(quán)利要求9所述的微控制器構(gòu)架,其特征在于,所述指令集包括不同的6條運算指令,每一條指令指定了第一和第二寄存器,這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一和第二寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器,這一類指令有addAf、andAf、iorAf、subAf和xorAf。
11.如權(quán)利要求10所述的微控制器構(gòu)架,包括4條不同的位操作指令,每一條指令指定了一個寄存器,這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,清除或置位寄存器的所有位或指定位,這一類指令有clr、clrA、bitclr和bitset。
12.如權(quán)利要求11所述的微控制器構(gòu)架,包括1條求補指令com,該指令指定了第一和第二寄存器,該指令執(zhí)行時,根據(jù)標志位的值把結(jié)果輸出存回上述第一或第二寄存器。
13.如權(quán)利要求12所述的微控制器構(gòu)架,包括4條不同的遞增和遞減指令,每一條指令都有各自的機器操作碼,指定了第一和第二寄存器,這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器,這一類指令有dec、decsz、inc和incsz。
14.如權(quán)利要求13所述的微控制器構(gòu)架,包括3條不同的數(shù)據(jù)移動指令,每一條指令都有各自的機器操作碼,指定了一個或二個寄存器,這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,把一個寄存器的內(nèi)容或立即數(shù)保存到另一個寄存器中,這一類指令有mov、movAf和movlA。
15.如權(quán)利要求14所述的微控制器構(gòu)架,包括1條空操作指令nop,該指令有獨立的機器操作碼,該指令執(zhí)行時,不執(zhí)行任何操作。
16.如權(quán)利要求15所述的微控制器構(gòu)架,包括2條不同的移位指令,每一條指令指定了第一和第二寄存器,這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)訪問寄存器堆,把第一寄存器的內(nèi)容提供給上述通用ALU作為輸入;(II)操作通用ALU,完成其操作碼規(guī)定的操作;(III)訪問寄存器堆,把上述通用ALU操作的輸出存回上述第一或第二寄存器,這一類指令有rol和ror。
17.如權(quán)利要求16所述的微控制器構(gòu)架,包括1條交換指令swap,該指令有獨立的機器操作碼,指定了第一和第二寄存器,該指令執(zhí)行時,交換第一寄存器高位和低位的值,再把操作的輸出存回上述第一或第二寄存器。
18.如權(quán)利要求17所述的微控制器構(gòu)架,包括4條不同的程序執(zhí)行分支控制指令,每一條指令都有各自的機器操作碼,這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,改變程序計數(shù)器的值,控制指令的執(zhí)行順序,這一類指令有btsc、btss、bsf和goto。
19.如權(quán)利要求18所述的微控制器構(gòu)架,包括5條不同的立即數(shù)運算指令,每一條指令都有各自的機器操作碼,指定了一個寄存器,指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,完成功能(I)把寄存器的內(nèi)容與立即數(shù)相運算;(II)把運算結(jié)果保存回寄存器,這一類指令有AddlA、andlA、iorlA、sublA和xorlA。
20.如權(quán)利要求19所述的微控制器構(gòu)架,包括4條不同的子程序調(diào)用及返回指令,每一條指令都有各自的機器操作碼,這一類指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,能夠自動地進行壓棧和出棧出操作,把當前程序計數(shù)器的值壓入堆棧,或從堆棧頂部彈出當前地址,裝載到程序計數(shù)器中,這一類指令有call、return、retie和retlA。
21.如權(quán)利要求20所述的微控制器構(gòu)架,包括2條不同的看門狗控制指令指令,每一條指令執(zhí)行時,指令執(zhí)行單元產(chǎn)生相應的控制信號,能夠重置看門狗的值,這一類指令有clrwdt和sleep。
22.如權(quán)利要求1所述的微控制器構(gòu)架,其特征在于,其數(shù)據(jù)存儲器包括特殊寄存器和通用寄存器,利用地址映射電路把分布在不同的區(qū)和數(shù)據(jù)空間的特殊寄存器和通用寄存器的物理地址映射到連續(xù)的物理地址上。
23.如權(quán)利要求1所述的微控制器構(gòu)架,其特征在于,所述微控制器構(gòu)架包括中斷處理和內(nèi)部堆棧處理方式,在調(diào)用子程序或中斷處理時自動進行壓棧和出棧操作,實現(xiàn)中斷的高效處理。
24.一種用于操作微控制器構(gòu)架的方法,其特征在于,所述方法包括下述步驟時鐘發(fā)生器同時產(chǎn)生四相時鐘信號,提供給所述二級四段流水線結(jié)構(gòu);在第一時鐘周期,從程序存儲器取出指令并進行譯碼操作;在第二時鐘周期,從工作寄存器和數(shù)據(jù)寄存器讀出數(shù)據(jù);在第三時鐘周期,根據(jù)譯碼操作對所述數(shù)據(jù)進行算術(shù)和邏輯運算;在第四時鐘周期,將ALU操作結(jié)果回寫到寄存器里,同時進行內(nèi)部中斷和堆棧處理,以備下一級流水線使用。
25.如權(quán)利要求24所述的方法,其特征在于,還包括在所述第四時鐘周期進行中斷處理的操作。
26.如權(quán)利要求25所述的方法,其特征在于,還包括在所述第一時鐘周期判斷是否在進行中斷處理的操作。
全文摘要
本發(fā)明是一個新型RISC微控制器構(gòu)架。該微控制器構(gòu)架的核心有兩級流水線,采用數(shù)據(jù)存儲器與指令存儲器分離的哈佛型結(jié)構(gòu),存取速度可以增加一倍;指令集有38條指令,編碼效率高,采用流水線化結(jié)構(gòu),非常容易進行指令擴展;該微控制器構(gòu)架支持低功耗睡眠和喚醒模式,支持外部中斷,支持B口高4位變化中斷,具有強大的中斷處理能力,能處理八級中斷;數(shù)據(jù)存儲器采用單端口,異步低功耗SRAM,存儲深度為256×8,可擴展至2K,程序存儲器采用嵌入式FLASH,存儲深度為4K×16位,可擴展到64k位,尋址方式有直接尋址,間接尋址,立即數(shù)尋址等方式;能在DC~40MHz運行,目前在同類產(chǎn)品中運行速度為最快。本發(fā)明微控制器構(gòu)架再加上適當?shù)耐鈬K資源后,可集成進各種嵌入式系統(tǒng)、單片系統(tǒng)(SOC)中,廣泛應用于消費電子、通信、衛(wèi)星定位和音、視頻等領(lǐng)域。
文檔編號G06F9/22GK1516001SQ0311478
公開日2004年7月28日 申請日期2003年1月8日 優(yōu)先權(quán)日2003年1月8日
發(fā)明者朱建國, 潘松, 李逍波 申請人:上海海爾集成電路有限公司