專利名稱:具有級聯simd結構的數字信號處理器的制作方法
技術領域:
本發(fā)明涉及數字信號處理系統(tǒng),尤其涉及改進數字信號處理器體系結構。
背景技術:
數字信號處理的特征在于操作隨時間連續(xù)演變的數據元素集合。這些數據集合對應于模擬域中信號的數字表示,并且被稱為向量。數字信號處理算法的特征在于頻繁對向量中每個元素進行相同的計算。例如,過濾算法可以把向量中的各個元素乘以不同的系數,并且把各部分結果累積成單個最終結果。
基本信號處理算法(稱為信號處理內核)的特征在于對向量元素執(zhí)行操作序列。如上所述,一個例子是乘法的執(zhí)行后跟累加的執(zhí)行。關于這種操作序列的執(zhí)行,實現數字信號處理器的現有技術包含使用相同算術/邏輯單元以與序列中操作數量一樣多的次數執(zhí)行操作序列(例如,在一個周期的乘法操作后跟下一個周期的累加操作),或者把硬件構造為流水線,其中操作數從一端進入,隨著數據流過流水線而執(zhí)行操作,并且在流水線的另一端獲得結果(例如,乘加流水線)。
現有技術,尤其是上述流水線方案的顯著限制是,由于傳統(tǒng)流水線結構,執(zhí)行組成信號處理內核的各操作的靈活性受到約束?,F有技術的模式不允許收集中間結果以用于流水線中進一步的處理(或許按照與產生中間結果的順序不同的順序),或用于在任意時間點改變流水線中的操作序列。這些限制需要更復雜的指令序列,并且通常需要更多處理周期,從而約束了可從功能單元獲得的最大性能。
為在可編程處理器上執(zhí)行數字信號處理算法,數據元素的向量可以組合成較小子集,例如,每個子集有四個元素,并且可以對子集的所有元素同時(并行)執(zhí)行計算。兩個可選模式同時被用于組合數據元素和指定這樣的操作。
在第一方案中,向量的一個子集中的數據元素位于分立的寄存器中,并且一不同指令指定對每個元素執(zhí)行的操作。盡管多個指令被用于指定對數據元素同時執(zhí)行的操作,但是所有這些指令均對應于單個程序流,并且因而被看作單個實體。這種方法被稱作超長指令字(VLIW),指的是單個超長指令字包含多個基本指令的情況。在對向量的子集進行計算的情況下,由于對所有數據元素執(zhí)行相同操作,所有基本指令相同;這些基本指令間的唯一差異是操作數和結果的位置。這種方法用于不同的數字信號處理器,諸如德州儀器公司的C64,StarCore的SC140,以及模擬器件公司的ADSP 2116x。
在第二方案中,向量的一個子集中的所有數據元素位于相同寄存器(“寬寄存器”)中,并且單指令指定對所有這種單元執(zhí)行的操作。這種方法被稱作具有子字并發(fā)的單指令多數據(SIMD)。術語SIMD是指對所有操作只使用一個指令,而術語子字并發(fā)是指在相同寄存器中多個數據元素的級聯。這種方法被用于各種面向多媒體和信號處理的微處理器擴展,諸如Intel公司的MMX以及摩托羅拉公司的ALTIVEC。
這些方案存在各種限制。具體地,具有子字并發(fā)的SIMD的使用需要把數據元素按正確的順序放置在寬寄存器內,并且還需要根據需要到處移動數據元素的機構。這些需要轉化成附加硬件資源和執(zhí)行周期。另一方面,VLIW方案的使用需要編碼多個執(zhí)行相同操作的指令,因而導致較長指令(所謂VLIW),其往往需要指令存儲器中的更多空間。
發(fā)明內容
本發(fā)明涉及改進的數字信號處理器結構。
在本發(fā)明各種實施例中,一種用于處理數字信號信息的方法使用具有與第二數據路徑級聯連接的第一數據路徑的處理器。這個新穎配置允許第一SIMD指令在第一數據路徑中與第二數據路徑中的第二SIMD指令并行地執(zhí)行。
第一數據路徑和第二數據路徑均可以包含其自身的寄存器堆。此外,在第一數據路徑中執(zhí)行的指令可以使向量信息被載入第一數據路徑的寄存器堆以對其進行操作。在第一數據路徑中執(zhí)行的操作的結果被傳送到第二數據路徑的寄存器堆。在第二數據路徑中操作被傳送到第二數據路徑的寄存器堆的結果。此外,傳送到第二數據路徑的寄存器堆的結果可以被零擴展或符號擴展以具有等于第二數據路徑寬度的位長。在第二數據路徑中執(zhí)行的操作的結果可以被傳送回第二數據路徑的寄存器堆,存儲器,或第一數據路徑的寄存器堆。
傳送到存儲器或第一數據路徑的寄存器堆的數據可以被降低尺寸。尺寸降低操作可以包含例如飽和,舍入,截斷,位提取,或其組合。
已知或以后開發(fā)的寄存器堆結構的任何組合均可用于實現本發(fā)明。例如,寄存器堆可以被組織成多個寄存器組,寬寄存器或其單元能任意尋址的寄存器堆。使用具有多個指針的指針寄存器可以實現這種任意尋址,其中每個指針指向寄存器堆的一個單元。如果使用任意尋址,則SIMD指令的操作數可以使用指針寄存器指定,并且/或者指針寄存器可以用于存儲結果數據。
此外,專用硬件可以用于把多個數值合并并且把單個結果放入專用寄存器。
第一數據路徑的寬度可以不同于第二數據路徑的寬度。在這里討論的不同示例性實施例中,第一數據路徑的寬度是16位并且第二數據路徑的寬度是40位。然而,其它寬度(例如分別24和50位)可以根據應用而使用。
本發(fā)明的這些和其它方面,特性和優(yōu)勢將通過以下優(yōu)選實施例的詳細描述變得清楚,該詳細描述將結合附圖進行閱讀。
下面將參照附圖通過優(yōu)選實施例詳細描述本發(fā)明,其中圖1是說明使用本發(fā)明的單指令多數據(SIMD)數字信號處理器(DSP)或媒體處理器的示意圖;圖2的示意圖根據本發(fā)明示出了16位元素向量的向量數據文件的一個實施例,該實施例包含8項指針地址文件,512項向量數據文件,以及對一個任意4元素子向量的訪問;圖3根據本發(fā)明示出了包含三個向量的數據寄存器分區(qū)的說明性例子;圖4根據本發(fā)明示出了針對一個向量的數據寄存器分區(qū)的另一個說明性例子;圖5是地址遞增器的可選實施例的示意圖,用于根據本發(fā)明說明新地址復用器,以及步進(stride)和模運算尋址能力;圖6是具有級聯SIMD結構的示例性數字信號處理器的框圖;圖7是使用寬寄存器的具有級聯SIMD結構的示例性數字信號處理器的框圖;圖8是使用任意向量尋址的具有級聯SIMD結構的示例性數字信號處理器的框圖;以及圖9是僅在第一數據路徑使用任意向量尋址的具有級聯SIMD結構的示例性數字信號處理器的框圖。
具體實施例方式
本發(fā)明提供向量寄存器堆以包含向量數據,最好用于單指令多數據(SIMD)處理。本發(fā)明還提供寄存器堆,用于訪問包含在其中的向量的任意子向量。下面將根據處理器電路描述本發(fā)明,其中處理器電路具有帶預定數量單元的部件,地址線路或指定規(guī)模的部件。這些部件或向量的規(guī)模,地址,輸入數量,輸出數量,單元數量等等僅僅是說明性的,并且不得解釋為對本發(fā)明的限制。
在本發(fā)明的一個說明性實施例中,公開了一個向量寄存器堆,它被構造成用于存放總尺寸等于或小于512元素的一或多個向量,其中每次訪問讀或寫4個16位元素。向量是由表示數量的元素的線性數組組成的數據結構。用于訪問向量寄存器堆的地址由包含在整體但分別訪問的指針陣列中的地址指針指定。每個指針指定四個元素之一的地址,其中可在每個訪問端口處在每個存取周期讀或寫所述4個元素。指針文件包含多個指針。根據包含在控制SIMD處理程序的指令中的信息選擇每次訪問所需要的指針數量,例如,四個。因此,寄存器堆具有間接尋址類型。在用于確定文件的向量數據陣列部分的訪問地址之后,指針陣列部分的內容可以被更新(在指令控制下),例如用遞增值更新(以允許向量的順序訪問),或用讀取的向量的內容更新(以允許表查找訪問或數據收集訪問)。本發(fā)明的其它實施例還提供用于步進訪問,模運算(循環(huán))訪問,或其它訪問方法的更新。本發(fā)明的程序允許計算地址值,以及把更新的數值加載到指針地址文件以供使用。
應當理解,圖1-5說明的單元可以通過硬件,軟件或其組合的各種形式實現。這些單元可以在一或多個適當編程的通用數字計算機中,或通過具有處理器和存儲器以及輸入/輸出接口的存儲設備上的軟件實現。本發(fā)明也可以在硬件上實現。當在硬件上實現時,計算(包含地址更新)可以有利地處理為滿流水線速率的流水線化操作。
現在參照附圖,其中相似數字代表附圖中相同或類似的單元,并且從圖1開始,示出了示例性處理器100。處理器100可以包含媒體處理器,SIMD處理器或數字信號處理器(DSP),最好包含向指令單元102提供指令的指令存儲器101。指令單元102把例如存儲在指令存儲器101中的程序排序,并且向處理器100的其它單元或部件提供解碼控制。要處理的數據被保存在多端口數據存儲器105中,該多端口數據存儲器例如具有兩個讀數據端口153和154,以及兩個寫數據端口151和152,每個端口通過數據地址單元106提供的地址來訪問。數據通過讀端口154從存儲器105移動到向量寄存器堆103的寫端口133,以便被向量寄存器堆103使用,向量寄存器堆103經由寫端口132被向量算術單元104使用。計算的結果通過寫端口132被存儲在向量寄存器堆103中。存儲在向量寄存器堆103中的文件可以用于進一步的計算,或通過連接到總線111和寫端口152的讀端口131移動到數據存儲器105。通過輸入110從外部存儲器或I/O設備提供處理器100的程序和輸入數據,并且通過輸出總線109把結果發(fā)送到外部存儲器或I/O。
算術單元141-144均對通過讀端口134和135從寄存器堆103讀取的兩個子向量的每個子向量的一個元素進行操作,算術單元141-144均可以執(zhí)行彼此相同的功能。產生結果的四元素子向量,該子向量接著通過寫端口132被回寫到寄存器堆103。如果期望的子向量更容易地在端口132,134,135的每個上選出,則在單元104中執(zhí)行的計算可以進行得更快速。
參照圖2,現在更詳細描述向量寄存器堆103(圖1)。向量寄存器堆103包含針對訪問端口131-135(圖1)之一的邏輯。應當注意,為了簡單,圖2中的數據總線207代表圖1中108所示的兩個數據總線之一。并且,輸入端口210是圖1示出的兩個輸入端口131或132之一。例如,向量地址指針陣列202被說明為由8個字組成,每個字由4個9位字段組成。由處理器100(圖1)的指令單元102產生的3位地址(指針選擇)尋址向量地址指針陣列202,3位地址通過字解碼器201選擇8個字中的一個字。向量數據被包含在向量數據文件206中,在一個實施例中,向量數據文件包含512個均為16位的元素??偩€210用于加載來自數據存儲器105的指針字和數據文件,或來自算術單元104(圖1)的向量算術計算結果。從向量數據文件206讀取的數據由4個串聯向量元素R1,R2,R3,R4組成,這些向量元素被放置在讀數據總線207上,以便由向量算術單元104使用,或存儲在數據存儲器105(圖1)中。從向量數據文件206讀取的64位中的36位也被連接到36復用器205(例如,4個組,每組9個復用器)的第一輸入,用于將在下面描述的地址更新。
用于選擇組成向量數據文件206的每個讀或寫操作的4個向量元素(R1-R4)中的每一個的地址,來自于通過讀總線203從向量指針陣列202讀取的向量指針字的字段之一。每個字段與指令單元102(圖1)產生的適當使能208進行邏輯與,以形成用于訪問向量數據文件206的地址。使能的地址被同時連接到4增量陣列204的輸入。增量地址被連接到復用器205的第二輸入。通過復用器控制信號211在復用器205的第一和第二輸入之間進行選擇。復用器205的輸出被連接到地址指針陣列202的輸入,使得輸出能夠被寫入陣列202。從指針陣列202讀取的指針數據字可通過總線209被發(fā)送到數據存儲器105(圖1)。陣列邏輯設計領域的技術人員可以發(fā)現,這種在用于尋址數據陣列后(遞增后)遞增地址指針數值的方案可以被修改,以通過直接連接遞增器陣列204到讀總線203的輸出并且連接其輸出到地址使能級段230之前(遞增前),在使用之前遞增。
向量數據文件206的元素空間(例如,512字)最好由軟件細分并分配給所實現的特定算法所需的數據向量。放到指針陣列202所存儲的向量指針文件中的值定義多達8個的向量中的每個的起始地址。最好使用例如VPTRLOAD的程序指令把這些值載入指針陣列202。參照圖2,指令VPTRLOAD的執(zhí)行將要加載的值放到總線210上,并且將要加載的指針字的地址放到字地址解碼器201的“指針選擇”輸入上。放在總線210上的值可以來自數據存儲器105,或是算術或邏輯計算單元104(圖1)輸出的結果。
參照圖3,向量數據文件206的一個實施例的示例性劃分被示出為保持3個小向量。每個元素的9位地址由6位(64行)行地址和3位(8列)列地址組成。例子中的第一向量303由4個元素311組成,其中第一元素在行3列3中。第二元素在行3,列4中,諸如此類。對地址向量303,最好由軟件程序設置向量指針陣列202。該程序將指針陣列的字地址″1″設置成指向向量303的4個元素。在向量地址指針文件202中,字地址″1″的36位被分成4個9位字段305,這些字段已經如圖3所示進行了初始化。盡管實際會存儲9位二進制數(或其它長度的字),但在指針的每個字段305中的值被示出為行,列值。例如,在3,3處的元素的元素地址實際被存儲成二進制的000011011。第二向量307具有從8,1起始的12個元素。指針字地址″4″被用于尋址這個具有所示數值的向量的起始4元素。第三向量309由3個元素組成,第一元素在位置11,5,并且其它如圖所示。由于沒有第四元素,第四指針字段被設置成0,0,盡管無關。
對于圖2中示出的實施例,向量數據文件206的基本操作包含例如順序讀,順序寫,間接讀和間接寫。訪問的間接模式是本發(fā)明的一個重要特性,并且允許對向量數據文件206中的任意元素集合進行尋址以形成子向量。例如,這些子向量可以用于進行向量值的表查找,或把元素收集到子向量中以用于SIMD處理。本發(fā)明的其它用途可以包含例如向量的條狀提取(strip-mining)。向量的條狀提取包含通過把結果子向量間接讀和回寫(存儲)到數據存儲器105以便以后用于例如過濾的后續(xù)程序步驟,從而總成本子向量。
在對向量寄存器堆103(圖1)執(zhí)行指定邏輯周期的操作期間,可以執(zhí)行下列操作指定指針陣列202上的操作(讀或寫操作),提供對指針陣列的索引(是地址,例如,0和7之間的字地址),從指針陣列202讀取對應于所提供的索引的指針陣列202的4個指針項,使用從指針陣列讀取的4個指針項產生一組針對向量數據文件206(最好由如圖所示一組4個地址使能信號208觸發(fā))的地址(圖中所示為4個),從向量數據文件206讀取對應于所提供的地址組的向量數據文件206的元素,以及提供控制信號以有選擇地控制指針陣列中對應于所提供索引的指針項的更新。這些控制信號至少包含具有″是″或″否″值的“儲存(putaway)控制”信號,其中如果等于″是″,該信號規(guī)定總線250上復用器的輸出值要通過寫端口251回寫到指針地址陣列202??刂菩盘栆舶瑥陀闷骺刂菩盘?11,以確定從指針文件202讀取的、對應于所提供的地址使能信號208組的增量地址,或從向量數據寄存器堆206讀取的數據是否要被連接到總線250。
再次參照圖2,其它操作(諸如遞增操作,步進操作或增量模運算尋址操作)可以在由向量地址指針文件202提供的地址組上執(zhí)行,并且可使用復用器電路205選擇性地輸出該操作的數據結果,或從向量數據文件206的元素讀取的數據。在這種情況下,指針陣列(202)中對應于所提供的索引的指針項的更新可以使用由復用器電路205選擇性輸出的數據。
這些操作由指令觸發(fā),該指令包含對向量寄存器堆103中向量數據的操作。對總線210上的數據源以及總線209和207上的數據目的地的指定也從指令流中導出。
順序向量讀取從指針陣列202中的8個地址字(0-7)之一中的起始地址開始。為了示例說明,會使用在圖3示出的向量文件206劃分,并且將描述第二向量307的讀取以解釋本發(fā)明的其它特性以及細節(jié)。
參照圖1,2和3,第一操作周期指定指針陣列202的字地址″4″的讀取,所有4個地址的使能,向量數據文件206的讀取,復用器控制211取值1(例如,選擇復用器的左支),以及″是″儲存值(putaway value)。儲存值是指令中的一個位,用于指定復用器205的輸出是否將被回寫到指針地址陣列202。儲存值被實現成控制信號,該控制信號確定總線250上的值是否將通過寫端口251被寫入指針陣列202。這將產生向量指針字地址″4″的第一個9位,它是從向量數據文件206讀取的第一個子向量元素的地址。向量數據文件206中8,1處的元素被讀取并且放置在總線207的R1上。類似地,指針字″4″中的第二字段指定數據文件中8,2處的元素被讀取并且放置在總線207的R2上,對于第三和第四元素也類似。讀取的4個16位數據值(R1-R4)被裝配成一個子向量,并且通過讀數據總線207傳遞到數據存儲器105或向量算術單元104。同時,從指針字″4″讀取的值被遞增器204遞增到下一個順序數值(通過加4,因為一次處理4個元素)。
由于復用器控制211選擇遞增值并且儲存控制指定更新值將被放回指針陣列202中,數值(8,5),(8,6),(8,7)和(8,8)通過復用器205被存儲回指針文件字地址4。本領域技術人員理解,4(二進制000000100)與表示行8列1的值(二進制001000001)相加將產生表示行8列5(8,5)的二進制001000101,并且對于其它3個數值也是類似的。
下一個操作周期的控制值與第一周期相同,但由于更新的指針值被用于訪問向量數據文件206,向量的下4個元素被裝配并且放在總線207上。對于附加周期(針對這個例子,總共為3)重復這個相同控制數值,以順序讀取整個元素向量(在這種情況下為12個元素)并且把向量放置于總線207上。
向量的順序寫入或加載非常類似于讀取。再次使用圖3的第二向量作為一個例子,訪問向量數據文件206中的數據的第一操作周期指定指針陣列202的字地址4的讀取,所有4個地址的使能208,向量數據文件206的寫,復用器控制211取值1(例如,選擇左支),以及″是″儲存控制值。這個值將產生向量指針字地址″4″的第一個9位,它是寫入數據文件206的第一個子向量元素的地址??偩€210的第一個16位被寫入向量數據文件206中8,1處的元素。類似地,指針字地址″4″中的第二字段指定數據文件206中8,2處的元素將通過來自總線210的第二個16位被寫入。對于第三和第四元素是類似的。從總線210上的64位取得的4個16位數據值現在被寫入向量數據文件206。同時,從指針字地址″4″讀取的值已經被遞增器204遞增到下一個順序數值(通過加4,因為一次處理4個元素)。由于復用器控制211選擇遞增值并且儲存控制值指定更新的數值將被放回指針陣列202中,數值(8,5),(8,6),(8,7)和(8,8)通過復用器205被存儲回指針文件字地址″4″。相同控制字被再重復兩次,并且總線210上的下兩個值被存儲在數據文件中以構成12元素向量。
間接尋址操作模式(間接讀和間接寫)可以說明性地用于以下操作1)通過向量數據206文件中存儲為向量的地址列表進行的任意子向量訪問;2)信號樣本被放入指針寄存器202的情況下進行的針對數據的訪問,在這種情況下,每個信號值可以訪問許多算法中需要的向量元素以選擇過濾系數;以及3)數據收集操作,用以把分散數據轉換成順序的可SIMD處理的數據。
這不是詳盡的列舉,因為間接命令也可以用于其它任務。
繼續(xù)參照圖2并使用圖4中說明的示例性劃分描述間接讀取。第一向量403的4個元素包含對應于向量數據文件206中的地址(8,3),(8,5),(9,2)和(9,3)的二進制元素值。訪問向量寄存器數據文件206中數據的第一操作周期的控制指定指針陣列202的字地址″1″的讀取,所有4地址的使能208,向量數據文件206的讀取,復用器控制211取值0(選擇右支),以及″是″儲存控制值。這個數值將導致向量數據文件206中位置8,3處的16位元素被從向量數據文件206讀取,并且放置于總線207的R1上。這個數值的9個位也被連接到復用器205中的第一個。如上所述,這9位具有對應于向量數據文件206中元素的地址的二進制數值。類似地,其它3個元素處每個數值的9位被連接到復用器205。由于復用器選擇控制211指定選擇右并且儲存控制指定″是″,則包含在位置(8,3),(8,5),(9,2)和(9,3)中的數值被寫入指針字地址″1″的4個字段。
第二控制周期指定指針陣列202的字地址″4″的讀取,所有4地址的使能208,向量數據文件206的讀取,復用器控制值211為0(選擇右支),以及″否″儲存控制值。第二操作周期導致其地址現在在指針文件字地址″1″處的4個元素的讀取,并且被從向量數據文件206讀取并放置于總線207上。這是其在向量數據文件206中的位置對應于向量數據文件206中位置(8,3),(8,5),(9,2)和(9,3)的低階9位的值的4個元素。
間接寫(“數據分散”)操作按類似順序控制。注意,執(zhí)行數據分散操作的能力需要將64位寫端口261(圖2)分成4個16位端口(總共64位),使得每個元素地址230可以指定對向量數據文件206中任何16位數據元素的寫入。使用這種能力,元素1地址指定64位總線210的第一個16位中的向量元素R1被寫入數據文件206的位置,元素2地址指定64位總線的第二個16位中的向量元素R2被寫入數據文件206的位置,對于R3和R4也諸如此類。由于硬件成本原因,簡化實施例可以省略這種能力。在所述實施例中,訪問向量寄存器數據文件206中數據的第一操作周期的控制指定指針陣列202的字地址″1 ″的讀取,所有4地址的使能208,向量數據文件206的讀取,復用器控制數值211為0(選擇右支),以及″是″儲存控制值。這讀取所指定的4個元素中的數值,并且把數值回寫入指針陣列字地址″1″。第二周期控制指定指針陣列202的字地址″1″的讀取,所有4地址的使能208,向量數據文件206的寫入,復用器控制211值為0(選擇右支),以及″否″儲存控制值。這取得總線210上的4個元素,并且把它們放置在由第一周期中讀取的地址指定的向量數據文件206的4個元素中。
使用任意指針指定數據文件中計算的起始點的能力使得極其容易和快速地將一個向量“滑過”另一個向量或其自身,以用于諸如過濾和卷積的計算。
本領域技術人員會理解,圖2中示出的地址生成和使用的邏輯可以被復制以用于向量數據文件206的多端口訪問。圖2的實施例針對多端口操作的第一擴展是使文件206的讀和寫端口(分別為262和261)能同時操作,即一個兩端口文件,其中一個端口專用于讀取,另一個端口專用于寫入。通過這樣的結構,當舊數據被讀端口262讀取并且放在總線207上時,新數據通過寫端口261可以從總線210被載入向量數據文件206,經過處理并且把結果回寫到數據存儲器105。這允許任意規(guī)模的向量順序通過(streamed though)處理單元。
參照圖5,給出對圖2的實施例的修改以提供例如步進和模運算尋址的其它尋址模式。其它尋址模式也可以用適當邏輯或軟件實現。圖2的地址遞增器204和復用器205可以被圖5中示出的硬件替換。包含遞增器504和復用器505。輸入包含從指針文件(202)讀取的元素地址508,來自寄存器堆206的向量數據,輸出是被存儲在指針文件202中的更新地址總線250。對于步進訪問,最好由程序把步進值存儲在步進寄存器501中,并且訪問按上面針對順序訪問描述的方式進行。然而,對指針文件值相加(相減)步進值而不是固定數值4。例如,模運算(循環(huán))尋址由例如在起始點寄存器503和指針文件202(圖2)中加載循環(huán)緩沖區(qū)的起始地址的程序執(zhí)行。向量的結束點被加載在結束點寄存器502中。使用步進寄存器501數值繼續(xù)操作以按上述遞增地址。每個周期,比較相等電路506比較更新地址與結束點地址以確定是否已經到達向量的結束點。如果已經到達,則調整復用器505以向指針文件202提供來自起始點地址寄存器503的起始點地址以作為新地址,而不是提供更新地址。
本發(fā)明提供了超過現有技術的許多優(yōu)點。例如,由于本發(fā)明提供的靈活尋址,數據存儲器105的尋址被簡化。其它優(yōu)點可以包含如下。復雜循環(huán)和表查找的數據尋址可以方便地在少數指令中指定,本發(fā)明使得程序的規(guī)模更小,因此提高了指令存儲器101的效率。本發(fā)明允許向量地址文件206中的每個元素能夠獨立于向量地址文件206中的任何其他元素內容地包含數據陣列202中任意元素的任意地址。例如,兩個元素可以具有相同地址,同時消除了有關地址指向數據文件中順序數據元素的任何要求。本發(fā)明可以實現其它優(yōu)點和好處。
根據本發(fā)明的其它實施例,數字信號處理器(DSP)包含級聯連接的雙SIMD單元,并且其中級聯的第一SIMD級段的結果可以存儲在級聯的第一SIMD級段的寄存器堆中。每個SIMD級段包含其自身的用于存儲操作數和中間結果(例如,其自身寄存器堆),以及用于解碼可在該級段中執(zhí)行的操作的資源。在每個級段內,硬件資源被構造成以SIMD方式操作,使得獨立的SIMD操作可以被同時執(zhí)行,其中級聯的每個級段均執(zhí)行一個操作。流過級聯的中間操作數和結果被存儲在級段的寄存器堆中,并且可以從那些寄存器堆訪問。數據也可以從存儲器直接進入級聯中級段的寄存器堆。
應當理解,本發(fā)明提供了超過傳統(tǒng)方案的顯著優(yōu)勢。例如,由于SIMD功能單元級聯連接,并且可以在信號處理內核的計算時同時使用,因此不需要使用相同算術/邏輯單元執(zhí)行離散操作序列。此外,由于級聯中各個級段以獨立于前一級段的方式(例如,每個級段執(zhí)行其自身的指令)進行操作,并且數據能夠從任一級段的寄存器堆傳送到存儲器/從該寄存器堆傳送到該存儲器,所以本發(fā)明也改進了上面描述的流水線方案。
另外,通過使用單指令指定所有操作,本發(fā)明的各種實施例改進了傳統(tǒng)的VLIW方案,并且同時允許針對操作數規(guī)定獨立的寄存器。此外,本發(fā)明的各種實施例通過允許使用靈活機構選擇SIMD指令所使用的數據元素,改進了具有子字并發(fā)的SIMD方案,但不需要單個寄存器中數據元素的串聯。
參照圖6,示例性數字信號處理器1100包含以SIMD方式對從這里稱作向量元素寄存器堆(VER)1120的寄存器堆獲得的16位數據值1122-1128執(zhí)行4個操作,從而產生4個中間結果的16位數據路徑1110。VER 1120每周期能夠傳送8個操作數并接收4個值。在16位數據路徑1110中產生的4個結果被放在另一個寄存器堆中,其中每個元素1152-1158是40位寬,所述另一個寄存器堆這里被稱作向量累加器寄存器堆(VAR)1160。16位數據路徑1110內的每個功能單元(FU16)1132-1138包含例如16位乘16位乘法器,和執(zhí)行算術、邏輯、移位,并且選擇對16位數據內容的操作的16位ALU。4個16位數據元素可以被從存儲器傳送到VER 1120,并且4個16位數據元素可以被從VER 120傳送到存儲器。
其間,40位數據路徑1140同時也以SIMD方式對從VAR 1160獲得的40位值1152-1158執(zhí)行4個操作,從而產生被放回VAR 1160的4個結果。VAR 1160每周期也能夠傳送8個操作數并接收4個值。40位數據路徑1140內的每個功能單元(FU40)1152-1158包含例如執(zhí)行算術、邏輯、移位,并且選擇對40位數據的操作的40位ALU。此外,附加專用硬件(Red 1171-1174)可以用于把4個值合并成單個結果(稱為“縮減”的操作),從而把結果放置在專用的特殊寄存器RR 1175中。4個40位數據元素可以被并行地從VAR 1160傳送到存儲器。
具有這個結構的其它功能可選地包含在執(zhí)行縮減數據值長度的操作(例如,舍入,截斷,飽和,位提取或其組合)之后從40位VAR1160傳送數據值到16位VER 1120的能力,該操作在標記為R/S/T1163-1169的塊中執(zhí)行。
因此,兩個獨立的4元素SIMD指令可以通過這個硬件結構在任何周期同時執(zhí)行,兩個SIMD計算數據路徑的每個均執(zhí)行一個指令。
應當理解,可以在來自第一數據路徑的結果被放在第二數據路徑的寄存器堆之前對該結果執(zhí)行適當寬度擴展,并且可以在來自第二數據路徑的結果被移動到第一數據路徑的寄存器堆或存儲器時對該結果執(zhí)行適當長度縮減。
此外,盡管圖6分別示出了16位和40位的數據路徑寬度,然而應當理解,可以把這些數據路徑的寬度實現為不同數值對。例如,24位數據路徑可以與50位數據路徑配對。應當理解,數據路徑的寬度在不偏離本發(fā)明的實質和范圍的前提下可以隨設計選擇發(fā)生改變。
圖6示出的結構的典型應用是在16位數據路徑1110中計算16位乘法操作,從而產生32位結果,之后是40位數據路徑1140中的40位累加操作。針對此計算,16位數據值被從存儲器傳送到VER 1120,乘法操作在16位數據路徑中執(zhí)行,并且在擴展到40位(例如,符號擴展或零擴展)之后,32位結果被放入VAR 1160。來自VAR 1160的40位數據被相加(累加),并且結果被放入VAR 1160以便以后使用。當一系列累加操作完成時,把最終結果從VAR 1160傳送到存儲器,該結果可以是40位數值,或是通過縮減數據值長度的操作(例如,舍入,截斷,飽和,位提取或其組合)而得到的32位數值。
為了提供SIMD操作所需的8個數據值,并且保存由SIMD操作產生的4個值,可以通過本領域當前為這些目的而實施的若干方式中的任意方式組織寄存器堆。例如,寄存器堆可以由4個小的寄存器“組”構成(諸如圖6示出的寄存器組1122-1128),其中每個寄存器組具有兩個讀端口和一個寫端口。這些寄存器組的每個只向SIMD數據路徑中的一個功能單元提供數據。此方案需要在一個SIMD操作中使用的每組4個值在其使用之前,按SIMD操作使用數值的順序適當地分布在4個寄存器組上。類似地,立即放置在寄存器堆中的4個數值必須被分布在各寄存器組上。
寄存器堆的另一個可選方式包含“寬”寄存器的使用,其中每個寄存器包含多個數據值(元素)。如圖7所示,VER 1220和VAR 1260分別包含寬寄存器1225和1265。在這個實施例中,為檢索用于執(zhí)行SIMD操作的8個數值,只有兩個寄存器(兩個讀端口)被訪問。類似地,只有一個寄存器(一個寫端口)被訪問以放置由SIMD操作產生的4個結果。這對應于稱為“子字并發(fā)”的方案。結果,VER 1220和VAR 1260均具有兩個讀端口和一個寫端口。此方案需要將一個SIMD操作中使用的各4數值組的每組在其使用之前,按SIMD操作使用數值的順序一起放置在一個單獨寄存器中。類似地,單個寄存器被訪問以立即將由SIMD操作產生的4個數值放置在寄存器堆中。
圖8圖解了寄存器堆的更靈活的可選方式,其包含使用上面描述的類型的8讀4寫寄存器堆,包含指針寄存器。在這種情況下,根據指針寄存器內容的指定,在堆中的任意寄存器中間按任意順序任意選擇在SIMD指令中使用的數值組。這種方案所提供的靈活性允許以更復雜的寄存器堆(更多端口)為代價提供更強力的數據操作機構。如上面進一步描述的,通過指針寄存器間接執(zhí)行對寄存器堆的訪問。即,每個指針寄存器(1350和1355)包含針對寄存器堆(分別為1330和1360)的索引,從而允許選擇寄存器堆中的任意寄存器。兩個寄存器指針可以用于從寄存器堆讀取數據,并且第三個指針寄存器可以用于指定在寄存器堆中放置數據的位置。此外,可根據在SIMD數據路徑中執(zhí)行的操作自動遞增指針寄存器(1350和1355),使得后續(xù)SIMD操作能夠訪問來自寄存器堆的數據結構化陣列,而無需顯式的數據處理操作。
本領域技術人員明白,已知或以后開發(fā)的寄存器堆結構的任意組合可以用于實現本發(fā)明。例如,圖9示出兩個SIMD級段的級聯,其中16位數據路徑1410包含使用上面描述的指針寄存器結構靈活訪問16位數據的12端口寄存器堆(VER 1330),而40位數據路徑(VAR 1440)中的寄存器堆具有均包含4個元素,使得僅需要兩個讀端口和一個寫端口(子字并發(fā))的寄存器。
圖9中示出的2級段級聯結構提供比現有技術水平更大的靈活性,和執(zhí)行數字信號處理算法的更強計算性能。級聯中兩個SIMD級段的組合允許同時執(zhí)行通過兩個獨立SIMD指令(每個數據路徑一個指令)指定的高達8個的數字信號處理算術/邏輯操作。
上述例子說明了本發(fā)明的一些主要優(yōu)點,但是它們不是限定性的。此外,所描述和圖解的一些特性的選擇是出于說明簡單而不是設計最優(yōu)的目的。例如,在特定級段的功能單元的確切數量可以比圖中描述的功能單元的數量更多或少。此外,數據路徑(16位或40位)中執(zhí)行的實際操作由其中使用本發(fā)明的具體信號處理應用確定,并且應當理解,功能單元可以包含將在特定處理器上運行的應用所需的任意邏輯和算術操作。
盡管本發(fā)明的示例性實施例已經在這里參照附圖加以描述,然而應當理解,本發(fā)明不限于那些精確實施例,并且本領域技術人員在不偏離本發(fā)明的范圍或實質的前提下,可以對其進行各種其它改變和修改。
權利要求
1.一種使用處理器處理數字信號信息的方法,其中處理器具有級聯連接到第二數據路徑的第一數據路徑,所述方法包括步驟在第一數據路徑中執(zhí)行第一SIMD指令;以及與第一SIMD指令并行地在第二數據路徑中執(zhí)行第二SIMD指令。
2.如權利要求1所述的方法,其中第一數據路徑和第二數據路徑均包含其自身的寄存器堆。
3.如權利要求2所述的方法,其中執(zhí)行第一SIMD指令包含把向量信息加載到第一數據路徑的寄存器堆。
4.如權利要求2所述的方法,還包括把在第一數據路徑中執(zhí)行的操作的結果傳送到第二數據路徑的寄存器堆的步驟。
5.如權利要求4所述的方法,其中在第二數據路徑中操作傳送到第二數據路徑的寄存器堆的結果。
6.如權利要求4所述的方法,其中傳送到第二數據路徑的寄存器堆的結果被零擴展或符號擴展以具有等于第二數據路徑寬度的位長。
7.如權利要求2所述的方法,還包括把在第二數據路徑中執(zhí)行的操作的結果傳送到第二數據路徑的寄存器堆的步驟。
8.如權利要求2所述的方法,還包括把在第二數據路徑中執(zhí)行的操作的結果傳送到存儲器的步驟。
9.如權利要求2所述的方法,還包括把在第二數據路徑中執(zhí)行的操作的結果傳送到第一數據路徑的寄存器堆的步驟。
10.如權利要求2所述的方法,其中傳送到存儲器或第一數據路徑的寄存器堆的數據被降低尺寸。
11.如權利要求10所述的方法,其中尺寸降低包含飽和,舍入,截斷和位提取中的至少一個。
12.如權利要求2所述的方法,其中至少一個寄存器堆被組織成多個寄存器組。
13.如權利要求2所述的方法,其中至少一個寄存器堆被組織成寬寄存器。
14.如權利要求2所述的方法,其中至少一個寄存器堆被組織成其單元能任意尋址的寄存器堆。
15.如權利要求14所述的方法,其中使用具有多個指針的指針寄存器實現任意尋址,每個指針指向寄存器堆的一個單元。
16.如權利要求15所述的方法,其中使用指針寄存器指定SIMD指令的操作數。
17.如權利要求15所述的方法,其中使用指針寄存器指定要存儲的結果數據。
18.如權利要求2所述的方法,還包括步驟使用專用硬件把多個數值合并成單個結果;以及把單個結果放置到專用寄存器中。
19.如權利要求1所述的方法,其中第一數據路徑的寬度不同于第二數據路徑的寬度。
20.如權利要求19所述的方法,其中第一數據路徑的寬度小于第二數據路徑的寬度。
21.如權利要求20所述的方法,其中第一數據路徑的寬度是16位,并且第二數據路徑的寬度是40位。
22.一種數字信號處理器,包括第一數據路徑,用于執(zhí)行第一SIMD指令;以及被連接到第一數據路徑的第二數據路徑,用于與第一SIMD指令并行地執(zhí)行第二SIMD指令。
23.如權利要求22所述的數字信號處理器,其中第一數據路徑和第二數據路徑均包含其自身的寄存器堆。
24.如權利要求23的數字信號處理器,其中向量信息被存儲在第一數據路徑的寄存器堆中。
25.如權利要求23所述的數字信號處理器,其中在第一數據路徑中執(zhí)行的操作的結果被傳送到第二數據路徑的寄存器堆。
26.如權利要求25所述的數字信號處理器,其中在第二數據路徑中操作傳送到第二數據路徑的寄存器堆的結果。
27.如權利要求25所述的數字信號處理器,其中傳送到第二數據路徑的寄存器堆的結果被零擴展或符號擴展以具有等于第二數據路徑寬度的位長。
28.如權利要求23所述的數字信號處理器,其中在第二數據路徑中執(zhí)行的操作的結果被放在第二數據路徑的寄存器堆中。
29.如權利要求23所述的數字信號處理器,其中在第二數據路徑中執(zhí)行的操作的結果被傳送到存儲器。
30.如權利要求23所述的數字信號處理器,其中在第二數據路徑中執(zhí)行的操作的結果被傳送到第一數據路徑的寄存器堆。
31.如權利要求23的數字信號處理器,其中尺寸降低單元被連接到第二數據路徑的寄存器堆,用于降低傳送到存儲器或第一數據路徑的寄存器堆的數據的位長。
32.如權利要求31所述的數字信號處理器,其中尺寸降低單元被構造成用于執(zhí)行飽和,舍入,截斷和位提取中的至少一個。
33.如權利要求23所述的數字信號處理器,其中至少一個寄存器堆被組織成多個寄存器組。
34.如權利要求23所述的數字信號處理器,其中至少一個寄存器堆被組織成寬寄存器。
35.如權利要求23所述的數字信號處理器,其中至少一個寄存器堆被組織成其單元能任意尋址的寄存器堆。
36.如權利要求35所述的數字信號處理器,其中通過使用具有多個指針的指針寄存器實現任意尋址,每個指針指向寄存器堆的一個單元。
37.如權利要求36所述的數字信號處理器,其中使用指針寄存器指定SIMD指令的操作數。
38.如權利要求36所述的數字信號處理器,其中使用指針寄存器指定要存儲的結果數據。
39.如權利要求23所述的數字信號處理器,其中專用硬件被用于把多個數值合并成放入專用寄存器的單個結果。
40.如權利要求22所述的數字信號處理器,其中第一數據路徑的寬度不同于第二數據路徑的寬度。
41.如權利要求40所述的數字信號處理器,其中第一數據路徑的寬度小于第二數據路徑的寬度。
42.如權利要求41所述的數字信號處理器,其中第一數據路徑的寬度是16位,并且第二數據路徑的寬度是40位。
43.一種機器可讀的程序存儲設備,其有形地體現了可在機器上執(zhí)行的指令程序,該指令程序用于執(zhí)行各方法步驟,以使用具有級聯連接到第二數據路徑的第一數據路徑的處理器處理數字信號信息,所述方法步驟包括在第一數據路徑中執(zhí)行第一SIMD指令;以及與第一SIMD指令并行地在第二數據路徑中執(zhí)行第二SIMD指令。
44.一種用于處理向量的方法,包括步驟加載向量;訪問向量的任意部分;以及使用所訪問的向量部分執(zhí)行指定操作。
45.一種用于處理使用了均包括多個數據元素的數據向量的操作的系統(tǒng),包括向量數據文件,包括多個存儲單元,用于存儲數據向量的數據元素;通過總線連接到向量數據文件的指針陣列,指針陣列包含多個指針項,每個指針項標識向量數據文件中的至少一個存儲單元;以及所述至少一個存儲單元,用于存儲數據向量的最少一個數據元素,其中對于指針陣列中的最少一個具體指針項,由該具體指針項標識的至少一個存儲單元在向量數據文件中具有任意起始地址。
46.一種用于處理使用了均包括多個數據元素的數據向量的操作的方法,包括提供向量數據文件,該向量數據堆包括多個存儲單元,用于存儲數據向量的數據元素;以及提供具有多個指針項的指針陣列,其中每個指針項標識向量數據文件中的至少一個存儲單元,用于存儲數據向量的至少一個數據元素,其中對于指針陣列中的至少一個具體指針項,由該具體指針項標識的至少一個存儲單元在向量數據文件中具有任意起始地址。
47.一種用于處理使用了均包括多個數據元素的數據向量的操作的系統(tǒng),包括向量數據文件,包括多個存儲單元,用于存儲數據向量的數據元素;通過總線連接到向量數據文件的指針陣列,該指針陣列包含多個指針項,其中每個指針項標識向量數據文件中的至少一個存儲單元;以及所述至少一個存儲單元,用于存儲數據向量的至少一個數據元素,其中對于指針陣列中的至少一個具體指針項,由該具體指針項標識的至少一個存儲單元在向量數據文件中具有任意起始地址。
全文摘要
數字信號處理器(DSP)包含以級聯方式連接的雙SIMD單元,并且其中級聯的第一SIMD級段的結果可以存儲在級聯中第二SIMD級段的寄存器堆中。每個SIMD級段包含用于存儲操作數和中間結果的自身資源(例如,其自身寄存器堆),以及用于解碼可在該級段執(zhí)行的操作的自身資源。在每個級段內,組織硬件資源以SIMD方式操作,使得獨立的SIMD操作可以被同時執(zhí)行,其中級聯的每個級段均執(zhí)行一個操作。流過級聯的中間操作數和結果被存儲在級段的寄存器堆中,并且可以從那些寄存器堆訪問。數據也可以從存儲器直接進入級聯中各級段的寄存器堆。
文檔編號G06F9/345GK1662904SQ03813850
公開日2005年8月31日 申請日期2003年6月24日 優(yōu)先權日2002年6月26日
發(fā)明者克萊爾·約翰·格勞斯納三世, 厄戴姆·霍克內科, 截維·美爾特澤, 瑪延·摩德吉爾 申請人:國際商業(yè)機器公司