專利名稱:可配置的硬件塊的配置方法
技術領域:
本發(fā)明涉及一種如權利要求1及22的前序部分所述的方法,也即一種可配置的硬件塊的配置方法。
為了對所謂的>S<puter的s單元進行配置,需要有這種方法。>S<puter為一種程控單元,通過在處理指令的部分中采用可配置的硬件塊,所述程控單元能夠在每個處理器脈沖內執(zhí)行多于一個的指令。
這種>S<puter譬如曾在EP0825540A1中公開過。
>S<puter的基本結構如
圖11所示,下面參考附圖來對此進行講述。
出于完整性的原因,需要指出的是,此處只部分地示出和講述所述的>S<puter、尤其是其處理指令的部分(針對當前所考察的可配置的硬件塊及其配置,只講述對其有意義的部分)。
圖11所示的>S<puter包括一個預解碼單元1、指令緩沖器2、解碼重命名及裝載單元3、上文已提及的s語句變化單元(s單元)4、數(shù)據(jù)高速緩沖器5、以及存儲器接口6,其中,s單元4包括有結構編程緩沖器(可編程結構緩沖器)41、具有可編程結構的功能單元42、整型/地址指令緩沖器43和寄存器決(整型寄存器文件)44。
所述>S<puter的特殊性尤其在于其s單元4,準確地說是功能單元42。該功能單元42是一種可結構化的硬件,它可根據(jù)>S<puter所執(zhí)行的指令或指令序列進行動態(tài)地配置,使得能夠執(zhí)行由指令或指令序列所規(guī)定的作用或操作。
由>S<puter執(zhí)行的指令(準確地說是表示該指令的代碼數(shù)據(jù))從圖中未示出的存儲器出發(fā),經過存儲器接口6到達預解碼單元1,并在此進行預解碼;在此,譬如可以在所述的代碼數(shù)據(jù)中插入一些信息,該信息可以使稍后在解碼重命名及裝載單元3中的解碼變得更容易。然后,所述的代碼數(shù)據(jù)經過指令緩沖器2到達該解碼重命名及裝載單元3,并在此對由代碼數(shù)據(jù)表示的指令的執(zhí)行進行預處理。該預處理包括代碼數(shù)據(jù)的解碼、功能單元42的配置或結構化、整型寄存器文件44的初始化或管理、以及按需要進行配置的功能單元42的啟動。
通過采用表示所需配置的配置數(shù)據(jù)來實現(xiàn)所述功能單元42的結構化或配置,而且該配置數(shù)據(jù)從解碼重命名及裝載單元3被寫入到可編程結構緩沖器41中。所述表示所需配置的配置數(shù)據(jù)是在解碼重命名及裝載單元3內創(chuàng)建的;但它們也可以以編碼的形式而包含在所述的編碼數(shù)據(jù)之中。
功能單元42被設計用來從寄存器文件44及/或數(shù)據(jù)高速緩沖器5中讀取數(shù)據(jù),并對讀出的數(shù)據(jù)進行算術及/或邏輯處理,然后把表示該處理結果的數(shù)據(jù)寫入寄存器文件44和/或數(shù)據(jù)高速緩沖器5之中。
在對寄存器文件44進行合適的初始化和對功能單元42進行合適的配置時,由所述功能單元42的工作來執(zhí)行那些通過執(zhí)行如下指令而導致的操作,即所述寄存器文件44的初始化和功能單元42的配置是基于該指令而產生的。
眾所周知,對于通過執(zhí)行指令所導致的作用而言,如果用相應配置的硬件(功能單元42)來執(zhí)行它,則要比由常規(guī)程控單元在“標準”的算術邏輯單元(ALU)中執(zhí)行這些指令時快得多。這在如下情形尤其是這樣,即所述的硬件(功能單元42)作如此配置,使得通過其工作可實現(xiàn)與執(zhí)行多個相繼的指令(包括多個指令的宏指令)相一致的結果。
有關>S<puter的構造、功能及作用方式以及在此所包含的可配置硬件的詳細情況可以從所述的EP0825540A1中查取。
出于完整性的原因,此處應指出的是,并不是所有由>S<puter執(zhí)行指令時所導致的作用都能由功能單元42執(zhí)行。尤其是諸如分支、轉移、不操作、等待以及停止等被用于程序運行控制或監(jiān)視流程控制的指令通常都是用常規(guī)的方式和方法來執(zhí)行的。
不過,通過采用諸如功能單元42等可配置的硬件塊,每時間單位通??梢员炔捎贸R?guī)的程控單元要執(zhí)行更多的、由執(zhí)行指令所導致的作用,也就是說,每個處理器脈沖可以處理多于一個的指令。
當然,前提條件是所述的硬件塊能快速地配置和有效地利用。
因此本發(fā)明的任務在于,對權利要求1的前序部分所述的方法作如下改進,使得任意應用的硬件塊可以快速和簡單地配置,并能有效地得到使用。
根據(jù)本發(fā)明,該任務由權利要求1的特征部分和權利要求22的特征部分所述的特征來解決。
為此規(guī)定,-通過采用如下配置數(shù)據(jù)來實現(xiàn)硬件塊的配置,即該配置數(shù)據(jù)是從需執(zhí)行的程序的指令或指令序列的轉換中得出的,而且,在轉換該指令或指令序列時執(zhí)行如下步驟(權利要求1的特征部分)-測定為執(zhí)行相應指令所需要的、可配置硬件塊的子單元的類型,-選出還沒有在其它方面被占用的、事先所測定的類型的子單元,而且,若能找到這種子單元,則-對設置在所選子單元周圍的可配置的通信連接進行配置,或者(權利要求22的特征部分)-通過采用由轉換如下代碼所產生的配置數(shù)據(jù)來實現(xiàn)硬件塊的配置,即如果通過采用電路說明語言定義了可由所述可配置的硬件塊實現(xiàn)的電路,則生成所述的代碼。
通過這種方案,在任何情況下都可以利用極小的費用對需配置的硬件塊進行所需的配置。在此,該配置能迅速地實現(xiàn),并可優(yōu)化利用所述硬件塊的各部分;如此配置的硬件塊能夠非常有效地得到使用。
本發(fā)明的優(yōu)選擴展方案由從屬權利要求、下文的說明和附圖給出。
下面參照附圖并借助實施例來詳細闡述本發(fā)明。
圖1A-1D示出了統(tǒng)一指令格式的例子,該指令格式具有在本實施例中需要轉換的指令,或者優(yōu)選地在轉換之前將需要轉換的指令置為該指令格式,圖2示出了在按硬件實現(xiàn)所述的轉換時所采用的查詢表,圖3A和3B示出了從圖2所示查詢表中輸出的數(shù)據(jù)格式,圖4示出了用于選擇和配置為執(zhí)行指令而需要的硬件塊子單元的電路框圖,圖5示出了為由圖4所示電路所選出的子單元確定數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標的電路框圖,圖6示出了用于對需轉換的指令中所包含的恒量進行處理的電路框圖,圖7示出了用于實現(xiàn)所謂的數(shù)據(jù)轉發(fā)的電路框圖,圖8示出了一種把配置數(shù)據(jù)寫入到暫時比特流中的所謂縱橫開關,圖9示出了用于將所述的暫時比特流注入到主比特流中的裝置,圖10示出了一種把指令轉換成用于對硬件塊進行預期配置的配置數(shù)據(jù)的全部裝置,圖11示出了>S<puter的原理結構,以及圖12示出了當前所示類型的硬件塊的原理結構。
為便于理解,首先來講述可通過下面講述的方法進行配置的硬件塊的原理結構。
該硬件塊的原理結構如圖12所示。所示的硬件塊被設計用來根據(jù)其配置讀出存于存儲裝置之內的數(shù)據(jù),并對讀出的數(shù)據(jù)進行算術及/或邏輯處理,然后把表示該處理結果的數(shù)據(jù)寫入所述的存儲裝置;它譬如可以用作如圖11所示的>S<puter的功能單元42。
對于由可配置的硬件塊從其讀出數(shù)據(jù)以及由該硬件塊向其寫入數(shù)據(jù)的存儲裝置,它們可以裝設在所述硬件塊之內或之外;在本實施例中,所述存儲裝置由圖11所示的>S<puter的寄存器文件44構成。該硬件塊為一種位于存儲裝置輸出和輸入端之間的異步開關網絡;硬件塊的組件異步地相互進行耦合。
在硬件塊投入運行之前,可優(yōu)選地從該硬件塊的外部對存儲裝置進行初始化;可以想見,也可由硬件塊自己來促使或實現(xiàn)存儲裝置的初始化。
圖12所示的硬件塊具有一個或多個算術單元AU1、AU2,一個或多個比較單元CU,一個或多個第一類型的多路轉換器MUXA1、MUXA2、MUXA3,一個或多個第二類型的多路轉換器MUXB,以及一個或多個多路分解器DEMUX。
在本實施例中,所述的算術單元AU1、AU2具有兩個輸入端、一個輸出端和一個控制端。算術單元AU1、AU2負責對經其輸入端輸入的輸入信號進行算術和/邏輯處理。由算術單元AU1、AU2執(zhí)行的操作可以被固定,或可以專門地調整(配置);該單元尤其包括有加法、減法、乘法、除法等算術運算,“與”連接、“或”連接、倒置、求補等邏輯連接,算術和邏輯變換運算,以及數(shù)據(jù)轉接(把輸入信號接通到輸出端)。所述的算術單元AU1、AU2與諸如微處理器、微控制器等常規(guī)程控單元的算術/邏輯單元(ALU)是不同的;算術單元AU1、AU2所執(zhí)行的操作是有限的,這樣其結構可以較為簡單。通過算術單元AU1、AU2的控制端,可以規(guī)定相關的算術單元是否要執(zhí)行為其設定的操作。對于其執(zhí)行取決于存在一定條件的指令來說,這可以為其實現(xiàn)實際的轉換。所述的條件譬如為某一標志的狀態(tài)如果標志被設置,則執(zhí)行相關算術單元所負責的任務(譬如加法),否則不執(zhí)行(或返回)。這種在下文被稱為“條件指令”的指令可以取消很難運用的條件轉移指令;這在稍后還要詳細講述。
在所示的實施例中,比較單元CU具有兩個輸入端和一個輸出端。該比較單元CU負責把其輸入端上的信號或數(shù)據(jù)進行比較運算。由比較單元CU執(zhí)行的運算可以被固定,或可專門地進行調整(配置);該單元譬如包括有大于、大于/等于、小于、小于/等于、等于、以及不等于等比較,而且還包括對真和假的檢驗。比較單元CU的輸出端通過下文將詳細講述的多路分解器DEMUX而被接到算術單元AU1、AU2的控制端上。于是,算術單元AU1、AU2是否要執(zhí)行為其設定需要執(zhí)行的運算,取決于在比較單元CU內所執(zhí)行的操作的結果。
第一類型的多路轉換器MUXA1、MUXA2、MUXA3,第二類型的多路轉換器MUXB,以及多路分解器DEMUX被用來選擇數(shù)據(jù)源及/或信號源和選擇數(shù)據(jù)目標及/或信號目標。準確地說是-多路轉換器MUXA1用來選擇輸入到算術單元AU1輸入端的數(shù)據(jù)和/或信號的信源(在本實施例中可能的數(shù)據(jù)源和/或信號源為寄存器文件44及其它的算術單元),-多路轉換器MUXA2用來選擇輸入到算術單元AU2輸入端的數(shù)據(jù)和/或信號的信源(在本實施例中可能的數(shù)據(jù)源和/或信號源為寄存器文件44及其它的算術單元),-多路轉換器MUXA3用來選擇輸入到比較單元CUA輸入端的數(shù)據(jù)和/或信號的信源(在本實施例中可能的數(shù)據(jù)源和/或信號源為寄存器文件44及其它的算術單元),-多路轉換器MUXB用來選擇輸入到寄存器文件的數(shù)據(jù)和/或信號的信源(在本實施例中可能的數(shù)據(jù)源和/或信號源為算術單元和/或寄存器文件本身),-多路分解器DEMUX用來選擇從比較單元CUA輸出的數(shù)據(jù)和/或信號的目標(在本實施例中可能的數(shù)據(jù)目標和/或信號目標為算術單元)。
第一類型的多路轉換器具有多個輸入端和兩個輸出端,第二類型的多路轉換器具有多個輸入端和一個輸出端,而多路分解器具有一個輸入端和多個輸出端。
所述的多路轉換器和多路分解器具有圖1未示出的控制端,通過該控制端可以調整將哪些輸入數(shù)據(jù)和/或輸入信號接通到哪些輸出端上。所述控制端的數(shù)目取決于各種分配組合所需要的數(shù)目;在32個輸入端和兩個輸出端的情況下譬如需要10個控制端,以便將任意輸入端上的信號和/或數(shù)據(jù)接通到任意的輸出端上。在圖11所示的>S<puter中采用硬件塊作為功能單元42的情況下,控制信號端優(yōu)選地被連接在可編程結構緩沖器41上,這樣,寫到該緩沖器內的配置數(shù)據(jù)基本上可以直接地用于多路轉換器控制。在可編程結構緩沖器41內存儲的配置數(shù)據(jù)優(yōu)選地還包括用于規(guī)定如下單元相應功能的配置數(shù)據(jù),即算術單元AU1、AU2和比較單元CU。
利用算術單元AU1、AU2,比較單元CU,第一類型的多路轉換器MUXA1、MUXA2、MUXA3,第二類型的多路轉換器MUXB以及多路分解器DEMUX,硬件塊可以讀出存于存儲裝置(寄存器文件44)之內的數(shù)據(jù),并對讀出的數(shù)據(jù)進行算術及/或邏輯處理,然后把表示該處理結果的數(shù)據(jù)寫入所述的存儲裝置(寄存器文件44)。
圖12所示的、并參考其進行說明的硬件塊只是被考慮用來闡述基本的結構。在實際中,所述的算術單元、比較單元、多路轉換器以及多路分解器等可以裝設比圖12所示實施例多得多的數(shù)量。優(yōu)選地,如此來選擇硬件塊的大小,使得在通常情況下,由稍后還要詳細講述的所謂超塊所導致的全部操作都可一次性地編入到該硬件塊之中。
裝設在硬件塊中的數(shù)據(jù)回路和/或信號回路可以通過單個的線路或通過總線來構成,其中,如果在硬件決的各個子單元或總線系統(tǒng)中可以對需要考慮多少和/或哪些總線進行配置,則證明是比較優(yōu)選的。
硬件塊可以基于指令或指令序列并按圖12所示的類型進行配置。如果把指令或指令序列轉換成相應的硬件塊結構,則如此配置的硬件塊可以作為順序指令序列的運行單元而進行使用。這種硬件塊配置的形式在下面也被稱作結構過程的編程。
結構過程的編程的出發(fā)點可以是用諸如C、C++等高級語言編寫的程序。該程序通過編譯器進行翻譯,由此獲得的代碼(優(yōu)選地以超塊的方式)被轉換成結構信息,而需配置的硬件塊則在該結構信息的基礎上進行配置。稍后將詳細講述怎樣理解超塊。
顯然,結構過程的編程的出發(fā)點也可以是用匯編語言編寫的程序或其它類似的程序。編程的方式和方法(功能式,命令式,面向對象,…)同樣是沒有限制的。
采取如下做法被證明是有利的,即轉換成結構信息的代碼、亦即通過編譯器或以其它方式及方法生成的機器指令只包括某些機器指令類型,即無條件指令、條件指令、謂詞指令和Loop(循環(huán))指令。于是,通??尚纬芍痪哂幸粋€入口點和一個出口點的非常長(尤其包含有許多指令)的指令塊。生成盡可能長的、只具有一個入口點和一個出口點的指令塊是很有意義的,因為屬于一個或同一指令塊的指令、并且也只有這些指令可以以一個單元的形式(作為由多個指令組成的宏指令)進行處理,而所述的單元可以轉換成一個共同的硬件塊結構,并一次性地得到執(zhí)行。如果硬件塊的配置總是嚴格地基于這種單元(而且硬件塊大得足以進行該配置),那么,程序處理所需要的、硬件塊的再結構化或再配置的數(shù)量可減到最小。其生成在目前令人滿意的、也可通過上述指令群形成的這種指令塊便是上文講述的超塊。
超塊尤其還有一個特征在于,通過采用下文還要詳細講述的所謂if(如果)轉換,可以取消有條件的轉移指令。
有關超塊、其它指令塊以及相關的主題可以參考-Wen-Mei W.Hwu等人“用于未來微處理器的編譯技術”,IEEE報告的特約文章,卷83(12),1995年12月,微處理器特刊,第1625至1640頁,-Henk Neefs,Jan van Campenhout“固定塊長度結構的指令群結構所用的微結構”,第8屆IASTED國際會議的關于并行及分散的計算和系統(tǒng)的報告,第38~42頁,IASTED/ACTA出版,1996,以及-Richard H.Littin,J.A.David McWha,Murray W.Pearson,JohnG.Cleary“基于塊的執(zhí)行和任務級并行性”,出自John Morris(Ed.),“計算機結構98”,第三屆大洋洲計算機結構會議的報告,ACAC’98,Perth,1998,2-3月,澳大利亞計算機科學通信,卷20,號4,頁57~66,Springer,新加坡。
上文所述的無條件指令是指一些無條件地處理數(shù)據(jù)的指令,包括把數(shù)據(jù)從一個存儲區(qū)拷貝到另一存儲區(qū)(從一個寄存器拷貝到另一寄存器)。這種指令在下面被稱為標準指令。它們包括用于得出新值的數(shù)據(jù)和用于拷貝寄存器內容的所謂Move(移動)指令之間的算術和邏輯連接。該指令的一般格式為<助記符><目標寄存器>,<源寄存器1>,<源寄存器2>。為了實現(xiàn)這種指令所規(guī)定的操作,通常需要硬件塊的一個算術單元。
條件指令是指在出現(xiàn)一定條件時對數(shù)據(jù)進行處理的指令。由該指令執(zhí)行的作用對應于由標準指令執(zhí)行的作用,但其中相關作用的執(zhí)行取決于預定的條件。如果滿足條件,則執(zhí)行由該指令規(guī)定的作用,否則不執(zhí)行(于是相關的指令、譬如NOP指令起作用)。該指令在下文被稱為條件指令。該指令的一般格式為<助記符>p<目標寄存器>,<源寄存器1>,<源寄存器2><p標志>,其中,由助記符結尾處的“p”發(fā)出在執(zhí)行指令時對條件的依賴性的信令,而且所述條件由某一標志(譬如p標志)的某種狀態(tài)來定義。為了實現(xiàn)由該指令規(guī)定的操作,通常需要硬件塊的一個算術單元;為了對條件進行檢驗,需要一個比較單元,其輸出端與所述算術單元的控制端相連。
謂詞指令是指用于確定在條件指令中所采用的條件標志(例如p標志)的狀態(tài)的指令。在此,所述的確定是在程序運行期間根據(jù)兩個數(shù)據(jù)的比較來實現(xiàn)的。該指令在下文被稱為pxx指令。該指令的一般格式為pxx<源寄存器1>,<源寄存器2>,<p標志>,其中,xx規(guī)定了所述需要實現(xiàn)的比較操作,并用gt(大于)、ge(大于或等于)、eq(等于)、ne(不等于)、le(小于或等于)或1t(小于)來代替。該pxx指令可比作為普通的分支指令,并用來通過采用所謂的if(如果)轉換(對此參見上述由Wen-Mei等人所著的論文)來替代所述的分支指令。
Loop指令是指位于超塊結束處的用于循環(huán)重復的指令。如果滿足指令中規(guī)定的條件,則由該指令促使跳回到相關超塊的開始處;倘若不再滿足該條件,則由它可以促使產生“就緒”信號。所述的條件是通過比較操作的某個結果來定義的。該指令的一般格式為Loopxx<源寄存器1>,<源寄存器2>,其中,xx規(guī)定了需要執(zhí)行的比較操作。
從上述指令類型的格式可以看出,總是采用寄存器作為數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標。這在采用圖12所示類型的硬件塊的情況下被證明是有利的,因為可以特別有效地訪問所述的寄存器(寄存器文件44)。但是從原理上講,也可以允許指令的數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標不是寄存器。
許多程序或至少該程序的大部分可以通過只采用所述的指令類型來進行描述,或者翻譯成這種程序,因此這些程序可以全部放在圖12所示類型的硬件塊中執(zhí)行。所以,在程控單元中使用這類硬件塊可以大大提高其性能。但是,圖12所示類型的硬件塊也可以作為獨立的設備而在程控單元之外使用,然后同樣基于指令或指令流進行配置。
下面來講述硬件塊的配置,通過該配置可以執(zhí)行由指令或指令序列預先規(guī)定的算術和/或邏輯操作或操作序列。
在本實施例中,所述的硬件塊、準確地說是其子單元(算術單元,比較單元,多路轉換器,多路分解器,…),以及各子單元之間的通信連接是通過表示所需配置的配置數(shù)據(jù)(配置比特)來配置的。據(jù)此,下面所講述的配置方法的任務在于,根據(jù)硬件塊配置所基于的指令或指令序列來生成或改變配置數(shù)據(jù)或包含該配置數(shù)據(jù)的比特流。
本實施例的出發(fā)點為只轉換上述類型的指令,也即標準指令、條件指令、pxx指令和loopxx指令;其它的指令必須在其它方面執(zhí)行,譬如利用常規(guī)程控單元的執(zhí)行單元來執(zhí)行。
為了把可轉換的指令轉換成相應的硬件塊結構,采取如下做法是比較有利的,即所述的指令總是具有圖1A(標準指令)、1B(條件指令)、1C(pxx指令)及1D(loopxx指令)所示的示范格式,或者由解碼器置成這樣的格式。
尤其當硬件塊的子單元可以被配置時,給這些(物理)子單元分配一些邏輯或虛擬的單元,其中,所述虛擬單元規(guī)定了物理子單元的不同功能。倘若物理子單元“第一算術單元AU1”可以被配置,譬如就可給它分配一些虛擬單元,如加法器、減法器等等。一個虛擬單元被嚴格地分配給一個物理子單元,但一個物理子單元可以分配多個虛擬單元。優(yōu)選地,所有的虛擬單元在一個表格或目錄內進行管理。除了針對虛擬單元的信息外,相應的表格登錄項還包括有如下有關信息,即各個虛擬單元被分配給哪個物理單元,以及為了給物理子單元賦予由虛擬單元表示的功能,必須通過哪些配置比特和必要時怎樣來配置該物理子單元。
優(yōu)選地,將整個超塊轉換成硬件塊結構。
把指令轉換成硬件塊結構化信息主要分三個階段來實現(xiàn)。
在第一階段,首先測定需要哪種類型的虛擬單元(加法器,減法器,乘法器…)來執(zhí)行需要轉換的指令,以及該虛擬單元是否仍然可用。如果所需類型的虛擬單元是空閑的,則選出該虛擬單元或從中選出一個虛擬單元來執(zhí)行相關的指令。然后實行配置或準備配置,并為選出的虛擬單元預備所分配的物理子單元。為了進行配置,簡單地對分配給相關物理子單元的配置比特進行設置或復位;這是沒有什么難度的,因為哪個物理單元分配了所選的虛擬單元、以及需要通過哪些配置比特和必要時需要怎樣配置該物理子單元等信息是同所述的虛擬單元一起進行管理的。為選出的虛擬單元預備所分配的物理子單元是必要的,以便避免多次使用相關的物理子單元。在本實施例中,這是通過如下方式來實現(xiàn)的,即每次在為某個目的而分配給物理單元之后,便禁止相關物理子單元所分配的所有虛擬單元。
在pxx指令的情況下,可以按照硬件塊的結構要求根據(jù)p標志選擇一個完全確定的物理子單元(比較單元)。
在條件指令的情況下,如果某些指令只有利用某些標志才是可能的,也即在條件指令的分指令系統(tǒng)中沒有完全的正交性,那么,p標志只對虛擬/物理單元的選擇起作用。
在硬件塊配置的第二階段,對前接和/或后接于所選的物理子單元之上的多路轉換器進行配置,以便根據(jù)需轉換的指令中的規(guī)定來調整數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標。在理想情況下,所述多路轉換器與需轉換的指令的格式是相互匹配的,使得所述指令中對數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標進行規(guī)定的部分可以不變地被接收作為配置該多路轉換器的配置比特。如果這-出于一些原因總是這樣-不可能或不理想,則對多路轉換器進行配置的配置數(shù)據(jù)譬如可以從一個表格中查取,在該表格內存儲了指令中用于對數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標進行規(guī)定的部分同對多路轉換器進行配置的配置比特之間的分配。優(yōu)選地,為了建立通往某個數(shù)據(jù)源和/或信號源及/或通往某個數(shù)據(jù)目標和/或信號目標的通信連接,所需的配置對于所有多路轉換器都是相同的。
倘若需執(zhí)行的操作所基于的數(shù)據(jù)至少部分地由包含在指令代碼中的恒量組成,則需要進行特殊處理。于是,必須-搜尋空閑的(恒量)寄存器,-將該寄存器用作數(shù)據(jù)源和/或信號源,以及-在硬件塊投入運行之前,把在指令代碼中所包含的恒量寫到所選的寄存器中。
在本實施例中,預先檢驗所述的相關恒量是否已存儲在(恒量)寄存器中。在此,如果結論是已存在包含該恒量的(恒量)寄存器,則將該已存在的(恒量)寄存器用作數(shù)據(jù)源和/或信號源。
另外,需要注意的是,所述需轉換的指令具有許多不同的數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標,而且/或者取決于多個條件,在這方面需要對單個指令進行特殊處理。
此外,用作數(shù)據(jù)目標和/或信號目標的寄存器被標記為已占用,因為在一個超塊內不允許有第二次占用,而且必須通過所謂的(運行時間)寄存器重命名、也即一種從超標量結構得知的技術來進行避免。
在該(對所有指令通用的)第二階段之后為各個指令類型加入特殊的分步驟,該分步驟是從相應的特殊性得出的。
另外,在條件指令的情況下,必須對檢驗是否存在條件的比較單元進行測定,并且通過所屬的多路分解器將其輸出信號接通到執(zhí)行該操作的算術單元上。另外還需考慮該條件為何種類型。
在條件Move(移動)指令的情況下,還需負責使所述目標寄存器的內容在不執(zhí)行指令時保持不變。
在所述硬件塊配置的第二階段之后,配置可以結束,并啟動該硬件塊。但是優(yōu)選地,這只有在執(zhí)行完下述第三階段之后才施行。
在硬件塊的該第三階段中實現(xiàn)一種所謂的數(shù)據(jù)轉發(fā)。在此,并不固執(zhí)地采用指令中給出的數(shù)據(jù)源和/或信號源作為數(shù)據(jù)源和/或信號源,而是在可能范圍內采用各個超塊內的相關數(shù)據(jù)源和/或信號源已在其上預先寫過的物理子單元。這在兩方面被證明是有利的一方面,由于可能需要較少的寄存器(如果不采用指令中給出的數(shù)據(jù)源和/或信號源作為數(shù)據(jù)源和/或信號源,則無須對其進行寫操作,必要時可以完全將其取消),而另一方面,由于若從產生所需數(shù)據(jù)的子單元(譬如算術單元)讀取該數(shù)據(jù),則會比先將數(shù)據(jù)寫入寄存器然后再從那兒讀取要更早地使用該數(shù)據(jù)。該數(shù)據(jù)轉發(fā)在所有指令中都可應用,而且通常被證明是巨大的優(yōu)點。
上文簡要講述的方法也可以通過其軟件及硬件的實現(xiàn)可能性、并用數(shù)學表示法來進行闡明。
首先來講述采用類似于C++表示的軟件實現(xiàn)。在本實施例中,針對硬件塊配置數(shù)據(jù)的信息管理是通過分類來實現(xiàn)的。
在本實施例中,所述虛擬單元的類被定義如下<pre listing-type="program-listing"><![CDATA[class clVirtualUnit{private:unsigned int uiPhysicalPartNumber;unsigned int uiMnemonicType;BOOL bIsConfigurable;unsigned int uiConfBits;unsigned int uiConfBitsIndex;BOOL bTwoSourceRegs;unsigned int uiSrcMultiplexNumber[2];unsigned int uiSrcMultiplexIndex[2];BOOL bDestinationReg;unsigned int uiDestMultiplexNumber;unsigned int uiDestMultiplexIndex;BOOL bIsUsed;BOOL bSecondPIsused;BOOL bIsConstantRegiser;unsigned int uiConstantIndex;unsigned int uiConstantValue;public;unsigned int uiGetPartNumber(void);unsigned int uiGetMnemonicType(void);BOOL bIsUnitConfigurable(void);unsigned int uiGetConfBits(void);unsigned int uiGetConfBitsIndex(void);BOOL bHasTwoSourceRegs(void);unsigned int uiGetSrcMultiplexNumber(unsigned int);unsigned int uiGetSrcMultiplexIndex (unsigned int);BOOL bHasDestinationReg(void);unsigned int uiGetDestMultiplexNumber(void);unsigned int uiGetDestMultiplexIndex(void);void vFreePart(void);BOOL bMarkUsedPart(void);BOOL bMarkSecondUsedFlag(void);BOOL bGetIsUsed(void);BOOL bGetIsUsedSecondFlag(void);BOOL bIsConstantRegister(void);BOOL bSetConstantValue(void);unsigned int uiGetConstantValue(void);unsigned int uiGetConstantIndex(void);}]]></pre>在該類中所包含的數(shù)據(jù)或方法被用來模擬一種宏結構。
這些數(shù)據(jù)的意義為uiPhysicalPartNumber該變量包含有硬件塊內物理子單元的單值號碼。
uiMnemonicType該變量包含有編碼形式的、屬于相應虛擬單元的邏輯連接類型。
bIsConfigurable該標志指示出是否必須配置所屬的物理子單元,以便獲得該虛擬單元。
uiConfBits若bIsConfigurable==真,則在此存儲所屬的配置比特,以便正確地為該功能配置物理子單元。
uiConfBitsIndex若bIsConfigurable==真,則在該位置存儲用于在比特流中存儲配置比特的指數(shù)。
bTwoSourceRegs如果必須為相關的指令給出兩個源寄存器,則該標志被置為“真”,否則被置為“假”。
uiSrcMultiplexNumber[2]在兩個源寄存器的情況下,在該變量中存儲所屬的多路轉換器的物理號碼,必要時只有具有指數(shù)0的變量有效。
uiSrcMultiplexIndex[2]在此存儲了用于源寄存器的多路轉換器的指數(shù)。
bDestinationReg如果必須為相關的指令給出目標寄存器(不是標志!),則該標志被置為“真”,否則被置為“假”。
uiDestMultiplexNumber在此為目標寄存器存儲所屬的多路轉換器的物理號碼。
uiDestMultiplexIndex在此為目標寄存器存儲多路轉換器的指數(shù)。
bIsUsed在該標志內存儲該虛擬子單元(以及由此同時還有物理子單元)是否已被使用。該標志被置為“真”時,意味著該子單元不可再使用(在條件Move指令(movep)情況下除外)。
bSecondPIsUsed對于movep指令的特殊情況,在該標志中存儲了包括比較在內的p標志的兩種使用。如果bIsUsed和bSecondPIsUsed被置為“真”,則禁止進一步使用把movep指令施加到其上的動態(tài)多路器(AU)。
bIsConstantRegiser該標志指示出物理子單元是對應于一個恒量寄存器(真)或不是這樣(假)。
uiConstantIndex在恒量寄存器的情況下,必須將所述可以存儲和使用的恒量的值登錄到比特流中。在該情形下,在此變量內存儲位于比特流之中的指數(shù)。
uiConstantValue在恒量寄存器內存儲的值被附加地存儲在所述級的該變量之中,以便用于進一步比較。
在該類的一個級內所出現(xiàn)的變量必須在啟動配置的時間點上全部被占用。對此采用了此處沒有明確列出的方法,而該方法被用在下文闡述的可配置塊分類或者說是CB分類的結構當中,以便把轉換所需的全部信息寫入到所述的級中,并同時把標志bIsUsed和bSecondPIsUsed置為“假”。于是在該級的服務時間內,只有兩個通過預定的方法可賦予值“真”或“假”的標志發(fā)生變化,以及-在恒量寄存器的情況下-還有變量uiConstantValue,該變量中臨時存儲了用于進一步比較的寄存器的當前值。
上述定義的類中的各方法對虛擬單元意味著unsigned int uiGetPartNumber(void)該方法允許對屬于虛擬子單元的物理子單元的號碼進行讀訪問;該號碼作為返回值返回。
unsigned int uiGetMnemonicType(void)該方法允許對可以在虛擬單元中實現(xiàn)的助記符進行讀訪問。
BOOL bIsUnitConfigurable(void)若必須對物理子單元進行配置,則該方法提供“真”。在該情況下,uiConfiBits和uiConfBitslndex中的登錄項有效,而且可利用下面的方法獲得uiGetConfBits()和uiGetConfBitsIndex()。另外,屬于同一物理子單元的所有其它虛擬子單元同樣必須被禁止。相反,對于返回值“假”的情況,虛擬單元和物理單元是恒等的。
unsigned int uiGetConfBits(void)利用該方法讀出配置比特,并作為返回值返回。該值只有在bIsConfigurable的值為“真”時才有效。
unsigned int uiGetConfBitsIndex(void)利用該方法讀出配置比特在比特流中的指數(shù),并作為返回值返回。該值只有在bIsConfigurable的值為“真”時才有效。
BOOL bHasTwoSourceRegs(void)如果調用該方法的操作占用兩個源寄存器,則該調用提供值“真”,并將其登錄到相應的多路轉換器中,否則提供值“假”。
unsigned int uiGetSrcMultiplexNumber(unsigned int)該方法提供為源寄存器描述多路轉換器的物理子單元的號碼。調用參數(shù)為項數(shù)為2的數(shù)組中的指數(shù),其中,如果標志bHasTwoSourceRegs的值為“真”,則指數(shù)1只提供有效值。
unsigned iht uiGetSrcMultiplexIndex(unsigned int)該方法提供用于登錄到比特流中的指數(shù),以便為源寄存器配置多路轉換器。調用參數(shù)為項數(shù)為2的數(shù)組中的指數(shù),其中,如果標志bHasTwoSourceRegs的值為“真”,則指數(shù)1只提供有效值。
BOOL bHasDestinationReg(void)如果調用該方法的操作占用一個目標寄存器,則該調用提供值“真”,并將其登錄到相應的多路轉換器中,否則提供值“假”。
unsigned int uiGetDestMultiplexNumber(void)該方法提供為目標寄存器描述多路轉換器的物理子單元的號碼。返回值只有在標志bHasDestinationReg的值為“真”時才有效。
unsigned int uiGetDestMultiplexIndex(void)該方法提供用于登錄到比特流中的指數(shù),以便為目標寄存器配置多路轉換器。返回值只有在標志bHasDestinationReg的值為“真”時才有效。
void vFreePart(void)該方法通過將所有的占用標志置為“假”值而清空所有的占用標志。
BOOL bMarkUsedPart(void)通過該方法將占用標志bIsUsed置為“真”。若操作成功,則返回值為“真”,若該元素已被占用,則返回值為“假”。
BOOL bMarkSecondUsedFlag(void)把第二個占用標志bSecondPIsUsed相應地置為“真”。若操作成功,則此處的返回值也為“真”,若該元素已被占用,則返回值為“假”。
BOOL bGetIsUsed(void)該方法以返回值的形式提供變量bIsUsed的值。
BOOL bGetIsUsedSecondFlag(void)該方法以返回值的形式提供變量bSecondPIsUsed的值。
BOOL bIsConstantRegister(void)若虛擬子單元對應于一個恒量寄存器,則該方法返回“真”,否則返回“假”。
BOOL bSetConstantValue(void)如果所述的虛擬單元對應于一個恒量寄存器,且該寄存器此時還未被占用,則可以利用該方法把當前的恒量值存儲到變量uiConstantValue之中。
unsigned int uiGetConstantValue(void)借助該方法返回所存儲的恒量值。
unsigned int uiGetConstantIndex(void)通過該方法獲得為在此時存儲所述恒量值而需要的比特流中的指數(shù)。
為了模擬硬件塊(CB)還定義了一個第二類,該類包含有類clVirtualUnit的級和其它的變量及方法。為簡化起見,假定元素的存儲是在一個靜態(tài)數(shù)組內進行的;當然也可以構想為一個鏈表。此處應注意的是,只為此處列出的分類講述了一部分方法。
<pre listing-type="program-listing"><![CDATA[Class clCB{private:BITFIELD*clbitfield;class clVirtualUnit clArrayVirtualUnits [NUM_OF_PARTS];public:clCB(); void vSetupBitfield(BITFIELD*); void vFreeAll(void); BOOL bDoAllPhase_1_Parts(unsigned int,BITFIELD*) BOOL bDoCommonPhase_2_Parts(unsigned int, BITFIELD*, unsigned int, unsigned int, unsigned int); void vDataForwarding(unsigned int,unsigned int); void vCopyBitfield(BITFIELD*,BITFIELD*); unsigned int uiGetMuxCode(unsigned int, unsigned int); unsigned int uiGetRegPartNumFromCode (unsigned int); unsinged int uiGetPartNumFromFlag (unsinged int); unsigned int uiGetIndexFromNum(unsigned int); unsigned int uiGetPartNumFromBitfield (unsigned int); void vSetBitfield(unsigned int,unsigned int, unsigned int);};]]></pre>所述類clCB的變量和方法的詳細意義為BITFIELD*clBitfield該變量對應于用于CB的運行時間配置的、需生成的比特流。
class clVirtualUnit clArrayVirtualUnits[NUM_OF_PARTS]該類clVirtualUnit中數(shù)組形式的級內包含所有虛擬單元的所有信息,并由此也包含所有物理子單元的所有信息。
clCB()該結構被列出用來闡明所述類的任務是什么。在開始階段,必須對比特區(qū)和類clVirtualUnit的包括在數(shù)組clArrayVirtualUnits[]之內的所有級進行初始化。為了初始化類的各個級,尤其還包括對所有配置數(shù)據(jù)進行說明和對所有標志進行復位,以便在工作期間可以對必要的數(shù)據(jù)進行讀訪問。
void vSetupBitfield(BITFIELD*)在該方法中給比特區(qū)提供所有的預占用。
void vFreeAll(void)該方法被調用來清空數(shù)組clArrayVirtualUnits[]的所有占用標志。
BOOL bDoAllPhase_1_Parts(unsigned int,BITFIELD*)在該方法中綜合了階段1的所有部分。該方法在找到用于接收助記符的空閑子單元之后被調用,而且還包括將所有所屬的虛擬單元標記為已占用、確定配置比特及在比特流中的指數(shù)、以及登錄到暫時比特流。參數(shù)是虛擬單元數(shù)組中的指數(shù)和指向暫時比特流的指針。返回值“真”指示出階段1是成功的,而“假”則指示失敗(可能由于不足的網絡資源)。
BOOL bDoCommonPhase 2 Parts(unsigned int,BITFIELD*,unsigned int,unsigned int,unsigned int)該方法綜合了所有指令組共用的方法。在此,還包括源寄存器和目標寄存器的登錄,并把恒量看作為輸入值。返回值“真”指示出階段1是成功的,而“假”則指示失敗。
void vDataForwarding(unsigned int,unsigned int)在該方法中集成了數(shù)據(jù)轉發(fā)的計算和所有所屬的方法。該優(yōu)選方案涉及到源寄存器,該源寄存器的物理號是在所述的參數(shù)中傳輸?shù)?。利用其它的方法來測定源寄存器是否為先前的目標寄存器。如果是,則從比特流中測出最后進行計算的AU,并用其代替該寄存器進行登錄。
void vCopyBitfield(BITFIELD*,BITFIELD*)該方法用“或”把第二比特流中的登錄項和第一比特流中的登錄項連接起來,并將結果存儲在第一比特流中。由此將所述暫時的中間結果存儲在為稍后配置而計算的比特流中。
unsigned int uiGetMuxCode(unsigned int,unsigned int)該方法計算出需要為多路轉換器裝入到比特流中的配置比特,以便以信源的形式選出一個物理子單元。該方法的參數(shù)是所述多路轉換器和信源單元的物理號。該方法對于配置是絕對必要的,因為在描述虛擬單元時存儲的是登錄項的指數(shù),而不是登錄項本身。對于整個網絡而言,該方法可以以表格支持的換算形式、且必要時無需考慮多路轉換器來實現(xiàn),其原因是,在該情形下所有的多路轉換器都是以統(tǒng)一的方式進行配置的。對部分網絡而言,此時必須要有較高的費用,特別是不能實現(xiàn)結網。在成功的情況下返回值為所述的配置比特,而在不成功時為不可用的編碼。
unsigned int uiGetRegPartNumFromCode(unsigned int)該方法從指令的代碼中計算出子單元的號碼。當然這可以只為寄存器實現(xiàn),其中在恒量的情況下,可在該方法中集成已講述過的優(yōu)選方案,由它來促使存儲恒量和返回恒量寄存器的物理號。在成功情況下,返回值為子單元的號碼,否則在不成功時的返回值為不采用的標識。
unsinged int uiGetPartNumFromFlag(unsinged int)該方法負責把標志號換算成物理子單元的號碼。調用參數(shù)是指令格式中的p區(qū),返回值為所述的子單元號,或在失敗時為一個特殊標識。
unsigned int uiGetIndexFromNum(unsigned int)利用該方法(以參數(shù)的形式)為具有已知物理號的子單元計算和返回在比特流中的指數(shù)。該計算可以用表格的形式實現(xiàn)。
unsigned int uiGetPartNumFromBitfield(unsigned int)該方法讀出以參數(shù)形式傳輸?shù)闹笖?shù)處的比特區(qū)中的登錄項,并將獲得的配置掩碼換算成所述子單元的物理號,并將其作為結果返回。UiGetPartNumFromBitfield被應用在數(shù)據(jù)轉發(fā)之中,在此,把數(shù)據(jù)路徑從先前的目標寄存器挪回到確定結果的子單元,由此可以提前使用該數(shù)據(jù)。
void vSetBitfield(unsigned int,unsigned int,unsignedint)該方法利用三個參數(shù)進行調用登錄項的指數(shù)、登錄項的長度及掩碼。該調用對比特區(qū)相應位置的登錄項起作用。
利用上面提到和講述的變量和方法,可以為基于指令或指令序列的、圖12所示類型(用于結構過程的編程)硬件塊的配置方法提供下述的偽代碼<pre listing-type="program-listing"><![CDATA[unsigned int k;BITPIELD*clTempBitfield;//階段1確定用于接收邏輯連接的物理子單元。//助記符位于uiMem之中vSetupBitfield(clTempBitfield);for(k=O;k<NUM_OF_PARTS;k++){if(clArrayVirtualUnits[k]::uiGetMnenomic()==uiMem &&clArrayVitualUnit[k]::bGetIsUsed()==假)break;}if(k==NUM_OF_PARTS)//沒有找到空閑的邏輯連接return(假);//此時將該空閑的子單元標記為已占用,必要時還對配置進行確//定,并在該情況下將其它所有的虛擬子單元也標為已占用。將//所有的掩碼比特存儲在暫時的比特流中。If(bDoAllPhase_1_Parts(k,clTempBitfield)==假)return(假);//現(xiàn)在開始階段2為所有指令確定兩個、必要時為一個源寄存//器,并將其登錄到比特流中。如果有的話,相應地利用目標寄//存器來實現(xiàn)。指令中的相應編碼在于變量uiSourceRegl、//uiSourceReg2和uiDestReg,其中,有時也可以在此把恒量識//別為信源。If(bDoPhase_2_CommonParts(k,clTempBitfield uiSourceRegl,uiSourceReg2,uiDestReg==假)return(假);switch(uiMnemonicType){case BEDINGTER BEFEHL//確定p標志,為CU登錄case MOVEP_BEFEHL //特別是第一登錄 //也可以是第二登錄}vDoDataForwarding(uiSourceRegl,uiSourceReg2);//最后的作用將所述暫時存儲的比特流代碼拷貝到原來的比特率中vCopyBitfield(clBitfield,clTempBitfield);return(真);]]></pre>所述中央程序是為每個可翻譯的指令進行調用的。若轉換成功則返回值為“真”,否則為“假”。在后一種情形下,所述的指令必須保留在調用的程序內,因為它不是被插入的,而且可以裝載用于執(zhí)行的比特流。于是,通過資源的用盡來指示轉換的結束,或通過一個不可翻譯的、諸如分支指令的指令來獲得。
正如上文所述,所述結構過程的編程既可以用軟件方式實現(xiàn),也可以用硬件方式來實現(xiàn)。下面參照圖2~10來闡述一種按硬件實現(xiàn)的可能實施方案。在此,嘗試使各個階段盡可能并行地工作。
在軟件實現(xiàn)方式中所進行的由表格支持的換算在硬件實現(xiàn)方式中是以所謂的查詢表(LUT)來實現(xiàn)的。LUT被設計用來為響應輸入的數(shù)據(jù)而輸出與該數(shù)據(jù)有關的數(shù)據(jù)。這種LUT譬如可以通過EPROM或其它的存儲裝置來構成。于是,輸入的數(shù)據(jù)作為地址使用,而輸出的數(shù)據(jù)是通過該地址進行存儲的數(shù)據(jù)。
為階段1采用如圖2所示類型的LUT。該LUT具有兩個輸入端(“地址”,“計數(shù)器地址”)和四個輸出端(“代碼”,“互補”,“增加計數(shù)”,“無入口”)。所述的兩個輸入端被用作LUT的尋址,其中通過輸入端(“地址”)輸入的數(shù)據(jù)和/或信號取決于需翻譯的代碼,而通過另一輸入端(“計數(shù)器地址”)輸入的數(shù)據(jù)和/或信號為可通過輸出端“增加計數(shù)”進行增加計數(shù)的計數(shù)器(計數(shù)器陣列)的計數(shù)狀態(tài)。所述的輸出端用于輸出翻譯過的代碼;輸出信號以便增加生成“計數(shù)器地址”的計數(shù)器或計數(shù)器陣列的計數(shù);如果不再有有效和空閑的登錄項(“無入口”),便發(fā)出信號;以及輸出為處理條件Move指令(movep)所需要的信號(“互補”),其中,翻譯過的代碼由配置比特、配置指數(shù)及子號組成。因此對于第一部分,查詢表的登錄項具有圖3所示的格式。
所述的計數(shù)器(計數(shù)器陣列)是以標記裝置(占用,寫)的形式進行使用的,其中每個操作類型(加,減…)都有一個單獨的計數(shù)器。所述計數(shù)器的狀態(tài)給出了可以采取多少種可能性作為應答來執(zhí)行所分配的操作類型。計數(shù)器陣列內的計數(shù)器的深度(Tiefe)取決于執(zhí)行相關操作的可能性的數(shù)目。譬如,若存在三種加法可能性,則計數(shù)器的深度為2比特;但是,在由助記碼和計數(shù)狀態(tài)進行尋址的相應LUT中,第4個位置(計數(shù)狀態(tài)3)將為一個“無入口”編碼,以便指示該操作的故障;這種LUT登錄項如圖3B所示。
在本實施例中,所說的計數(shù)器為具有異步復位和允許的二進制計數(shù)器。該類型的二進制計數(shù)器在本實施例中是按如下方式進行編碼的;該表示是利用DNF(析取范式)邏輯中所慣用的DNF格式來實現(xiàn)的。該類型的計數(shù)器在下文被稱為第一類型的計數(shù)器。
BIT b0,b1:OUT;BIT reset,enable:IN;BIT clock:IN;b0=/b0*enable+b0*/enable;b0.clk=clock;bo.areset=reset;b1=/b1*b0*enable+b1*/b0*enable+b1*/enable;b1.clk=clock;
b1.areset=reset;必須為條件指令實現(xiàn)一種與該計數(shù)器并行的存儲器陣列,以便存儲條件標志的代碼。正如上文所述,這對于組成Movep指令是必須的。由于每個標志只能給出一個CU級(與AU相反,通常有多個標志,但所有這些標志都是用比特名稱來區(qū)別的),因此所述的二進制計數(shù)器由兩個比特組成,其中第一比特指示出第一占用,而第二比特則指示出互補占用。借助指令中的p標志來識別正確的CU。
在本實施例中,用于條件指令的2比特二進制計數(shù)器是按如下方式進行編碼的;該表示也是利用DNF(析取范式)邏輯中所慣用的DNF格式來實現(xiàn)的。該類型的計數(shù)器在下文被稱為第二類型的計數(shù)器。
BIT b0,b1:OUT;BIT reset,enable:IN;BIT clock:IN;b0=/b0*enable+b0;b0.clk=clock;bo.areset=reset;b1=/b1*b0*enable+b1;b1.clk=clock;b1.areset=reset;對于如下情況,即必須采取判斷、且該判斷需要在數(shù)據(jù)回路中進行轉換,那么就為此集成一種特殊的邏輯。
于是,硬件塊結構化的方法的第1階段實現(xiàn)如圖4所示。
對于除條件Movep指令外的所有指令,每個算術單元AU或每個比較單元CU都需要一個遵照上述第一類型計數(shù)器的類型的計數(shù)器級。這種計數(shù)器是可以滿足要求的,因為只需要一個簡單的占用信號。相反,Movep語句需要有第二類型的計數(shù)器,該計數(shù)器在兩個比特內發(fā)送部分(b0)和完全(b1)占用的信令。在第一源寄存器保持不變期間,兩次參考相同標志的條件Movep指令必須以倒置的形式(相對于第一參考)處理該標志,然后在相應的AU內被登錄為第二信源。該方法可集成在LUT內;對非倒置的條件的參考由“無入口”信令來中斷。
第2階段包括對一些寄存器的確定,所述寄存器可以用作相關操作的數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標。對于所有三種可能的寄存器,這是以并行的、且在很大程度上相同的形式來實現(xiàn)的。指令內相應寄存器的編碼-如果相關區(qū)包含有效的登錄項-是通過查詢表被轉換成掩碼的,以便用于比特流和比特流中的指數(shù)。
圖5示出了對用作數(shù)據(jù)源和/或信號源以及數(shù)據(jù)目標和/或信號目標的寄存器進行確定和編碼的電路圖;在本實施例中,通過控制線“源寄存器1”、“源寄存器2”以及“目標寄存器”來識別實際(必須)轉換哪些寄存器(參考圖4和5)。
源寄存器和目標寄存器的處理是不同的。在目標寄存器的情況下對登錄項進行標記,以便能夠識別第二占用(信號“無入口”)和觸發(fā)數(shù)據(jù)的轉發(fā)。這些信號對源寄存器是不采用的。在此,為比特流的登錄項實現(xiàn)一種“直接”生成,但在恒量的情況下不生成該代碼,并轉移到下文所述的級上。
在圖5中標記了哪些只對源寄存器和只對目標寄存器相關用(*)標示的部分被確定只用于目標寄存器,而用(**)標示的部分被確定只用于源寄存器。
對于可能代替源寄存器而出現(xiàn)在編碼內部的恒量,為其實現(xiàn)一個并行的方法,該方法將所述的恒量并行地與所有恒量寄存器內的內容進行比較,而且在不相同的情況下用該恒量占用下一空閑的寄存器(利用計數(shù)器實行指針管理),并且以編碼的形式返回該寄存器,或者在相同的情況下以編碼的形式返回包含該恒量的恒量寄存器的編碼。
為此,所述的查詢表作如此設計,使得在比較為肯定的情況下直接把相關寄存器的編碼數(shù)字提供給比特區(qū),而在不一致的情況下另外還將該恒量存儲起來,并增加寄存器計數(shù)?!盁o入口”信號對于所有恒量已占用的情況是有效的,而且由它結束指令塊的算法,因為資源已用盡。同時,需要注意的是,所述的恒量寄存器為(主)比特流的一部分,原因是該恒量寄存器在前面的周期內可能已被占用,并需要被用來裝載指令塊。
用于分配所述恒量寄存器的電路框圖如附圖6所示。
為源寄存器實行上文已多次講述的數(shù)據(jù)轉發(fā)。借助位于寄存器的占用標志內的、指示在該周期內該寄存器已是目標寄存器的登錄項來判斷是把實際的源寄存器、還是把可以以目標寄存器的信源形式被測定的登錄項作為新的信源而登錄到比特流中。
對此適用的電路框圖如圖7所示。
如果網絡內的所有信源都采取相同的編碼,則在圖7中可以取消通過LUT實現(xiàn)對新的信源進行再編碼??梢詾檎麄€網絡假定的這種情況將會導致暫時比特流中用于(先前的)目標寄存器的信源登錄項將作為用于當前操作的新信源編碼而被登錄,以代替在指令中被編碼的源寄存器。在任何情況下,該選擇都是通過由信號“數(shù)據(jù)轉發(fā)”(參見圖5)進行控制的多路轉換器來實現(xiàn)的。
倘若所有的操作都成功(這可通過不出現(xiàn)“無入口”信令來識別),則在寫脈沖期間將暫時比特流與現(xiàn)有的主比特流進行“或”邏輯連接,然后寫回到該比特流中。
圖8和9示出了把配置數(shù)據(jù)寫入到暫時比特流和寫入到主比特流中的框圖。
從圖8可以看出,將配置數(shù)據(jù)寫入到暫時比特流中是通過所謂的縱橫開關來實現(xiàn)的。縱橫開關是大家都已知的,在此無需贅述。它把配置比特傳送到暫時比特流中由配置指數(shù)所定義的位置,其中,所述縱橫開關未被占用的輸出端被置為預定的值(譬如“0”)。為了基于助記符對物理子單元進行選擇、以及為了配置該物理子單元并把源寄存器和目標寄存器分配給該物理子單元,總是需要一個固有的、如圖8所示的縱橫開關。
把暫時比特流轉換成主比特流(主比特流的疊加是通過縱橫開關的輸出端)是通過主比特流的輸入端處的“或”門OR實現(xiàn)的(參見圖9)。
上述的各部分可以按照圖10組合成一種裝置,該裝置能夠把由m比特、ks1比特、ks2比特、kd比特和p比特組成的指令(參見圖1A至1D)轉換成用于配置硬件塊的配置數(shù)據(jù),并將該數(shù)據(jù)寫入到為配置所述硬件塊而采用的比特流中。
最后,還是以數(shù)學表示法來給出上文所致力于的轉換(結構過程的編程)。
對此,首先必須達成一系列關于表示和映射的協(xié)定。它們?yōu)镮+所有的指令群I 所有與數(shù)據(jù)流相關的(適用于塊的執(zhí)行的)指令群SR 包括NO-SOURCE表示在內的所有源寄存器群,恒量寄存器除外CR 包括NO_CONST和IS_CONST的表示在內的所有恒量寄存器群SR+SRUCRDR 包括NO_DEST表示在內的所有目標寄存器群,謂詞比特除外PR 包括NO_PRED在內的所有謂詞比特群DR+DRUPRRN 所有的寄存器群,SRUCRUDRRN+包括謂詞比特在內的所有寄存器群,RNUPRList(pp)4元組形式(px∈PP,offset(偏移)<k,nbit<k,bitwert(比特值)<2k-1)的比特流B的所有可能值群,必要時取決于pp∈PPNbit可能的比特值群(在n比特的數(shù)據(jù)寬度時0…2n-1)B 用于配置所述結構且為比特流形式的、k個二進制值的登錄項群OCC 所有的占用標記群(FREE(空閑)、WRITE(寫)、READ(讀)、READ_WRITE(讀寫))PP 所有的物理子單元群PLNUM 邏輯單元的所有單值號碼群PL CB內的所有邏輯子單元群,由11元組構成(p1∈IURN+,plnum∈PLNUM,pp∈PP,occ∈OCC,source(信源)∈PLNUM,val∈Nbit,pbit∈PR,List(pp),konfOffset≤k,konfAnzahl<k,konfWert<2k-1)在下面的說明中利用了一些基本假設和功能,現(xiàn)首先來講述它們。分量occ(代表“現(xiàn)象”)內的標識可以選擇四種值,用以標明狀態(tài)‘未占用’(FREE)、‘讀占用’(READ)、‘寫占用’(WRITE)和‘讀寫占用’(READ_wRITE)。在此,標識‘讀占用’在必要時不作進一步分析,但在本說明書內仍繼續(xù)進行。
另外,為RN內的寄存器假定對于這些子單元,所述的邏輯和物理表示是一致的.這意味著,與有些功能子單元(譬如表示為兩個邏輯單元的可配置的加法/減法單元,但當然只可一次占用)相反,對寄存器是無需進行配置的,而且在寄存器號rn∈RN和邏輯子單元號plnum∈PLNUM之間存在一種注入式(但還不是雙注入)的映射關系,該映射在下文用rn2plnum()來標示。該假定不適合目標比特形式的謂詞指令。
在該前提條件下,將指令轉換成用于對硬件塊進行結構化的結構信息的過程如下1.在第1階段,把包括所有由原始二進制格式組成的操作數(shù)在內的每個指令轉化成說明bi=(i∈I,sr1∈SR,cr1∈CR,n1∈Nbit,sr2∈SR,cr2∈CR,n2∈Nbit,dr∈DR,pr_source∈PR,pr_dest∈PR)。在該說明中,為恒量登錄用于cr1或cr2的標識Is_CONST,并以n1/n2登錄該恒量值,其中在該情形下,相應的源寄存器獲得標識NO_SOURCE。相應地,為用于dr的謂詞指令(譬如pge…)采用NO_DEST,而pr_dest由此便具有謂詞比特的號。
為了改善可區(qū)別性,為謂詞指令(譬如movep)不把pr_dest設成相應的值,而是把pr_source設置成相應的值。
由具有j I的指令引發(fā)該轉換的結束。
2.在第2階段,把bi中最大的五個登錄項翻譯成配置。之所以采取五個,是因為一些組合是相互排斥的。對此,為各部分區(qū)分如下為指令bi→i∈I和bi→pr_dest==NO_PRED(無謂詞語句)搜索第一元素p1∈PL,該元素覆蓋了該i并具有occ==FREE.如果沒有找到,則終止轉換。
如果找到p1,則用occ==READ_WRITE占用PL中映射同一物理元素pp∈PP的所有元素。p1的配置借助所述元組中的信息而被登錄在比特流B中.若bi→pr_source==NO_PRED,則為此不執(zhí)行登錄.否則按p2∈PL并利用p2→pbit==bi→pr_source進行搜索,其中必須p2→occ==WRITE。對于該p2,通過List(p2→pp)來搜索p1,并登錄在所述的比特流中,此外還把p2→occ置為READ_WRITE。
為指令bi→i∈I和bi→pr_dest!=NO_PRED(謂詞語句)搜索第一元素p1∈PL,該元素覆蓋了該i并具有occ==FREE。如果沒有找到,則終止轉換。
如果找到p1,則用occ==WRITE占用PL中映射同一物理元素pp∈PP的所有元素。p1的配置借助所述元組中的信息而被登錄在比特流B中。
所有的指令i∈I都適用對于適用!=NO_SOURCE的bi→sr1和bi→sr2,如果對屬于sr1/2的p11/12∈PL、p11→occ==FREE及p12→occ==FREE合適的話,則通過List(p1→pp)把相應的配置裝入到比特流B中,同時在p11/12→source時登錄p1→plnum(用于稍后的轉發(fā))。如果不是這種情況,則執(zhí)行第3階段(數(shù)據(jù)轉發(fā))。
對于源寄存器bi→sr1和bi→sr2,如果它們!=NO_SOURCE,則在PL中把所屬的p31及p32∈PL(通過給定的功能rn2plnum獲得)的相應登錄項p31→occ和p32→occ置為READ(若它們事先!=WRITE及READ_WRITE),否則便置為READ_WRITE。
對于恒量寄存器cr1和cr2,如果它們!=NO_CONST,則首先為所有的p3∈PL檢驗是否p3→pp∈CR、p3→occ==READ_WRITE、以及p3→val==bi→n1/2。如果是這種情況,則根據(jù)用于源寄存器的相應方法來為p3實現(xiàn)登錄。
如果該搜索沒有成功,則必須搜索適合于p4→pp∈CR和p4→occ==FREE的p3∈PL。假如找到,則把bi→n1/2登錄到p4→val,并設置p4→occ=READ_WRITE,而且譬如在源寄存器中繼續(xù)進行該登錄。若搜索失敗,便終止該轉換。
為目標寄存器dr檢驗對具有p5→pp==dr的相應登錄項p5是否適合條件p5→occ==FREE或READ。如果不是這種情況,則終止該轉換,否則設置p5→occ==WRITE或READ_WRITE,并將List(p5→pp)中的登錄項傳輸?shù)奖忍亓鰾中。為可能的數(shù)據(jù)轉發(fā)而登錄p5→source=pi(賦值指令的邏輯元素)。
3.對于在第2階段具有所屬元素p6∈PL的值、也即值p6→occ==WRITE或READ_WRITE的所有源寄存器sr∈SR,通過如下方式為其實現(xiàn)數(shù)據(jù)轉發(fā),即在比特流B中不登錄List(p6)的值,而是登錄List(p6→source)的值。
通過上述的配置數(shù)據(jù)生成,可以在可配置的硬件塊中執(zhí)行標準程序的指令,所述的標準程序系指被設計在按von-Neumann原理進行工作的程控單元(常規(guī)的微處理器、微控制器)中執(zhí)行的程序。
在此,所述轉換的方法和方式可以實現(xiàn)把指令轉換成配置數(shù)據(jù)和通過采用該配置數(shù)據(jù)進行硬件塊的配置都可以非??斓?、簡單而有效地實現(xiàn)。
通過所述的把指令轉換成配置數(shù)據(jù),可以產生一系列配置數(shù)據(jù)組,其中-一方面,總是把盡可能多的指令轉換成一個配置數(shù)據(jù)組,而且-另一方面,總是只把如下數(shù)目的指令轉換成一個配置數(shù)據(jù)組,即在硬件塊(再)配置的時間點上可供使用的硬件塊資源能夠執(zhí)行該數(shù)目的指令。
因此,在硬件塊的再配置數(shù)目極小、且在使用配置數(shù)據(jù)前沒有復雜和有誤差的檢驗的同時,可以確保最有效地使用硬件塊。
如果使用的是本申請附圖12所示類型的硬件塊,且該硬件塊可以通過相應的配置數(shù)據(jù)組分別進行復雜的再配置,則這在很大程度內都是適合的(但無疑不是唯一的)。
對于通過使用按權利要求所產生的配置數(shù)據(jù)組而配置的這種類型的硬件塊,它可以并行地執(zhí)行被轉換成相關配置數(shù)據(jù)組的指令。如果所述的硬件塊已經執(zhí)行完被轉換成相關配置數(shù)據(jù)組的指令,硬件塊便優(yōu)選地發(fā)出信號(譬如通過上述的“就緒”信號或利用其它的方式及方法),而且通過采用接下來的配置數(shù)據(jù)組對該硬件塊進行再配置,由此在該硬件塊內執(zhí)行接下來的指令(為執(zhí)行這些指令而需要執(zhí)行的操作)。被用來實現(xiàn)再配置的該接下來的配置數(shù)據(jù)組是從上述或類似實現(xiàn)的、對接下來的指令進行轉換中產生的。如果執(zhí)行這些該接下來的指令,則重新配置該硬件塊。同時重復上述的過程。
利用這種方式,可以在可配置的硬件塊內快速(特別是由于至少部分地并行執(zhí)行指令而大大快于在常規(guī)程控單元內的情況)而簡單地執(zhí)行如下的程序,即該程序是被設計用來在按von-Neumann原理工作的程控單元內執(zhí)行的。
在上述把指令轉換成配置數(shù)據(jù)的轉換中,按超塊方式進行轉換被視為力圖爭取的目標,也即在該轉換中恰好把一個超塊被轉換成一個配置數(shù)據(jù)單元。
當然,如果能把多于一個的超塊轉換成配置數(shù)據(jù)組則會更好;這樣總能夠設定同時執(zhí)行最大數(shù)目的指令。在這某些條件下甚至是可能的。
在圖12所示類型的硬件塊中(在能夠執(zhí)行上述謂詞指令的硬件塊中),尤其可以把超塊序列0、1及2<pre listing-type="program-listing"><![CDATA[Hyperblock_O;If(codition)Hyperblock_1;elseHyperblock_2;]]></pre>轉換成一個單獨的配置數(shù)據(jù)組。這是通過上述的if轉換來實現(xiàn)的。在此,所示的條件可以轉換為一個p標志,而且根據(jù)該條件所執(zhí)行的指令在執(zhí)行時與該p標志的值有關。在此譬如可以規(guī)定,如果p標志的值為1,則執(zhí)行在if條件轉移(Hyperblock_1)內所包含的指令,而如果p標志的反值為1,則執(zhí)行在else條件轉移(Hyperblock_2)內所包含的指令。于是,由三個超塊0、1及2可以形成一個包含該超塊的偽超塊,該偽超塊可被轉換成一個單獨的配置數(shù)據(jù)組。
這種偽超塊自身又可以包含一個或多個偽超塊。此處的例子為如下序列<pre listing-type="program-listing"><![CDATA[Hyperblock_0;If(codition)Pseudo-Hyperblock_1;elsePseudo-Hyperblock_2;]]></pre>在該情形下可以構成一個偽超塊,且該偽超塊包含有超塊0和偽超塊1及2。
因此,在把指令轉換成配置數(shù)據(jù)時,根據(jù)可能性在第一步驟中嘗試構成偽超塊。同時需要為此檢查是否可建立偽超塊,并在被考慮用來構成偽超塊的程序部分中實現(xiàn)一個if轉換。
在某些情況下,特別是當通過可配置的硬件塊“只”應實現(xiàn)某一個電路(譬如一個串行接口)時,采取如下做法被證明是比較有利的,即通過采取一種用譬如VHDL等電路說明語言實現(xiàn)的電路定義來配置硬件塊。對此,首先用一種電路說明語言對想要通過硬件塊實現(xiàn)的電路進行定義,然后把在此獲得的代碼轉換成須被用來配置所述硬件塊的配置數(shù)據(jù)(配置數(shù)據(jù)組或配置數(shù)據(jù)組序列),由此使該硬件塊與利用它所實現(xiàn)的電路相一致。在此,該硬件塊優(yōu)選地作如此構成,使得利用它可以按照配置實現(xiàn)不同的電路,以及/或者可以象上文所講述的那樣能夠在該硬件塊內執(zhí)行被轉換成配置數(shù)據(jù)的指令。
以上說明和實現(xiàn)可能性均涉及圖12所示類型的硬件塊。需指出的是,本發(fā)明并不局限于此。所述配置數(shù)據(jù)的生成也可被實現(xiàn)用于改進或擴展的硬件塊。在此,所述配置數(shù)據(jù)的生成和通過采取該配置數(shù)據(jù)所進行的硬件塊配置都可以快速、簡單和有效地實現(xiàn)。不過此處的硬件塊組件得到了最佳利用。這使硬件塊實現(xiàn)了極為有效的工作。
參考符號清單1 預解碼單元2 指令緩沖器3 解碼重命名及裝載單元4 s單元5 數(shù)據(jù)高速緩沖器6 存儲器接口41可編程結構緩沖器42具有可編程結構的功能單元43整型/地址指令緩沖器44整型寄存器文件AUx 算術單元CU比較單元DEMUX 多路分解器MUXAx 第一類型的多路轉換器MUXB 第二類型的多路轉換器
權利要求
1.可配置的硬件塊的配置方法,其特征在于通過采用如下配置數(shù)據(jù)來實現(xiàn)硬件塊的配置,即該配置數(shù)據(jù)是從需執(zhí)行的程序的指令或指令序列的轉換中得出的,而且,在轉換該指令或指令序列時執(zhí)行如下步驟,-測定為執(zhí)行相應指令所需要的、可配置硬件塊的子單元(AUx,CU,DEMUX,MUXAx,MUXB)的類型,-選出還沒有在其它方面被占用的、事先所測定的類型的子單元,而且,若能找到這種子單元,則-對設置在所選子單元周圍的可配置的通信連接進行配置。
2.如權利要求1所述的方法,其特征在于所述轉換從只具有一個入口點和一個出口點的指令塊的第一個指令開始。
3.如權利要求1或2所述的方法,其特征在于所述轉換在只具有一個入口點和一個出口點的指令塊的最后一個指令的轉換之后結束。
4.如權利要求2或3所述的方法,其特征在于所述的轉換是以超決的方式實現(xiàn)的。
5.如上述權利要求之一所述的方法,其特征在于如果轉換所需要的、硬件塊的組件不可用或不再可用,則自動地終止所述的轉換。
6.如上述權利要求之一所述的方法,其特征在于給硬件塊的可按功能配置的子單元(AUx,CU,DEMUX,MUXAx,MUXB)分配一些虛擬單元,其中,所述的虛擬單元表示了一些功能,該功能可以通過不同的配置賦予相關的子單元。
7.如權利要求6所述的方法,其特征在于所有物理子單元(AUx,CU,DEMUX,MUXAx,MUXB)的所述虛擬單元被登錄在一個表格或目錄內。
8.如權利要求7所述的方法,其特征在于所述表格或目錄的登錄項包括如下有關信息,即給哪個物理子單元(AUx,CU,DEMUX,MUXAx,MUXB)分配相關的虛擬單元。
9.如權利要求7或8所述的方法,其特征在于所述表格或目錄的登錄項包括如下有關信息,即為了給物理子單元賦予由虛擬單元表示的功能,需要怎樣來配置所分配的該物理子單元(AUx,CU,DEMUX,MUXAx,MUXB)。
10.如上述權利要求之一所述的方法,其特征在于通過尋找所需類型的虛擬子單元來選擇為執(zhí)行指令所需的子單元(AUx,CU,DEMUX,MUXAx,MUXB)。
11.如權利要求10所述的方法,其特征在于對于為使用而選出的所需類型的虛擬單元以及象該選出的虛擬單元一樣被分配給同一物理子單元(AUx,CU,DEMUX,MUXAx,MUXB)的虛擬單元,均由該方法負責使它們在接下來的轉換中再也不能被選出來使用。
12.如上述權利要求之一所述的方法,其特征在于在對設置于所選子單元(AUx,CU,DEMUX,MUXAx,MUXB)周圍的可配置通信連接進行配置、以便把相關的子單元同由需轉換的指令定義的數(shù)據(jù)源及/或信號源連接起來時,檢驗所述相關的數(shù)據(jù)源及/或信號源是否為事先已由硬件塊的子單元之一寫過的存儲區(qū)。
13.如權利要求12所述的方法,其特征在于如果確定由需轉換的指令所定義的數(shù)據(jù)源及/或信號源事先已被硬件塊的子單元(AUx,CU,DEMUX,MUXAx,MUXB)之一寫過,則將該子單元用作數(shù)據(jù)源和/或信號源。
14.如上述權利要求之一所述的方法,其特征在于在對設置于所選子單元(AUx,CU,DEMUX,MUXAx,MUXB)周圍的可配置通信連接進行配置、以便把相關的子單元同由需轉換的指令定義的數(shù)據(jù)目標及/或信號目標連接起來時,檢驗所述相關的數(shù)據(jù)目標及/或信號目標是否也為硬件塊的其它子單元所寫的存儲區(qū)。
15.如權利要求14所述的方法,其特征在于如果確定由需轉換的指令所定義的數(shù)據(jù)目標及/或信號目標也為硬件塊的其它子單元(AUx,CU,DEMUX,MUXAx,MUXB)所寫的存儲區(qū),則將其它存儲區(qū)用作數(shù)據(jù)目標和/或信號目標。
16.如權利要求15所述的方法,其特征在于對于表示同一數(shù)據(jù)目標和/或信號目標的存儲區(qū),為其執(zhí)行在超標量處理器中所應用的寄存器重命名。
17.如上述權利要求之一所述的方法,其特征在于如果在需轉換的指令中包含有恒量,則尋找包含該恒量的恒量存儲區(qū),然后,如果找到該恒量存儲區(qū),則將該恒量存儲區(qū)用作數(shù)據(jù)源和/或信號源。
18.如權利要求17所述的方法,其特征在于如果所述的恒量沒有存儲在現(xiàn)有的恒量存儲區(qū)中,則將該恒量存入一個新的恒量存儲區(qū),并把該新的恒量存儲區(qū)用作數(shù)據(jù)源和/或信號源。
19.尤其如上述權利要求之一所述的方法,其特征在于在將指令轉換成配置數(shù)據(jù)時,嘗試構造包括有多個超塊的偽超塊。
20.如權利要求19所述的方法,其特征在于所述的偽超塊通過采用if轉換來形成。
21.如權利要求19或20所述的方法,其特征在于根據(jù)可能性按偽超塊的方式將指令轉換成配置數(shù)據(jù)。
22.可配置的硬件塊的配置方法,其特征在于通過采用由轉換如下代碼所產生的配置數(shù)據(jù)來實現(xiàn)硬件塊的配置,即如果通過采用電路說明語言定義了可由所述可配置的硬件塊實現(xiàn)的電路,則生成所述的代碼。
23.如權利要求22所述的方法,其特征在于采用VHDL作為電路說明語言。
全文摘要
講述可配置的硬件塊的不同配置方法。該方法的特征尤其在于被用來配置硬件塊的配置數(shù)據(jù)的生成。通過所講述的配置數(shù)據(jù)生成,配置數(shù)據(jù)生成本身和硬件塊配置都可以利用該配置數(shù)據(jù)來簡單、快速及有效地實現(xiàn)。
文檔編號G06F9/318GK1319210SQ99811315
公開日2001年10月24日 申請日期1999年9月10日 優(yōu)先權日1998年9月23日
發(fā)明者R·阿諾, H·克萊維, C·西默斯 申請人:因芬尼昂技術股份公司