欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

指令編碼方法、指令編碼系統(tǒng)及數(shù)字信號(hào)處理器的制作方法

文檔序號(hào):6572806閱讀:367來(lái)源:國(guó)知局

專利名稱::指令編碼方法、指令編碼系統(tǒng)及數(shù)字信號(hào)處理器的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及指令集體系結(jié)構(gòu),尤其涉及一種指令編碼方法、指令編碼系統(tǒng)及采用該指令編碼系統(tǒng)的數(shù)字信號(hào)處理器。
背景技術(shù)
:在處理器中,控制器通常從程序存儲(chǔ)器中取出指令,進(jìn)行解碼后,發(fā)出相應(yīng)的控制信號(hào)給數(shù)據(jù)通路和存儲(chǔ)器等,以取出相應(yīng)數(shù)據(jù)并執(zhí)行解碼出的指令。處理器需要利用各種特定的指令組合來(lái)完成要求的應(yīng)用程序。存儲(chǔ)指令代碼除了占用內(nèi)存,還需占用緩存,這些對(duì)芯片面積都將造成影響。特別對(duì)于單芯片系統(tǒng),芯片面積是直接決定成本的最重要因素之一,指令集代碼的編碼效率是設(shè)計(jì)中面臨的非常重要的一個(gè)問(wèn)題。而且,對(duì)指令代碼進(jìn)行存取操作需要功耗,指令的長(zhǎng)短也直接影響著指令代碼存取功耗的大小。在進(jìn)行指令編碼時(shí),指令長(zhǎng)度越短,占用的編碼空間越大,也就是說(shuō),可提供的指令類型越少。例如,對(duì)于16位指令,其允許編碼的指令類型為2的16次方,而32位指令,其允許編碼的指令類型為2的32次方,遠(yuǎn)大于16位指令。但另一方面,指令長(zhǎng)度越長(zhǎng),則占用的存儲(chǔ)空間越大,且存取需要的功耗越大。有的處理器采用定長(zhǎng)指令,所有的指令均勻編碼,每個(gè)指令具有固定的長(zhǎng)度,例如32位。這種定長(zhǎng)指令中,有的指令需要的代碼位數(shù)比較多,如對(duì)長(zhǎng)立即數(shù)的運(yùn)算指令,定長(zhǎng)指令的長(zhǎng)度至少要求滿足這些指令必要的代碼位數(shù);另有一些指令比較短,例如裝載指令(LOAD),但仍要占用固定的長(zhǎng)度,需要浪費(fèi)存儲(chǔ)空間和存取功耗。如果采用較短的固定長(zhǎng)度,則指令編碼空間有限,無(wú)法滿足指令類型的多樣化。有的處理器則采用變長(zhǎng)指令來(lái)解決這個(gè)問(wèn)題。目前在具有變長(zhǎng)指令的處理器中,一般是采用16位和32位兩類指令長(zhǎng)度,例如專利號(hào)為第6,189,090號(hào)的美國(guó)專利,其名稱為"具變長(zhǎng)指令的數(shù)字信號(hào)處理器(Digitalsignalprocessorwithvariablewidthinstructions)"。在第6,189,090號(hào)美國(guó)專禾U中,提出了一種指令集包括16位和32位兩種長(zhǎng)度的指令。將大部分指令編入32位長(zhǎng)度指令,而少量指令編入16位長(zhǎng)度指令。采用這種指令集的確使指令在程序存儲(chǔ)器占用的空間減少了。但這種指令集中大多數(shù)指令仍舊主要采用32位長(zhǎng)度編碼,以滿足足夠的指令類型。并且由于16位的指令應(yīng)用得比較少,使得16位長(zhǎng)度指令數(shù)量有限,對(duì)指令存儲(chǔ)空間的減少所作的貢獻(xiàn)也是有限的。數(shù)字信號(hào)處理器作為一種特殊的處理器,特別用于執(zhí)行一些快速的運(yùn)算操作,常常需要設(shè)定大量特殊的專門(mén)指令,用于各類復(fù)雜的運(yùn)算操作。指令類型數(shù)量的增加也為指令存儲(chǔ)提出了更大空間的要求。例如,在面向寄存器的數(shù)字信號(hào)處理器中,通常設(shè)置了地址寄存器,在進(jìn)行存取等操作時(shí),也要設(shè)計(jì)各種指令類型來(lái)完成地址的計(jì)算。因此,對(duì)于數(shù)字信號(hào)處理器來(lái)說(shuō),更應(yīng)考慮提高指令集代碼的編碼效率。同時(shí),數(shù)字信號(hào)處理器特別強(qiáng)調(diào)以性能為導(dǎo)向,在保證滿足專門(mén)應(yīng)用的各種性能(包括處理速度等)的前提下,要求減少電路實(shí)現(xiàn)面積從而降低成本,這樣對(duì)指令存儲(chǔ)空間的壓縮也提出了更高的要求。在較多的情況下,兩條存儲(chǔ)指令和一條計(jì)算指令并行,要同時(shí)讀出和寫(xiě)入,或者同時(shí)讀出需要用到的數(shù)據(jù),或者一條存儲(chǔ)指令寫(xiě)回上一條計(jì)算完成的數(shù)據(jù),另一條存儲(chǔ)指令用于讀取需要用到的數(shù)據(jù)。因此,在DSP算法中,一般要求在做計(jì)算時(shí),能同時(shí)進(jìn)行兩個(gè)存儲(chǔ)單元的讀取或者一個(gè)存儲(chǔ)單元的讀和寫(xiě)。在超長(zhǎng)指令字系統(tǒng)中,可以一次發(fā)射多條并行的指令,對(duì)于僅包含16位和32位兩種長(zhǎng)度的指令系統(tǒng),為保證足夠的指令類型,大多數(shù)指令長(zhǎng)度需要編碼在32位,也限制了多條指令的并行。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種指令編碼方法,該方法可以提高指令集代碼的編碼效率并同時(shí)減少代碼空間。本發(fā)明的另一目的在于提供一種指令編碼系統(tǒng),對(duì)于指令集代碼的編碼效率進(jìn)行優(yōu)化和提高,并使得處理器在存儲(chǔ)開(kāi)銷、性能和功耗等各個(gè)方面都有顯著提升。本發(fā)明的另一目的在于提供一種處理器,能夠提高指令集代碼的編碼效率并同時(shí)減少代碼空間,相應(yīng)地,減少了存儲(chǔ)開(kāi)銷和功耗,提升了性能。根據(jù)本發(fā)明的第一個(gè)方面,提供一種指令編碼方法,包括如下步驟將基于長(zhǎng)立即數(shù)的存取操作指令和計(jì)算操作指令壓縮在32位長(zhǎng)度,作為第一指令;將非基于長(zhǎng)立即數(shù)的存取操作指令壓縮在16位長(zhǎng)度,作為第二指令;以及將非基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在24位長(zhǎng)度,作為第三指令。根據(jù)所述的指令編碼方法,它還包括將基于長(zhǎng)立即數(shù)的程序控制指令壓縮在32位長(zhǎng)度,作為所述第一指令;以及將非基于長(zhǎng)立即數(shù)的程序控制指令壓縮在16位長(zhǎng)度,作為所述第二指令。根據(jù)所述的指令編碼方法,所述長(zhǎng)立即數(shù)的位數(shù)根據(jù)相應(yīng)指令的類型和應(yīng)用需求綜合調(diào)整。根據(jù)所述的指令編碼方法,指令以包含至少一條指令的指令包的形式發(fā)射,指令包的長(zhǎng)度為16位、24位、32位、40位、48位、56位、64位變長(zhǎng)。根據(jù)本發(fā)明的另一方面,提供一種指令編碼系統(tǒng),包括第一指令編碼裝置,將基于長(zhǎng)立即數(shù)的存取操作指令和計(jì)算操作指令壓縮在32位長(zhǎng)度,作為第一指令;第二指令編碼裝置,將非基于長(zhǎng)立即數(shù)的存取操作指令壓縮在16位長(zhǎng)度,作為第二指令;以及第三指令編碼裝置,將非基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在24位長(zhǎng)度,作為第三指令。根據(jù)所述的指令編碼系統(tǒng),所述第一指令編碼裝置還將基于長(zhǎng)立即數(shù)的程序控制指令壓縮在32位長(zhǎng)度,作為所述第一指令;所述第二指令編碼裝置還將非基于長(zhǎng)立即數(shù)的程序控制指令壓縮在16位長(zhǎng)度,作為所述第二指令。根據(jù)所述的指令編碼系統(tǒng),所述長(zhǎng)立即數(shù)的位數(shù)根據(jù)相應(yīng)指令的類型和應(yīng)用需求綜合調(diào)整。根據(jù)所述的指令編碼系統(tǒng),指令以包含至少一條指令的指令包的形式發(fā)射,指令包的長(zhǎng)度為16位、24位、32位、40位、48位、56位、64位變長(zhǎng)。根據(jù)本發(fā)明的另一方面,提供一種數(shù)字信號(hào)處理器,它包括如上所述的白勺指令lg碼《統(tǒng)。根據(jù)所述的數(shù)字信號(hào)處理器,所述指令編碼系統(tǒng)存放在一存儲(chǔ)單元中。本發(fā)明由于采用16位/24位/32位三種指令長(zhǎng)度進(jìn)行變長(zhǎng)指令編碼,取得了非常高的代碼壓縮率(CodeDensity),顯著減少了代碼長(zhǎng)度(CodeSize)。同時(shí)增加了16位長(zhǎng)度的指令類型,也從一個(gè)方面減少了代碼長(zhǎng)度。由于取得了很高的指令編碼效率,使得處理器在存儲(chǔ)開(kāi)銷,性能和功耗方面都得到了很大的優(yōu)化。另外,本發(fā)明利用指令包發(fā)射,允許在最大并行度的約束下任意并行計(jì)算指令和存取操作指令,使處理器的應(yīng)用更為方便靈活。以下附圖為對(duì)本發(fā)明示例性實(shí)施例的輔助說(shuō)明,結(jié)合以下附圖對(duì)本發(fā)明實(shí)施例的闡述,是為進(jìn)一步揭示本發(fā)明的特征所在,但并不限制本發(fā)明,圖中相同符號(hào)代表實(shí)施例中相應(yīng)元件或步驟,其中圖1為根據(jù)本發(fā)明一個(gè)實(shí)施例的處理器的結(jié)構(gòu)示意圖。圖2為本發(fā)明指令編碼方法和指令編碼系統(tǒng)的三種指令模式示意圖。圖3示意性地表示根據(jù)本發(fā)明的指令編碼方法和指令編碼系統(tǒng)。圖4為根據(jù)本發(fā)明一個(gè)實(shí)施例的LDW指令的編碼示意圖。圖5為根據(jù)本發(fā)明一個(gè)實(shí)施例的ADDA指令編碼示意圖。圖6為根據(jù)本發(fā)明一個(gè)實(shí)施例的MOV指令的編碼示意圖。圖7為根據(jù)本發(fā)明一個(gè)實(shí)施例的壓棧指令(PUSH)的編碼示意圖。圖8為根據(jù)本發(fā)明一個(gè)實(shí)施例的ADD指令編碼示意圖。圖9為根據(jù)本發(fā)明一個(gè)實(shí)施例的SFTL指令的編碼示意圖。圖IO為根據(jù)本發(fā)明一個(gè)實(shí)施例的INST指令的編碼示意圖。具體實(shí)施例方式根據(jù)本發(fā)明的一個(gè)實(shí)施例,參見(jiàn)圖l,數(shù)字信號(hào)處理器(DSP)的指令編碼系統(tǒng)111和數(shù)據(jù)分別存放在存儲(chǔ)單元11中,經(jīng)由總線傳送??刂茊卧?2從存儲(chǔ)單元11中取出指令并對(duì)指令進(jìn)行譯碼,再由執(zhí)行單元13根據(jù)譯碼后的指令從存儲(chǔ)單元11中取出數(shù)據(jù)執(zhí)行運(yùn)算。執(zhí)行單元13包含兩個(gè)存取單元131、132和一個(gè)計(jì)算單元133,兩個(gè)存取單元131和132可以同時(shí)進(jìn)行數(shù)據(jù)存取操作;計(jì)算單元133對(duì)取出的數(shù)據(jù)進(jìn)行計(jì)算。由于數(shù)字信號(hào)處理器可能處理的計(jì)算指令比較復(fù)雜,數(shù)字信號(hào)處理器中還可以設(shè)置地址產(chǎn)生單元(未圖示),來(lái)進(jìn)行地址的運(yùn)算。本發(fā)明中地址產(chǎn)生單元提供了至少兩個(gè)地址計(jì)算單元,可以同時(shí)進(jìn)行兩條不同指令要求的地址計(jì)算。在面向寄存器的數(shù)字信號(hào)處理器中通常還可以包括地址寄存器14和數(shù)據(jù)寄存器15。在本發(fā)明的一個(gè)實(shí)施例中,地址寄存器和數(shù)據(jù)寄存器分別為16個(gè),即2的4次方。相應(yīng)地,在指令編碼時(shí),涉及地址寄存器和數(shù)據(jù)寄存器的操作分別需要在代碼中占用4位,才能指定全部的寄存器。也就是說(shuō),指定地址寄存器,在指令代碼中需要占用4位;同樣地,指定數(shù)據(jù)寄存器在指令代碼中也需要占用4位。在本發(fā)明的一個(gè)實(shí)施例中,例如,以Dn泛指某一個(gè)數(shù)據(jù)寄存器。16個(gè)數(shù)據(jù)寄存器為D0D15。每個(gè)數(shù)據(jù)寄存器的寬度為32位。又例如,以An泛指某一個(gè)地址指針寄存器。16個(gè)地址指針寄存器為A0A15。每個(gè)地址指針寄存器的寬度為24位。另外,還可以配置地址偏移寄存器,以Nn泛指某一個(gè)地址偏移寄存器。N0N3為ZD4的地址偏移寄存器,一共是4個(gè)24位的地址偏移寄存器。其中NO與A0A3搭配使用,Nl與A4A7搭配使用,N2與A8A11搭配使用,N3與A12A15搭配使用。本發(fā)明的指令編碼系統(tǒng)支持多長(zhǎng)度指令編碼,如圖2所示,本發(fā)明的指令集包括三種不同長(zhǎng)度的指令,即32位長(zhǎng)度的第一指令(圖2a)、16位長(zhǎng)度的第二指令(圖2b)和24位長(zhǎng)度的第三指令(圖2c)。長(zhǎng)立即數(shù)的位數(shù)根據(jù)指令編碼系統(tǒng)的指令類型和應(yīng)用需求綜合調(diào)整。指令中立即數(shù)的位數(shù)通常取決于編碼空間的大小。在滿足指令類型的數(shù)量時(shí),需要消耗一定的編碼空間,此外,寄存器資源的編碼空間也根據(jù)具體的硬件資源來(lái)考慮,而立即數(shù)的位數(shù)則可以由剩下的編碼空間來(lái)決定。這里的短立即數(shù)和長(zhǎng)立即數(shù)也是相對(duì)而言。例如,在本發(fā)明的一個(gè)實(shí)施例中,系統(tǒng)的數(shù)據(jù)寄存器寬度為32位,相應(yīng)的,長(zhǎng)立即數(shù)可定義為16位和/或12位長(zhǎng)度的立即數(shù)。并且,本發(fā)明中"基于長(zhǎng)立即數(shù)"的指令是一個(gè)泛化的概念,不但指指令的域中包含一項(xiàng)或一項(xiàng)以上長(zhǎng)立即數(shù)的所有指令,如果一條指令的域中包含兩項(xiàng)或兩項(xiàng)以上的短立即數(shù),也可以歸類為"基于長(zhǎng)立即數(shù)"的指令。非基于長(zhǎng)立即數(shù)的指令,則指基于長(zhǎng)立即數(shù)的指令之外的指令。非基于長(zhǎng)立即數(shù)的存取操作指令主要是基于短立即數(shù)和各類存儲(chǔ)資源的存取操作指令。存儲(chǔ)資源可以包括內(nèi)存(存儲(chǔ)器)、數(shù)據(jù)寄存器、地址寄存器、控制寄存器和其他各種寄存器。短立即數(shù)也可以根據(jù)指令系統(tǒng)的指令類型和應(yīng)用需求綜合調(diào)整。例如,在本發(fā)明的一個(gè)實(shí)施例中,系統(tǒng)的數(shù)據(jù)寄存器寬度為32位,相應(yīng)的,短立即數(shù)可定義為5位長(zhǎng)度的立即數(shù)。圖3示意性地表示根據(jù)本發(fā)明的指令編碼方法和指令編碼系統(tǒng)。參見(jiàn)圖3a,步驟310,接收存取操作指令或計(jì)算操作指令。步驟311,判斷存取操作指令或計(jì)算操作指令是否基于長(zhǎng)立即數(shù),如是,步驟312,將該存取操作指令或計(jì)算操作指令壓縮在32位長(zhǎng)度,作為第一指令。如否,步驟313,繼續(xù)判斷該非基于長(zhǎng)立即數(shù)的指令是否為存取操作指令,如是,步驟314,將該非基于長(zhǎng)立即數(shù)的存取操作指令壓縮在16位長(zhǎng)度,作為第二指令。如否,步驟315,將該非基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在24位長(zhǎng)度,作為第三指令。參見(jiàn)圖3b,步驟320,接收程序控制指令。步驟321,判斷程序控制指令是否基于長(zhǎng)立即數(shù),如是,步驟322,將該程序控制指令壓縮在32位長(zhǎng)度,作為第一指令。如否,步驟323,將該程序控制指令壓縮在16位長(zhǎng)度,作為第二指令。現(xiàn)在,以部分存取操作指令、計(jì)算操作指令和程序控制指令為例,詳細(xì)描述根據(jù)本發(fā)明的指令編碼方法和指令編碼系統(tǒng)。存取操作是處理器中使用頻率非常高的一類操作,本發(fā)明把存取操作盡可能地壓縮在最短的指令長(zhǎng)度。這也從一個(gè)方面減少了取指令的功耗。此外,在存取密集的處理器(例如DSP)算法中,一般要求在做計(jì)算時(shí),能同時(shí)進(jìn)行兩個(gè)存儲(chǔ)單元的讀取或者一個(gè)存儲(chǔ)單元的讀和寫(xiě)。而縮短存取操作的指令代碼長(zhǎng)度,十分有利于兩條存取操作指令的并行操作。在本發(fā)明的一個(gè)實(shí)施例中,由于長(zhǎng)立即數(shù)所占的位數(shù)較多,對(duì)于基于長(zhǎng)立即數(shù)的存取操作指令,16位長(zhǎng)度代碼無(wú)法指定長(zhǎng)立即數(shù),因此把基于長(zhǎng)立即數(shù)的存取操作指令壓縮在32位,即前文所述的第一指令。把非基于長(zhǎng)立即數(shù)的存取操作指令壓縮在16位,即前文所述的第二指令。相對(duì)于現(xiàn)有技術(shù),本發(fā)明中增加了16位指令長(zhǎng)度的指令類型,尤其是把大多數(shù)存取操作指令壓縮到了16位長(zhǎng)度,從一個(gè)方面提高了代碼壓縮率,減少了代碼長(zhǎng)度。存取操作指令用于在各類存儲(chǔ)資源(包括內(nèi)存、數(shù)據(jù)寄存器和地址寄存器)之間進(jìn)行數(shù)據(jù)搬運(yùn)和地址計(jì)算等,包括裝載/存儲(chǔ)指令、地址計(jì)算指令和移動(dòng)指令等多種指令類型,例如LDW、LDB、LDA、STW、STB、STA、ADDA、SUBA、MOV、MOVA等。表一示例性地列出了一些存取操作指令。其中,W表示字(Word),4字節(jié),32位;B表示字節(jié)(Byte),8位;HW表示半字(HalfWord),2字節(jié),16位;DW表示雙字(DoubleWord),8字節(jié),64位。<table>tableseeoriginaldocumentpage11</column></row><table>表一每種指令類型各自又分別定義了多種類型的指令。下面分別以裝載指令LDW、地址計(jì)算指令A(yù)DDA和移動(dòng)指令MOV為例進(jìn)行說(shuō)明。LDW指令用來(lái)執(zhí)行裝載一個(gè)字?jǐn)?shù)據(jù)到數(shù)據(jù)寄存器,又分為7種指令類型,分別以LDW.l、LDW.2、.......LDW.7來(lái)表示。這七種指令類型主要根據(jù)尋址模式來(lái)區(qū)分,其具體描述如表二所示。<table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table>表二圖4為七種類型LDW指令的編碼示意圖,其中包括16位指令(圖4a)和32位指令(圖4b)。Ax表示源操作數(shù)是地址指針寄存器,Dd表示目標(biāo)操作數(shù)是數(shù)據(jù)寄存器,Simml2表示12位的帶符號(hào)(Signed)立即數(shù)。LDW.1、LDW.2、LDW.3、LDW.4、LDW.6是基于地址寄存器的裝載指令,編碼為16位長(zhǎng)度的指令,[15:8]位為操作碼(opcode),可以分別指示不同的指令類型,其中[13]位為聯(lián)接位(L),用來(lái)指示在同一指令包中該條指令之后是否存在后續(xù)指令。[7:4]位為源操作數(shù),來(lái)自地址指針寄存器,位[3:0]為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器。LDW.5和LDW.7是基于長(zhǎng)立即數(shù)的裝載指令,編碼為32位長(zhǎng)度的指令,[31:20]位為操作碼,可以分別指示不同的指令類型,其中[26]位為聯(lián)接位(L),用來(lái)指示在同一指令包中該條指令之后是否存在后續(xù)指令。[19:16]位為源操作數(shù),來(lái)自地址指針寄存器。[15:12]位為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器。[ll:O]位為12位的有符號(hào)立即數(shù),可以直接參與地址運(yùn)算,實(shí)現(xiàn)強(qiáng)大的位操作能力。ADDA指令用來(lái)執(zhí)行將地址指針寄存器Ax與短立即數(shù)/長(zhǎng)立即數(shù)/目標(biāo)地址指針寄存器Ad進(jìn)行加法運(yùn)算,結(jié)果存入目標(biāo)地址指針寄存器Ad中。ADDA指令又分為3種指令類型,分另廿以ADDA.l、ADDA.2、ADDA.3來(lái)表示。這3種指令類型主要根據(jù)尋址模式來(lái)區(qū)分,其具體描述如表三所示。其中,Ax表示源操作數(shù)是地址指針寄存器,Ad表示目標(biāo)操作數(shù)是地址指針寄存器,Simml2表示12位的有符號(hào)(Signed)立即數(shù)。<table>tableseeoriginaldocumentpage13</column></row><table>表三圖5為三種類型的ADDA指令編碼示意圖,其中包括16位指令(圖5a)和32位指令(圖5b)。ADDA.l是基于短立即數(shù)的地址計(jì)算指令,編碼為16位長(zhǎng)度的指令。[15:9]位為操作碼(叩code),指示指令類型,其中[13]位為聯(lián)接位(L),用來(lái)指示在同一指令包中該條指令之后是否存在后續(xù)指令。[8:4]位為5位的無(wú)符號(hào)立即數(shù),[3:0]位為目標(biāo)操作數(shù),送往地址指針寄存器。ADDA.3是基于地址寄存器的地址計(jì)算指令,編碼為16位長(zhǎng)度的指令,[15:8]位為操作碼(opcode),指示指令類型,其中[13]位為聯(lián)接位(L),用來(lái)指示在同一指令包中該條指令之后是否存在后續(xù)指令。[7:4]位為源操作數(shù),來(lái)自地址指針寄存器,[3:0]位為目標(biāo)操作數(shù),送往地址指針寄存器。ADDA.2是基于長(zhǎng)立即數(shù)的地址計(jì)算指令,編碼為32位長(zhǎng)度的指令。[3I:20]位為操作碼,可以指示指令類型,其中[26]位為聯(lián)接位(L),用來(lái)指示在同一指令包中該條指令之后是否存在后續(xù)指令。[19:16]位為源操作數(shù),來(lái)自地址指針寄存器。[15:12]位為目標(biāo)操作數(shù),送往地址指針寄存器。[ll:O]位為12位的立即數(shù),可以直接參與地址運(yùn)算。MOV指令用來(lái)執(zhí)行將數(shù)據(jù)寄存器值和別的寄存器(數(shù)據(jù)寄存器/地址指針寄存器/控制寄存器/標(biāo)志寄存器)的值進(jìn)行相互移動(dòng)。MOV指令又分為5種指令類型,分別以MOV.l、MOV.2、.......MOV.5來(lái)表示。這5種指令類型具體描述如表四所示。表中Cx表示源操作數(shù)為控制寄存器,Cd表示目標(biāo)操作數(shù)為控制寄存器。Dx表示源操作數(shù)是數(shù)據(jù)寄存器,Dd表示目標(biāo)操作數(shù)是數(shù)據(jù)寄存器,Ax表示源操作數(shù)是地址指針寄存器,Simml2表示12位的有符號(hào)(Signed)立即數(shù)。<table>tableseeoriginaldocumentpage14</column></row><table>表四圖6為5種類型MOV指令的編碼示意圖,都是編碼為16位長(zhǎng)度的指令,分別基于地址寄存器、數(shù)據(jù)寄存器或控制寄存器。[15:8]位為操作碼(opcode),可以分別指示不同的指令類型,其中[13]位為聯(lián)接位(L),用來(lái)指示在同一指令包中該條指令之后是否存在后續(xù)指令。[7:4]位為源操作數(shù),來(lái)自地址寄存器、數(shù)據(jù)寄存器或控制寄存器。位[3:0]為目標(biāo)操作數(shù),送往地址寄存器、數(shù)據(jù)寄存器或控制寄存器。程序控制指令通常也使用較為頻繁,在本發(fā)明的一個(gè)實(shí)施例中,把大多數(shù)程序控制指令壓縮在16位。具體來(lái)說(shuō),把基于長(zhǎng)立即數(shù)的程序控制指令壓縮在32位,而把除基于長(zhǎng)立即數(shù)之外的程序控制指令壓縮在16位,如壓棧指令(PUSH)、出棧指令(POP)、中斷操作指令(INT)、從中斷返回操作指令(RTI)等都?jí)嚎s在16位。處理器中通常還會(huì)用到一些特殊指令,如調(diào)試操作(DEBUG)、停機(jī)操作(HALT)、空操作(NOP)等,這些特殊指令也可以壓縮在16位指令長(zhǎng)度。因此,本發(fā)明最大限度地把多種指令類型壓縮在16位指令長(zhǎng)度,充分壓縮了指令代碼,減少了指令存儲(chǔ)空間和所需功耗。以下以壓棧指令(PUSH)為例來(lái)進(jìn)行說(shuō)明。壓棧指令(PUSH)將處理器內(nèi)部的寄存器資源壓棧,這些資源寄存器都當(dāng)作一個(gè)32位的寬度進(jìn)行壓棧,對(duì)于不足32位的寄存器,高位進(jìn)行填充,補(bǔ)足32位后再壓棧。壓棧前先使程序指針SP自減,使SP:SP-4,然后再進(jìn)行壓棧。表六示例性地列出了三種類型的壓棧指令(PUSH)。<table>tableseeoriginaldocumentpage15</column></row><table>表五圖7相應(yīng)指明了三種類型壓棧指令(PUSH)的編碼。對(duì)于基于數(shù)據(jù)寄存器和地址指針寄存器的PUSH.l和PUSH.2指令,由于數(shù)據(jù)寄存器和地址指針寄存器都是16個(gè),編碼時(shí),[15:4]位為操作碼,指明指令操作類型。[3:0]位指明進(jìn)行壓棧操作的寄存器資源。對(duì)于地址偏移寄存器壓棧指令,例如在本發(fā)明一實(shí)施例中處理器提供了4個(gè)地址偏移寄存器,則只需[1:0]位編碼。除了16位和32位的指令長(zhǎng)度,本發(fā)明的指令編碼系統(tǒng)增加了24位的指令長(zhǎng)度,把非基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在24位,即前文所述的第三指令。非基于長(zhǎng)立即數(shù)的計(jì)算操作指令主要是基于短立即數(shù)和各類存儲(chǔ)資源的計(jì)算操作指令?;陂L(zhǎng)立即數(shù)的計(jì)算操作指令,24位長(zhǎng)度無(wú)法壓縮,因此把基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在32位。這里通過(guò)把大量現(xiàn)有技術(shù)中32位長(zhǎng)度的指令壓縮在24位指令長(zhǎng)度,使指令系統(tǒng)取得了非常高的代碼壓縮率(CodeDensity),顯著減少了代碼長(zhǎng)度(CodeSize),從而減少了代碼存儲(chǔ)空間和讀取指令時(shí)的功耗。計(jì)算操作指令用于數(shù)據(jù)的計(jì)算,包括算術(shù)邏輯運(yùn)算指令、比特操作指令等多種指令類型,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際應(yīng)用需求增減相應(yīng)的指令類型。表六示例性地列出了一些計(jì)算操作指令。<table>tableseeoriginaldocumentpage16</column></row><table>表六以下以一個(gè)算術(shù)邏輯運(yùn)算指令A(yù)DD和一個(gè)比特操作指令I(lǐng)NST為例來(lái)進(jìn)行說(shuō)明。算術(shù)邏輯運(yùn)算指令A(yù)DD用于將數(shù)據(jù)寄存器Dx與短立即數(shù)/長(zhǎng)立即數(shù)/另一數(shù)據(jù)寄存器Dy進(jìn)行加法運(yùn)算,得到的結(jié)果存入目標(biāo)寄存器Dd中。ADD指令又分為5種指令類型,分別以ADD.l、ADD.2、ADD.3、ADD.4、ADD.5來(lái)表示。這5種指令類型具體描述如表七所示。<table>tableseeoriginaldocumentpage16</column></row><table><table>tableseeoriginaldocumentpage17</column></row><table>表七圖8為5種類型的ADD指令編碼示意圖,包括24位指令(圖8a)和32位指令(圖8b)。其中,Dx表示源操作數(shù)1是數(shù)據(jù)寄存器,Dy表示源操作數(shù)2是數(shù)據(jù)寄存器,Dd表示目標(biāo)操作數(shù)是數(shù)據(jù)寄存器,Simml6表示16位的有符號(hào)(Signed)立即數(shù),Uimm5表示5位的無(wú)符號(hào)(Unsigned)立即數(shù),SN表示縮放標(biāo)志符,SS表示左移或者右移16位標(biāo)志符。ADD.l是基于短立即數(shù)的加法操作指令,編碼為24位長(zhǎng)度的指令。[23:13]位為操作碼(叩code),指示指令類型。[12:8]位為5位的無(wú)符號(hào)立即數(shù),[7:4]位為源操作數(shù),來(lái)自數(shù)據(jù)寄存器Dx,[3:0]位為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器Dd。ADD.2是基于數(shù)據(jù)寄存器的加法操作指令,編碼為24位長(zhǎng)度的指令。[23:12]位為操作碼(opcode),指示指令類型。[11:8]位為源操作數(shù)1,來(lái)自數(shù)據(jù)寄存器Dx,[7:4]位為源操作數(shù)2,來(lái)自數(shù)據(jù)寄存器Dy,[3:0]位為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器Dd。ADD.4是基于數(shù)據(jù)寄存器的加法操作指令,編碼為24位長(zhǎng)度的指令。[23:14]位為操作碼(叩code),指示指令類型。[13:12]位為縮放標(biāo)志符SN,指示算術(shù)移位。[11:8]位為源操作數(shù)1,來(lái)自數(shù)據(jù)寄存器Dx,[7:4]位為源操作數(shù)2,來(lái)自數(shù)據(jù)寄存器Dy,[3:0]位為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器Dd。ADD.5也是基于數(shù)據(jù)寄存器的加法操作指令,編碼為24位長(zhǎng)度的指令,編碼細(xì)節(jié)與ADD.4相似,區(qū)別僅在于,[23:13]位為操作碼(叩code),指示指令類型。[12]位為左移或者右移16位標(biāo)志符SS。ADD.3是基于長(zhǎng)立即數(shù)的地址計(jì)算指令,編碼為32位長(zhǎng)度的指令。[31:24]位為操作碼,可以指示指令類型,[23:20]位為源操作數(shù),來(lái)自數(shù)據(jù)寄存器。[19:16]位為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器。[15:0]位為16位的立即數(shù)。比特操作指令SFTL用于將一個(gè)數(shù)據(jù)寄存器Dx中的數(shù)據(jù)進(jìn)行左移位。SFTL指令分為2種指令類型,分別以SFTL.l和SFTL.2來(lái)表示,具體描述見(jiàn)表八。<table>tableseeoriginaldocumentpage18</column></row><table>表八圖9為SFTL.l和SFTL.2指令的編碼示意圖,都是編碼為24位長(zhǎng)度的指令。SFTL.l是基于短立即數(shù)的比特操作指令,[23:13]位為操作碼(opcode),指示指令類型。[12:8]位為5位的無(wú)符號(hào)立即數(shù),[7:4]位為源操作數(shù),來(lái)自數(shù)據(jù)寄存器Dx,[3:0]位為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器Dd。SFTL.2是基于數(shù)據(jù)寄存器的比特操作指令,[23:12]位為操作碼(opcode),指示指令類型。[11:8]位為源操作數(shù)1,來(lái)自數(shù)據(jù)寄存器Dy,[7:4]位為源操作數(shù)2,來(lái)自數(shù)據(jù)寄存器Dx,[3:0]位為目標(biāo)操作數(shù),送往數(shù)據(jù)寄存器Dd。比特操作指令I(lǐng)NST用于將一個(gè)數(shù)據(jù)寄存器DX中的從最低位起的某一段數(shù)據(jù)提取出來(lái),并將其插入到目標(biāo)寄存器Dd中的特定位置。INST指令分為2種指令類型,分別以INST.l和INST.2來(lái)表示,具體描述見(jiàn)表九。Dx為被提取的數(shù)據(jù)寄存器,Dy中規(guī)定了提取的參數(shù),Dy[4:0]為提取數(shù)據(jù)的長(zhǎng)度(Length),Dy[20:16]為提取數(shù)據(jù)嵌入到目標(biāo)寄存器中的從左邊開(kāi)始的起始位置(Position)。INST.l類型1Dd=工NST(Dx,Dy)Dx為被提取的數(shù)據(jù)寄存器,Dy中規(guī)定了提取的參數(shù),Dx的數(shù)據(jù)嵌入到Dd中,Dd中的其他數(shù)據(jù)保持不變。INST.2類型2Dd=INST(Dx,#imm5,#imm5)Dx為被提取的數(shù)據(jù)寄存器,提取的參數(shù)為5位立即數(shù),Dx的數(shù)據(jù)嵌入到Dd中,Dd中的其他數(shù)據(jù)保持不變。表九圖IO為INST.l和INST.2指令的編碼示意圖,分別是24位指令(圖10a)和32位指令(圖10b)。INST.l是基于數(shù)據(jù)寄存器的比特操作指令,編碼為24位長(zhǎng)度的指令。[23:12]位為操作碼(opcode),指示指令類型。[11:8]位為數(shù)據(jù)寄存器Dy,這里數(shù)據(jù)寄存器Dy為參數(shù)寄存器,其中規(guī)定了提取的參數(shù)。Dy[4:0]為提取數(shù)據(jù)的長(zhǎng)度(Length),Dy[20:16]為提取數(shù)據(jù)嵌入到目標(biāo)寄存器中的從左邊開(kāi)始的起始位置(Position)。[7:4]位為數(shù)據(jù)寄存器Dx,Dx為被提取的數(shù)據(jù)寄存器。[3:0]位為數(shù)據(jù)寄存器Dd,Dd為目標(biāo)寄存器,接受數(shù)據(jù)的插入INST.l指令將Dx[Length-l:O]的數(shù)據(jù)嵌入到Dd[Length+Position-l.'Position]中,Dd中的其他數(shù)據(jù)保持不變。INST.2是基于兩項(xiàng)短立即數(shù)的指令,按照前文所述的本發(fā)明的定義,屬于基于長(zhǎng)立即數(shù)的指令,編碼為32位指令。[31:24]位為操作碼(opcode),指示指令類型。[23:20]位為數(shù)據(jù)寄存器Dx,Dx為被提取的數(shù)據(jù)寄存器。[19:16]位為數(shù)據(jù)寄存器Dd,Dd為目標(biāo)寄存器,接受數(shù)據(jù)的插入。[15:11]位為5位立即數(shù)Uimm5(P),給出數(shù)據(jù)插入Dd的初始位置(Position),[10:6]位為5位立即數(shù)Uimm5(L),給出插入Dd的數(shù)據(jù)的長(zhǎng)度(Length)。[5:0〗位可保留。INST.2指令將Dx[Length-l:O]的數(shù)據(jù)嵌入到Dd[Length+Position-l:Position]中,Dd中的其他數(shù)據(jù)保持不變。在本發(fā)明的一個(gè)實(shí)施例中,指令體系采用了超長(zhǎng)指令字,存儲(chǔ)單元可以以包含至少一條指令的指令包的形式發(fā)射指令。指令包的長(zhǎng)度是可變的。指令包的長(zhǎng)度的變化可以是為16位/24位/32位/40位/48位/56位/64位變長(zhǎng)。對(duì)于16位、24位和32位這三類長(zhǎng)度的指令,基本可以以任何一種方式并行,其限制主要在于總線寬度。例如,當(dāng)總線寬度為64位時(shí),指令包長(zhǎng)度最大為64位。此外,指令包中并行指令要跟硬件結(jié)構(gòu)相對(duì)應(yīng),并行的計(jì)算指令的數(shù)量不超過(guò)計(jì)算單元的數(shù)量,并行的存取操作指令的數(shù)量不超過(guò)存儲(chǔ)單元的數(shù)量。例如,在本發(fā)明的一個(gè)實(shí)施例中,包含兩個(gè)存取單元和一個(gè)計(jì)算單元,因此,一個(gè)指令包中,只限于最多一次并行兩條存取操作指令和一條計(jì)算指令??梢岳斫獾氖?,改變存取單元和計(jì)算單元的數(shù)量,一個(gè)指令包中并行指令的最大并行度也會(huì)有相應(yīng)變化。例如在提供三個(gè)存取單元的情況下,一個(gè)指令包中最多可以并行三條存取操作指令。本發(fā)明采用16位、24位和32位這三類長(zhǎng)度的指令,最大限度地允許指令包長(zhǎng)度的變化,使得并行指令包的效率得到了優(yōu)化和提高,也從一個(gè)方面提高了處理器的性能。總而言之,本發(fā)明由于采用16位/24位/32位三種指令長(zhǎng)度進(jìn)行變長(zhǎng)指令編碼,實(shí)現(xiàn)了代碼壓縮率(CodeDensity)最大化,并取得了很高的指令編碼效率,使得處理器在存儲(chǔ)開(kāi)銷,性能和功耗方面都得到了很大的優(yōu)化。并且,本發(fā)明把指令集中較為常用的基于寄存器的指令編碼為16位或24位長(zhǎng)度,如基于寄存器的存取操作指令編碼為16位,基于寄存器的計(jì)算操作指令編碼為24位;而把較不常用的基于長(zhǎng)立即數(shù)的指令編碼為32位,包括基于長(zhǎng)立即數(shù)的存取操作指令和基于長(zhǎng)立即數(shù)的計(jì)算操作指令都編碼為32位。這也進(jìn)一步改善了處理器的性能和功耗。本發(fā)明并不限于實(shí)施例所做的闡述,任何基于本發(fā)明的修改和本發(fā)明的等同物都應(yīng)涵蓋在本發(fā)明的權(quán)利要求的精神和范圍之內(nèi)。權(quán)利要求1.一種指令編碼方法,包括如下步驟將基于長(zhǎng)立即數(shù)的存取操作指令和計(jì)算操作指令壓縮在32位長(zhǎng)度,作為第一指令;將非基于長(zhǎng)立即數(shù)的存取操作指令壓縮在16位長(zhǎng)度,作為第二指令;以及將非基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在24位長(zhǎng)度,作為第三指令。2.如權(quán)利要求l所述的指令編碼方法,其特征在于還包括將基于長(zhǎng)立即數(shù)的程序控制指令壓縮在32位長(zhǎng)度,作為所述第一指令;以及將非基于長(zhǎng)立即數(shù)的程序控制指令壓縮在16位長(zhǎng)度,作為所述第二指令。3.如權(quán)利要求1或2所述的指令編碼方法,其特征在于,所述長(zhǎng)立即數(shù)的位數(shù)根據(jù)相應(yīng)指令的類型和應(yīng)用需求綜合調(diào)整。4.如權(quán)利要求1或2所述的指令編碼方法,其特征在于,指令以包含至少一條指令的指令包的形式發(fā)射,指令包的長(zhǎng)度最大為總線寬度,指令包中可以任意并行計(jì)算指令和存取操作指令,并行的計(jì)算指令的數(shù)量不超過(guò)計(jì)算單元的數(shù)量,并行的存取操作指令的數(shù)量不超過(guò)存儲(chǔ)單元的數(shù)量。5.如權(quán)利要求4所述的指令編碼方法,其特征在于,所述指令包的長(zhǎng)度為16位、24位、32位、40位、48位、56位、64位變長(zhǎng)。6.—種指令編碼系統(tǒng),包括第一指令編碼裝置,將基于長(zhǎng)立即數(shù)的存取操作指令和計(jì)算操作指令壓縮在32位長(zhǎng)度,作為第一指令;第二指令編碼裝置,將非基于長(zhǎng)立即數(shù)的存取操作指令壓縮在16位長(zhǎng)度,作為第二指令;以及第三指令編碼裝置,將非基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在24位長(zhǎng)度,作為第三指令。7.如權(quán)利要求6所述的指令編碼系統(tǒng),其特征在于所述第一指令編碼裝置還將基于長(zhǎng)立即數(shù)的程序控制指令壓縮在32位長(zhǎng)度,作為所述第一指令;以及所述第二指令編碼裝置還將非基于長(zhǎng)立即數(shù)的程序控制指令壓縮在16位長(zhǎng)度,作為所述第二指令。8.如權(quán)利要求6或7所述的指令編碼系統(tǒng),其特征在于,所述長(zhǎng)立即數(shù)的位數(shù)根據(jù)相應(yīng)指令的類型和應(yīng)用需求綜合調(diào)整。9.如權(quán)利要求6或7所述的指令編碼系統(tǒng),其特征在于,指令以包含至少一條指令的指令包的形式發(fā)射,指令包的長(zhǎng)度最大為總線寬度,指令包中可以任意并行計(jì)算指令和存取操作指令,并行的計(jì)算指令的數(shù)量不超過(guò)計(jì)算單元的數(shù)量,并行的存取操作指令的數(shù)量不超過(guò)存儲(chǔ)單元的數(shù)量。10.如權(quán)利要求9所述的指令編碼系統(tǒng),其特征在于,所述指令包的長(zhǎng)度為16位、24位、32位、40位、48位、56位、64位變長(zhǎng)。11.一種數(shù)字信號(hào)處理器,其特征在于包括如權(quán)利要求6所述的指令編碼系統(tǒng)。12.如權(quán)利要求11所述的數(shù)字信號(hào)處理器,其特征在于所述指令編碼系統(tǒng)存放在一存儲(chǔ)單元中。全文摘要指令編碼方法和指令編碼系統(tǒng)包括將基于長(zhǎng)立即數(shù)的存取操作指令和計(jì)算操作指令壓縮在32位長(zhǎng)度,作為第一指令;將非基于長(zhǎng)立即數(shù)的存取操作指令壓縮在16位長(zhǎng)度,作為第二指令;以及將非基于長(zhǎng)立即數(shù)的計(jì)算操作指令壓縮在24位長(zhǎng)度,作為第三指令。根據(jù)所述的指令編碼方法和系統(tǒng),還可以將基于長(zhǎng)立即數(shù)的程序控制指令壓縮在32位長(zhǎng)度,作為所述第一指令;將非基于長(zhǎng)立即數(shù)的程序控制指令壓縮在16位長(zhǎng)度,作為所述第二指令。本發(fā)明的數(shù)字信號(hào)處理器包括如上所述的的指令編碼系統(tǒng)。由于采用16位/24位/32位三種指令長(zhǎng)度進(jìn)行變長(zhǎng)指令編碼,取得了非常高的代碼壓縮率,顯著減少了代碼長(zhǎng)度。文檔編號(hào)G06F9/38GK101382884SQ200710045699公開(kāi)日2009年3月11日申請(qǐng)日期2007年9月7日優(yōu)先權(quán)日2007年9月7日發(fā)明者周振亞,張亞林申請(qǐng)人:上海奇碼數(shù)字信息有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
阳泉市| 大余县| 吉首市| 宝清县| 福海县| 盐源县| 台中县| 元阳县| 新河县| 肇州县| 西贡区| 泰州市| 苍山县| 滁州市| 彝良县| 交城县| 海口市| 新乡市| 甘泉县| 苏尼特右旗| 广西| 友谊县| 寿宁县| 保靖县| 开江县| 库车县| 兰州市| 台东县| 酒泉市| 乃东县| 百色市| 黄山市| 丁青县| 宁安市| 临沂市| 嵩明县| 双桥区| 河南省| 留坝县| 天长市| 祥云县|