專利名稱:適合于進行飽和運算的處理器的制作方法
技術領域:
本發明涉及用于信息處理裝置的處理器,特別涉及飽和運算的改進。
背景技術:
飽和運算用于圖像處理、伺服控制等各種技術領域。所謂飽和運算就是判斷運算結果是否落在預置的運算幅度之內,或者是否超過預置的運算幅度,在超過的情況下,對運算結果進行修正運算。
之所以需要這種飽和運算是為防止出現因運算發生使正負號反轉而輸出背離邏輯值的運算結果。在整數運算中,把最高位分配作符號用,而代表數值的正負。以16位運算為例,最高位的第15位變成符號位(此處,把最低位作為第0位)。一旦把最高位作這樣的分配,運算中的進位最好停留在第14位之內,一旦出現從第14位向第15位的進位,“正數+正數”的計算結果就變成為“負數”而出現。
通過校驗是否使符號位以上有變化,則可以檢測有沒有發生上述現象。在32位運算器中進行16位整數運算的情況下,第15位變成符號位,而第16位~第31位應該不變動。故,其上限值就變成32位帶符號的整數0×00007FFF。另外,將其反演帶符號的整數0×FFFF8000變為下限。當運算結果超過由此上限值和下限值構成的范圍時,可以認為輸出了不能以16位運算幅度代表的運算結果(對于運算結果超出預定的運算幅度的,在本說明書中,稱作“運算結果已飽和”,對于運算結果落在預定的運算結果之內的,在本說明書中,稱作“運算結果不飽和”)。
當進行這種飽和運算時,在處理過程中,在運算指令之后,首先舉出插入修正程序的方法。下面示出修正程序之一例,將它作為第1已有技術加以說明。再有,作為使用本程序時的規定,要把數據寄存器用于運算結果的存貯。在本程序中的指令是2操作數的標記,將左邊、右邊的操作數分別稱作第1操作數、第2操作數。將第2操作數兼作傳送指令的傳送地址的指定和運算結果的存貯地址的指定。
指令1CMP 上限值,D1指令2BCS NOT_CARRY指令3MOV 上限值,D1指令4BRA ENDNOT_CARRY指令5CMP 下限值,D1指令6BCC END指令7MOV 下限值,D1END對此程序的各指令按順序加以說明,首先在指令1“CMP上限值,D1”中,將D1寄存器的值與上限值做比較。從由第2操作數所指示的寄存器D1的保持值減去在第1操作數中作為立即值所記述的上限值。在D1寄存器的保持值比上限值小的情況下,出現退位,使標志寄存器中的進位標志置位。
指令2中的“BCS”的“B”是指分支指令,“CS”是指“進位置位(Carry Set)”。一旦進位標志置位,從指令2執行向標記“NOT-CARRY”的分支。
比較的結果,當D1寄存器的值超過上限值時,轉移到指令3,根據指令3“MOV上限值,D1”,將上限值傳送到寄存器D1,對運算結果用上限值來修正。修正后,在指令4的無條件分支指令“BRA END”中,在代表飽和運算終止的END標記,結束通過分支的飽和運算。
以上是當寄存器D1的保持值超過上限值時的操作。接下來對于寄存器D1的保持值低于上限值的情況加以說明。當低于上限值時,在指令5“CMP 下限值,D1”中,將D1寄存器的值與下限值做比較。此時的比較,是從由第2操作數所指示的寄存器D1的保持值減去在第1操作數中作為立即值所記述的下限值。在D1寄存器的保持值小于下限值時,發生退位,使標志寄存器中的進位標志置位。
由指令6,根據進位標志的置位,復位進行分支,在指令7的傳送命令“MOV 下限值,D1”中,由于將下限值傳送給寄存器D1,對運算結果由下限值來修正,結束飽和運算。
以上就是修正程序中飽和運算的全部內容,但是在這種第1已有技術中的問題是一次飽和運算要插入七條指令而使編碼量增大。在把程序預先存儲在ROM的情況下,使ROM的數量跟著編碼量的增多而增加,從而提高了制造成本。這種編碼量的多少,當然也使執行時間成為問題。上述修正程序中存在分支指令(指令2、指令4、指令6),在執行本修正程序時,不管是否飽和而必定發生分支,因此在引入流水線處理時,其處理效率顯著降低。
由于在程序內設置了專用電路,而力圖降低編碼量并提高執行速度的技術,在特開平7-210368號公報中已有介紹。本說明中所介紹的技術作為第2已有技術,在下面加以說明。
圖1是由本說明書所揭示的程序的內部結構,具備鎖存電路51、52、54,存儲著運算數據和運算結果并根據指令解讀結果將其輸出的寄存文件71,采用寄存文件71的輸出進行運算的算術運算電路72,在這些方面,它與已有程序結構沒有不同之處。
在本圖中作為專用電路而設置的是飽和運算修正電路70,它位于算術運算電路72與數據總線之間。
飽和運算修正電路70的內部結構示于圖2。如圖2所示,飽和運算修正電路70由判斷算術運算電路72的輸出單元所表示的運算結果是飽和還是不飽和的飽和判斷電路73、產生運算判斷上限值及下限值的常數發生電路74、選擇輸出算術運算電路72的結果、由常數發生電路74所產生的上限值和下限值之中的一個值的多路轉換器75構成。如上所述,由于飽和運算電路70設置在算術運算電路72的輸出單元與數據總線之間,算術運算電路72的運算結果被鎖存電路51鎖存并由飽和判斷電路73立刻判斷該值是飽和還是不飽和,假若飽和,則輸出上限值、下限值以替代運算結果的輸出。
由于起動飽和運算修正電路70,本程序在圖3提供了以一覽表表示的指令置位。在該一覽表的指令中“ADD D0,D1”、“SUB D0,D1”、“MUL D0,D1”是通常的運算指令,而其余的“ADDS16 D0,D1”、“SUBS16 D0,D1”、“MULS16 D0,D1”、“ADDS24 D0,D1”、“SUBS24 D0,D1”、“MULS24 D0,D1”完全是為飽和運算修正電路70而準備的指令。
“ADDS16 D0 D1”、“SUBS16 D0,D1”、“MULS16 D0,D1”是在算術運算電路72進行加法、減法、乘法的算術運算,并對其運算結果由飽和運算修正電路70進行16位幅度的飽和運算的帶飽和運算的算術運算指令的命令。
“ADDS24 D0,D1”、“SUBS24 D0,D1”、“MULS24 D0,D1”是由算術運算電路72進行加法、減法、乘法的算術運算,并對其運算結果由飽和運算修正電路70進行24位幅度的飽和運算的帶飽和運算的算術運算指令的命令。
例如,“ADDS16 D0,D1”是在算術運算電路72中由算術運算電路72執行寄存器D0,寄存器D1的保持值的加法運算,并對其運算結果由飽和運算修正電路70執行16位幅度的飽和運算。“SUBS16 D0,D1”是在算術運算電路72中由算術運算電路72執行寄存器D0、寄存器D1的保持值的減法運算,并對其運算結果由飽和運算修正電路70執行16位幅度的飽和運算。
在第1種已有技術中,每一次飽和運算必須使用包含分支指令的7條指令,在第2種已有技術中,由使用圖3中所記載的指令中的某一條,在程序中可以一次完成算術運算和其運算結果的飽和運算。如此,在程序中可以用一條指令指示運算及對其運算結果的飽和運算,因而第2已有技術可以大幅度減少編碼量。
參照定時圖來說明,會加深對以上程序組成內容的操作的理解。參照圖4所示的定時圖,簡單說明其操作。
解讀結果若是帶飽和運算的運算指令,首先在時刻T11由鎖存電路51、鎖存電路52鎖存寄存文件71的保持值。一經鎖存,算術運算電路72對鎖存電路51、鎖存電路52所鎖存的保持值彼此間不做運算,輸出運算結果。
在時刻T12,飽和判斷電路73對運算結果與常數發生電路74所產生的上限值或下限值做比較,判斷運算結果是否超出上限值或下限值。然后,多種轉換器75根據飽和判斷電路73的判斷,當運算結果比前述上限值大時,選擇前述上限值,當運算結果比前述下限值小時,選擇前述下限值。在運算結果比前述上限值小或相等,但比前述下限值大時,則選擇前述運算結果輸出。
然后,把多路轉換器75的輸出作為運算結果存入寄存文件1。再有,在執行通常運算指令的情況下,控制多路轉換器75,以便選擇輸出與前述判斷結果無關的運算結果。
可是上述第2已有技術,由算術運算及其結果的飽和運算是由一條指令起動的,飽和運算修正電路70被設置在算術運算電路72與數據總線之間。像這樣把飽和運算電路70被配置在算術電路72和數據總線之間,即使執行通常的運算指令,為從算術運算電路72向寄存文件71傳送,也必須經由飽和運算修正電路70。
一般,將數據寄存器-算術運算電路-寄存文件間的路徑稱為最短路徑,而本路徑的傳送時間在很大程度上受處理器的機器周期來決定。第2已有技術的構成,由于是用1條指令實現了飽和運算,則變為把飽和運算修正電路70設置在此最短路經上。由于采用了這種構成,處理器的機器周期大致由t1+t2決定(t1是算術運算電路72運算時所需的時間,t2是飽和判斷電路73運算所需要的時間)。
由于該機器周期大致由t1+t2決定,有必要使處理器的時鐘信號的周期受不能低于t1+t2時間的限制。由于這種限制,第2已有技術要犧牲處理器的速度性能。
另外,第2已有技術中的問題在于減少存儲于ROM中的指令的編碼量的同時需重新擴展諸如“ADDS24 D0,D1”、“SUBS24D0,D1”、“MULS24 D0,D1”的帶飽和運算的運算指令,從而增加了指令數。該增加量同運算指令數與進行飽和處理的位幅度的種類之積相等,由于該指令數的增多,使指令解碼、控制電路復雜化。
發明內容
本發明之第1目的在于避開關于處理器的速度性能的弊端,提供一種可以以恰當的編碼量及恰當的速度進行的運算并進行對該運算結果的飽和運算。
本發明之第2目的在于抑制命令解碼、控制電路的復雜化,提供一種可以以恰當的編碼量及恰當的速度進行的運算并進行對該運算結果的飽和運算。
第1、第2之目的可由以下結構而實現,該結構具備用于解讀指令中所含的待操作值的讀出地址的指示、其操作內容的指示、操作后結果的存儲地址的指示的解讀裝置;用于根據解讀出的讀出地址的指示來傳送來自讀出地址待操作值的第1數據傳送裝置;用于根據解讀出的操作內容的指示對待操作值進行所指示的內容操作的操作裝置;并具有用于根據解讀出的存儲地址的指示向其存儲地址傳送操作結果的第2數據傳送裝置;前述操作裝置具備一旦由解讀裝置解讀出第1操作內容的指示,對由第1數據傳送裝置所傳送的待操作值進行運算,并輸出運算結果的運算裝置;一旦由解讀裝置解讀出第2操作內容的指示,對由第1數據傳送裝置所傳送的待操作值進行是否超過預置范圍的判斷,若超過則輸出予置值,若未超過則照舊輸出由第1數據傳送裝置所傳送的值的飽和運算裝置。
依照上述本發明的那種結構,運算裝置與飽和運算裝置是并列的關系。在由運算裝置進行運算至將其結果保持在寄存器中的時間t3及由飽和運算裝置進行運算至將其結果保持在寄存器中的時間t4之中,大致上可以由其中時間較長一方決定時鐘信號的周期(參照圖13)。這樣,基于時間t3、t4中較長的時間,可以決定時鐘信號周期,因而不會由于設置飽和運算裝置而犧牲處理器的速度。
另外,由于運算裝置和飽和運算裝置是并列連接在自寄存器、存儲器等傳送待操作值的第1數據傳送裝置和向寄存器、存儲器傳送已操作值的第2數據傳送裝置之間的,則可以由各指令來起動運算裝置和飽和運算裝置。
因為可以由完全獨立于運算指令的飽和運算指令的定義來起動飽和運算裝置,對應于運算指令的種種類型,與使帶飽和運算指令擴展的情況相比,則可大幅度削減指令數。
圖1是已有的具有飽和運算功能的處理器的結構圖。
圖2是表示已有的飽和運算修正電路70的內部結構圖。
圖3是在已有的處理器中,在具備有2種尋址方式的3種運算指令的情況下,為實現16位與24位的2種飽和運算,表示所需指令的一覽表。
圖4是已有的具有飽和運算功能的處理器的定時圖。
圖5是表示在已有技術中,時鐘信號周期是基于哪段時間間隔決定的圖。
圖6是在第1實施例方案中具有飽和運算功能的處理器的結果圖。
圖7是表示在第1實施方案中運算執行部14的內部結構圖。
圖8是表示在第1實施方案中飽和運算修正電路3的內部結構圖。
圖9是表示多路轉換器24操作的真值表。
圖10是表示本發明的第1實施方案中,具有2種尋址方式的3種算術運算指令和指定16位或24位的2種運算幅度的飽和運算指令的一覽表。
圖11是表示飽和運算指令的格式圖。
圖12是第1實施方案的具有飽和運算功能的處理器的定時圖。
圖13是表示在第1實施方案中時鐘信號周期是基于哪段時間間隔確定的圖。
圖14是第2實施方案的具有飽和運算功能的處理器的結構圖。
圖15是表示第2實施方案的運算執行部94的內部結構圖。
圖16是表示狀態寄存器9的內部結構圖。
圖17是表示第2實施方案的飽和運算修正電路的內部結構圖。
圖18是表示多路轉換器85的操作的真值表。
具體實施例方式
實施方案1下面參照附圖對本發明的實施方案1加以說明。圖6是表示第1實施方案的處理器內部結構圖,如圖所示,本處理器由RAM10、ROM11、指令讀出電路12、解碼器13、運算執行部14、地址總線17及數據總線18構成。
一旦由地址總線17輸出寫入目標的地址,RAM10將由數據總線18傳送的數據寫入由地址總線17指示的地址。一旦由地址總線17輸出讀出目標的地址,RAM10經數據總線18輸出存儲著的數據中的由該地址指出的數據。
一旦存儲指令串,經地址總線輸出讀出目標的地址,ROM11從指令串中經數據總線輸出由該地址指示的指令。在ROM11存儲的指令串中混雜著傳送指令、運算指令、分支指令等各種類別的指令。在運算指令中,又分為算術運算指令、邏輯運算指令、按位運算指令、飽和運算指令等類別。其中的各種算術運算指令以例如如圖10所示的助記符號表現。
如圖10所示,使加法指令、減法指令、乘法指令開始的算術運算指令分別具有第1操作數、第2操作數。第1操作數具有立即指定及寄存器隨機指定2種尋址方式。而第2操作數的尋址方式只有寄存器直接指定方式。這是為了使第2操作數兼作運算結果存儲目標的指定。
以加法指令“ADD D0,D1”為例,第1操作數成為寄存器D0,第2操作數成為寄存器D1。以加法指令“ADD imm,D1”為例,第1操作數成為立即值imm,第2操作數成為寄存器名D1。第2操作數,因為作為運算結果的存儲目的地進行指定,在“ADD D0,D1”的情況下,規定把寄存器D0與寄存器D1的加法運算結果存儲于寄存器D1。
飽和運算指令具有寄存器名字段和運算幅度字段,并指示以寄存器名字段指定的寄存器的保持值是否在運算幅度指定的運算幅度的范圍內。此時,當保持值超過所述范圍時,指示要把保持值用所述范圍的上限值或下限值來修正的意旨,當未超過時,指示原樣輸出保持值的意旨。
寄存器名字段、運算幅度字段的大小各自為2位,關于其結構參照圖11所示的飽和運算指令的格式。首先,當所述的飽和運算范圍指定為16位時,把“00”指定給運算幅度字段,在上述范圍指定為24位的情況下,把“01”指定給運算幅度字段。在把作為飽和運算對象的寄存器指定給寄存器D0的情況下,把“00”指定給寄存器名字段,當把飽和運算對象指定為寄存器D1時,把“01”指定給寄存器名字段。飽和運算指令的助記符號示于圖10的圖表的最下行。如該助記符號所示,飽和運算指令有“SAT16”、“SAT24”2種,并具有能指定寄存器D0~D2中任何一個的寄存器名。
關于ROM11中所存儲的指令的特征內容只是以上幾點,關于ROM11中所存儲的指令串,應該注意的是算術運算指令和飽和運算指令之間存在以下說明的規則性。
這里所說的規則性,是將飽和運算指令設置在緊接算術運算指令之后,在飽和運算指令的寄存器名字段中,用與算術運算指令的第2操數中所記述的寄存器名共同的名來記述。其具體例,參照以下的[例1]、[例2]。
(例1)指令1ADD D0,D1指令2SAT 16,D1(例2)指令3SUB D0,D1指令4SAT 24,D1現在解釋,該規則性有什么意義。因為在算術運算指令的第2操作數中指定了運算結果的存儲目標的寄存器,緊接算術運算指令之后而設置的飽和運算指令的寄存器名字段中,記述著運算結果存儲目標的寄存器名,緊接由算術運算指令進行算術運算之后,進行其運算結果是否在算術幅度的范圍內的判斷,根據需要對運算結果進行修正。
以上述(例1)進行說明,由D0寄存器的值與D1寄存器的值的加法運算,將D1寄存器中所存儲的相加結果變為16位幅度的飽和運算的對象;以(例2)進行說明,由D0寄存器的值與D1寄存器的值進行相加,則把D1寄存器中所存儲的相加結果變為24位幅度的飽和運算。
指令讀出電路12具有依次生成讀出目標地址由地址總線輸出的程序計數器,由解碼器13讀出來自ROM11經數據總線輸出的指令。
解碼器13具有可以儲備多個從數據總線來的讀出指令的指令緩沖器及保持儲備在指令緩沖器內的指令中變為解讀對象的指令的指令寄存器,并解讀存儲于指令寄存器中的指令內容,對運算執行部14完成執行該指令的控制。在此處所稱的控制過程中,必須加以特別說明的是以下所示的寄存器輸出控制(1)、運算執行控制(2)及常數發生控制(3)。
寄存器輸出控制(1)就是控制運算執行部14,以便輸出由指令讀出電路12讀出的算術運算指令的第1、第2操作數或由飽和運算指令的寄存器名字段所指示的寄存器的保持值。運算執行控制(2)就是控制運算執行部14,以便執行由運算指令所指示的運算內容,常數發生控制(9)也是控制運算執行部14,以便產生由飽和運算指令所指示的運算幅度的上限值、下限值。控制(1)及控制(2)使解碼器13在解讀時執行算術運算指令,控制(1)及控制(3)讓解碼器在解讀時執行飽和運算指令。控制(2)是在解讀算術運算指令時產生的,而控制(3)是在解讀飽和運算指令時產生的,因此,控制(2)與控制(3)存在相互排他性的關系。
地址總線17傳送由指令讀出電路輸出的讀出目標地址。
數據總線18當RAM輸出數據時,傳送由RAM10輸出的數據。這里所傳送的數據經過控制線C1、C2,傳送到寄存文件1和內部總線15。
運算執行部14的內部結構示于圖7。如圖7所示,運算執行部14由寄存文件1、算術運算電路2、飽和運算修正電路3、鎖存電路4、鎖存電路5、鎖存電路6、鎖存電路7、內部總線15及內部總線16構成。雖然在這些構成部件與解碼器13之間布滿了用于控制(1)、(2)、(3)的控制信號線,但為了簡化而省略圖示。
寄存文件1具有三只32位幅度的數據寄存器D0~D2。在寄出器輸出控制(1)中,若用解碼器13指示一個或二個寄存器名,寄存文件1則輸出所提供的寄存器名的寄存器的保持值。另外,寄存文件1通過總線C1保持數據總線18上所傳送的值。
第1內部總線15傳送由寄存文件1輸出的寄存器的保持值。
第2內部總線16,加上寄存文件1中的寄存器的保持值,通過總線C2,傳送由算術運算電路2輸出的數據。
鎖存電路4鎖存由內部總線15所傳送的寄存文件1的保持值。
鎖存電路5鎖存由內部總線16所傳送的寄存文件1的保持值及從RQM10讀出的保持值。
鎖存電路6鎖存由算術運算電路2輸出的運算結果,并經數據總線輸出。
鎖存電路7鎖存由飽和運算修正電路3輸出的值,并經數據總線輸出。
算術運算電路2由32位幅度的全加器、乘法器、桶形移相器等構成,解碼器13受運算執行控制(2)進行運算。此處的算術運算電路2的輸入端與鎖存電路4、鎖存電路5的輸出端連接,基于運算執行控制(2),以由鎖存電路4所鎖存的寄存器的保持值和由鎖存電路5鎖存的寄存器的保持值為對象而進行運算。
由于算術運算電路2的輸出端與鎖存電路6的輸入端相連接,由運算執行控制(2)的運算結果,其輸出同時被鎖存電路6鎖存,而輸出到數據總線。
例如,當根據解碼器13的運算執行控制的運算內容是加法時,算術運算電路2將由鎖存電路4鎖存值與鎖存電路5鎖存值相加,將相加結果輸出。另外,當由于解碼器13的運算執行控制的運算內容是減法時,算術運算電路2將由鎖存電路4鎖存的值與鎖存電路5鎖存的值相減,將相減結果輸出。
飽和運算修正電路3基于通過解碼器13的常數發生控制(3)進行飽和運算。此處由于飽和運算修正電路3的輸入端與鎖存電路5的輸出端相連接,基于常數發生控制(3)的運算結果,與其輸出同時被鎖存電路7鎖存,并輸出到數據總線(還有,雖未圖示,在飽和運算修正電路3的輸出目的地具備響應SAT16、SAT24的控制,收入飽和運算修正電路3的輸出值的緩沖器)。
此時應該注意,與算術運算電路2通過鎖存電路4、鎖存電路5、鎖存電路6與寄存文件1及數據總線相連接不同,飽和運算修正電路3之特點是通過鎖存電路5、鎖存電路7與寄存文件1及數據總線相連接的。這意味著,算術運算電路2及飽和運算修正電路3是分別并列連接在寄存文件1與數據總線之間的(這種并列連接的算術運算電路2及飽和運算修正電路3響應于“ADD”、“SUB”、“MUL”、SAT等指令內容(特別被稱為操作內容),可以被看成是一個起動的塊,因此以圖來表現該操作塊)。可是寄存文件-數據總線間的路徑一般被稱最短路徑,但在本處理器的結構中,該最短路徑中算術運算電路2、飽和運算修正電路3變為并列連接。
算術運算電路2、飽和運算修正電路3之所以是這樣的并列設置,是因為控制(2)與控制(3)的排他性關系,在算術運算電路2起動期間,無須起動飽和運算修正電路3,同樣,在飽和運算修正電路3起動期間,也無須起動算術運算電路2。飽和運算修正電路3的內部結構示于圖8。如圖8所示,飽和運算修正電路3由常數發生電路21、比較器22、比較器23及多路轉換器24構成。在這些構成部件中,雖然連接有解碼器的控制線,因它使圖示變得復雜,而被省略了。
常數發生電路21產生運算幅度的上限值、下限值。這里的運算幅度,就是在常數發生控制(3)中由“SAT16 D0”、“SAT24 D0”的運算幅字段指示的運算幅度,由解碼器13提供的。具體地講,當解碼器13的解讀結果為“SAT16 D0”時,作為16位運算的上限值,產生32位帶符號的整數0×00007FFF,將它輸出到比較器22及多路轉換器24。與其同時,產生32位帶符號的整數0×FFFF8000作為16位運算的下限值,并將它輸出到比較23及多路轉換器24。
在解讀結果為“SAT24 D0”的情況下,產生0×007FFFFF作為24位運算的上限值,將它輸出給比較器22。另外產生0×FF800000作為24位運算的下限值,并將它輸出給比較器23。
比較器22將鎖存電路5所鎖存的值與常數發生電路21所產生的上限值做比較。從鎖存的值減去常數發生電路21所產生的上限值,通過檢測相減的結果是否產生進位或退位而完成此比較。通過對進位/退位的檢測,當判斷為鎖存的值超過上限值時,向多路轉換器24輸出邏輯值“1”。當判斷為鎖存的值等于或小于上限值時,則向多路轉換器24輸出邏輯值“0”。
比較器23對鎖存電路5所鎖存的值與常數發生電路21所產生的下限值做比較。從鎖存的值減去常數發生電路21所產生的上限值,通過檢測相減的結果是否產生進位或退位而完成比較。通過對進位/退位的檢測,當鎖存的值超過下限值時,向多路轉換器24輸出邏輯值“0”。當鎖存的值等于或小于下限值時,向多路轉換器24輸出邏輯值“1”。
多路轉換器24,響應于比較器22、比較器23所輸出的邏輯值的組合,選擇輸出常數發生電路21所產生的上限值、下限值和鎖存電路5所鎖存的寄存文件1的保持值中的一個值。
這里,當以比較器22輸出的邏輯值為邏輯值x,以比較順23輸出的邏輯值為邏輯值y時,這些邏輯值的組合與多路轉換器24的輸出值的對應關系如圖9的真值表所示。
依照圖9,在比較器22的輸出是“0”,比較器23的輸出是“0”的情況下,多路轉換器24輸出鎖存電路5所鎖存的值(運算結果)。
依照圖9,當比較器22的輸出為“1”,比較器23的輸出為“0”時,多路轉換器24輸出常數發生電路21所產生的上限值。一旦多路轉換器24實行這種輸出控制,僅在飽和的情況下才將在寄存文件1中保持的運算結果改寫為修正值。
現在說明如上所述結構情況的運算執行部14的操作。
運算結果為飽和情況的操作ROM11所存儲的指令串的并行是“ADD D0,D1”-“SAT16 D0”的并行,它通過數據總線,借助于指令讀出電路12,作為被解碼器13所讀出的(指令)。再有認為在寄存文件1中,在寄存器D0,D1中保持著D0=0×00001234,D1=0×00007654。
在定時T1,由解碼器13解讀“ADD D0,D1”,并把寄存器D0及寄存器D1的值輸出給寄存文件。這些值分別由鎖存電路4及鎖存電路5進行鎖存。經這樣鎖存后,將寄存器D0的值0×00001234和寄存器D1的值0×00007654用算術運算電路2進行相加,在時刻T2,相加結果0×00008888被鎖存電路5、鎖存電路6鎖存。將鎖存電路6鎖存的值輸出給數據總線,通過圖7所示的路徑C1,傳送到寄存文件1,存入寄存器D1的區域。
因此,在時刻T2,變為把相加結果存入寄存文件1。將寄存器D0,D1的保持值、相加結果各自以十進制表示,則寄存器D0的值“0×00001234”表示為“4660”,寄存器D1的值“0×00007654”表示為“30292”。相加結果“0×00008888”表示為“-2184”。
經這些考慮后,當處于在定時T2將相加結果存入寄存文件1的狀態時,規定由本處理器執行所謂的“4660+30292=-2184的計算。因為“4660+3292=+34952”,規定把偏離邏輯值的計算結果存入寄存文件1。
在定時T2,經對“SAT16 D0”的解讀,常數發生電路21產生前述上限值0×00007FFF及前述下限值0×FFFF8000。比較器22將鎖存電路5鎖存的運算結果0×00008888與16位飽和運算指令所指示的16位運算幅度的上限值0×00007FFF做比較,比較器23將鎖存電路5鎖存的運算結果0×00008888與16位飽和運算指令所指示的下限值0×FFFF8000做比較。
由于運算結果0×00008888大于前述上限值0×00007FFF,作為多路轉換器24的輸出而選擇輸出前述上限值0×00007FFF。該輸出被鎖存電路7鎖存,輸出給數據總線。輸出的值經路徑C1傳送給寄存文件1。經此傳送,把存儲于寄存文件1內的寄存器D1的運算結果0×00008888寫入上限值0×00007FFF。“上限值0×00007FFF”若以十進制表示,是“+32767”,與正確的計算結果“34952”相比,存在著誤差,與所存貯的“-2184”相比更不容易接近它的理論值。
運算結果為不飽和情況下的操作ROM11所存儲的指令串的并行是“ADD D0,D1”-“SAT16 D0”,通過解讀器,借助于指令讀出電路12作為由解碼器13讀出的(指令)。再有,寄存文件1的寄存器D0,D1的保持值是D0=0×00000234,D1=0×00007654。
在定時T1,經解碼器13解讀“ADD D0,D1”,向寄存文件1輸出寄存器D0及寄存器D1的值。這些值分別由鎖存電路4及鎖存電路5鎖存。經這樣鎖存后,算術運算電路2對寄存器D0的值0×00000234和寄存器D1的值0×00007654進行相加,由鎖存電路5、6來鎖存相加結果。
在定時T3,由鎖存電路6鎖存其相加結果,輸出給數據總線。輸出給數據總線的結果,經路徑C1,傳送給寄存文件1。因此,規定在定時T2把相加結果存入寄存文件1。
在定時T3解讀“SAT16 D0”后,由常數發生電路產生前述上限值0×00007FFF和下限值0×FFFF8000。比較器22對鎖存電路5鎖存的運算結果0×00007888和16位飽和運算指令所指示的上限值0×00007FFF做比較,比較器23對鎖存電路5鎖存的運算結果0×00007888和16位飽和運算指令所指示的下限值0×FFFF8000做比較。
當判斷運算結果0×00007888小于前述上限值0×00007FFF,而大于前述下限值0×FFFF8000時,多路轉換器24把鎖存電路5鎖存的運算結果輸出給數據總線。
根據以上這種實施方案,由于算術運算電路2沒有連接在飽和運算修正電路3與寄存器之間,對于飽和運算處理不會延遲至把運算結果存入寄存器的時間。由于算術運算電路2-飽和運算修正電路3是并列連接在最短路徑中,則大致上可以由算術運算電路2進行運算至把其結果保持在寄存器的時間t3和飽和運算修正電路3進行運算至把其結果保持在寄存器的時間t4中較長的一個時間決定時鐘信號的周期。因此,基于時間t3、時間t4的較長的一個時間可以決定時鐘信號的周期,因此不會因裝配了飽和運算修正電路3而犧牲處理器的速度。
另外,對寄存器、數據總線而言,由于算術運算電路2及飽和運算修正電路3是并列連接的,可使控制算術運算電路2的指令與控制飽和運算修正電路3的指令相互獨立。
由于飽和運算指令與運算指令是獨立的,擴展到飽和運算功能的運算指令與為每種運算指令重新定義的情況相比,指令數可大幅度削減。
再有,雖然在本實施方案中進行了在16位幅度與2 4位幅度的2種位幅度的整數化,但上限值、下限值可以在上限值大于下限值的范圍內取任意整數值。
另外,在本實施方案中,雖把上限值、下限值及飽和運算指令的第1操作數與前述上限值下限值的比較用帶符號的整數表示,但也可以各自無符號的整數來表示。例如,把飽和的上限值用無符號的32位整數0×0000FFFF表示,把飽和的下限值用無符號的32位整數0×00000000表示,對前述第1操作數進行無符號的比較,以同樣的方法,可以實現飽和運算。對其他位幅度也是同樣的。
另外,在本實施方案中,指令2的操作數雖是一個,但把指令2的操作數做成第1操作數D1和第2操作數D2兩個,設法把前述修正結果存儲在前述第2操作數也是可以的。
第2實施方案第2實施方案中的處理器的內部狀態示于圖14。在圖14中,第2實施方案中的處理器由RAM10、指令讀出電路12、ROM91、解碼器93以及運算執行部94構成,分別將ROM11置換為ROM91,將解碼器13置換為解碼器93,將運算執行部14置換成運算執行部94。
這里,ROM91與ROM11的不同之處是存儲包含可以指定32位長的運算幅度的飽和運算指令。即將在運算幅度字段中記述為“00”的16位運算幅度的指定與運算幅度字段中記述為“01”的24位運算幅度的指定相加,借助于在運算幅度字段中記述為“10”,可指定32位的運算幅度。
解碼器93之與解碼器13不同之處是在常數發生控制(3)中,使16位幅度的常數發生、24位幅度的常數發生的指示相加,在飽和運算指令的運算幅度字段中指定32位幅度的情況下,控制飽和運算修正電路63,以產生32位幅度的常數。
運算執行部94的內部結構示于圖15。如圖15所示,運算執行部94由寄存文件1、鎖存電路4、5、6、7、算術運算電路62、飽和運算修正電路63、狀態寄存9、內部總線15、內部總線16構成。其中與圖7標有同一標號寄存文件1、鎖存電路4、5、6、7、內部總線15、內部總線16與實施方案1的對應單元具有相同的結構。
算術運算電路62,除其內部結構中具有狀態監視電路8之外,它與算術運算電路2具有相同結構。狀態監視電路8是用監視算術運算電路2所進行的運算的內藏電路。在由狀態監視電路8監視的項目中,與實施方案2有深刻關系的是溢出的監視(1)、進位的監視(2)、符號位的監視(3)。
溢出監視(1)就是監視是否發生自最高位位的溢出。在這里所說的最高位中,存在三種最高位,即32位運算中的最高位,24位運算中的最高位,16位運算中的最高位。
進位監視(2)就是監視是否發生向最高位的進位。符號監視(3)就是監視在運算結果中,最高位是否發生了符號反轉。
狀態寄存器9是表示每種在運算幅寬有無發生溢出、進位、符號反轉,表示處理器的中斷屏蔽電平、是否允許接受鍵中斷的寄存器,其內部結構示于圖16。如圖16所示,狀態寄存器9由V標志位、C標志位、N標志位、Z標志位、VX標志位、CX標志位、NX標志位、ZX標志位、VY標志位、CY標志位、NY標志位、ZY標志位、IM2標志位、IM1標志位、IM0標志位、IE標志位構成。
V標志位是表示在32位幅度中運算結果是否發生溢出的標志。
C標志位是表示在運算結果的第31位是否發生進位的標志。
N標志位是表示在32位的運算幅度中運算結果的符號是正號還是負號的標志。
VX標志位是表示在24位的運算幅度中運算結果是否發生溢出的標志。
CX標志位是表示在運算結果的第23位是否發生進位的標志。
NX標志位是表示在24位的運算幅度中運算結果的符號是正號還是負號的標志。
VY標志位是表示在16位的運算幅度中運算結果是否發生溢出的標志。
CY標志位是表示在運算結果的第15位是否發生進位的標志。
NY標志位是表示在16位的運算幅度中運算結果的符號是正號還是負號。
IM2-0標志位是表示處理器的中斷屏蔽電平的標志(InterruputMask Flag)。
IE標志位是表示是否允許接受鍵中斷的標志(InterruputEnable)。
飽和運算修正電路63與算術運算電路62并列連接于寄存文件1和數據總線之間的路徑這一點上是與第1實施方案中的飽和運算修正電路3相同的,其內部結構是如圖17所示那樣構成。如圖17所示,飽和運算修正電路63由常數發生電路81、82、83、多路轉換路85、86、87構成。
常數發生電路81,在常數發生控制(3)中,一旦進行32位的運算幅寬的指定,就產生其上限值、下限值。32位運算的運算幅度的上限是32位的帶符號的整數的上限值0×7FFFFFFF、下限值0×80000000,因此常數發生電路81在指定32位的運算幅度時,就產生這些上限值、下限值。
常數發生電路82,在常數發生控制(2)中,一進行24位的運算幅度的指定,就產生其上限值、下限值。24位運算的運算幅度的上限值是帶符號的24位的整數的上限值0×007FFFFF,下限值0×00800000,因此常數發生電路82在指定24位的運算幅度時,就產生這些上限值、下限值。
常數發生電路83,在常數發生控制(3)中,一進行16位的運算幅度的指定,就產生其上限值、下限值。16位運算的運算幅度的上限值是帶符號的16位的整數的上限值0×00007FFF,下限值0×00008000,因此常數發生電路83在指定16位的運算幅寬時,就產生這些上限值、下限值。
多路轉換器85,根據V標志、N標志的設定值的組合,選擇輸出常數發生電路61所產生的32位帶符號的整數的上限值0×7FFFFFFF、下限值0×80000000、由鎖存電路5所鎖存的寄存文件1的保持值之中的一個值。
這里,V標志、N標志的組合與由多路轉換器85輸出值的對應關系如圖18的真值表所表示。
若依圖18,在V標志的設定值為“1”,N標志的設定值為“0”的情況下,多路轉換器85輸出常數發生電路81所產生的上限值。
在V標志的設定值為“1”,N標志的設定值為“1”時,多路轉換器85輸出鎖存電路81所產生的下限值。
再有,當V標志的設定值為“0”,N標志的設定值為“0”或“1”時,多路轉換器85輸出由鎖存電路5鎖存的運算結果。
多路轉換器86,根據VX標志、NX的設定值的組合,選擇輸出常數發生電路61產生的32位帶符號的整數的上限值0×007FFFFF,下限值0×00800000、由鎖存電路5鎖存的寄存文件1的保持值之中的一個值。
多路轉換器87,根據VY標志,NY標志的設定值的組合,選擇輸出常數發生電路61產生的32位帶符號的整數的上限值0×00007FFF、下限值0×00008000、由鎖存電路5鎖存的寄存文件1的保持值中的一個值。
一旦使處理器有以上的結構,監視溢出的發生、符號位的正負反轉等、算術運算電路62中的運算時的內部狀態的變化,基于這些可以實現飽和運算。
若這樣的實施方案,由與算術運算電路62并列連接的飽和運算修正電路63進行飽和運算,由于算術電路62未連接在飽和運算修正電路63的輸出與寄存器之間,不會由于飽和運算處理而延遲將運算結果存儲至寄存器的時間。由于算術運算電路62-飽和運算修正電路63在最短路徑中是并列連接的,時鐘信號的周期大致可以由算術運算電路62進行運算至將其結果保持于寄存器的時間t3和飽和運算修正電路63進行運算至將其結果保持在寄存器的時間t4中的較長的那個時間決定。因此,由于時鐘信號周期可以由時間t3、t4中較長的那個時間決定,由于設置了飽和判斷電路73不會犧牲處理器的速度。
另外,在本實施方案中,檢測向運算結果的最高位的溢出而生成V位,對運算結果的任意一位進行溢出檢測,也可由飽和的上限值、下限值決定與其對應的值。
例如,若檢測溢出在運算結果的最低位起的第16位,則設飽和的上限值為32位帶符號的整數0×00007FFF,設下限值為32位帶符號的整數0×FFFF8000,也可以按同樣的方法實現16位的飽和運算。
而且,設該指令為SAT16,即使同時具備由本實施例所示的SAT32指令,至多可具備兩條指令,同已有的具備與運算指令數的乘積數的指令情況相比,可以大幅度削減指令種類。
另外,雖然本實施方案中以帶符號的整數表示飽和的上限值、下限值,也可以用無符號的整數代表。例如,從運算結果的最高位產生進位時,算術運算電路,把C位置位而輸出,在未引起進位時,把C位復位而輸出。
在運算為加法指令時,把A位置位而輸出,運算為減法指令時,把A位復位而輸出。
狀態寄存器9分別把C位和A位的狀態作為C標志、A標志而保持。
飽和的上限值由32位無符號的整數0×FFFFFFFF表示,飽和的下限值以32位無符號的整數0×00000000代表,在C標志被置位,A標志被置位的情況下,多路轉換器選擇前述上限值。
當C標志被置位,A標志被復位時,選擇前述下限值,當C標志復位時,不管A標志狀態如何,選擇前述第1操作數輸出,這樣就可按相同方法實現飽和運算。
另外,在本實施方案中飽和運算指令的操作數雖是一個,將飽和運算指令的操作數由第1操作數D1和第2操作數D2代表,將前述修正結果存儲于前述第2操作數也成。
權利要求
1.一種處理器,用于解譯和執行指令,其特征在于,該處理器包括飽和運算裝置,用于1)當數據小于最小值時,使該數據飽和為最小化值,和2)當數據超過最大值時,使該數據飽和為最大化值,其中,至少上述飽和之一由一條指令執行。
2.一種處理器,用于解譯和執行指令,其特征在于,該處理器包括飽和運算裝置,用于1)當數據小于最小值時,使該數據飽和為最小化值,和2)當數據超過最大值時,使該數據飽和為最大化值,其中,至少上述飽和之一是在一個周期內執行。
全文摘要
本發明提供一種處理器,用于解譯和執行指令,其特征在于,該處理器包括飽和運算裝置,用于1)當數據小于最小值時,使該數據飽和為最小化值,和2)當數據超過最大值時,使該數據飽和為最大化值,其中,至少上述飽和之一由一條指令執行或是在一個周期內執行。
文檔編號G06F9/305GK1515999SQ0313146
公開日2004年7月28日 申請日期1996年9月27日 優先權日1995年9月29日
發明者小椋里, 宮地信哉, 檜垣信生, 鈴木正人, 人, 哉, 生 申請人:松下電器產業株式會社