專(zhuān)利名稱(chēng):增強(qiáng)的微處理器或微控制器的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)案的技術(shù)領(lǐng)域涉及微處理器或微控制器。
背景技術(shù):
微控制器通常構(gòu)成芯片上的系統(tǒng)且包括一微處理器及多個(gè)外圍組件。存 在具有8位、16位及32位架構(gòu)的各式各樣的此類(lèi)微控制器。例如由微芯科技公司 (MicrochipTechnology Inc.)制造的8位微控制器等現(xiàn)有微控制器實(shí)現(xiàn)了靈活架構(gòu)。此類(lèi) 微控制器包括其中程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器分離的哈佛架構(gòu)。此類(lèi)型的微控制器進(jìn)一步包 括允許對(duì)數(shù)據(jù)存儲(chǔ)器的存取的特定分庫(kù)系統(tǒng)。通常,將數(shù)據(jù)存儲(chǔ)器劃分成多個(gè)庫(kù)且?guī)爝x擇 寄存器界定當(dāng)前選擇且可存取所述庫(kù)中的哪一庫(kù)。為存取其它庫(kù),必須對(duì)所述庫(kù)選擇寄存 器進(jìn)行重編程。因此,即使分庫(kù)方案僅允許對(duì)所界定存儲(chǔ)器庫(kù)的存取,這些控制器也包含強(qiáng) 制切換到預(yù)界定庫(kù)的指令。此實(shí)現(xiàn)了改進(jìn)且強(qiáng)大的性能,盡管存在一般的存取限制性。然而,在存取存儲(chǔ)器中仍存在瓶頸。因此,需要改進(jìn)的微控制器架構(gòu)。
發(fā)明內(nèi)容
根據(jù)一實(shí)施例,一種η位微處理器裝置可包括η位中央處理單元(CPU);多個(gè)特 殊功能寄存器及通用寄存器,其被存儲(chǔ)器映射到多個(gè)庫(kù)且具有至少兩個(gè)16位間接存儲(chǔ)器 地址寄存器,所述至少兩個(gè)16位間接存儲(chǔ)器地址寄存器可由所述CPU跨越所有庫(kù)存??;庫(kù) 存取單元,其用于將所述CPU與所述多個(gè)庫(kù)中的一者耦合;數(shù)據(jù)存儲(chǔ)器,其與所述CPU耦合; 及程序存儲(chǔ)器,其與所述CPU耦合,其中所述間接地址寄存器可操作以存取所述數(shù)據(jù)存儲(chǔ) 器或程序存儲(chǔ)器且其中所述間接存儲(chǔ)器地址寄存器中的每一者中的一位指示對(duì)所述數(shù)據(jù) 存儲(chǔ)器或?qū)λ龀绦虼鎯?chǔ)器的存取。根據(jù)其它實(shí)施例,η = S0根據(jù)其它實(shí)施例,所述η位微處理器可進(jìn)一步包括至少 一個(gè)虛擬寄存器,其中將數(shù)據(jù)寫(xiě)入到所述虛擬寄存器導(dǎo)致使用所述間接存儲(chǔ)器地址寄存器 中的一者對(duì)所述數(shù)據(jù)存儲(chǔ)器或?qū)λ龀绦虼鎯?chǔ)器的間接存取。根據(jù)其它實(shí)施例,所述至少 一個(gè)虛擬寄存器被映射到每一存儲(chǔ)器庫(kù)。根據(jù)其它實(shí)施例,所述η位進(jìn)一步包括虛擬寄存 器,其中從所述虛擬寄存器讀取數(shù)據(jù)導(dǎo)致使用所述間接存儲(chǔ)器地址寄存器中的一者對(duì)所述 數(shù)據(jù)存儲(chǔ)器或?qū)λ龀绦虼鎯?chǔ)器的間接存取。根據(jù)其它實(shí)施例,所述至少一個(gè)虛擬寄存器 可被映射到每一存儲(chǔ)器庫(kù)。根據(jù)其它實(shí)施例,所述虛擬寄存器可不以物理方式實(shí)施于所述 微處理器裝置中。根據(jù)其它實(shí)施例,所述數(shù)據(jù)存儲(chǔ)器可以是8位寬且所述程序存儲(chǔ)器可以 是14位寬。根據(jù)其它實(shí)施例,數(shù)據(jù)存儲(chǔ)器地址的一個(gè)額外位可界定在調(diào)試模式中使用的擴(kuò) 展存儲(chǔ)器地址范圍。根據(jù)其它實(shí)施例,所述間接地址寄存器中的 所述位可以是最高有效位。根據(jù)另一實(shí)施例,一種用于操作η位微處理器裝置的方法可包括以下步驟提供 η位中央處理單元(CPU);提供多個(gè)特殊功能寄存器及通用寄存器,所述多個(gè)特殊功能寄存 器及通用寄存器被存儲(chǔ)器映射到多個(gè)庫(kù);提供至少兩個(gè)16位間接存儲(chǔ)器地址寄存器,所述 至少兩個(gè)16位間接存儲(chǔ)器地址寄存器可由所述CPU跨越所有庫(kù)存??;提供庫(kù)存取單元,所述庫(kù)存取單元用于將所述CPU與所述多個(gè)庫(kù)中的一者耦合;提供數(shù)據(jù)存儲(chǔ)器,所述數(shù)據(jù)存儲(chǔ)器與所述CPU耦合;提供程序存儲(chǔ)器,所述程序存儲(chǔ)器與所述CPU耦合;及使用間接地址 寄存器執(zhí)行間接尋址以存取所述數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器,其中所述間接存儲(chǔ)器地址寄存 器中的每一者中的一位分別指示對(duì)所述數(shù)據(jù)存儲(chǔ)器或?qū)λ龀绦虼鎯?chǔ)器的存取。根據(jù)其它實(shí)施例,η = S0根據(jù)其它實(shí)施例,所述方法可進(jìn)一步包括通過(guò)將數(shù)據(jù)寫(xiě) 入到至少一個(gè)虛擬寄存器來(lái)產(chǎn)生間接存儲(chǔ)器寫(xiě)入存取的步驟,其中所述間接存儲(chǔ)器存取使 用所述間接存儲(chǔ)器地址寄存器中的一者。根據(jù)其它實(shí)施例,可將所述虛擬寄存器存儲(chǔ)器映 射到所有存儲(chǔ)器庫(kù)。根據(jù)其它實(shí)施例,所述方法可進(jìn)一步包括通過(guò)從至少一個(gè)虛擬寄存器 讀取數(shù)據(jù)來(lái)產(chǎn)生間接存儲(chǔ)器讀取存取的步驟,其中所述間接存儲(chǔ)器讀取存取使用所述間接 存儲(chǔ)器地址寄存器中的一者。根據(jù)其它實(shí)施例,可將所述虛擬寄存器存儲(chǔ)器映射到所有存 儲(chǔ)器庫(kù)。根據(jù)其它實(shí)施例,可不將所述虛擬寄存器以物理方式實(shí)施于所述微處理器裝置中。根據(jù)其它實(shí)施例,所述數(shù)據(jù)存儲(chǔ)器可以是8位寬且所述程序存儲(chǔ)器可以是14位 寬。根據(jù)其它實(shí)施例,數(shù)據(jù)存儲(chǔ)器地址的一個(gè)額外位可界定在調(diào)試模式中使用的擴(kuò)展存儲(chǔ) 器地址范圍。根據(jù)其它實(shí)施例,所述間接地址寄存器中的所述位可以是最高有效位。依據(jù)以下各圖、描述及以上權(quán)利要求書(shū),所屬領(lǐng)域的技術(shù)人員將易于明了本發(fā)明 的其它技術(shù)優(yōu)點(diǎn)。本申請(qǐng)案的各個(gè)實(shí)施例可僅獲得所闡述優(yōu)點(diǎn)的子集。沒(méi)有一個(gè)優(yōu)點(diǎn)對(duì)于 所述實(shí)施例來(lái)說(shuō)是關(guān)鍵的。
可通過(guò)參照結(jié)合附圖閱讀的以下說(shuō)明來(lái)獲取對(duì)本發(fā)明及其優(yōu)點(diǎn)的更完整理解,在 所述附圖中相同參考編號(hào)指示相同特征,且其中圖1顯示根據(jù)一實(shí)施例的微控制器架構(gòu)的框圖。圖2顯示程序計(jì)數(shù)器及其到內(nèi)部總線的耦合的實(shí)施例。圖3到6顯示根據(jù)所執(zhí)行的指令對(duì)程序計(jì)數(shù)器的不同操作。圖7顯示堆棧及控制邏輯的實(shí)施例。圖8顯示程序存儲(chǔ)器映射及堆棧的實(shí)施例。圖9顯示庫(kù)選擇寄存器的實(shí)施例。圖10顯示數(shù)據(jù)存儲(chǔ)器中的存儲(chǔ)器庫(kù)的結(jié)構(gòu)的實(shí)施例。圖11顯示用于間接存儲(chǔ)器存取的存取方案。圖12為顯示根據(jù)一實(shí)施例的特殊功能寄存器概要的表。圖13Α及13Β為顯示根據(jù)一實(shí)施例的微處理器或微控制器的指令集的表。盡管已參照本發(fā)明的實(shí)例性實(shí)施例來(lái)描繪、描述及界定本發(fā)明的實(shí)施例,但此類(lèi) 參照并不意味著對(duì)本發(fā)明的限制,且不應(yīng)推斷出存在此限制。所揭示的標(biāo)的物能夠在形式 及功能上具有大量修改、替代和等效形式,所屬領(lǐng)域的技術(shù)人員將會(huì)聯(lián)想到這些修改、替代 和等效形式并受益于本發(fā)明。所描繪及所描述的本發(fā)明實(shí)施例僅作為實(shí)例,而并非是對(duì)本 發(fā)明范圍的窮盡性說(shuō)明。
具體實(shí)施例方式圖1尤其顯示根據(jù)一實(shí)施例與存取哈佛型架構(gòu)中的程序及數(shù)據(jù)存儲(chǔ)器相關(guān)的微處理器或微控制器的中央處理單元的不同功能單元。指令寄存器110可存儲(chǔ)可由控制邏輯 130解碼的所提取指令。可提供各自存儲(chǔ)一地址的多個(gè)間接尋址寄存器150。雖然獨(dú)立地 顯示于圖1中,但這些及其它特殊功能寄存器為特殊功能寄存器塊185的一部分。為執(zhí)行 間接尋址存取,執(zhí)行對(duì)特殊功能寄存器塊185中的專(zhuān)用特殊功能寄存器的讀取或?qū)懭?。?執(zhí)行此間接尋址存取的情況下,控制邏輯130控制在輸入側(cè)上從間接地址寄存器150接收 地址的多路復(fù)用器140。根據(jù)一實(shí)施例,所述間接地址寄存器具有預(yù)界定位,例如最高有效 位,其由控制邏輯1 30解碼以確定將執(zhí)行對(duì)程序存儲(chǔ)器120的間接存取還是對(duì)數(shù)據(jù)存儲(chǔ)器 160的間接存取。在8位架構(gòu)中,數(shù)據(jù)存儲(chǔ)器為8位寬。根據(jù)哈佛架構(gòu),程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器分 離且可具有不同大小。舉例來(lái)說(shuō),在一個(gè)實(shí)施例中,程序存儲(chǔ)器可以是14、15或16個(gè)位寬。 因此,可解碼包含(例如)8位間接地址的指令。某一指令可含有甚至更多的地址位,其可 與另一寄存器組合以執(zhí)行(例如)相對(duì)尋址??蓪?shù)據(jù)存儲(chǔ)器160劃分成可通過(guò)7個(gè)或8個(gè)位解碼的多個(gè)庫(kù)。每一庫(kù)可被視為 寄存器文件。根據(jù)一個(gè)實(shí)施例,數(shù)據(jù)存儲(chǔ)器含有總共16個(gè)庫(kù),每一庫(kù)具有256個(gè)可尋址存 儲(chǔ)器位置,從而產(chǎn)生總共4096個(gè)字節(jié)的存儲(chǔ)器。根據(jù)另一實(shí)施例,可提供具有128個(gè)可尋 址存儲(chǔ)器位置的16個(gè)庫(kù)。根據(jù)各個(gè)實(shí)施例可能有其它配置。所述中央處理單元可進(jìn)一步 包含與工作寄存器180耦合的算術(shù)邏輯單元170 (ALU)。工作寄存器180為塊185的多個(gè)特 殊功能寄存器中的一者。如上所述,可將數(shù)據(jù)存儲(chǔ)器160劃分成多個(gè)庫(kù)1···η。除了某些尋 址模式外,指令通常僅可存取選定存儲(chǔ)器庫(kù)。因此,將來(lái)自特殊功能寄存器塊185的某些重 要特殊功能寄存器存儲(chǔ)器映射到所有存儲(chǔ)器庫(kù)1…η,如數(shù)據(jù)存儲(chǔ)器160與特殊功能寄存器 塊185之間的箭頭所指示。根據(jù)各個(gè)實(shí)施例,可將未映射到所有存儲(chǔ)器庫(kù)的特殊功能寄存 器映射到相應(yīng)的不同存儲(chǔ)器位置處的單個(gè)存儲(chǔ)器庫(kù)。根據(jù)各個(gè)實(shí)施例,可根本不將一些特 殊功能寄存器映射到存儲(chǔ)器。即使某些特殊功能寄存器到所有存儲(chǔ)器庫(kù)的映射限制每一存儲(chǔ)器庫(kù)中的可存取 自由RAM,也可避免許多原本為必需的庫(kù)切換序列以存取重要的特殊功能寄存器。舉例來(lái) 說(shuō),微控制器可具有12個(gè)特殊功能寄存器,例如映射到所有存儲(chǔ)器庫(kù)的工作寄存器180。因 此,根據(jù)一實(shí)施例,每一存儲(chǔ)器庫(kù)可具有244或116個(gè)自由存儲(chǔ)器位置,此視每一存儲(chǔ)器庫(kù) 的大小而定。根據(jù)各個(gè)實(shí)施例可能有其它配置。根據(jù)一實(shí)施例,增強(qiáng)的微控制器可含有8位ALU 170及工作寄存器180 (WREG)。ALU 170可以是通用算術(shù)單元。其在工作寄存器180及任一寄存器文件中的數(shù)據(jù)之間執(zhí)行算術(shù) 及布爾函數(shù)。ALU 170可以是8位寬且可能夠進(jìn)行加法、減法、移位及邏輯操作。除非另有 提及,否則算術(shù)操作實(shí)質(zhì)上可以是二進(jìn)制補(bǔ)碼。WREG 180可以是用于ALU操作的8位工作 寄存器。WREG寄存器180為可尋址寄存器且可直接寫(xiě)入或讀取。根據(jù)一實(shí)施例,WREG 180 為映射到所有16個(gè)庫(kù)的12個(gè)共用SFR中的一者-其地址可以是(例如)09h。算術(shù)及邏輯 單元170可能夠?qū)蓚€(gè)操作數(shù)或單個(gè)操作數(shù)實(shí)施算術(shù)或邏輯操作。所有單操作數(shù)指令均對(duì) WREG寄存器180或給定文件寄存器起作用。對(duì)于雙操作數(shù)指令,操作數(shù)中的一者為WREG寄 存器180而另一者為文件寄存器或8位立即常數(shù)。根據(jù)所執(zhí)行的指令,ALU 170可影響狀態(tài) 寄存器190中的進(jìn)位(C)、數(shù)字進(jìn)位(DC)或零(Z)位的值。C及DC位在減法中分別起借位 及數(shù)字借出位的作用。影響這些狀態(tài)位的實(shí)例為例如下文將更詳細(xì)解釋的SUBLW及SUBWF等指令。如圖1中所示的狀態(tài)寄存器190可含有所述ALU的算術(shù)狀態(tài),例如進(jìn)位/借位、數(shù)字進(jìn)位/借位及零旗標(biāo);RP<1:0>,其表示下部?jī)蓚€(gè)庫(kù)選擇;用于直接尋址的位;IRP,其表 示用于間接尋址的庫(kù)選擇寄存器位;超時(shí)位及斷電位。根據(jù)一實(shí)施例,增強(qiáng)的微控制器包括庫(kù)選擇寄存器(BSR),為維持向后兼容性,還 可維持位RP<1:0>。RP<1:0>與BSR<1:0>之間可存在全雙向鏡像因此,改變一個(gè)寄存器即 自動(dòng)改變另一寄存器。因此,RP<1:0>與BSR<1:0>指向相同物理存儲(chǔ)器。即使增強(qiáng)的微控制器含有多個(gè)全間接地址寄存器150 (文件選擇寄存器(FSR)), 也可針對(duì)向后兼容性維持位IRP-其為FSR0H<0>的直接雙向鏡像。因此,改變FSR0H<0>即 自動(dòng)改變IRP,且反之亦然。IRP與FSRH0h<0>指向相同物理存儲(chǔ)器。根據(jù)一實(shí)施例,狀態(tài)寄存器190跨越所有庫(kù)為共用的且可位于03h處。針對(duì)除TO 及PD外的所有狀態(tài)位實(shí)施下文將更詳細(xì)解釋的中斷時(shí)的快速上下文保存。類(lèi)似任一其它 寄存器,所述狀態(tài)寄存器可以是任一指令的目的地。如果所述狀態(tài)寄存器是影響Z、DC或C 位的指令的目的地,那么根據(jù)裝置邏輯設(shè)置或清除這些位。此外,TO及PD位是不可寫(xiě)的。 因此,以狀態(tài)寄存器190作為目的地的指令的結(jié)果可不同于既定結(jié)果。舉例來(lái)說(shuō),指令CLRF STATUS將清除除TO及PD外的所有位,且接著將通過(guò)裝置邏輯自動(dòng)設(shè)置Z位。此使得狀態(tài) 寄存器190成為‘OOOu ulOO'(其中U=不變)。C及DC位在減法中分別起借位及數(shù)字借 出位的作用。因此,狀態(tài)寄存器190可含有以下位IRP 間接寄存器庫(kù)選擇位(針對(duì)向后兼容性。鏡像FSR0H<0>) 1 =庫(kù)2、3 (IOOh到 IFFh) ;0 =庫(kù) OU (OOh 到 FFh)RP<1:0> 寄存器庫(kù)選擇位(針對(duì)向后兼容性。鏡像BSR<1:0>)00 =庫(kù)0(00h到 7Fh) ;01=庫(kù)1_至丨腫11) ; 10 =庫(kù) 2(100h 到 17Fh) ; 11 =庫(kù) 3 (180h 到 IFFh)TO 超時(shí)位(在中斷時(shí)不自動(dòng)保存)1 =在通電之后,CLRffDT指令或SLEEP指令; 0=發(fā)生監(jiān)視計(jì)時(shí)器超時(shí);PD 斷電位(在中斷時(shí)不自動(dòng)保存)1 =在通電之后或在執(zhí)行CLRWDT指令時(shí);0 = 在執(zhí)行SLEEP指令時(shí)Z 零位1 =算術(shù)或邏輯操作的結(jié)果為零;0 =算術(shù)或邏輯操作的結(jié)果不為零。DC 數(shù)字進(jìn)位/借位位(ADDWF、ADDLW、SUBLW、SUBffF指令)1 =來(lái)自所發(fā)生結(jié)果 的第4個(gè)低階位的進(jìn)位;0 =無(wú)來(lái)自結(jié)果的第4個(gè)低階位的進(jìn)位。C 進(jìn)位/借位位(ADDWF、ADDLW、SUBLW、SUBWF指令):1 =來(lái)自所發(fā)生結(jié)果的最高 有效位的進(jìn)位;0 =無(wú)來(lái)自所發(fā)生結(jié)果的最高有效位的進(jìn)位。對(duì)于借位,可反轉(zhuǎn)極性。通過(guò)相加第二操作數(shù)的二進(jìn)制補(bǔ)碼執(zhí)行減法。對(duì)于旋轉(zhuǎn) (RRF, RLF)指令,給此位加載源寄存器的高階或低階位。增強(qiáng)的微控制器核心可直接或間接地尋址其寄存器文件(庫(kù))或數(shù)據(jù)存儲(chǔ)器。根 據(jù)一實(shí)施例,將所有特殊功能寄存器(包含程序計(jì)數(shù)器(PC)及工作寄存器(WREG))映射于 所述數(shù)據(jù)存儲(chǔ)器中。增強(qiáng)的微控制器核心具有正交(對(duì)稱(chēng))指令集,其使得使用任一尋址 模式對(duì)任一寄存器實(shí)施任一操作成為可能。此對(duì)稱(chēng)性質(zhì)及缺少‘特殊最優(yōu)情形’使得針對(duì) 增強(qiáng)的微控制器核心的編程簡(jiǎn)單而高效。另外,顯著降低用戶的學(xué)習(xí)曲線。
根據(jù)一實(shí)施例,可在所述核心中實(shí)現(xiàn)以下塊程序計(jì)數(shù)器;指令解碼;ALU ;只讀存 儲(chǔ)器(ROM)鎖存器/IR鎖存器;FSR及地址產(chǎn)生邏輯;工作寄存器;WREG ;STATUS中的狀態(tài) 位;中斷向量化控制;具有快速上下文保存;庫(kù)選擇寄存器BSR。可不將以下塊視為CPU的一部分堆棧;復(fù)位產(chǎn)生電路(監(jiān)視計(jì)時(shí)器(WDT)、通電 復(fù)位(POR)、欠壓復(fù)位(BOR)等);程序存儲(chǔ)器;外圍器件;RAM ;RAM地址控制;Q時(shí)鐘產(chǎn)生器 及控制;中斷啟用及加旗標(biāo);中斷控制寄存器;配置位;裝置ID字;ID位置;時(shí)鐘驅(qū)動(dòng)器。如上所述,根據(jù)一實(shí)施例,以下寄存器可跨越所有16個(gè)庫(kù)為共用的INDF0 (用于 間接尋址且可以不是物理寄存器);INDFl (用于間接尋址且可以不是物理寄存器);PCL(PC LSB) ;STATUS ;FSROL (間接存儲(chǔ)器地址0,LSB) ;FSROH (間接存儲(chǔ)器地址0,MSB) ;FSRlL (間 接存儲(chǔ)器地址1,LSB) ;FSRlH (間接存儲(chǔ)器地址1,MSB) ;WREG,工作寄存器;BSR (庫(kù)選擇寄 存器);PCLATH(用于程序計(jì)數(shù)器PC<14:8>的寫(xiě)入緩沖器);中斷控制寄存器INTC0N。根據(jù)一實(shí)施例,微處理器或微控制器可進(jìn)一步包括可與某些特殊功能寄存器115 耦合的中斷控制單元105。在發(fā)生中斷或任何其它所誘發(fā)的上下文切換(例如軟件陷阱)之 后,自動(dòng)保存選自映射到所有存儲(chǔ)器庫(kù)的特殊功能寄存器的以下寄存器的內(nèi)容。STATUS (除 TO 及 PD 夕卜);BSR、PCLATH、WREG、FSRO (FSR0H 及 FSROL 兩者)以及 FSRl (FSR1H 及 FSRlL 兩 者)。在從中斷恢復(fù)之后將所述寄存器自動(dòng)恢復(fù)到其預(yù)中斷值。為此目的,如圖1中所示,微處理器或微控制器核心可具有至少一個(gè)額外組的寄 存器115,其將存儲(chǔ)上述寄存器的內(nèi)容。然而,根據(jù)其它實(shí)施例,可提供堆棧、額外數(shù)據(jù)存儲(chǔ) 器等以在上下文切換之后存儲(chǔ)這些寄存器的內(nèi)容。如圖2中所示,程序計(jì)數(shù)器PC由兩個(gè)并置8位寄存器PCL 230及PCH 240組成。 其尋址程序存儲(chǔ)器中的字,且根據(jù)一實(shí)施例,其為(例如)15個(gè)位寬。因此,其可用于尋址 高達(dá)32kW。將PCL 230 (PC的低字節(jié))映射于數(shù)據(jù)存儲(chǔ)器160中。因此,其跨越所有庫(kù)為共 用的且位于(例如)地址02h處。PCL 240正如任一其它寄存器一樣為可讀及可寫(xiě)的。每 當(dāng)PCL 230由指令修改時(shí),無(wú)論是對(duì)PCL 230的寫(xiě)入還是讀取-修改-寫(xiě)入,CPU均可需要 執(zhí)行強(qiáng)制NOP以檢索新地址處的指令。PCH 240為PC的高字節(jié)且不可直接尋址。由于可不 將PCH映射于數(shù)據(jù)或程序存儲(chǔ)器中,因此寄存器PCLATH 220 (PC高鎖存器)用作PC的高位 (PCH<6:0>)的保持鎖存器。根據(jù)一實(shí)施例,將PCLATH 220映射到數(shù)據(jù)存儲(chǔ)器中。因此,其 跨越所有庫(kù)為共用的且可位于地址OAh處。通過(guò)寄存器的顯式加載來(lái)僅更新PCLATH 220。 因此,根據(jù)一實(shí)施例,無(wú)其它指令對(duì)其進(jìn)行更新。增強(qiáng)的微控制器可被設(shè)計(jì)成更新PCLATH 220不會(huì)自動(dòng)更新PCH 240。根據(jù)GOTO、CALL及CALLW指令用PCLATH 220的內(nèi)容僅更新 PCH240。在Ql的上升邊緣上的每一指令提取之后使PC遞增1,除非由GOTO、CALL、RETURN、 RETLW、RETFIE或Branch指令修改;由中斷響應(yīng)修改;因由指令對(duì)PCL的目的地寫(xiě)入?!疤^(guò)”等效于所跳過(guò)地址處的強(qiáng)制NOP循環(huán)。如圖2中所示,PC 230、240及PCLATH 220針對(duì)不同指令的操作如下PCL 230上的讀取指令PCL 230勺數(shù)據(jù)總線200 ALU 170或目的地。PCL 230上的寫(xiě)入指令8位數(shù)據(jù)■^數(shù)據(jù)總線200 PCL 230。PCL 230上的讀取-修改-寫(xiě)入指令對(duì)PCL 230進(jìn)行讀取-修改-寫(xiě)入操作的任 一指令。讀取PCL 230j數(shù)據(jù)總線200i ALU 170 ;寫(xiě)入8位結(jié)果二數(shù)據(jù)總線i PCL 230。RETURN 指令T0S 1 PC<14:0>230、240。
圖3另外顯示所提取指令210及其對(duì)程序計(jì)數(shù)器230、240的作用。圖3應(yīng)用于以 下指令GOTO指令在2字指令(操作碼)210中提供目的地地址。操作碼<7:0> PCL<7 0>230 ;操作碼 <10 8> “? PCH<2 0>240 ;PCLATH<6 3>220 PCH<6 3>240。 CALL指令在指令210中提供11位目的地地址。將當(dāng)前地址(PC+1)推進(jìn)到堆棧。 操作碼 <7 0> PCL<7 0>230 ;操作碼 <10 8> PCH<2 0>240 ;PCLATH<63>220 PCH<63>240。圖4顯示以下指令的配置BRA指令在指令210中提供9位帶+_符號(hào)的偏移。操作碼<8:0>+PC (+1) — PC。圖5顯示以下指令的配置BRff指令在WREG 180中提供8位不帶+-符號(hào)的偏移。PC (+1) +WREG PC。圖6顯示以下指令的配置CALLff指令在WREG 180中提供8位目的地地址。將當(dāng)前地址(PC+1)推進(jìn)到堆 棧。WREG<7 0> -* PCL<7 0> ;PCLATH<6 0> PCH<6 0>。為啟用測(cè)試存儲(chǔ)器區(qū)域,程序計(jì)數(shù)器230、240可具有隱藏的第16個(gè)位PC<15>。當(dāng) 設(shè)置PC<15>時(shí),將從測(cè)試區(qū)域提取所述指令。在用戶模式中,PC<15>始終為0,且無(wú)法在軟 件中加以修改。在測(cè)試模式中,PC<15>默認(rèn)為0,但可由“加載配置”命令設(shè)置。其可由“復(fù) 位PC”命令清除。測(cè)試存儲(chǔ)器存取可與電路中調(diào)試程序(ICD) —起工作如下ICD_vl :PC<15>被強(qiáng)制為高以提取I⑶向量,但在執(zhí)行第一指令(G0T0ICD_ ROUTINE)之后返回到0。從那時(shí)起直到退出調(diào)試執(zhí)行為止,PC<14:11>被強(qiáng)制為‘1111b’, 但PCLATH不受影響。ICD_v2 如果I⑶調(diào)試執(zhí)行在用戶存儲(chǔ)器中,那么其遵循ICD_V1。如 果調(diào)試執(zhí)行在測(cè)試存儲(chǔ)器中,那么PC<15>被強(qiáng)制為高以提取I⑶向量,且根據(jù)iccLreturn 返回到零。根據(jù)各個(gè)實(shí)施例的增強(qiáng)的微控制器裝置可支持如圖7中所示15個(gè)位寬且16個(gè)位 深的堆棧存儲(chǔ)器。在正常操作期間,假定堆棧310為16個(gè)字深。在正常模式中,不對(duì)堆棧 310提供直接用戶存取。所述堆棧并非程序或數(shù)據(jù)存儲(chǔ)器空間的一部分。當(dāng)執(zhí)行CALL或 CALLW指令或確認(rèn)中斷請(qǐng)求時(shí),將全PC(程序計(jì)數(shù)器)推進(jìn)到所述堆棧上。根據(jù)RETURN、 RETLff或RETFIE指令從所述堆棧下拉PC值。PCLATH不受CALL或RETURN型指令中的任一 者的影響。堆棧310通過(guò)15位RAM及4位堆棧指針而起16字的作用。使所述指針遞增/遞 減經(jīng)過(guò)llllb/OOOOb將致使其環(huán)繞到OOOOb/llllb。在CALL型指令期間,使所述堆棧指針 遞增且將PC的內(nèi)容加載到堆棧310。在RETURN型指令期間,將所指向的內(nèi)容轉(zhuǎn)移到PC且 接著使所述堆棧指針遞減。在所有復(fù)位之后將所述堆棧指針初始化到‘1111b’。第一調(diào)用 將致使所述指針繞到0000b。當(dāng)使所述堆棧指針遞增/遞減經(jīng)過(guò)llllb/0000b且在新地址處實(shí)施到/從所述堆 棧的數(shù)據(jù)轉(zhuǎn)移時(shí),發(fā)生堆棧上溢/下溢事件。在第一調(diào)用時(shí)必定不發(fā)生上溢事件。在第16 個(gè)連續(xù)調(diào)用時(shí),所述堆棧指針將具有值1111b。第17個(gè)連續(xù)調(diào)用將致使所述堆棧指針環(huán)繞 到0000b且致使PC加載于此位置處。此構(gòu)成上溢事件。當(dāng)所述堆棧已足夠次數(shù)地出棧以 達(dá)到0000b時(shí),進(jìn)一步的出棧將致使0000b處的內(nèi)容轉(zhuǎn)移到PC且致使所述堆棧指針遞減。所述堆棧指針將繞到1111b,此不構(gòu)成下溢事件。只有在下一連續(xù)出棧嘗試從Illlb的數(shù)據(jù)轉(zhuǎn)移時(shí),將會(huì)發(fā)生下溢事件。在用戶模式中,堆棧上溢或下溢將設(shè)置PCON寄存器中的適當(dāng) 位(ST0F或STUF)且導(dǎo)致軟件復(fù)位。當(dāng)在ICD模式中時(shí),所述堆??删哂袃蓚€(gè)段。正常用戶模式堆棧仍為16個(gè)字深, 但也可提供單獨(dú)的ICD堆棧。在ICD模式中,將可存取所述堆棧的頂部及所述堆棧指針。 在I⑶模式中,所述堆棧的頂部(TOS)為可讀及可寫(xiě)的。兩個(gè)寄存器位置(T0SH及T0SL) 將尋址由堆棧指針(STKPTR)所指向的堆棧RAM位置。在CALL型指令之后,軟件可通過(guò)讀 取TOSH及TOSL寄存器來(lái)讀取所推進(jìn)的值。可將這些值放置于用戶界定的軟件堆棧上。向 TOS寄存器寫(xiě)入將致使用下一 RETURN型指令上的新值來(lái)更新PC。STKPTR寄存器含有堆棧指針值。如先前所述,STKPTR僅在I⑶模式中為可存取的。 在ICD模式中,可通過(guò)所述STKPTR寄存器存取所述堆棧指針。用戶可讀取及寫(xiě)入堆棧指針 值。在所有復(fù)位之后將所述堆棧指針初始化到‘1111b’。在I⑶模式中,將不對(duì)上溢/下溢 事件應(yīng)用自動(dòng)軟件復(fù)位。然而,仍將設(shè)置PCON寄存器中的堆棧上溢(STOF)或下溢(STUF) 位,從而允許堆棧狀況的軟件檢驗(yàn)。由于將不對(duì)下溢/上溢執(zhí)行復(fù)位,因此將不復(fù)位堆棧指 針(STKPTR)。在上溢/下溢時(shí),所述堆棧指針將環(huán)繞且接著重新開(kāi)始正常操作。用戶必須 明確地清除上溢(STOF)或下溢(STUF)位-且在后續(xù)上溢/下溢時(shí)將再次對(duì)其進(jìn)行自動(dòng)設(shè) 置。堆棧上溢/下溢事件可僅由使用堆棧指針硬件來(lái)修改堆棧指針的指令導(dǎo)致。此包含CALL、TRAP;RETURN ;RETFIE ;RETLff ;任何中斷及 ICD 陷阱。通過(guò) ALU 修改 堆棧指針的指令(僅ICD模式)將不導(dǎo)致堆棧下溢/上溢狀況且因此將不設(shè)置(STOF)或 (STUF)位。實(shí)例為(僅 ICD 模式)JNCF STKPTR ;DECF STKPTR ;ADDffF STKPTRo當(dāng)復(fù)位裝置時(shí),給PC加載復(fù)位向量(Oh)。將堆棧指針初始化到‘1111b’,且堆棧 寄存器的頂部(TOS)為‘OOOOh’。第二推進(jìn)使所述堆棧指針遞增且接著將當(dāng)前PC加載到堆 棧級(jí)中。在第16個(gè)連續(xù)調(diào)用時(shí),所述堆棧指針將具有值1111b。第17個(gè)連續(xù)調(diào)用將致使所 述堆棧指針環(huán)繞到OOOOb且致使PC加載于此位置處。此構(gòu)成上溢事件。RETURN出棧將復(fù) 制指向PC的堆棧內(nèi)容且接著使所述堆棧指針遞減。當(dāng)所述堆棧已足夠次數(shù)地出棧以達(dá)到 0000b時(shí),進(jìn)一步的出棧將致使0000b處的內(nèi)容轉(zhuǎn)移到PC且致使所述堆棧指針遞減。所述 堆棧指針將繞到1111b,此不構(gòu)成下溢事件。只有在下一連續(xù)出棧嘗試從Illlb的數(shù)據(jù)轉(zhuǎn)移 時(shí),將會(huì)發(fā)生下溢事件。在調(diào)試(ICD)模式中,特殊指令將致使STKPTR遞增。不將PC加載 到T0S。由用戶負(fù)責(zé)確保在執(zhí)行INCF STKPTR指令(此指令因此等效于PUSH指令)之前給 TOS加載適當(dāng)數(shù)據(jù)。DECFSTKPTR指令將使所述堆棧指針遞減,不給PC加載TOS值。如圖8中所示,15位程序計(jì)數(shù)器400能夠?qū)ぶ?2k χ 14位程序存儲(chǔ)器空間。程序 存儲(chǔ)器空間430主要含有供執(zhí)行的指令;然而,也可存儲(chǔ)并存取數(shù)據(jù)表(使用遺留程序存儲(chǔ) 器讀取/寫(xiě)入基礎(chǔ)結(jié)構(gòu)以及與間接尋址相關(guān)聯(lián)的新功能性,更多細(xì)節(jié)參見(jiàn)FSR部分)。在 正常操作期間也存在隱藏的第16個(gè)PC位,且當(dāng)設(shè)置時(shí),可尋址保留用于配置位、裝置ID及 測(cè)試存儲(chǔ)器440的另一 32k χ 14的存儲(chǔ)器。僅在測(cè)試模式或編程模式中設(shè)置此位。如圖 8中所示,復(fù)位向量在‘0000h’處且中斷向量在‘0004h’處。根據(jù)一個(gè)實(shí)施例,增強(qiáng)的微控制器可尋址數(shù)據(jù)存儲(chǔ)器160及高達(dá)2048個(gè)字節(jié)的通 用RAM。數(shù)據(jù)存儲(chǔ)器地址線為11個(gè)位寬。將數(shù)據(jù)存儲(chǔ)器分割成128個(gè)字節(jié)的16個(gè)庫(kù),每一 庫(kù)含有通用寄存器(GPR)及特殊功能寄存器(SFR)。所述庫(kù)由如圖9中所示的庫(kù)選擇寄存器(BSR<3:0>)選擇。所述BSR寄存器可存取多于16個(gè)庫(kù);然而,可僅在ICD模式中允許存 取多于16個(gè)庫(kù)以考慮到ICD寄存器的較大數(shù)據(jù)空間。(在ICD模式中,可存取32個(gè)庫(kù))。 還將位BSRO及BSRl分別作為RPO及RPl映射到狀態(tài)寄存器中。此考慮到與現(xiàn)有裝置的向 后兼容性。對(duì)BSR0/1的讀取或?qū)懭雽⒂绊慠P0/1,且反之亦然。圖10顯示實(shí)例性數(shù)據(jù)存儲(chǔ) 器映射。
當(dāng)所述核心正與ICD模塊一起操作時(shí)或在另一實(shí)施例中,總共的庫(kù)數(shù)目可擴(kuò)展到 32個(gè)以實(shí)現(xiàn)總共4096個(gè)地址。此允許將ICD寄存器映射到數(shù)據(jù)空間中且不使用用戶存儲(chǔ) 器映射中的任一者。此將僅在啟用ICD模塊時(shí)實(shí)現(xiàn)。用戶將無(wú)法存取大于庫(kù)15的任一庫(kù)。 根據(jù)各個(gè)實(shí)施例可能有其它配置。圖11顯示間接尋址方案的實(shí)施例,所述間接尋址方案為尋址其中指令中的數(shù)據(jù) 存儲(chǔ)器地址由另一寄存器確定的數(shù)據(jù)存儲(chǔ)器的模式。此可適用于數(shù)據(jù)/程序存儲(chǔ)器中的數(shù) 據(jù)表或堆棧。文件選擇寄存器(FSR)寄存器960的值用作數(shù)據(jù)存儲(chǔ)器地址。增強(qiáng)的微控制 器具有用于間接尋址的兩個(gè)16位寄存器對(duì)960。這些所謂的文件選擇寄存器對(duì)為=FSROH 與FSROL ;及FSRlH與FSR1L。FSR 960為16位寄存器且因此允許高達(dá)65,536個(gè)位置的尋 址。這些文件選擇寄存器960中的單個(gè)位965可用于確定將執(zhí)行對(duì)數(shù)據(jù)存儲(chǔ)器160的存取 還是對(duì)程序存儲(chǔ)器120的存取。為此目的,邏輯單元930將文件選擇寄存器960的內(nèi)容轉(zhuǎn) 發(fā)到程序存儲(chǔ)器地址910或RAM地址920以用于存取相應(yīng)存儲(chǔ)器。非間接尋址通過(guò)多路復(fù)用器940使用所提取指令950的相應(yīng)內(nèi)容“文件”。接著通 過(guò)RAM地址920執(zhí)行庫(kù)存取,其中庫(kù)地址由相應(yīng)庫(kù)存取寄存器提供以形成全地址920。如圖 11中所示,提供文件選擇寄存器960以用于間接尋址。對(duì)于間接尋址,多路復(fù)用器940的 輸出通過(guò)相應(yīng)文件選擇寄存器960的內(nèi)容提供“文件”地址。如果選擇間接尋址,那么使用 每一文件選擇寄存器960的由數(shù)字965所指示的位15來(lái)確定將執(zhí)行通過(guò)程序存儲(chǔ)器地址 910對(duì)程序存儲(chǔ)器120的存取還是通過(guò)數(shù)據(jù)地址920對(duì)數(shù)據(jù)存儲(chǔ)器160的存取。通過(guò)控制 多路復(fù)用器940的相應(yīng)選擇信號(hào)(未顯示)來(lái)起始間接尋址。當(dāng)FSRn<15>等于0時(shí),尋址數(shù)據(jù)存儲(chǔ)器160。當(dāng)FSRn<15>為1時(shí),尋址程序存儲(chǔ)器 120。將數(shù)據(jù)存儲(chǔ)器160映射到此地址空間的前半部(OOOOh到7FFFh)中。如果FSRn<15> 為0,那么FSRn< 10 0>指向數(shù)據(jù)存儲(chǔ)器位置OOOh到7FFh。在此情況下,忽略FSRn< 11 14>。 將程序存儲(chǔ)器120映射到此地址空間的上半部(8000h到FFFFh)中。如果FSRn<15>為1, 那么FSRn<14:0>指向程序存儲(chǔ)器地址OOOOh到7FFFh??偟膩?lái)說(shuō)地址8000h及更高指向 程序存儲(chǔ)器。低于SOOOh的地址指向數(shù)據(jù)存儲(chǔ)器,其中僅下部11個(gè)位用于地址解碼。另外,存在不以物理方式實(shí)施的虛擬寄存器INDFO及INDFl (參見(jiàn)圖10)。對(duì)這些 寄存器的讀取或?qū)懭雴?dòng)間接尋址,其中對(duì)應(yīng)FSR寄存器中的值為數(shù)據(jù)的地址。如果文件 INDFO (或INDF1)本身是經(jīng)由FSR間接讀取的,那么讀取所有‘0,(設(shè)置零位)。類(lèi)似地,如 果INDFO (或INDF1)是間接寫(xiě)入的,那么操作將等效于NOP,且狀態(tài)位不受影響。對(duì)程序存 儲(chǔ)器空間(FSRn<15>= 1)的間接寫(xiě)入將不具有影響且將導(dǎo)致對(duì)正在執(zhí)行NOP的等效。從 程序存儲(chǔ)器空間(FSRn<15>= 1)的間接讀取將致使將程序存儲(chǔ)器位置的前8個(gè)位轉(zhuǎn)移到 目的地寄存器,將用上部6個(gè)位更新EEDATH/PMDATH。根據(jù)各個(gè)實(shí)施例,可實(shí)施其它機(jī)制以 誘發(fā)間接尋址。圖12顯示根據(jù)一實(shí)施例用于數(shù)據(jù)存儲(chǔ)器的任一庫(kù)η中的所有特殊功能寄存器的概要。圖13A及13B顯示指令集,其中下文詳細(xì)地解釋使用上文所解釋的架構(gòu)的增強(qiáng)的 指令。DDFSR 將文字加到 FSRn 上語(yǔ)法ADDFSR n, k操作數(shù)-32彡k彡31η e
操作FSR(η) +k — FSR (η)受影響的狀態(tài)無(wú)編碼110001 Onkk kkkk描述將帶+_符號(hào)的6位文字‘k’加到由‘η’規(guī)定的FSR的內(nèi)容上。FSRn限制 于范圍OOOOh到FFFFh。使其遞增/遞減超過(guò)這些界限將致使其環(huán)繞。應(yīng)注意,地址SOOOh 及更大指向程序存儲(chǔ)器。低于8000h的地址指向數(shù)據(jù)存儲(chǔ)器,其中僅下部11個(gè)位用于地址解碼。字1循環(huán)1Q循環(huán)活動(dòng) QlQ2 Q3 Q4解碼 讀取FSRn,處理數(shù)據(jù)寫(xiě)入到FSRn實(shí)例ADDFSRl,23h在指令之前FSRl = OFFh在指令之后FSRl = 0122hDDffFC將WREG及進(jìn)位位加到f上語(yǔ)法ADDWFC f {, d}操作數(shù)0彡f彡127d e
操作(WREG)+ (f) + (C) — dest受影響的狀態(tài)C、DC、Z編碼110111 dfff ffff描述將WREG、進(jìn)位旗標(biāo)及數(shù)據(jù)存儲(chǔ)器位置‘f’相加。如果‘d’為‘0’,那么將結(jié) 果放置于WREG中。如果‘d’為‘1’,那么將結(jié)果放置于數(shù)據(jù)存儲(chǔ)器位置‘f’中。循環(huán)1Q循環(huán)活動(dòng)QlQ2 Q3 Q4解碼 讀取寄存器‘f’處理數(shù)據(jù) 寫(xiě)入到目的地實(shí)例ADDWFCREG,0在指令之前進(jìn)位位=1REG = 02hWREG = 4Dh在指令之后進(jìn)位位=0REG = 02h
WREG = 50hSRF 算術(shù)右移語(yǔ)法ASRF f {, d}操作數(shù)0≤f≤127d e
操作(f<7>)— dest<7>(f<7:l>) — dest<6:0>,(f<0>)— C,受影響的狀態(tài)C、Z編碼110111 dfff ffff描述通過(guò)進(jìn)位旗標(biāo)將寄存器‘f’的內(nèi)容向右移位一個(gè)位。MSb保持不變。如果 ‘d’為‘0’,那么將結(jié)果放置于WREG中。如果‘d’為‘1’,那么將結(jié)果存儲(chǔ)回到寄存器‘f,中。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2 Q3Q4解碼 讀取寄存器‘f’處理數(shù)據(jù) 寫(xiě)入到目的地實(shí)例ASRFREG,0在指令之前REG =1110 0110C = 1在指令之后REG =1110 0110WREG = 1111 0011C = O相對(duì)分支語(yǔ)法BRA k操作數(shù)-256≤k≤255操作(PC)+k—PC受影響的狀態(tài)無(wú)編碼11OOlk kkkk kkkk描述將二進(jìn)制補(bǔ)數(shù)‘k’加到PC上。由于PC將遞增以提取下一指令,因此新地址 將為PC+1+k。此指令為雙循環(huán)指令。字1循環(huán)2Q循環(huán)活動(dòng)QlQ2 Q3Q4解碼 讀取文字‘k’處理數(shù)據(jù) 寫(xiě)入到PC無(wú)操作無(wú)操作無(wú)操作 無(wú)操作實(shí)例0023hBRA 005h在指令之前 PC =地址(0023h)在指令之后 PC =地址(0029h)
Rff借助WREG的相對(duì)分支語(yǔ)法:BRW操作數(shù)無(wú)操作(PC)+ (WREG) — PC受影響的狀態(tài)無(wú)編碼000000 0000 1011描述將WREG(不帶+_符號(hào))的內(nèi)容加到PC上。由于PC將遞增以提取下一指令, 因此新地址將為PC+1+(WREG)。此指令為雙循環(huán)指令。將WREG的內(nèi)容視為不帶+_符號(hào)的數(shù)。字1循環(huán)2Q循環(huán)活動(dòng)QlQ2Q3Q4解碼 讀取寄存器WREG 處理數(shù)據(jù) 寫(xiě)入到PC無(wú)操作 無(wú)操作無(wú)操作 無(wú)操作實(shí)例0024hBRff在指令之前PC=地址(0024h)WREG = 85h在指令之后PC=地址(OOAAh)ALLW借助WREG的子例稈調(diào)用語(yǔ)法:CALLW操作數(shù)無(wú)操作(PC)+1— T0S,(WREG) — PC<7:0>,(PCLATH<6:0>) — PC<14:8>受影響的狀態(tài)無(wú)編碼000000 0000 1010描述借助WREG的子例程調(diào)用。首先,將返回地址(PC+1)推進(jìn)到返回堆棧上。接著,將WREG的內(nèi)容加載到PC<7 0>中,且將PCLATH的內(nèi)容加載到PC<14:8>中。CALLW為雙 循環(huán)指令。字1循環(huán)2Q循環(huán)活動(dòng)QlQ2Q3Q4解碼 讀取寄存器WREG 處理數(shù)據(jù) 寫(xiě)入到PC無(wú)操作無(wú)操作無(wú)操作 無(wú)操作實(shí)例0025hCALLW在指令之前 PC=地址(0025h)WREG=IAhPCLATH = IOh在指令之后 TOS =地址(0026h)
PC = IOlAhWREG=IAhPCLATH = IOhSLF 邏輯左移語(yǔ)法LSLF f {,d}操作數(shù)0彡f彡127
d e
操作(f<7>)—C(f<6:0>) — dest<7:l>0 —dest<0>受影響的狀態(tài)C、Z編碼110101 dfff ffff描述通過(guò)進(jìn)位旗標(biāo)將寄存器‘f’的內(nèi)容向左移位一個(gè)位。將‘0’移位到LSb中。 如果‘d’為‘0’,那么將結(jié)果放置于WREG中。如果‘d’為‘1’,那么將結(jié)果存儲(chǔ)回到寄存器中。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2Q3Q4解碼 讀取寄存器‘f’ 處理數(shù)據(jù) 寫(xiě)入到目的地實(shí)例LSLFREG,0在指令之前REG =1110 0110C = O在指令之后REG =1110 0110WREG = 1100 1100C = 1SRF 邏輯右移語(yǔ)法LSRF f{, d}操作數(shù)0彡f彡127d e
操作0 — dest<7>(f<7:l>) — dest<6:0>,(f<0>)— C,受影響的狀態(tài)C、Z編碼110110 dfff ffff描述通過(guò)進(jìn)位旗標(biāo)將寄存器‘f’的內(nèi)容向右移位一個(gè)位。將‘0’移位到MSb中。 如果‘d’為‘0’,那么將結(jié)果放置于WREG中。如果‘d’為‘1’,那么將結(jié)果存儲(chǔ)回到寄存器中。字1循環(huán)1Q循環(huán)活動(dòng)
QlQ2 Q3 Q4解碼 讀取寄存器‘f’ 處理數(shù)據(jù) 寫(xiě)入到目的地實(shí)例LSRFREG,0在指令之前REG =1110 0110 C = 1在指令之后REG =1110 0110WREG = 0111 0011C = OOVIff在預(yù)/后遞增/遞減的情況下,將INDFn移動(dòng)到WREG語(yǔ)法M0VIW++/—FSRn++/-η e
操作數(shù)操作INDFn— WREG對(duì)FSRn應(yīng)用預(yù)/后遞增/遞減操作。受影響的狀態(tài)Z (僅在目的地為WREG的情況下)編碼00 0000 0001 OnmmMM操作00++FSRn01-FSRn10FSRn++11FSRn-描述此指令用于在間接寄存器(INDFn)中的一者與WREG之間移動(dòng)數(shù)據(jù)。在此移 動(dòng)之前/之后,通過(guò)使指針(FSRn)預(yù)/后遞增/遞減來(lái)對(duì)其進(jìn)行更新。FSRn限制于范圍 OOOOh到FFFFh。使其遞增/遞減超過(guò)這些界限將致使其環(huán)繞。應(yīng)注意,大于7FFFh的地址 指向程序存儲(chǔ)器。低于SOOOh的地址指向數(shù)據(jù)存儲(chǔ)器,其中僅下部11個(gè)位用于地址解碼。 對(duì)FSRn的遞增/遞減操作將不影響任何狀態(tài)位。如果將OOh的值移動(dòng)到WREG,那么此指令 可僅影響Z旗標(biāo)。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2 Q3Q4解碼如果讀取源寄存器,那么處理數(shù)據(jù)寫(xiě)入到目的地寄存器。如果更新指針。需要,那么更新指針。實(shí)例M0VIWFSRO++在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(23h) = 33h在指令之后 FSRO = 23h
WREG = 12h(22h) = 12h(23h) = 33h實(shí)例M0VIW++FSR0在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(23h) = 33h在指令之后 FSRO = 23hWREG = 33h(22h) = 12h(23h) = 33hOVIff將INDFn移動(dòng)到WREG、變址的間接尋址語(yǔ)法MOVIW[k] FSRn操作數(shù)-32彡k彡31η e
操作(FSRn+k)— WREG在由FSRn+k指向的位置與WREG之間移動(dòng)數(shù)據(jù)。受影響的狀態(tài)Z (僅在目的地為WREG的情況下)編碼111111 Onkk kkkk描述此指令用于在由FSRn+k指向的位置與WREG之間移動(dòng)數(shù)據(jù)。不用k來(lái)更新 FSRn。可尋址范圍限制于OOOOh到FFFFh。變址超過(guò)這些界限將導(dǎo)致地址環(huán)繞。應(yīng)注意,地 址SOOOh及更高指向程序存儲(chǔ)器。低于SOOOh的地址指向數(shù)據(jù)存儲(chǔ)器,其中僅下部11個(gè)位 用于地址解碼。地址計(jì)算(將k加到FSRn上)將不影響任何狀態(tài)位。如果將OOh的值移 動(dòng)到WREG,那么此指令可僅影響Z旗標(biāo)。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2 Q3Q4解碼 地址計(jì)算。讀取源寄存器。處理數(shù)據(jù) 寫(xiě)入到目的地寄存器。實(shí)例M0VIW[5]FSR0在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(27h) = 39h在指令之后 FSRO = 22hWREG = 39h (22h) = 12h(27h) = 39h
實(shí)例M0VIW[-5]FSR0在指令之前 FSRO = 22hWREG = FFh(IDh) = 17h(22h) = 12h在指令之后 FSRO = 22hWREG = 17h(IDh) = 17h(22h) = 12hOVLB將文字移動(dòng)到BSR 語(yǔ)法:M0VLB k操作數(shù)0彡k彡15操作k— BSR受影響的狀態(tài)無(wú)編碼000000 0010 kkkk描述將4位文字‘k’加載到庫(kù)選擇寄存器(BSR)中。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2Q3Q4解碼 讀取文字‘k, 處理數(shù)據(jù) 將文字‘k’寫(xiě)入到BSROVLP將文字移動(dòng)到PCLATH 語(yǔ)法:M0VLP k操作數(shù)0彡k彡127操作k— PCLATH受影響的狀態(tài)無(wú)編碼110001 Ikkk kkkk描述將七位文字‘k’加載到PCLATH寄存器中。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2Q3Q4解碼 讀取文字‘k, 處理數(shù)據(jù) 將文字‘k’寫(xiě)入到PCLATHOVffI變址的間接移動(dòng)語(yǔ)法:M0VWI [k] FSRn
操作數(shù)-32彡k彡31η e
操作WREG— (FSRn+k)在WREG與由FSRn+k指向的位置之間移動(dòng)數(shù)據(jù)。受影響的狀態(tài)Z (僅在目的地為WREG的情況下)編碼111111 Inkk kkkk描述此指令用于在WREG與由FSRn+k指向的位置之間移動(dòng)數(shù)據(jù)。不用k來(lái)更新FSRn??蓪ぶ贩秶拗朴贠OOOh到FFFFh。變址超過(guò)這些界限將導(dǎo)致地址環(huán)繞。應(yīng)注意,地 址SOOOh及更高指向程序存儲(chǔ)器。低于SOOOh的地址指向數(shù)據(jù)存儲(chǔ)器,其中僅下部11個(gè)位 用于地址解碼。地址計(jì)算(將k加到FSRn上)將不影響任何狀態(tài)位。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2 Q3Q4解碼 地址計(jì)算。讀取源寄存器。處理數(shù)據(jù) 寫(xiě)入到目的地寄存器。實(shí)例MOVWI[3] FSRO在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(25h) = 56h在指令之后 FSRO = 22hWREG = FFh(22h) = 12h(25h) = FFh實(shí)例MOVWI[-1] FSRO在指令之前 FSRO = 22hWREG = FFh(21h) = 56h(22h) = 12h在指令之后 FSRO = 22hWREG = FFh(21h) = FFh(22h) = 12hQ循環(huán)活動(dòng)QlQ2 Q3Q4解碼 讀取寄存器‘f, 處理數(shù)據(jù) 寫(xiě)入到目的地OVffI在預(yù)/后遞增/遞減的情況下,將WREG移動(dòng)到INDFn語(yǔ)法M0VWI++/--FSRn++/—操作數(shù)η e
操作WREG— INDFn對(duì)所使用的FSR應(yīng)用預(yù)/后遞增/遞減操作。受影響的狀態(tài)Z (僅在目的地為WREG的情況下)編碼00 0000 0001 InmmMM操作00++FSRn
01-FSRn10FSRn++11FSRn- 描述此指令用于在WREG與間接寄存器(INDFn)中的一者之間移動(dòng)數(shù)據(jù)。在此移 動(dòng)之前/之后,通過(guò)使指針(FSRn)預(yù)/后遞增/遞減來(lái)對(duì)其進(jìn)行更新。FSRn限制于范圍 OOOOh到FFFFh。使其遞增/遞減超過(guò)這些界限將致使其環(huán)繞。應(yīng)注意,地址SOOOh及更高 指向程序存儲(chǔ)器。低于SOOOh的地址指向數(shù)據(jù)存儲(chǔ)器,其中僅下部11個(gè)位用于地址解碼。 對(duì)FSRn的遞增/遞減操作將不影響任何狀態(tài)位。字1循環(huán)1Q循環(huán)活動(dòng)QlQ2 Q3Q4解碼 如果需要,那么更新指針。處理數(shù)據(jù) 寫(xiě)入到INDFn。如果需要,那么更新指針。實(shí)例M0VWIFSR0—在指令之前 FSRO = 22hWREG = FFh(2lh) = 56h(22h) = 12h在指令之后 FSRO = 21hWREG = FFh(21h) = 56h(22h) = FFh實(shí)例M0VWI-FSR0在指令之前 FSRO = 22hWREG = FFh(21h) = 56h(22h) = 12h在指令之后 FSRO = 21hWREG = FFh(21h) = FFh(22h) = 12hESET軟件復(fù)位語(yǔ)法:RESET操作數(shù)無(wú)操作執(zhí)行nMCLR。復(fù)位受MCLR復(fù)位影響的所有寄存器及旗標(biāo)。設(shè)置PCON. nSWRST 旗標(biāo)。受影響的狀態(tài)全部編碼000000 0000 0001描述此指令提供用以通過(guò)軟件執(zhí)行MCLR復(fù)位的方式。
字1循環(huán)1 Q循環(huán)活動(dòng)QlQ2Q3Q4解碼 開(kāi)始復(fù)位 無(wú)操作 無(wú)操作實(shí)例RESET在指令之后寄存器=復(fù)位值旗標(biāo)復(fù)位值UBffFB在借位的情況下從f中減去WREG 語(yǔ)法SUBWFB f {, dl操作數(shù)0≤f≤127d e
操作(f)- (WREG) - (B) — dest受影響的狀態(tài)C、DC、Z編碼110111 dfff ffff描述從寄存器‘f’中減去WREG及借位旗標(biāo)(進(jìn)位)(二進(jìn)制補(bǔ)碼方法)。如果‘d’為‘0’,那么將結(jié)果存儲(chǔ)于WREG中。如果‘d’為‘1’,那么將結(jié)果存儲(chǔ)回 到寄存器‘f’中。字1循環(huán)1實(shí)例1 SUBWFB REG,1在指令之前REG = 19h (0001 1001)WREG = ODh (0000 1101)C=l(因此 B = 0)在指令之后REG = OCh (0000 1100)WREG = ODh (0000 1101)C=l(無(wú)借位)DC = 0(指示數(shù)字借位)實(shí)例2 =SUBffFB REG,0在指令之前REG = IBh (0001 1011)WREG = IAh (0001 1010)C = 0 (因此 B=I)在指令之后REG = IBh (0001 1011)WREG = OOhC=l(無(wú)借位)DC = 1 (無(wú)數(shù)字借位)Z = 1結(jié)果為零
權(quán)利要求
一種n位微處理器裝置,其包括n位中央處理單元(CPU);多個(gè)特殊功能寄存器及通用寄存器,其被存儲(chǔ)器映射到多個(gè)庫(kù)且包括至少兩個(gè)16位間接存儲(chǔ)器地址寄存器,所述至少兩個(gè)16位間接存儲(chǔ)器地址寄存器可由所述CPU跨越所有庫(kù)存取;庫(kù)存取單元,其用于將所述CPU與所述多個(gè)庫(kù)中的一者耦合;數(shù)據(jù)存儲(chǔ)器,其與所述CPU耦合;及程序存儲(chǔ)器,其與所述CPU耦合,其中所述間接地址寄存器可操作以存取所述數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器且其中所述間接存儲(chǔ)器地址寄存器中的每一者中的一位指示對(duì)所述數(shù)據(jù)存儲(chǔ)器或?qū)λ龀绦虼鎯?chǔ)器的存取。
2.根據(jù)權(quán)利要求1所述的n位微處理器,其中n= 8。
3.根據(jù)權(quán)利要求1所述的n位微處理器,其進(jìn)一步包括至少一個(gè)虛擬寄存器,其中將數(shù) 據(jù)寫(xiě)入到所述虛擬寄存器導(dǎo)致使用所述間接存儲(chǔ)器地址寄存器中的一者對(duì)所述數(shù)據(jù)存儲(chǔ) 器或?qū)λ龀绦虼鎯?chǔ)器的間接存取。
4.根據(jù)權(quán)利要求3所述的n位微處理器,其中所述至少一個(gè)虛擬寄存器被映射到每一 存儲(chǔ)器庫(kù)。
5.根據(jù)權(quán)利要求1所述的n位微處理器,其進(jìn)一步包括虛擬寄存器,其中從所述虛擬寄 存器讀取數(shù)據(jù)導(dǎo)致使用所述間接存儲(chǔ)器地址寄存器中的一者對(duì)所述數(shù)據(jù)存儲(chǔ)器或?qū)λ?程序存儲(chǔ)器的間接存取。
6.根據(jù)權(quán)利要求5所述的n位微處理器,其中所述至少一個(gè)虛擬寄存器被映射到每一 存儲(chǔ)器庫(kù)。
7.根據(jù)權(quán)利要求5所述的n位微處理器,其中所述虛擬寄存器不以物理方式實(shí)施于所 述微處理器裝置中。
8.根據(jù)權(quán)利要求1所述的n位微處理器,其中所述數(shù)據(jù)存儲(chǔ)器是8位寬且所述程序存 儲(chǔ)器是14位寬。
9.根據(jù)權(quán)利要求8所述的n位微處理器,其中數(shù)據(jù)存儲(chǔ)器地址的一個(gè)額外位界定在調(diào) 試模式中使用的擴(kuò)展存儲(chǔ)器地址范圍。
10.根據(jù)權(quán)利要求8所述的n位微處理器,其中所述間接地址寄存器中的所述位是最高 有效位。
11.一種用于操作n位微處理器裝置的方法,其包括以下步驟 提供n位中央處理單元(CPU);提供多個(gè)特殊功能寄存器及通用寄存器,所述多個(gè)特殊功能寄存器及通用寄存器被存 儲(chǔ)器映射到多個(gè)庫(kù),提供至少兩個(gè)16位間接存儲(chǔ)器地址寄存器,所述至少兩個(gè)16位間接存儲(chǔ)器地址寄存 器可由所述CPU跨越所有庫(kù)存??;提供庫(kù)存取單元,所述庫(kù)存取單元用于將所述CPU與所述多個(gè)庫(kù)中的一者耦合; 提供數(shù)據(jù)存儲(chǔ)器,所述數(shù)據(jù)存儲(chǔ)器與所述CPU耦合; 提供程序存儲(chǔ)器,所述程序存儲(chǔ)器與所述CPU耦合;及使用間接地址寄存器執(zhí)行間接尋址以存取所述數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器,其中所述間 接存儲(chǔ)器地址寄存器中的每一者中的一位分別指示對(duì)所述數(shù)據(jù)存儲(chǔ)器或?qū)λ龀绦虼鎯?chǔ) 器的存取。
12.根據(jù)權(quán)利要求11所述的方法,其中n= 8。
13.根據(jù)權(quán)利要求11所述的方法,其進(jìn)一步包括通過(guò)將數(shù)據(jù)寫(xiě)入到至少一個(gè)虛擬寄存 器來(lái)產(chǎn)生間接存儲(chǔ)器寫(xiě)入存取的步驟,其中所述間接存儲(chǔ)器存取使用所述間接存儲(chǔ)器地址 寄存器中的一者。
14.根據(jù)權(quán)利要求13所述的方法,其中將所述虛擬寄存器存儲(chǔ)器映射到所有存儲(chǔ)器庫(kù)。
15.根據(jù)權(quán)利要求11所述的方法,其進(jìn)一步包括通過(guò)從至少一個(gè)虛擬寄存器讀取數(shù)據(jù) 來(lái)產(chǎn)生間接存儲(chǔ)器讀取存取的步驟,其中所述間接存儲(chǔ)器讀取存取使用所述間接存儲(chǔ)器地 址寄存器中的一者。
16.根據(jù)權(quán)利要求13所述的方法,其中將所述虛擬寄存器存儲(chǔ)器映射到所有存儲(chǔ)器庫(kù)。
17.根據(jù)權(quán)利要求15所述的方法,其中不將所述虛擬寄存器以物理方式實(shí)施于所述微 處理器裝置中。
18.根據(jù)權(quán)利要求11所述的方法,其中所述數(shù)據(jù)存儲(chǔ)器是8位寬且所述程序存儲(chǔ)器是 14位寬。
19.根據(jù)權(quán)利要求18所述的方法,其中數(shù)據(jù)存儲(chǔ)器地址的一個(gè)額外位界定在調(diào)試模式 中使用的擴(kuò)展存儲(chǔ)器地址范圍。
20.根據(jù)權(quán)利要求18所述的n位微處理器,其中所述間接地址寄存器中的所述位是最 高有效位。
全文摘要
本發(fā)明涉及一種n位微處理器裝置,其具有n位中央處理單元(CPU);多個(gè)特殊功能寄存器及通用寄存器,其被存儲(chǔ)器映射到多個(gè)庫(kù)且具有至少兩個(gè)16位間接存儲(chǔ)器地址寄存器,所述至少兩個(gè)16位間接存儲(chǔ)器地址寄存器可由所述CPU跨越所有庫(kù)存取;庫(kù)存取單元,其用于將所述CPU與所述多個(gè)庫(kù)中的一者耦合;數(shù)據(jù)存儲(chǔ)器,其與所述CPU耦合;及程序存儲(chǔ)器,其與所述CPU耦合,其中所述間接地址寄存器可操作以存取所述數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器且其中所述間接存儲(chǔ)器地址寄存器中的每一者中的一位指示對(duì)所述數(shù)據(jù)存儲(chǔ)器或?qū)λ龀绦虼鎯?chǔ)器的存取。
文檔編號(hào)G06F9/35GK101868780SQ200880116717
公開(kāi)日2010年10月20日 申請(qǐng)日期2008年11月26日 優(yōu)先權(quán)日2007年11月30日
發(fā)明者埃里克·施羅德, 扎卡賴亞斯·馬蒂納斯·斯米特, 杰羅爾德·S·茲德內(nèi)克, 瑞安·斯科特·埃利森, 約瑟夫·朱利謝爾, 維維安·德?tīng)柌ㄌ? 肖恩·斯蒂德曼 申請(qǐng)人:密克羅奇普技術(shù)公司