微處理器的制造方法
【專利摘要】一種微處理器,包括第一加法器、第二加法器以及比較電路。第一加法器加總多個第一位以及多個第二位,用以提供第一進位輸出和第一傳遞輸出。第一位是第一二進制碼的高位。第二位反相于第二二進制碼的高位。第二加法器加總多個第三位以及多個第四位,用以提供第二進制輸出。第三位為第一二進制碼的低位。第四位反相于第二二進制碼的低位。比較電路包括或門以及與門?;蜷T接收第一進位輸出,并表示是否第一二進制碼大于第二二進制碼。與門接收第一傳遞輸出及第二進制輸出,并耦接或門。
【專利說明】微處理器
[0001]本申請是申請日為2010年09月07日、申請?zhí)枮?01010277155.1、發(fā)明名稱為“判
斷系統(tǒng)及方法”的發(fā)明專利申請的分案申請。
【技術(shù)領域】
[0002]本發(fā)明涉及一種微處理器指令,特別是涉及一種用于從一數(shù)字碼集合(set ofdigital values)中判斷出最小碼的系統(tǒng)及方法,其中最小的數(shù)字碼作為水平最小值(horizontal minimum)。
【背景技術(shù)】
[0003]目前的微處理器(microprocessor)經(jīng)常被用來執(zhí)行媒體指令(MediaInstruction),用以增加多媒體應用的效率。舉例而言,微處理器架構(gòu)可能包含一個或多個媒體指令,用以從一數(shù)字碼集合中,辨識出水平最小值,以及該水平最小值在總線(bus)或緩存器(register)的相對應位置(location)。一個具體的例子就是英特爾(intel)的 SSE4 編程參考手冊(SSE4programming reference manual)里的 PHMINP0SUW 指令。PHMINP0SUW指令由8個無正負號字(unsigned words, 128bits)中找出最小字及最小字的相對應位置,其中最小字具有16個位(bit)。某些傳統(tǒng)的微處理器在執(zhí)行PHMINP0SUW指令時,需要較多的處理程序或是較多頻率周期。舉例而言,為了辨識出多個字對里的最小字對,貝1J需要使用4個16位的大小比較器(magnitude comparators),才能在第一周期內(nèi),將搜尋范圍由8個字降低至4個字,再將所找到的4個字反饋(feed back)至2個比較器,用以在第二周期內(nèi),搜尋范圍由4個字降低至2個字,最后再將尋找結(jié)果反饋給I個比較器,用以在第三(即最后)周期內(nèi),找出2個字里的最小字。在一傳統(tǒng)的做法中,藉由增加16位比較器的數(shù)量,達到在單一周期內(nèi)執(zhí)行指令的功能。以7個16位比較器為例,在單一周期內(nèi),先利用4個比較器進行第一次的比較,用以將搜尋的范圍由8字降低至4字,然后再利用2個比較器,將搜尋的范圍由4字降低至2字,最后再利用I比較器,從2字中找出最小者。然而,每一 16位比較器會占用微處理器較大的空間,因而增加成本并降低處理效能。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于,不增加電路的情況下,又可在單一周期從數(shù)字碼集合中找出最小數(shù)字碼及其相對應位置。
[0005]本發(fā)明提供一種判斷系統(tǒng),用以從至少兩個二進制碼中找出最小二進制碼。在一實施例中,判斷系統(tǒng)包括:第一加法器、第二加法器以及比較電路。第一加法器加總多個第一位以及多個第二位,用以提供第一進位輸出及第一傳遞輸出。所述多個第一位是第一二進制碼的高位。所述多個第二位反相于第二二進制碼的高位。第二加法器加總多個第三位以及多個第四位,用以提供第二進制輸出。所述多個第三位是第一二進制碼的低位。所述多個第四位反相于第二二進制碼的低位。比較電路根據(jù)第一及第二進制輸出及第一傳遞輸出,判斷是否第一二進制碼大于第二二進制碼。第一及第二二進制碼均無正負號(unsigned)。第一及第二加法器執(zhí)行無正負號二進制加法。該第一傳遞輸出代表該第一加法器是否接收到進位輸入(carry input)。
[0006]本發(fā)明另提供一種判斷系統(tǒng),用以快速地由多個數(shù)字碼中找出水平最小值。本發(fā)明的判斷系統(tǒng)包括:多個差電路、一路徑選擇電路以及一比較電路。每一差電路比較兩個數(shù)字碼。路徑選擇電路將所述多個數(shù)字碼中的每一個指定給至少一個差電路,用以將每一數(shù)字碼與其它數(shù)字碼作比較。每一差電路可能包括一高加法器以及一低加法器。高加法器比較第一數(shù)字碼的高部分及第二數(shù)字碼的高部分,用以提供第一進位輸出以及傳遞輸出。低加法器比較該第一數(shù)字碼的低部分及該第二數(shù)字碼的低部分,用以提供第二進制輸出。比較電路比較該第一及第二進制輸出以及比較所述多個傳遞輸出,用以得知所述多個數(shù)字碼中的最小數(shù)字碼。
[0007]每一傳遞輸出表示所述多個差電路之一的高加法器是否接收進位輸入。該比較電路包括譯碼電路。譯碼電路譯碼比較位,用以提供多個最小位。每一最小位表示相對應的數(shù)字碼是否為最小數(shù)字碼。位置電路告知該最小數(shù)字碼的存儲器位置。判斷系統(tǒng)可能被集成在微處理器芯片中,用以執(zhí)行快速的水平最小指令。
[0008]本發(fā)明提供一種判斷方法,用以找出多個數(shù)字碼中的最小數(shù)字碼。在一可能實施例中,判斷方法包括下列步驟,比較第一數(shù)字碼的高位以及第二數(shù)字碼的高位,用以提供第一進位輸出以及傳遞輸出;比較該第一數(shù)字碼的低位以及該第二數(shù)字碼的低位,用以提供第二進制輸出;以及根據(jù)第一及第二進制輸出以及該傳遞輸出,判斷出該第一或第二數(shù)字碼是較小碼。本發(fā)明的判斷方法可能包括,將所述多個數(shù)字碼的每一個傳送至多個加法器對的至少一個加法器對中,用以將每一數(shù)字碼與其它數(shù)字碼相比較,以得知最小數(shù)字碼。本發(fā)明的判斷方法更包括:譯碼比較位。本發(fā)明的判斷方法更包括,得知最小數(shù)字碼在存儲器中的位置。
[0009]本發(fā)明提供一種系統(tǒng),利用共享加法器電路,執(zhí)行水平最小指令及差絕對值總和指令之一。在一實施例中,該系統(tǒng)包括,多個加法器、一加總電路、一比較電路以及一路徑選擇電路。輸入操作數(shù)包括多個數(shù)字碼。對差絕對值總和指令而言,所述多個數(shù)字碼包括第一數(shù)字碼集和以及第二數(shù)字碼集合。對水平最小指令而言,所述多個數(shù)字碼包括多個數(shù)字碼對。每一數(shù)字碼對具有高數(shù)字碼以及低數(shù)字碼。每一加法器將第一數(shù)字碼與第二數(shù)字碼作比較,用以提供差絕對值以及進位輸出。加總電路加總所述多個差絕對值,用以提供多個差絕對值加總值。所述多個加法器構(gòu)成多個加法器對,并提供傳遞輸出。比較電路結(jié)合所述多個進位輸出及所述多個傳遞輸出,用以找出所述多個數(shù)字碼對的最小數(shù)字碼對。在執(zhí)行該水平最小指令時,路徑選擇電路將所述多個數(shù)字碼對的每一數(shù)字碼對傳送至所述多個加法器對的至少一個加法器對,用以將每一數(shù)字碼對與其它數(shù)字碼對相比較。在執(zhí)行該差絕對值總和指令時,路徑選擇電路將所述第一及第二數(shù)字碼集合傳送至所述多個加法器對,用以得知該第一數(shù)字碼集合的每一數(shù)字碼與該第二數(shù)字碼集合的每一數(shù)字碼之間的差絕對值,該第二數(shù)字碼集合具有連續(xù)的數(shù)字碼。
[0010]本發(fā)明另提供一種方法,利用共享加法器電路,執(zhí)行水平最小指令以及差絕對值總和指令之一。在一實施例中,本發(fā)明所提供的方法包括:接收多個數(shù)位碼。在執(zhí)行差絕對值總和指令時,所述多個數(shù)字碼包括第一數(shù)字碼集合以及第二數(shù)字碼集合。在執(zhí)行水平最小指令時,所述多個數(shù)字碼包括高數(shù)字碼以及低數(shù)字碼。本發(fā)明所提供的方法更包括,提供多個加法器。每一加法器將第一數(shù)字碼與第二數(shù)字碼相比較,用以提供差絕對值以及進位輸出。本發(fā)明所提供的方法更包括,加總所述多個差絕對值,用以提供多個差絕對值總和值;將所述多個加法器分類成多個加法器對,并提供傳遞輸出;結(jié)合所述多個進位輸出及所述多個傳遞輸出,用以得知所述多個數(shù)字碼對的最小數(shù)字碼對;以及在執(zhí)行該水平最小指令時,將所述多個數(shù)字碼對的每一數(shù)字碼對傳送至所述多個加法器對的至少一個加法器對,用以將每一數(shù)字碼對與其它數(shù)字碼對相比較,在執(zhí)行該差絕對值總和指令時,將該第一及第二數(shù)字碼集合傳送至所述多個加法器對,用以得知第一數(shù)字碼集合的每一數(shù)字碼與該第二數(shù)字碼集合的每一連續(xù)數(shù)字碼之間的差絕對值。
[0011]為讓本發(fā)明的特征和優(yōu)點能更明顯易懂,下文特舉出優(yōu)選實施例,并配合附圖,作詳細說明如下。
【專利附圖】
【附圖說明】
[0012]圖1不出微處理器100的一實施例。
[0013]圖2是比較電路的一實施例。
[0014]圖3是本發(fā)明的路徑選擇電路的一實施例。
[0015]圖4是本發(fā)明的第一加法器電路的一實施例。
[0016]圖5是本發(fā)明的差單元DIFFl的一實施例。
[0017]圖6示出本發(fā) [0018]圖7是本發(fā)明的PMIN電路206的一實施例。
[0019]圖8是本發(fā)明的高階/低階比較電路212的一實施例。
[0020]【符號說明】
[0021]100:微處理器;
[0022]102:排程器;
[0023]104:復雜整數(shù)執(zhí)行單元;
[0024]106:簡單整數(shù)執(zhí)行單元;
[0025]108:浮點執(zhí)行單元;
[0026]110:媒體單元;114、
[0027]802:比較電路;
[0028]112:其它單元;
[0029]202:路徑選擇電路;
[0030]203:低階加法器路;
[0031]204:第一加法器電路;
[0032]206:第一 PMIN 電路;
[0033]207:高階加法器電路;
[0034]208:第二加法器電路;
[0035]210:第二 PMIN 電路;
[0036]212:高階/低階比較器電路;
[0037]302:緩沖器電路;
[0038]304、306、308、506、510、804、806、808:多工器;[0039]402:差異電路;
[0040]404:總和電路;
[0041]410、412:選擇邏輯電路;
[0042]502、504、602、604、606:加法器;
[0043]514、708、716、722、726:AND 閘;
[0044]516: OR 閘;
[0045]508、512、702、704、706、712、714、720、710、718、724:反相器;
[0046]728:選擇電路;
[0047]DIFFl ?DIFF8:
[0048]差異單元;
[0049]SI?S4:總和單元。
【具體實施方式】
[0050]以下的實施例說明用于讓本領域的普通技術(shù)人員得以制造和使用本發(fā)明公開的內(nèi)容。優(yōu)選實施例的修改對于本領域的技術(shù)人員將是顯而易見的,且此處描述的普遍原理可應用于其它實施例。因此,本發(fā)明并未局限于此處提出和說明的特定實施例,其應涵蓋所有符合公開于此的原理和新穎特征的最大范圍。
[0051]本發(fā)明注意到,傳統(tǒng)微處理器執(zhí)行水平最小值指令需使用許多周期。本發(fā)明在執(zhí)行相同的指令時,僅需單一周期,并且不會大量增加電路。本發(fā)明提供一種系統(tǒng)及方法,用以快速得知水平最小值,為使本發(fā)明的特征和優(yōu)點能更明顯易懂,下文特舉出優(yōu)選實施例,并配合附圖(圖1?8),作詳細說明。
[0052]圖1為本發(fā)明的一實施例中的微處理器100的結(jié)構(gòu)圖。處理器100具有比較電路114,比較電路114可由數(shù)字碼集合中快速地找出水平最小值并得到第一數(shù)字碼集合及第二數(shù)字碼集合的差絕對值總和(sum of absolute differences)。在本實施例中,圖1并未示出其它傳統(tǒng)的系統(tǒng)及功能,如指令提取(instruction fetch)、指令隊列(instructionqueue)、指令i畢石馬(instruction decoding)以及指令重排(Instruction reordering)等。雖然圖1沒有示出部分傳統(tǒng)技術(shù),但并不會影響對于本發(fā)明的理解。微處理器100具有調(diào)度器(scheduler) 102。調(diào)度器102安排(ixnite)指令或操作的程序,用以選擇算術(shù)邏輯單兀(Arithmetic Logic Unit, ALU)或是執(zhí)行單兀(Execution Unit, EU)。如圖1 所不,調(diào)度器102稱接復雜整數(shù)執(zhí)行單元(Complex Integer Execution Unit, IEU) 104、簡單整數(shù)執(zhí)行單兀(simple IEU) 106、浮點執(zhí)行單兀(Floating Point Execution Unit, FPEU) 108、媒體單元(media unit) 110以及其它單元112,其中其它單元112是其它相似或不同的處理單元。媒體單元110 —般執(zhí)行以媒體為基礎的指令及運作,如單指令多數(shù)據(jù)流式擴展指令集(Streaming SIMD Extensions, SSE)或者多媒體延伸指令集(MultiMedia extension, MMX)及其它類似指令集。SSE是英特爾的x86架構(gòu)中的一種SIMD指令集,SIMD是指單指令多數(shù)據(jù)(single instruction multiple data)。媒體單元110具有比較電路114,用以執(zhí)行至少兩個獨立的媒體指令。在本實施例中,所述兩個媒體指令稱為水平最小指令(PMIN指令)及差絕對值總和指令(PSAD指令)。PSAD指令表示第一數(shù)字碼(或二進制碼)集合及第二數(shù)字碼(或二進制碼)集合的差絕對值總和,其中第二數(shù)字碼集合緊隨在第一數(shù)字碼集合之后。稍后將詳細說明第一數(shù)字碼集合及第二數(shù)字碼集合。藉由執(zhí)行PMIN指令,可得知最小數(shù)字碼及其相對應位置。在本實施例中,上述數(shù)字碼、二進制碼以及相對應格式是可相互替換的,并且這些碼代表多個比特(bit)或十六進制的數(shù)字碼。調(diào)度器102具有存儲器116。存儲器116用以儲存PSAD指令及PMIN指令的操作數(shù)(operand),并具有第一總線ABUS以及第二總線BBUS。在一實施例中,第一總線ABUS以及第二總線BBUS可傳送128位,但并非用以限制本發(fā)明。在其它實施例中,第一總線ABUS以及第二總線BBUS可傳送其它數(shù)量的位。雖然媒體單元110—般用以執(zhí)行其它多種本領域技術(shù)人員所熟悉的媒體指令,但比較電路114用以執(zhí)行PSAD及PMIN指令。
[0053]在一可能實施例中,針對PSAD指令而言,第一數(shù)字碼集合具有4個字節(jié)(每一字節(jié)具有8個位),其中這4個字節(jié)是無正負號字節(jié)。針對PSAD指令而言,第二數(shù)字碼集合具有一字節(jié)集合。該字節(jié)集合具有11個連續(xù)的字節(jié)。同一時間,每4個連續(xù)的字節(jié)會被分類成一個群組。針對第二數(shù)字碼集合而言,每一下一個4字節(jié)群組由下一較高字節(jié)開始,意思就是說,每一下一個群組會位移I個字節(jié),因此,會重疊上一個群組的最后3個字節(jié)。假設第二數(shù)字碼集合具有11個字節(jié)BO?B10。首先將BO?B3分類成第一群組,接著,由下一個較高字節(jié)(如BI)開始,再分類形成第二群組(BI?B4)。因此,第二群組(BI?B4)會重疊第一群組(B0?B3)的最后3個字節(jié)(BI?B3)。第一數(shù)字碼集合的每一字節(jié)與第二數(shù)字碼集合的每一字節(jié)之間的差稱為差絕對值。上述差絕對值會被加總在一起。一具體的例子就是英特爾的SSE4編程參考手冊里的MPSADBW指令。針對PSAD指令而言,第一總線ABUS傳送第一操作數(shù)。第一操作數(shù)包括4個無正負號的字節(jié)。第二總線BBUS傳送第二操作數(shù)。第二操作數(shù)具有11個無正負號的字節(jié)。差絕對值總和是8個無正負號的10位二進制碼。PSAD指令可能包括一個或多個偏移量(offset),用以找到上述操作數(shù)。本發(fā)明并不限定偏移量的大小,任何偏移量均可通過第一總線ABUS及第二總線BBUS而配置,因此,相對應的操作數(shù)會被配置在第一總線ABUS及第二總線BBUS的最右高位位置(right-mostbit position)。在本實施例中,省略上述偏移量。在一實施例中,PMIN指令提供第一總線ABUS中的8個無正負號數(shù)字字的最小值及該最小值的相對應位置,其中這8個無正負號數(shù)字字的每一字具有16位。一具體的例子就是英特爾的SSE4編程參考手冊里的PHMINP0SUW指令。針對PMIN指令而言,第一總線ABUS傳送8個字,每一字具有16位。第二總線BBUS所傳送的位可不被定義或是忽略,也或是令第二總線BBUS所傳送的字與第一總線ABUS相同。在本實施例中,比較電路114在單一周期內(nèi),利用相同的加法器電路執(zhí)行雙指令(PMIN指令及PSAD指令)。
[0054]圖2是本發(fā)明的比較電路114的一實施例。如圖所示,比較電路114包括,路徑選擇電路(routing circuit) 202、低階(low-order, L0)加法器電路 203、高階(high-order ;HI)加法器電路207、高階/低階比較器電路212。路徑選擇電路202具有二個輸入端,分別耦接第一總線ABUS及第二總線BBUS。路徑選擇電路202具有另一輸入端,用以接收控制碼INSTR0路徑選擇電路202根據(jù)輸入端所接收到的控制碼INSTR,對來自第一總線ABUS及第二總線BBUS的字節(jié),進行重新排列或重新進行路徑選擇,用以切分第一總線ABUS及第二總線BBUS的字節(jié)??刂拼aINSTR具有至少I位。在本實施例中,當控制碼INSTR等于I時,表示執(zhí)行PMIN指令;當控制碼INSTR等于O時,表示執(zhí)行PSAD指令。第一總線ABUS被切分成高位部分AH〈31: 0>以及低位部分AL〈31: 0>,其中高位部分AH〈31: 0>及低位部分AL〈31: 0>均具有32位。第二總線BBUS被切分成高位部分BH〈55: O〉以及低位部分BL〈55: 0>,其中高位部分BH〈55:0>及低位部分BL〈55:0>均具有56位。稍后將詳細說明如何根據(jù)一開始所執(zhí)行的指令,對第一總線ABUS及第二總線BBUS的字節(jié)進行重新排列或重新進行路徑選擇。低階加法器電路203具有第一加法器電路204。第一加法器電路204耦接第一 PMIN電路206。高階加法器電路207具有第二加法器電路208。第二加法器電路208耦接第二 PMIN電路210。
[0055]第一加法器電路204接收控制碼INSTR、低位部分AL〈31:0>及BL〈55:0>,并輸出差絕對值總和PSAD〈39:0>以及比較位C〈5:0>。差絕對值總和PSAD〈39:0>具有40位。比較位C〈5:0>具有6位。比較位C〈5:0>、AL<15:0>及BL〈47:0>被傳送至第一 PMIN電路206。針對低位部分,第一 PMIN電路206輸出最小值PMINVAL〈15:0>以及相對應位置PMINL0CX1: 0>??刂拼aINSTR、高位部分AH〈31: 0>及BH〈55: 0>被傳送至第二加法器電路208。第二加法器電路208輸出差絕對值總和PSAD〈79:40>以及比較位C〈ll:6>。差絕對值總和PSAD<79:40>具有40位。比較位C<11:6>具有6位。比較位C〈ll:6>、AH<15:0>及BH〈47:0>被傳送至第二 PMIN電路210。針對高位部分,第二 PMIN電路210輸出最小值PMINVAL〈31:16>以及相對應位置PMINL0C〈3: 2>。將第一 PMIN電路206所輸出的最小值PMINVAL〈15:0>以及相對應位置PMINL0CX1:0>以及第二 PMIN電路210所輸出的最小值PMINVAL〈31:16>以及相對應位置PMINL0C〈3: 2>相結(jié)合,便可產(chǎn)生PMINVAL〈31: 0>以及PMINL0C〈3: 0>。高階/低階比較器電路212接收PMINVAL〈31: 0>以及PMINL0C〈3: 0>,并產(chǎn)生最終的最小數(shù)字碼MINVAL〈15:0>及其相對位置MINL0C〈2:0>。
[0056]第一加法器電路204及第二加法器電路208根據(jù)指令(即控制碼INSTR),對輸入的字節(jié)進行排列,并進行字節(jié)間的比較。針對PSAD指令而言,組合后的PSAD〈79:0>具有8個10位的數(shù)字碼,其中這些數(shù)字碼沒有正負號。這8個10位的數(shù)字碼是執(zhí)行差絕對值總和操作后的結(jié)果。針對PSAD指令,第一 PMIN電路206、第二 PMIN電路210及高階/低階比較器電路212可被省略。針對PMIN指令,當每一高位部分及低位部分輸入時,可省略PSAD〈79: 0>,藉由第一 PMIN電路206及第二 PMIN電路210所接收到的比較位C〈11: 0>,便可得知最小的數(shù)字碼及相對位置。當?shù)谝豢偩€ABUS提供128位的輸入數(shù)據(jù)時,高階/低階比較器電路212接收并比較高位部分及低位部分的最小數(shù)字碼,并輸出最小值MINVAL〈15:0>以及相對位置MINL0C〈2: 0>。
[0057]圖3是本發(fā)明的路徑選擇電路202的一實施例。路徑選擇電路202根據(jù)特定的指令,用以對第一總線ABUS及第二總線BBUS所提供的數(shù)字碼進行排列或是重新進行路徑選擇。緩沖器電路302接收ABUS〈31:0>,并針對PSAD指令及PMIN指令,輸出相對應的AL〈31:0>。在一實施例中,針對每一位,緩沖器電路302可包含一獨立的緩沖器,使得ABUS〈31:0>可有效地被復制成AL〈31:0>。換句話說,AL〈31>=ABUS〈31>、AL〈30>=ABUS〈30>、…、AL〈0>=ABUS〈0>。對于 PSAD 指令及 PMIN 指令而言,AL〈31:0> 具有4個字節(jié)A3~A0。 對PMIN指令而言,字節(jié)A3~AO可分成兩對,其中A3及A2可構(gòu)成字W1,Al及AO可構(gòu)成字W0。字Wl及WO均具有16位。多工器304接收ABUS〈95:64>及ABUS〈31:0>。當多工器304的控制信號等于邏輯I (或高電平)時,多工器304的輸出八!1〈31:0>等于48^〈95:64>。當多工器304的控制信號等于邏輯O (或低電平)時,多工器304的輸出么!1〈31:0>等于48^〈31:0>。在一實施例中,對于32位的AH〈31: 0>中的每一位,均提供單獨的具有I位寬度的多工器,因此對于每一輸入端及輸出端均具有單獨的多工器路徑(MUX path)。若控制碼INSTR代表PMIN指令時,則多工器304將ABUS〈95:64>作為AH〈31:0>。這32位形成4個字節(jié)All~A8。針對PMIN而言,字節(jié)All~A8可分成兩字,其中字節(jié)All及AlO可構(gòu)成字W5,而字節(jié)A9及A8可構(gòu)成字W4。若控制碼INSTR代表PSAD時,則多工器304將ABUS〈31:0MtSAH〈31:0>。這32位形成4個字節(jié)A3~A0。字節(jié)的復制就是因為PSAD指令的第一操作數(shù)對于高階及低階部分來說是相同的,稍后將詳細說明。
[0058]當多工器306的控制信號為邏輯I時(即控制碼INSTR=I),多工器306接收并輸出8個高位0x8以及ABUS〈63:16>,其中這8個高位0x8的邏輯值均為O。此時,多工器306的輸出BL〈55:0>為8個高位0x8以及ABUS〈63:16>。當多工器306的控制信號為邏輯O時,多工器306接收并輸出BBUS〈55:0>,此時,多工器306的輸出BL〈55: 0>為BBUS〈55: 0>。在一實施例中,針對每一總線的每一字節(jié)而言,可使用具有I位寬度的多工器。若控制碼INSTR代表PMIN指令時,則ABUS〈63:16>會被選擇到。ABUS〈63:16>具有6個字節(jié)A7~A2。字節(jié)A7~A2可被分別3對。字節(jié)A7及A6可構(gòu)成字W3。字節(jié)A5及A4可構(gòu)成字W2。字節(jié)A3及A2可構(gòu)成字Wl。若控制碼INSTR代表PSAD指令時,BBUS〈55:0>會被選擇到。BBUS〈55:0>具7個低字節(jié)B6~BO的第二操作數(shù)。當多工器308的控制端為邏輯I時,多工器308接收并輸出8個高位0x8以及ABUS〈127:79>,其中這8個高位0x8的邏輯值均為
O。此時,多工器308的輸出冊〈55:0>為8個高位(^8以及48^〈127:79>的組合。當多工器308的控制端為邏輯O時,多工器308接收并輸出BBUS〈87:32>。此時,多工器308的輸出 BH〈55:0> 為 BBUS〈87:32>。若控制碼 INSTR 為 PMIN 指令時,ABUS〈127:79> 會被選擇。八8舊〈127:79>具有6個字節(jié)六15~410。字節(jié)A15~AlO可分別3對。字節(jié)A15及A14可構(gòu)成字W7。字節(jié)A13及A12可構(gòu)成字W6。字節(jié)All及AlO可構(gòu)成字W5。若控制碼INSTR為PSAD指令時,BBUS<87:32>會被選擇。BBUS<87:32>具有7個高字節(jié)BlO~B4的,7個高字節(jié)BlO~B4構(gòu)成PSAD指令的第二操作數(shù)。 [0059]請參考圖2,針對PMIN指令而言,利用圖3所示出的路徑選擇電路202的指派,可將字Wl及WO提供給AL總線,將字W3~Wl提供給BL總線,以便傳送到第一加法器電路204。第一加法器電路204將字WO分別與字Wl~W3相比較,再將字Wl分別與字W2~W3相比較,然后再將字W2與字W3相比較,并根據(jù)比較結(jié)果,提供相對應的比較位C〈5: 0>。第一 PMIN電路206接收字W3~W,并將最小字作為PMINVAL〈15: 0>。第一 PMIN電路206指出第一總線ABUS的低位部分的最小字及其相對應位置PMINL0CX1: 0>。舉例而言,若最小字位于 ABUS〈15:0> 時,則 PMINL0C=00 ;若最小字位于 ABUS〈32:16> 時,則 PMINL0C=010 同樣道理,針對PMIN指令而言,可將字W5及W4提供給AH總線,將字W7~W5提供給BH總線,以便傳送到第二加法器電路208。第二加法器電路208將字W4與字W5~W7相比較,然后再將字W5分別與字W6~W7相比較,接著將字W6分別與字W7相比較,并根據(jù)比較結(jié)果,提供相對應的比較位C〈ll:6>。第二 PMIN電路210接收字W7~W4,并將字W7~W4中的最小字的相對應位作為PMINVAL〈31:16>。第二 PMIN電路210也指示位于第一總線ABUS的高位部分的最小字的相對應位置PMINL0C〈3:2>。舉例而言,若最小字位于ABUS〈79:64>時,則PMINL0C=00 ;若最小字位于ABUS〈95:65>時,則PMINL0C=01。高階/低階比較器電路212將PMINVAL〈15:0>的字與PMINVAL〈31:16>的字相比較,用以辨識出何者才是ABUS〈127: 0>中的最小值。藉由高階/低階比較器電路212的比較結(jié)果,也可得知最小值的相對位置MINL0C〈2:0>。
[0060]請參考圖2,針對PSAD指令而言,路徑選擇電路202 (如圖3所示)藉由字節(jié)的指派,將來自第一總線ABUS的第一操作數(shù)的字節(jié)A3?AO提供給AL〈31: 0>及AH〈31: 0>,并分別將AL〈31:0>提供給第一加法器電路204以及將AH〈31:0>提供給第二加法器電路208。路徑選擇電路202將來自第二總線BBUS的第二操作數(shù)的字節(jié)B6?BO作為BL〈55:0>,并將BL〈55:0>傳送至第一加法器電路204。路徑選擇電路202將來自第二總線BBUS的第二操作數(shù)的字節(jié)BlO?B4作為BH〈55:0>,并將BH〈55:0>傳送至第二加法器電路208。針對PSAD指令而言,第一加法器電路204將字節(jié)AO與BO間的差、字節(jié)Al與BI間的差、字節(jié)A2與B2間的差與字節(jié)A3與B3間的差加總在一起,并提供第一 10位的結(jié)果PSAD〈9:0>。第一加法器電路204將字節(jié)AO與BI間的差、字節(jié)Al與B2間的差、字節(jié)A2與B3間的差與字節(jié)A3與B4間的差加總在一起,并提供第二 10位的結(jié)果PSAD〈19:10>。第一加法器電路204將字節(jié)AO與B2間的差、字節(jié)Al與B3間的差、字節(jié)A2與B4間的差與字節(jié)A3與B5間的差加總在一起,并提供第三10位的結(jié)果PSAD〈29:20>。第一加法器電路204將字節(jié)AO與B3間的差、字節(jié)Al與B4間的差、字節(jié)A2與B5間的差與字節(jié)A3與B6間的差加總在一起,并提供第三10位的結(jié)果PSAD〈39:30>。同樣道理,第二加法器電路208將字節(jié)AO與B4間的差、字節(jié)Al與B5間的差、字節(jié)A2與B6間的差與字節(jié)A3與B7間的差加總在一起,并提供第一 10位的結(jié)果PSAD〈49:40>。第二加法器電路208將字節(jié)AO與B5間的差、字節(jié)Al與B6間的差、字節(jié)A2與B7間的差與字節(jié)A3與B8間的差加總在一起,并提供第二 10位的結(jié)果PSAD〈59:50>。第二加法器電路208將字節(jié)AO與B6間的差、字節(jié)Al與B7間的差、字節(jié)A2與B8間的差與字節(jié)A3與B9間的差加總在一起,并提供第三10位的結(jié)果PSAD〈69:60>。第二加法器電路208將字節(jié)AO與B7間的差、字節(jié)Al與B8間的差、字節(jié)A2與B9間的差與字節(jié)A3與BlO間的差加總在一起,并提供第四10位的結(jié)果PSAD〈79:70>。
[0061]圖4是本發(fā)明的第一加法器電路204的一實施例。第一加法器電路204處理AL〈31: 0>與BL〈31: 0>中的字節(jié),并提供PSAD<39: 0>或C〈5: 0>。第一加法器電路204包括差電路(difference circuit)402、總和電路(sum circuit)404、選擇邏輯電路(selectionlogic)410及選擇邏輯電路412。差電路402具有多個差單元DIFFl?DIFF8。差單元DIFFl?DIFF8各自獨立??偤碗娐?04具有總和單元SI?S4??偤蛦卧猄I?S4各自獨立。每一差單元判斷4個字節(jié)(即2對字節(jié))之間的差(無正負號)。每一差單元將每一對字節(jié)的其中之一字節(jié)反相后,再與另一字節(jié)加總在一起。每一對字節(jié)所產(chǎn)生的差即為差絕對值。差單元所接收到的字節(jié)數(shù)據(jù)是由一開始所執(zhí)行的指令所決定的。選擇邏輯電路410具有多個多工電路。每一多工電路彼此獨立。所述多個多工電路根據(jù)一開始所執(zhí)行的指令,選擇特定字節(jié)給差單元DIFF3。如圖所示,針對PMIN指令而言,當選擇邏輯電路410的控制端為邏輯I時(即控制碼INSTR=I),選擇邏輯電路410選擇并輸出字節(jié) BL〈47:40>、BL〈31:24>、BL<39:32> 及 BL〈23:16> 給差單元 DIFF3。字節(jié) BL〈47:40>、BL〈31:24>、BL〈39:32>及BL〈23:16>分別對應于字節(jié)A7?A4。針對PSAD指令而言,當選擇邏輯電路410的控制端為邏輯O時(即控制碼INSTR=O),選擇邏輯電路410選擇并輸出字節(jié)BL〈23:16>、AL〈15: 8>、BL〈15: 8> 及 AL<7: 0> 給差單元 DIFF3。字節(jié) BL〈23:16>、AL〈15: 8>、BL〈15:8>及AL〈7:0>分別對應于字節(jié)B2、Al、BI及A0。同樣的道理,針對PMIN指令而言,當選擇邏輯電路412的控制端為邏輯I時,選擇邏輯電路412選擇并輸出字節(jié)AL〈15: 8>及AL〈7:0>給差單元DIFF8。字節(jié)AL〈15: 8>及AL〈7: O〉分別對應于字節(jié)Al及AO。針對PSAD指令而言,當選擇邏輯電路412的控制端為邏輯O時,選擇邏輯電路412選擇并輸出字節(jié)AL<23:16>及AL<15:8>給差單元DIFF3。字節(jié)AL<23:16>及AL<15:8>分別對應于字節(jié)A2及Al。
[0062]針對PSAD指令而言,差單元DIFFl的第一反相輸入端接收字節(jié)BL〈15:8>。字節(jié)BL〈15:8>對應字節(jié)BI。差單元DIFFl的第二非反相輸入端接收字節(jié)AL〈15:8>。字節(jié)AL〈15:8>對應字節(jié)Al。差單元DIFFl確定字節(jié)Al與BI之間的差絕對值(I Al-Bl I )。差單元DIFFl將字節(jié)Al與BI之間的差絕對值(I Al-Bl I )作為結(jié)果AD1,并由第一輸出端輸出。同樣地,差單元DIFFl的第三反相輸入端接收字節(jié)BL〈7:0>。字節(jié)BL〈7:0>對應字節(jié)BO。差單元DIFFl的第四非反相輸入端接收字節(jié)AL〈7:0>。字節(jié)AL〈7: 0>對應字節(jié)AO0差單元DIFFl確定字節(jié)AO與BO之間的差絕對值(I AO-BO I )。差單元DIFFl將字節(jié)AO與BO之間的差絕對值(I AO-BO I )作為結(jié)果AD2,并由第二輸出端輸出。同樣地,差單元DIFF2確定字節(jié)A3與B3之間的差絕對值(I A3-B3 I ),并字節(jié)A3與B3之間的差絕對值作為AD3,并由第一輸出端輸出。差單元DIFF2確定字節(jié)A2與B2之間的差絕對值(I A2-B2 I ),并將字節(jié)A2與B2之間的差絕對值作為AD4,并由第二輸出端輸出。總而言之,當控制碼INSTR為PSAD指令時,差電路402確定字節(jié)AO分別與字節(jié)BO~B3之間的差絕對 值、字節(jié)Al分別與字節(jié)BI~B4之間的差絕對值、字節(jié)A2分別與字節(jié)B2~B5之間的差絕對值、及字節(jié)A3分別與字節(jié)B3~B6之間的差絕對值。
[0063]總和單元SI計算4個字節(jié)ADl~AD4的總合,并將計算后的結(jié)果作為10位的PSAD〈9:0>??偤蛦卧猄I 的計算結(jié)果對應于(I AO-BO I ) + ( I Al-Bl I ) + ( I A2-B2 I ) + ( IA3-B3 I )。針對PSAD指令而言,差單元DIFF3確定AO與BI之間的差絕對值,并將AO與BI之間的差絕對值作為AD6。差單元DIFF3確定Al與B2之間的差絕對值,并將Al與B2之間的差絕對值作為AD5。差單元DIFF4確定A2與B3之間的差絕對值,并將A2與B3之間的差絕對值作為AD8。差單元DIFF4確定A3與B4之間的差絕對值,并將A3與B4之間的差絕對值作為AD7??偤蛦卧猄2計算4個字節(jié)AD5~AD8的總合,并將計算后的結(jié)果作為10位的?3六0〈19:10>??偤蛦卧?2的計算結(jié)果對應于(I AO-Bl I ) + ( I A1-B2 I ) + ( I A2-B3
I) + ( I A3-B4 I )。同樣地,針對PSAD指令而言,總和單元S3計算4個字節(jié)AD9~AD12的總合,并將計算后的結(jié)果作為10位的PSAD〈29:20>??偤蛦卧猄3的計算結(jié)果對應于(I A0-B2 I ) + ( I A1-B3 I ) + ( I A2-B4 I ) + ( I A3-B5 I )。最后,針對PSAD 指令而言,總和單元 S4計算4個字節(jié)AD13~AD16的總合,并將計算后的結(jié)果作為10位的PSAD〈39:30>??偤蛦卧?S3 的計算結(jié)果對應于(I A0-B3 |) + (| A1-B4 I ) + ( I A2-B5 I ) + ( I A3-B6 I )。雖然第4圖僅顯示第一加法器電路204的一實施例,但第二加法器電路208大致上與第一加法器電路204相似,用以確定字節(jié)AO分別與字節(jié)B4~B7之間的差絕對值、字節(jié)Al分別與字節(jié)B5~B8之間的差絕對值、字節(jié)A2分別與字節(jié)B6~B9之間的差絕對值、以及字節(jié)A3分別與字節(jié)B7~BlO之間的差絕對值。另外,第二加法器電路208加總4個差絕對值,并根據(jù)加總后的結(jié)果,提供4個加總值。PSAD〈79:40>包含這4個加總值。
[0064]總而言之,對于PSAD指令而言,差電路402用以確定第一數(shù)字碼集合中的每一字節(jié)(A3:A0)與第二數(shù)字碼集合中的每一字節(jié)(B10:B0)之間的差絕對值。當處理完第一群組B3:B0后,再由下一個較高位開始比較,如B1:B4、B2:B5、B3:B6…等。因此,在8個群組中,將產(chǎn)生差絕對值ADl~AD4、AD5~AD8、…、AD29~AD32??偤碗娐?04加總每一群組的差絕對值,并提供相應的差絕對值總和PSAD〈79:0>。
[0065]當控制碼INSTR為PMIN指令時,除了所指派的字節(jié)不同外,差電路402的處理方式大致相同。ADl~AD16的總和以及PSAD〈39:0>可被省略,只需要比較位C〈5:0>。差單元DIFFl比較或用其它方法確定Al與A3之間的差絕對值以及AO與A2之間的差絕對值。第一字節(jié)A3是字Wl的高字節(jié),而第二字節(jié)Al是字WO的高字節(jié)。第三字節(jié)A2是字Wl的低字節(jié),而第四字節(jié)AO是字WO的低字節(jié)。在本實施例中,差單元DIFFl分別比較字Wl及WO的高字節(jié)及低字節(jié)。差單元DIFFl確定比較位C〈0>。位C〈0>表示哪一個字(Wl或W0)是較小的字。同樣地,差單元DIFF2比較字W2及Wl的高字節(jié)A5與A3,以及比較字W2及Wl的低字節(jié)A4與A2,用以確定哪一個字(W2或Wl)是較小的字,并提供比較位C〈3>。同樣地,差單元DIFF3比較字W3及W2的高字節(jié)A7與A5,以及比較字W3及W2的低字節(jié)A6與A4,用以確定哪一個字(W3或W2)是較小的字,并提供比較位C〈5>。針對PMIN指令而言,可省略差單元DIFF4。差單元DIFF5比較字W2及WO的高字節(jié)A5與Al,以及比較字W2及WO的低字節(jié)A4與A0,用以確定哪一個字(W2或W0)是較小的字,并提供比較位C〈l>。差單元DIFF6比較字W3及Wl的高字節(jié)A7與A3,以及比較字W3及Wl的低字節(jié)A6與A2,用以確定哪一個字(W3或Wl)是較小的字,并提供比較位C〈4>。針對PMIN而言,可省略差單元DIFF7。差單元DIFF8比較字W3及WO的高字節(jié)A7與Al,以及比較字W3及WO的低字節(jié)A6與A0,用以確定哪一個字(W3或W0)是較小的字,并提供比較位C〈2>。
[0066]總而言之,針對PMIN指令而言,第一加法器電路204的差電路402的比較位C〈0>表示字WO與Wl之間的較小者。比較位C〈l>表示字WO與W2之間的較小者。比較位C〈2>表示字WO與W3之間的較小者。比較位C〈3>表示字Wl與W2之間的較小者。比較位C〈4>表示字Wl與W3之間的較小者。比較位C〈5>表示字W2與W3之間的較小者。雖然圖4并未示出第二加法器電路208的詳細電路,但第二加法器電路208也具有與第一加法器電路204相同的差電路,用 以針對高階加法器電路207的字W4~W8進行相同的比較,并提供相應的比較位C〈ll:6>。因此,針對PMIN而言,比較位C〈6>表示字W4與W5之間的較小者。比較位C〈7>表示字W4與W6之間的較小者。比較位C〈8>表示字W4與W7之間的較小者。比較位C〈9>表示字W5與W6之間的較小者。比較位C〈10>表示字W5與W7之間的較小者。比較位C〈11>表示字W6與W7之間的較小者。第一 PMIN電路206利用比較位C〈5: 0>,辨識出字WO~W3的最小者。第二 PMIN電路210利用比較位C〈ll:6>,辨識出字W4~W7的最小者。
[0067]圖5是本發(fā)明的差單元DIFFl的一實施例。如圖所示,差單元DIFFl具有一加法器對。該加法器對具有高(或第一)加法器502以及低(或第二)加法器504。加法器502及504均具有反相輸入端B以及非反相輸入端A。因此,加法器502及加法器504均可執(zhí)行減法操作,用以確定反相輸入端B及非反相輸入端A之間的信號差。針對PSAD指令而言,加法器502的反相輸入端B接收字節(jié)BI。針對PMIN指令而言,加法器502的反相輸入端B接收字節(jié)A3。針對PSAD及PMIN指令而言,加法器502的非反相輸入端A接收字節(jié)Al。加法器502對反相輸入端B所接收到的字節(jié)的每一位進行反相操作,用以得到反相值~B,其中~代表二進制中的反相。加法器502將反相后的結(jié)果(~B)與輸入端A所接收到的字節(jié)進行無正負號的加總(即A+~B=A-B),然后將加總后的結(jié)果由輸出端SUM輸出。加法器502具有進位輸出(carry out ;C0)端CO,用以提供進位輸出信號COl。當加法器502所得到的加總結(jié)果發(fā)生溢位(overflow)時,進位輸出信號COl為邏輯I。加法器502也會對加總結(jié)果進行遞增,并將遞增后的結(jié)果由輸出端INCSUM輸出。加法器502具有傳遞(propagate)輸出端CP。若加法器將進位輸入(carry input ;未提供)輸出時,傳遞輸出端CP的傳遞輸出信號CPl為邏輯I。在圖5中,雖然沒有進位輸入,但若加法器502接收并傳遞進位輸入時,則傳遞輸出信號CPl為邏輯I。在一實施例中,將輸入端A所接收到的字節(jié)的每一位與輸入端B所接收到的字節(jié)的每一位,一對一地作OR運算。經(jīng)過OR運算后,便可得到8個運算結(jié)果。再經(jīng)這8個運算結(jié)果進行AND運算。根據(jù)OR運算結(jié)果以及AND運算結(jié)果,便可決定傳遞輸出端CP的傳遞輸出信號CPl的邏輯電平。輸出端SUM耦接至反相器508的輸入端。針對字節(jié)的每一位而言,反相器508具有一獨立的反相器。反相器508的輸出端耦接多工器506的輸入端O。輸出端INCSUM耦接耦接多工器506的輸入端I。多工器506的選擇輸入端接收進位輸出信號COl。多工器506的輸出信號ADl即為多工器502的輸入端A及B所接收到的字節(jié)間的差絕對值。
[0068]同樣地,針對PSAD指令而言,加法器504的反相輸入端B接收字節(jié)B0。針對PMIN指令而言,加法器504的反相輸入端B接收字節(jié)A2。針對PSAD及PMIN指令而言,加法器504的輸入端A接收字節(jié)AO。加法器504對反相輸入端B所接收到的字節(jié)的每一位進行反相操作,用以產(chǎn)生相反的邏輯值,如?B。加法器504將反相后的結(jié)果(?B)與輸入端A所接收到的字節(jié)進行無正負號的加總,并提供輸出信號給輸出端INCSUM、SUM及CO。由于加法器504的輸出端INCSUM、SUM及CO與加法器502相似,故不再贅述。加法器504的輸出端CO提供進位輸出信號C02。若加法器504具有傳遞輸出端CP時,可不使用或省略傳遞輸出端CP。加法器504的CP輸出端可以不輸出信號。加法器504的輸出端INCSUM耦接多工器510的輸入端I。多工器510用以提供AD2。加法器504的輸出端SUM耦接反相器512的輸入端。反相器512的輸出端稱接多工器510的輸入端O。多工器510的選擇輸入端接收進位輸出信號C02。AND門514的兩輸入端之一接收進位輸出信號C02。OR門516用以產(chǎn)生比較位C〈0>,0R門516的兩輸入端之一接收進位輸出信號COl。加法器502的輸出端CP耦接AND門514的一輸入端。AND門514的另一輸入端接收加法器504的輸出端CO的進位輸出信號C02。AND門514的輸出端耦接OR門516。
[0069]針對加法器502及504而言,若輸入端A的字節(jié)大于輸入端B的字節(jié)時,則輸出端CO為邏輯I,并且輸出端INCSUM表示輸入端A及B之間的差絕對值,S卩I A-B I。當加法器502將進位輸出信號COl設定成邏輯I時,OR門516所輸出的比較位C〈0>=1。當進位輸出信號COl為邏輯I時,輸入端A及B的位值可決定加法器502的傳遞輸出信號CPl為邏輯O或
I。當進位輸出信號COl為邏輯I時,OR門516便可將比較位C〈0>設定成邏輯1,因此,對于比較位C〈0>而言,傳遞輸出信號CPl的值并不重要。舉例而言,若輸入端A所接收到的二進制碼為00000100(十進制碼為4),并且輸入端B所接收到的二進制碼為00000010(十進制碼為2),則輸入端A及B之間的差A-B=OOOOOO 10 (十進制碼為2)。輸入端B所接收到的二進制碼會先被反相,故反相后的結(jié)果?B=11111101。當輸入端A所接收到的二進制碼與?B進行無正負號加總時,則加總后的結(jié)果A+?B (或A-B)為00000001,并且進位輸出信號COl為邏輯I (傳遞輸出信號CPl=O)。因此,加總后的結(jié)果(即輸出端SUM的值)并非正確值。反相器(508或512)的輸出端為?SUM(即輸出端SUM的二進制碼的反相值)=11111110。反相器的輸出端的值也不是正確值。輸出端INCSUM的值為00000001+1=00000010,這才是正確的值。因此,針對加法器502及504而言,當輸入端A的字節(jié)大于輸入端B的字節(jié)時,輸出端CO=l,因此,相對應的多工器(506或510)將輸入端I的值(即INCSUM)視為正確的輸出(輸入端A及B間的絕對值)。
[0070]若輸入端A的值小于等于輸入端B的值時,輸出端CO=O,并且相對應的多工器會將相對應的反相器(508或512)的輸出信號?B視為正確的輸出。當輸入端A的值等于輸入端B的值時,正確的輸出為00000000。雖然正確的輸出會反應在輸出端INCSUM及?SUM中,但由于輸出端C0=0,故相對應的多工器會選擇?SUM。當輸入端A的值等于輸入端B的值時,傳遞輸出端CP的值=1。舉例而言,當輸入端A及B的值均等于00001111時,則輸入端A的值加上輸入端B的反相值?B等于00001111+11110000=1111111 I=SUM,并且輸出端CP的值=1。輸出端SUM的反相值(即?SUM)為00000000,此為正確的值。輸出端INCSUM的值為1+11111111,此結(jié)果為00000000,這也是正確的值(雖然不會被多工器所選擇)。當輸入端A的值小于輸入端B的值時,輸出端C0=0,并且多工器會把?SUM視為正確的值。舉例而言,若輸入端A的值為00000010,并且輸入端B的值為00000100,則I A-B I =00000010。在此例中,A+ ?B=00000010+11111011=11111101=SUMo 由于輸出端 CO=O,故?SUM=00000010會被作為正確的值。在此例中,輸出端INCSUM的值等于1+11111101=11111111,這并非正確的值。
[0071 ] 當控制碼INSTR為PSAD指令時,根據(jù)PSAD操作,加法器502可得到差絕對值ADl= I Al-Bl I,并且加法器504可得到差絕對值AD2= I AO-BO I,并且可省略比較位C〈0>。當控制碼INSTR為PMIN指令時,若A1>A3,則字符WO的高字節(jié)大于字符Wl的高字節(jié),故W0>W1。在本例中,當W0>W1,由于C01=l,故C〈0>=1。當A3>A1時,加法器502的COl及CPl均為邏輯0,故C〈0>=0,用以代表字W0〈W1。若A1=A3,則加法器502的輸出COl=I并且CP1=0。在本例中,加法器504的相對字符的低字節(jié)的比較結(jié)果會用來判斷字WO及Wl的相對值。當高字節(jié)都相等時,則CPl=I,若AO>A2,則字WO的低字節(jié)大于字Wl的低字節(jié),故W0>fflo在本例中,CPl及C02均為邏輯1,故C〈0>=1。若高字節(jié)都相等時,則CP1=1,則AO小于等于A2,故C02為邏輯0,使得C〈0>=0。在本例中,字WO小于等于Wl,并且其它例中,字WO被作為最小值。其它的差電路(DIFF2?DIFF8)的結(jié)構(gòu)及操作均相同,用以判斷AD3?AD16。差單元DIFF4及DIFF7可被簡化。特別來說,接收CO及CP,用以判斷相對應的比較位C〈x>的邏輯裝置并非必要。若必要,亦可省略每一獨立加法器所使用的傳遞邏輯。
[0072]請參考圖4及圖5,在PMIN指令及PSAD指令中,均使用相同的加法器電路,特別是每一差單元里的每一加法器對均可應用在PMIN指令及PSAD指令中。針對PSAD指令而言,每一獨立的加法器電路用以得到所輸入的字節(jié)對間的差絕對值。對于PMIN指令而言,雖然PSAD指令所得到差絕對值總和并非必需,但每一加法器對利用字節(jié)間的比較,用以確定哪個字具有最小值。在PSAD指令中,路徑選擇電路將加法器作最大限度的使用,用以幫助PMIN指令。如上所述,針對PMIN指令而言,多個加法器被分成許多加法器對。將一對數(shù)字碼(如兩字)的高部分(如高字節(jié))提供給第一加法器的相對應輸入端,并且將該對數(shù)字碼的低部分(如低字節(jié))提供給第二加法器的相對應輸入端。藉由修改兩加法器,使其得到進位輸出。藉由加法器對中的高加法器,使其具有傳遞輸出。每一加法器對中的進位輸出及傳遞輸出用以確定每一數(shù)字碼對的最小值。對于PSAD指令而言,加法器處理后的結(jié)果用以得到第一操作數(shù)及第二操作數(shù)之間的差絕對值,并且對于PMIN指令而言,加法器處理后的結(jié)果可得到8個字符集合中的最小者,其中第一操作數(shù)具有4個字節(jié),第二操作數(shù)具有11個字節(jié)。
[0073]圖6示出本發(fā)明的總和單元SI的一可能實施例。總和單元SI具有加法器602、加法器604及加法器606,用以提供具有10位的結(jié)果PSAD〈9:0>。加法器602及加法器604均具有8位,加法器606具有9位。加法器602及加法器604與加法器502相似,不同之處在于,加法器602及加法器604不具有反相輸入端,并且INCSUM電路并非必需,故可省略。另外,傳遞輸出電路亦也不是必要的,故可省略。加法器602對于二進制值ADl及AD2進行無正負號加總,并提供第一總和值SUM1(=AD1+AD2)以及相對應的進位輸出Cl。加法器604對二進制值AD3及AD4進行無正負號加總,并提供第二總和值SUM2 (=AD3+AD4)以及相對應的進位輸出C2。進位輸出Cl作為SUMl的最高有效位(MSB)。進位輸出C2作為SUM2的最高有效位(MSB)。加法器606的第一輸入端接收進位輸出Cl及第一總和值SUMl結(jié)合后的結(jié)果。加法器606的第二輸入端接收進位輸出C2及第二總和值SUM2結(jié)合后的結(jié)果。加法器606的兩輸入端均接收到9位。加法器606對于兩輸入端所接收到的數(shù)據(jù)(Cl, SUM1+C2, SUM2)進行無正負號加總,并提供具有10位的輸出結(jié)果PSAD〈9:0>。最小的9位PSAD〈8:0>是代表無正負號二進制加總的結(jié)果,而最高有效位MSB PSAD<9>表示進位輸出的加總結(jié)果。在本實施例中,總和單元SI加總第一差絕對值群組(ADl~AD4),用以得到第一差絕對值總和PSAD〈9:0>。其它的總和單元S2~S4的結(jié)構(gòu)均相同,分別加總差絕對值群組AD5~AD8、AD9~AD12及AD13~AD16,用以提供差絕對值總和PSAD〈19:10>、PSAD<29:20> 及 PSAD〈39:30>。[0074]圖7是本發(fā)明的PMIN電路206的一實施例。PMIN電路206具有譯碼邏輯電路701、選擇邏輯電路728以及位置邏輯電路(location logic) 703o譯碼邏輯電路701具有反相器702、反相器704、反相器706、反相器712、反相器714、反相器720、反相器710、反相器 718 及反相器 724 以及 AND 門 708、AND 門 716、AND 門 722 及 AND 門 726。AND 門 708、AND門716、AND門722及AND門726均具有三輸入端。位置邏輯電路703具有OR門730及OR門732。OR門730及OR門732均具有二輸入端。比較位C<2:0>分別提供至反相器702、反相器704及反相器706。AND門708接收反相器702、反相器704及反相器706的輸出。AND門708輸出信號W0_MIN。當字WO為最小字時,信號W0_MIN為邏輯I。比較位C〈3:4>分別提供至反相器712及反相器714。AND門716的三輸入端分別接收反相器712及反相器714的輸出以及比較位C〈0>。AND門716輸出信號W1_MIN。當字Wl為最小字時,信號W1_MIN為邏輯I。反相器720的輸入端接收C〈5>。AND門722分別接收反相器720的輸出、C〈l>及C〈3>。AND門722輸出信號W2_MIN。當字W2為最小字時,信號W2_MIN為邏輯I。反相器710,718及反相器724分別接收信號W0_MIN、ffl_MIN及W2_MIN,用以分別產(chǎn)生信號~W0_MIN、~W1_MIN及~W2_MIN。信號~W0_MIN、~W1_MIN及~W2_MIN分別表示相對應的字并非最小值。AND門726接收信號~W0_MIN、~W1_MIN及~W2_MIN,并輸出信號W3_MIN。當字W3為最小字時,信號W3_MIN為邏輯I。
[0075]AL〈15: 0>、BL〈15: 0>、BL〈31:16> 及 BL〈47:32> 分別代表字 WO ~W3。選擇電路 728接收 41^15:0>、81^15:0>、81^31:16>、81^47:32>、信號而_1爪~胃3_101在同一時間,只有信號W0_MIN~W3_MIN之一為邏輯I,這表示在此周期內(nèi),W0_MIN~W3_MIN的相對應字為最小值。因此,選擇電路728將字WO?W3之一作為最小字,并將此最小字作為PMINVAL〈15: 0>而輸出。OR門730接收信號W3_MIN及W2_MIN。OR門730具有一輸出端,用以輸出相對應位置位PMINCL0C〈1>。OR門732接收信號W3_MIN及W1_MIN。OR門732具有一輸出端,用以輸出相對應位置位PMINCL0C〈0>。在本實施例中,藉由PMINVAL〈15: 0>,可得知字WO?W3中的最小字,并且PMINL0C〈1:0>表示低階加法器電路203所接收到的第一總線ABUS的后半部分字中的最小字的相對應位置。PMIN電路210的結(jié)構(gòu)與PMIN電路206相似,用以提供代表字W4?W7中的最小字的PMINVAL〈31:16〉以及PMINL0C〈3: 2>。PMINL0C〈3: 2>表示高階加法電路207所接收到的第一總線ABUS的前半部分字中的最小字的相對應位置。
[0076]圖8是本發(fā)明的高階/低階比較電路212的一實施例。16位的比較電路802的反相輸入端接收高階加法器207所提供的PMINVAL〈31:16>。比較電路802的非反相輸入端接收低階加法器電路203所提供的PMINVAL〈15: 0>。比較電路802具有進位輸出端CO,用以提供信號MINL0C〈2>。比較電路802比較高階及低階的最小字,并且將進位輸出作為MINL0C〈2>。比較電路802進位輸出端CO與上述的加法器的輸出端CO相同。若PMINVAL〈15:0>的字大于PMINVAL〈31:16>的字時,則比較電路802進位輸出端CO的MINL0C〈2>為邏輯1,否則MINL0C〈2>為邏輯O。MINL0C<2>是位置值MINL0C〈2:0>的最高有效位(MSB)。由于MINL0C<2>為邏輯I,故最小值位于第一總線ABUS的前半部字中。相反地,若MINL0C〈2>為邏輯0,則表示最小值位于第一總線ABUS的后半部字中。MINL0C〈2>作為多工器804、多工器806及多工器808的選擇輸入端,多工器804選擇字節(jié)值PMINVAL〈23:16>或PMINVAL〈7: 0>,作為低字節(jié)MINVAL〈7:0>。位值PMINVAL〈23:16>或PMINVAL〈7: 0>表示從高階及低階部分所找出的最小字的低字節(jié)。多工器806選擇字節(jié)值PMINVAL〈31:24>或PMINVAL〈15:8>,作為高字節(jié)MINVAL〈15:8>。PMINVAL〈31:24>或PMINVAL〈15: 8>表示從高階及低階部分所找出的最小字的高字節(jié)。多工器808選擇位置位PMINL0C〈3:2>或PMINL0CX1:0>,作為MINL0CX1:0>。位置位PMINL0C〈3:2>或PMINL0CX1:0>表示高階或低階部分的最低有效位置位(least significant location bits)。如上所述,比較電路802可判斷出MINLOC或是MINL0C〈2>的最高有效位。因此,MINL0C〈2:0>表示第一總線ABUS的最小字的所在位置。
[0077]雖然本發(fā)明已詳細說明許多優(yōu)選的實施方式,但其它可能的變化也已仔細考慮過。舉例而言,上述的所有電路均可利用任何邏輯器件或邏輯電路來實現(xiàn)。上述的邏輯電路的功能也可利用集成器件內(nèi)的軟件或固件來實現(xiàn)。上述的電路可能具有許多反相裝置,用以對任何信號提供正相邏輯(positive logic)或反相邏輯(negative logic)。本發(fā)明所公開的電路使用數(shù)字碼或是二進制字節(jié)或字,但并不限定數(shù)字碼或是二進制碼的位數(shù)量。雖然本發(fā)明已以優(yōu)選實施例公開如上,然其并非用以限定本發(fā)明,任何所屬【技術(shù)領域】中的具有通常知識者,在不脫離本發(fā)明的精神和范圍內(nèi),應當可進行許之更動與潤飾,因此,本發(fā)明的保護范圍當視后附的權(quán)利要求范圍所界定者為準。
【權(quán)利要求】
1.一種微處理器,用于從至少兩個二進制碼中找出最小二進制碼,包括: 第一加法器,加總多個第一位以及多個第二位,用以提供第一進位輸出和第一傳遞輸出,其中,所述多個第一位是第一二進制碼的高位,所述多個第二位反相于第二二進制碼的高位; 第二加法器,加總多個第三位以及多個第四位,用以提供第二進制輸出,其中,所述多個第三位為所述第一二進制碼的低位,所述多個第四位反相于所述第二二進制碼的低位;以及 比較電路,根據(jù)所述第一進位輸出及第二進制輸出及所述第一傳遞輸出,判斷是否所述第一二進制碼大于所述第二二進制碼,其中所述比較電路包括: 或門,具有第一輸入端、第二輸入端以及第一輸出端,所述第一輸入端接收所述第一進位輸出,所述輸出端的電平表示是否所述第一二進制碼大于所述第二二進制碼;以及 與門,具有第三輸入端、第四輸入端以及第二輸出端,所述第三輸入端接收所述第一傳遞輸出,所述第四輸入端接收所述第二進制輸出,所述第二輸出端耦接所述第二輸入端。
【文檔編號】G05B19/04GK103941601SQ201310703550
【公開日】2014年7月23日 申請日期:2010年9月7日 優(yōu)先權(quán)日:2009年10月26日
【發(fā)明者】羅沙爾.L.史托茲, 雷蒙.A.貝特倫 申請人:威盛電子股份有限公司