專利名稱:同時執(zhí)行的進程經(jīng)由fifo緩沖器進行通信的數(shù)據(jù)處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理,尤其涉及同時執(zhí)行的進程經(jīng)由FIFO緩沖器進行通信的數(shù)據(jù)處理。
M.J.Rutten、J.T.J.van Eijndhoven、E.J.D.Pol、E.G.T Jaspers、P.van der Wolf、O.P.Gangwal和A.Timmer在《IEEE Design and Testof Computers,Special Issue on Embedded Processor Based Designs》(編輯P.Marwedel,2002年)上發(fā)表的文章“EclipseA HeterogeneousMultiprocessor Architecture for Flexible Media Processing”描述了一種在同時執(zhí)行的進程之間傳送數(shù)據(jù)的方法。將該文章稱為“Eclipse”。
“Eclipse”討論媒體處理(如,視頻圖像處理),其中,數(shù)據(jù)流從一個進程傳遞到另一個進程?!癊clipse”的一個重要方面在于,為不同進程之間的通信和同步的通用接口模型,提供了一個高效可實現(xiàn)的定義。該接口模型定義了通信和同步必須使用的應(yīng)用程序接口(API)的原函數(shù)(primitive function)的有限集(limited set)。通過該API的原函數(shù),可以從功能上描述信號處理任務(wù),從而可以通過多種方式執(zhí)行各進程通過運行在相同或不同處理單元或?qū)S糜布幚砥骰蚱浣M合上的計算機程序。因此,該接口模型增加了信號處理任務(wù)描述的可用性。
為了實現(xiàn)該結(jié)果,需要認真選擇用于通信和同步的API的原函數(shù),以便于能夠高效地實現(xiàn)它們。該接口模型假定了一個生成器進程和一個消費器進程,生成器進程生成數(shù)據(jù)流,消費器進程使用來自該流的數(shù)據(jù),并能夠同時執(zhí)行,這樣,當生成進程還沒有在該流中生成另一數(shù)據(jù)時,消費進程使用來自該流的數(shù)據(jù)。
這些進程通常生成和消費晶粒(grain)中的數(shù)據(jù)。例如,最小尺寸晶粒是一個圖像的單個像素值,較大尺寸晶粒的例子是圖像線或8×8像素塊。不同的進程可能使用不同的晶粒尺寸。例如,需要完全用于處理的線、但僅收到8×8塊的進程必須使用8線的晶粒。在處理期間,消費進程從一個晶??缣搅硪痪Я#谒隹缣g,消費只處理來自當前晶粒的數(shù)據(jù)。
Eclipse使用FIFO緩沖器接口,在生成進程和消費進程之間傳送來自該流的數(shù)據(jù)。生成進程將數(shù)據(jù)寫入FIFO緩沖存儲器中,每次一個晶粒,消費進程按照所述晶粒被寫的順序,從FIFO緩沖器讀取數(shù)據(jù),每次一個晶粒。對于該機制,Eclipse定義了以下原始命令,用于在信號處理任務(wù)中表示通信和同步Write、Read、GetSpace和PutspaceFIFO緩沖器的寫命令需要把輸出數(shù)據(jù)的晶粒(的指針)和寫晶粒的尺寸作為參數(shù)(該尺寸也可以是隱含的)。讀命令把指向該數(shù)據(jù)的存儲器區(qū)域的指針和讀晶粒的尺寸作為參數(shù)。在執(zhí)行讀命令之后,把來自該讀晶粒的數(shù)據(jù)從FIFO緩沖器復(fù)制到該指針所指向的存儲器區(qū)域。GetSpace命令用于指示下一個要讀或?qū)懙木Я?。GetSpace命令把晶粒尺寸作為參數(shù),并返回一個表示所請求空間是否可用的標記。該標記可用于判斷某進程是否應(yīng)該暫停。響應(yīng)于GetSpace命令,為調(diào)用進程預(yù)留空間。PutSpace命令用于表示讀或?qū)懢ЯR呀?jīng)結(jié)束,不需要再為調(diào)用進程預(yù)留用于該晶粒的FIFO緩沖器區(qū)域。
將任務(wù)描述中的通信和同步描述基于該命令集,以及在該命令集的不同實現(xiàn)上實現(xiàn)任務(wù)描述的不同實現(xiàn),從而實現(xiàn)可用性。
FIFO緩沖器接口的典型實現(xiàn)使用以環(huán)形方式進行尋址的存儲器。將來自每個下一晶粒的數(shù)據(jù)寫在下一更高序列地址,直至到達該緩沖器存儲器的地址范圍的末尾。在這種情況下,將來自下一晶粒的數(shù)據(jù)寫在該存儲器中的最低序列地址。但是,當使用不同晶粒尺寸時,這樣的FIFO緩沖器接口就很復(fù)雜。當消費進程的晶粒尺寸大于生成進程的晶粒尺寸時,例如,在有些晶粒中,某個晶粒內(nèi)的地址很可能“繞回(wrap around)”(從緩沖器地址范圍的一個邊界跳到另一邊界)。這使得消費進程在晶粒中的數(shù)據(jù)尋址變得很復(fù)雜。
Eclipse已經(jīng)解決了該問題,它使用的讀命令把指向來自FIFO緩沖器數(shù)據(jù)要復(fù)制到的存儲器的指針作為參數(shù)。消費進程從該區(qū)域讀數(shù)據(jù)。在該解決方案中,來自FIFO緩沖器中的某個晶粒的所有數(shù)據(jù)被復(fù)制到該消費進程的某個晶粒的本地存儲器中,從而消除地址的繞回。這樣,由于繞回所導(dǎo)致的地址復(fù)雜化僅限于復(fù)制,從而,消費進程能夠以最大效率自由地對該晶粒內(nèi)的數(shù)據(jù)進行尋址。但是,復(fù)制引入了處理的開銷成本。
Eclipse的API中未使用的另一種可能解決方案是消費進程對每個地址進行地址轉(zhuǎn)換,直接從FIFO緩沖存儲器中訪問該晶粒內(nèi)的數(shù)據(jù),以確保需要繞回時調(diào)整地址。這消除了復(fù)制的開銷,但是,每次對數(shù)據(jù)進行尋址時,都會引入開銷。如果消費進程不適用于該緩沖存儲器,那么,每次對數(shù)據(jù)進行尋址時,消費進程必須把晶粒內(nèi)數(shù)據(jù)的地址提供給API調(diào)用,以進行轉(zhuǎn)換。
相應(yīng)地,本發(fā)明的一個目的是提供一種用于信號處理任務(wù)描述的應(yīng)用程序接口定義以及該應(yīng)用程序接口定義的實現(xiàn),從而,在經(jīng)由具有繞回地址的FIFO緩沖存儲器傳送晶粒數(shù)據(jù)的進程執(zhí)行期間,能夠降低開銷。
更具體地說,本發(fā)明的一個目的是為使用彼此不同晶粒尺寸的進程降低這樣的開銷。
權(quán)利要求1描述了根據(jù)本發(fā)明的數(shù)據(jù)處理裝置。消費進程經(jīng)由一個應(yīng)用程序接口函數(shù),獲得對環(huán)形緩沖器的訪問,從而獲得對來自某晶粒的數(shù)據(jù)的訪問。根據(jù)本發(fā)明,該函數(shù)返回一個表示消費進程應(yīng)當直接從環(huán)形FIFO緩沖器中或從輔助存儲器中讀數(shù)據(jù)的指示,當晶粒內(nèi)的地址在環(huán)形FIFO緩沖器中繞回時,該函數(shù)返回下一個指示。當晶粒內(nèi)的地址在FIFO緩沖器中繞回時,把來自該晶粒的數(shù)據(jù)復(fù)制到輔助存儲器中。
為消費進程具體定義了晶粒尺寸和輔助緩沖器,以使得消費進程的晶粒尺寸不同于向FIFO緩沖器中寫的生成進程的晶粒尺寸。選擇輔助緩沖器,以使得它包含足夠的空間,以寫來自該流的晶粒。由于輔助緩沖器具體針對消費進程,所以,它應(yīng)該大到足以處理所有可能的晶粒尺寸。優(yōu)選情況下,消費進程使用一個發(fā)送給應(yīng)用程序接口的命令,自己把晶粒尺寸和輔助緩沖器設(shè)置為例如該命令的自變量。
當一個該類型命令包含在應(yīng)用程序接口中時,該命令能夠為信號處理任務(wù)寫程序,從而,用該命令表示從該環(huán)形FIFO緩沖器讀的所有訪問。這使得FIFO緩沖器的實現(xiàn)對指明信號處理任務(wù)的程序是透明的。因此,相同的程序可用于不同的實現(xiàn),其中,構(gòu)成信號處理任務(wù)的進程不同地分布在不同的處理器上。通過在合適的處理器中執(zhí)行這些進程以及交換用于處理對環(huán)形FIFO緩沖器的訪問的應(yīng)用程序接口命令,實現(xiàn)這樣不同的分布,這適合于對執(zhí)行這些進程的處理器進行定位。因此,在信號處理任務(wù)的說明中,該分布是透明的。
由于該應(yīng)用程序接口命令提供了直接從環(huán)形FIFO緩沖器或從輔助存儲器對數(shù)據(jù)的另一種使用,所以,該透明性是用高效訪問FIFO緩沖器來實現(xiàn)的。
下面將結(jié)合附圖描述本發(fā)明的這些和其他目的以及其他有益方面。
圖1示出了數(shù)據(jù)處理的組織結(jié)構(gòu);圖2示出了一種數(shù)據(jù)處理裝置;圖3示出了一種接口程序的流程圖;圖4示出了一種具有FIFO緩沖器的數(shù)據(jù)處理裝置;圖5示出了編譯的流程圖。
圖1示出了數(shù)據(jù)處理的組織結(jié)構(gòu),其使用第一進程1、第二進程4、FIFO緩沖存儲器2、分別位于FIFO緩沖存儲器2和進程1、4之間的應(yīng)用程序接口1a、4a。在操作中,第一進程1生成數(shù)據(jù)流,并將來自該流的數(shù)據(jù)寫入FIFO緩沖存儲器2。在晶粒中生成和消費數(shù)據(jù),通常每個晶粒包括多個單獨可尋址的字。FIFO緩沖存儲器2從進程1接收來自某晶粒的數(shù)據(jù),然后再收到來自另一晶粒的數(shù)據(jù),等等,并在某時間將來自某晶粒的數(shù)據(jù)連續(xù)地提供給第二進程4,按照從第一進程1接收這些晶?;蚓Я=M的順序。
進程1、4通常是用軟件實現(xiàn)的進程,它們經(jīng)由應(yīng)用程序接口1a、4a,與FIFO緩沖器11進行交互。也就是說,進程1、4不直接管理FIFO緩沖進程的細節(jié),但調(diào)用管理這些細節(jié)的應(yīng)用程序接口函數(shù)。為清楚起見,圖1的結(jié)構(gòu)只示出了兩個進程1、4,但應(yīng)當理解的是,在實際應(yīng)用中,可能會涉及多個經(jīng)由多個FIFO緩沖器進行通信的進程。
圖2示出了用于實現(xiàn)圖1的結(jié)構(gòu)的一個典型處理裝置。該處理裝置包含經(jīng)由通信設(shè)施14a、14b連接的第一處理單元10、第二處理單元16和存儲器18。例如,可以把一條總線用作通信設(shè)施。第一處理單元10被編程為執(zhí)行第一進程1和應(yīng)用程序接口1a的函數(shù)。第二處理單元16被編程為執(zhí)行第二進程4和應(yīng)用程序接口4a的函數(shù)。通常,把該裝置實現(xiàn)為集成電路器件,其至少包含這些處理單元和總線,優(yōu)選還包括存儲器。
在操作中,對于FIFO緩沖存儲器2,使用來自存儲器18的存儲位置。從最小地址Amin到最大地址Amax的地址區(qū)域用來存儲FIFO緩沖的數(shù)據(jù)。用于訪問FIFO緩沖存儲器的應(yīng)用接口定義了函數(shù)Read、Write、GetSpace和Putspace。
通過GetSpace調(diào)用和Write調(diào)用,第一進程1把一個晶粒數(shù)據(jù)提供給應(yīng)用程序接口1a的一個函數(shù),該函數(shù)把該數(shù)據(jù)寫入地址為A1至An的n個存儲位置,A1至An在范圍Amin至Amax(整數(shù)n表示該晶粒中可訪問數(shù)據(jù)項的數(shù)量)。當?shù)谝贿M程提供下一晶粒時,數(shù)據(jù)被寫入地址為An+1...A2n的存儲位置,依此類推,直至到達Amax。在這種情況下,應(yīng)用程序接口1a把來自下一晶粒的數(shù)據(jù)寫入地址為Amin...Amin+n-1的存儲位置,或者,如果在該晶粒中的其他地方到達了地址Amax,則應(yīng)用程序接口1a把該晶粒中的后續(xù)部分寫入地址開始于Amin的存儲位置。這被稱為繞回,或以環(huán)形方式寫。如果這樣的寫使得來自較早晶粒的數(shù)據(jù)在被第二進程4使用之前被覆蓋,則應(yīng)用程序接口1a顯示FIFO緩沖存儲器2是“滿的”,從而導(dǎo)致第一進程1的執(zhí)行暫停,直至第二進程4完成讀取將要被覆蓋的數(shù)據(jù)。
在某時間,第二進程4使用GetSpace調(diào)用和Read調(diào)用,訪問來自某晶粒的數(shù)據(jù)。在第二進程4完成訪問來自該晶粒的數(shù)據(jù)之后,第二進程4調(diào)用應(yīng)用程序接口4a,以接收下一晶粒。第二進程4訪問的晶粒的尺寸可能不同于第一進程1的晶粒的尺寸。例如,第二進程4的每個晶??赡馨ǖ谝贿M程1的晶粒的整數(shù)m倍。當?shù)诙M程4準備處理來自下一晶粒的數(shù)據(jù)時,它調(diào)用應(yīng)用程序接口4a。Read調(diào)用
指向數(shù)據(jù)緩沖器的指針=Read(...,指向附加存儲器的指針)把指向緩沖存儲器附加區(qū)域的指針作為自變量,并返回一個指向緩沖器的指針。這里沒有顯示其他自變量,因為它們不是實質(zhì)性的,但這些自變量可能包括晶粒尺寸、處理任務(wù)標識和FIFO標識。第二進程4把指向存儲器18中的緩沖存儲器的附加區(qū)域提供給接口4a。該區(qū)域至少具有用于存儲第二進程4的一個晶粒的數(shù)據(jù)所需的尺寸。
圖3示出了當應(yīng)用程序接口4a收到來自第二進程4的調(diào)用以接收來自FIFO緩沖存儲器的下一晶粒時應(yīng)用程序接口4a的操作的流程圖。在第一步驟31中,當某個數(shù)據(jù)晶粒可讀時,應(yīng)用程序接口4a接受該調(diào)用,以接收下一晶粒;直至必須暫停第一進程4的時間。在第二步驟32中,應(yīng)用程序接口4a檢查來自該晶粒的數(shù)據(jù)的地址是否繞回在該晶粒內(nèi)。如果是,則應(yīng)用程序接口4a執(zhí)行第三步驟33,其中,它把來自該下一晶粒的數(shù)據(jù)復(fù)制到與調(diào)用一起提供的指針所指向的附加區(qū)域中。在復(fù)制期間,消除地址繞回,也就是說,從FIFO緩沖器區(qū)域中地址Amin開始存儲的、來自該晶粒的數(shù)據(jù)部分被存儲在附加區(qū)域中,其地址在來自FIFO緩沖器區(qū)域末端處的晶粒的數(shù)據(jù)地址之后。在第四步驟34中,應(yīng)用程序接口4a將指向該附加區(qū)域的指針返回給第二進程4。
如果應(yīng)用程序接口4a在第二步驟32中發(fā)現(xiàn)數(shù)據(jù)在FIFO緩沖器區(qū)域中沒有繞回,則應(yīng)用程序接口4a執(zhí)行第五步驟35,從而返回指向FIFO緩沖器區(qū)域中存儲該晶粒數(shù)據(jù)的存儲位置的指針。
因此,第二進程4提供和接收指向應(yīng)用程序接口4a的指針。應(yīng)用程序接口4a返回所提供的指針或把指向FIFO緩沖器一部分的指針提供給第二進程4,這取決于下一晶粒的存儲方式。只有由于繞回需要避免分裂尋址時,才將所提供的指針返回。用于確??捎眯缘膽?yīng)用程序接口包含用于指明這一點的原函數(shù)Read。
指向數(shù)據(jù)緩沖器的指針=Read(...,指向附加存儲器的指針)對于高級程序,Read函數(shù)可能實現(xiàn)為例如<pre listing-type="program-listing"><![CDATA[BufferPointer Read(BufferPointer P){ int end_of_grain=current_offset+grain_size; if(end of grain<max)return base_address_of_FIFO_buffer+current_offset; for(int i=0;i<max-current_offset;i++)P[i]=FIFO_buffer[i+current_offset]; for(int i=max-current_offset;i<grain_size;i++)P[i]=FIFO_buffer[i+current_offset-max], retum P;}]]></pre>在這里,max、current_offset和grain_size分別是表示FIFO緩沖器尺寸、FIFO緩沖器中的晶粒的開始位置和晶粒尺寸的參數(shù)。假設(shè)其他地方已經(jīng)定義了這些參數(shù)的值??蛇x地,可以把這些參數(shù)中的一個或多個作為函數(shù)Read的自變量進行傳送。應(yīng)當注意的是,由于某些原因(例如,在向FIFO緩沖器中寫時避免繞回),參數(shù)max可以作為時間的函數(shù),自動改變。
上面結(jié)合“Read”函數(shù)對本發(fā)明進行了描述,“Read”函數(shù)將指向附加存儲器區(qū)域的指針作為由消費進程4傳遞的自變量?;蛘?,消費進程4也可以對一系列Read操作將該指針設(shè)置一次。或者,可以使用預(yù)先設(shè)定的指針,這由應(yīng)用程序接口進行定義。使用由消費進程4定義的指針具有如下優(yōu)點可以把附加存儲器區(qū)域中需要預(yù)留的空間量調(diào)整為消費進程4使用的晶粒尺寸。因此,不需要預(yù)留“最糟糕情況”尺寸,這可能涉及復(fù)制FIFO緩沖器尺寸。使用被定義為Read函數(shù)自變量的指針具有如下優(yōu)點在Read函數(shù)的每個調(diào)用不增加開銷的情況下,可以動態(tài)調(diào)整晶粒尺寸。
應(yīng)當注意的是,為確保將數(shù)據(jù)存儲在不同區(qū)域中,不必將指向不同附加區(qū)域值的指針作為自變量提供給連續(xù)的Read函數(shù)調(diào)用。這是因為,該應(yīng)用可以不基于把數(shù)據(jù)復(fù)制到附加區(qū)域的假設(shè)。只有很例外才是這種情況。
上面結(jié)合應(yīng)用程序接口1a、4a對本發(fā)明進行了描述,應(yīng)用程序接口1a、4a被實現(xiàn)為分別由第一處理單元10和第二處理單元16執(zhí)行的程序,但應(yīng)當理解的是,這兩個應(yīng)用程序接口中的一個或兩個可以運行在不同的處理單元上。實際上,第一和第二進程1、4可以與應(yīng)用程序接口1a、4a一起,運行在相同的處理單元上。在另一實施例中,F(xiàn)IFO緩沖存儲器2和應(yīng)用程序接口1a、4a可被實現(xiàn)為專用硬件。
圖4中的例子示出了FIFO緩沖存儲器2和第二進程4的接口的硬件實現(xiàn)。在該硬件示例中,F(xiàn)IFO緩沖器單元12連接在第一處理單元10和總線14a、14b之間。FIFO緩沖器單元12包含緩沖存儲器120;FIFO輸入指針寄存器122;FIFO輸出指針寄存器124;應(yīng)用調(diào)用處理器126;附加緩沖器指針寄存器127;返回指針復(fù)用器128;和FIFO輸出地址復(fù)用器129。優(yōu)選用集成電路實現(xiàn)該硬件實現(xiàn),其包含除了可能外置存儲器之外的所有部件。
在操作中,當要寫入某新晶粒時,第一處理單元10生成一個調(diào)用信號,發(fā)送給應(yīng)用調(diào)用處理器126。如果緩沖存儲器120中有存儲空間,則應(yīng)用調(diào)用處理器126把FIFO輸入指針寄存器122設(shè)置到緩沖存儲器120中的晶粒的起始地址,并向第一處理單元10確認可以開始寫。第一處理單元10從FIFO輸入指針寄存器122中讀取起始地址,并從起始地址開始,把來自該晶粒的數(shù)據(jù)寫入緩沖存儲器120。
第二處理單元16經(jīng)由總線14a、14b可對緩沖存儲器120和存儲器18進行尋址。根據(jù)地址數(shù)據(jù),第二處理單元16從緩沖存儲器120讀取或從存儲器18中讀。當要讀新的晶粒時,第二處理單元10生成一個調(diào)用信號,發(fā)送給應(yīng)用調(diào)用處理器126。該調(diào)用伴隨著存儲器12中的附加區(qū)域的地址。響應(yīng)于該調(diào)用,應(yīng)用調(diào)用處理器126檢測該晶粒是否完全可用,如果完全可用,則把FIFO輸出指針寄存器122設(shè)置為緩沖存儲器120中的晶粒的起始地址。
但是,在確認該調(diào)用之前,應(yīng)用調(diào)用處理器126檢測該晶粒的地址是否繞回。如果是,則應(yīng)用調(diào)用處理器126對緩沖存儲器進行尋址,輸出來自該晶粒的數(shù)據(jù),并且,應(yīng)用調(diào)用處理器126對存儲器18進行尋址,使用從附加區(qū)域的地址開始的地址,以存儲來自緩沖存儲器120的晶粒的數(shù)據(jù)。應(yīng)用調(diào)用處理器126控制返回指針復(fù)用器128,輸出附加區(qū)域的地址或來自FIFO輸出指針寄存器122的起始地址。最后,應(yīng)用調(diào)用處理器126確認該調(diào)用。
確認該調(diào)用之后,F(xiàn)IFO輸出地址復(fù)用器129允許第二處理單元從緩沖存儲器120中讀數(shù)據(jù)。第二處理單元10讀從返回指針復(fù)用器128接收的起始地址,并根據(jù)返回的指針,對晶粒中的數(shù)據(jù)進行尋址。
應(yīng)當理解的是,圖4只示出了一個在指針之間做出選擇的說明性實施例。還有很多其他方式可以將正確的指針提供給第二進程4。例如,如果不采用指針,則可以提供一個標記信號,其表示必須從兩個存儲位置中的哪一個讀指針,或者,在應(yīng)用調(diào)用處理器126的內(nèi)部生成所需的指針,并從那里提供該指針,而不是將其保存在復(fù)用器128所選擇的寄存器中。如果不采用寄存器和復(fù)用器128,也可以使用一個存儲位置,其中,在應(yīng)用調(diào)用處理器126的控制下,寫入合適的指針信息。如上所述,對于軟件實現(xiàn)的情況,處理單元16不必為每個調(diào)用提供存儲器18中的附加區(qū)域的地址。相反,可以在獨立的事務(wù)中提供該地址,以把該地址存儲在寄存器127中,從而在任何數(shù)量的調(diào)用期間使用。此外,附加區(qū)域可以是包含F(xiàn)IFO緩沖存儲器120的較大存儲器的一部分。存儲器18和緩沖存儲器120實際上可以是同一較大存儲器的一部分。
應(yīng)當認識到的是,向FIFO緩沖器的寫同樣可以利用輔助存儲器,從而,執(zhí)行生成進程,當某晶粒內(nèi)的地址繞回時,寫入輔助存儲器,當?shù)刂窙]有繞回時,直接寫入FIFO存儲器。在這種情況下,生成進程首先執(zhí)行應(yīng)用接口調(diào)用,以接收一個用于寫來自晶粒的數(shù)據(jù)的指針。該調(diào)用把輔助存儲器指針作為自變量。響應(yīng)于該調(diào)用,該應(yīng)用程序接口在FIFO存儲器中為晶粒預(yù)留空間。作為對調(diào)用的報答,應(yīng)用程序接口把收到的指針作為自變量返回,或者把該指針返回FIFO存儲器中,至于選擇哪一個,這取決于晶粒地址是否在FIFO存儲器中繞回。然后,生成進程把晶粒數(shù)據(jù)寫入返回的指針所指向的存儲器中。當通知該晶粒完成時,如果FIFO存儲器中的地址繞回,則應(yīng)用程序接口復(fù)制來自輔助存儲器區(qū)域的數(shù)據(jù)。
這降低了FIFO緩沖器生成端的開銷。但是,應(yīng)當理解的是,如果通常只寫數(shù)據(jù)一次而讀多次,或者,如果消費進程不需要讀所有數(shù)據(jù),那么,對于消費端,這種降低就不太明顯。因此,當本發(fā)明僅用于輸出端時,就已經(jīng)實現(xiàn)了明顯的改進,將其應(yīng)用于輸入端不需開銷。
在任何情況下,當FIFO緩沖器尺寸是消費端的晶粒尺寸的整數(shù)倍時,這種改進在輸入端上是不必要的。同樣,當應(yīng)用程序接口暫時減少或增加FIFO緩沖器的尺寸以確保在寫時晶粒一端與緩沖存儲器一端一致時,不需要這樣的改進。
在上面對本發(fā)明的描述中,連續(xù)晶粒具有遞增的地址,但應(yīng)當理解的是,也可以使用遞減的地址。在這種情況下,當晶粒到達FIFO緩沖器的最低地址時,使用輔助存儲器區(qū)域。同樣,盡管這里把總線示為執(zhí)行這些進程的處理器、輔助存儲器和FIFO緩沖器之間的通信結(jié)構(gòu),但應(yīng)當理解的是,對于這些單元的部分或全部之間的通信,也可以使用諸如網(wǎng)絡(luò)之類的其他類型通信結(jié)構(gòu),這樣,就不用總線地址,而使用網(wǎng)絡(luò)地址。
以傳統(tǒng)方式,如同Eclipse所描述的那樣,在設(shè)計信號處理任務(wù)期間,規(guī)定進程的數(shù)量,例如,通過諸如C程序代碼之類的高級語言程序代碼。在這些進程之間傳送數(shù)據(jù)流,這些進程被設(shè)計為同時生成和消費數(shù)據(jù)流。通過調(diào)用接口函數(shù)實現(xiàn)進程之間的通信和同步,以與FIFO緩沖器進行交互。
圖5示出了編譯程序的機器。該機器包括處理器50;輸入裝置52,用于輸入程序;存儲裝置54,用于存儲多個函數(shù)庫54a-c;目標編程單元56。函數(shù)庫54a-c各包含用于執(zhí)行接口函數(shù)的實現(xiàn)指令,如上述的Read函數(shù),每個庫用于相應(yīng)類型的目標機器。例如,在一種實現(xiàn)方式中,庫函數(shù)使用生成和消費進程的單個存儲器以及FIFO緩沖器,支持軟件實現(xiàn),而在另一個庫中,函數(shù)支持FIFO緩沖和/或把FIFO緩沖的數(shù)據(jù)在不同處理器之間傳送的硬件實現(xiàn)。
在操作中,在第一步中,處理器50從輸入裝置52讀取一個程序(該程序可以存儲在中間,如存儲裝置54)。該程序包含一個對庫函數(shù)的調(diào)用,以獲得對來自FIFO緩沖器的數(shù)據(jù)的訪問,并使用該調(diào)用結(jié)果來控制該程序中的后續(xù)指令直接從FIFO緩沖器讀或?qū)慒IFO緩沖器還是從附加緩沖器讀或?qū)懜郊泳彌_器,優(yōu)選在由該程序中的指令所指定的附加緩沖器中。
在第二步中,處理器50解析該程序,然后生成包含執(zhí)行該程序所必須執(zhí)行的指令的目標代碼。在第二步中,處理器50還判斷該程序是否包含對前述“Read”函數(shù)的類型的接口庫函數(shù)的調(diào)用。在第三步中,處理器50判斷應(yīng)當使用庫54a-c中的哪一個,例如,這取決于諸如表示目標機器類型的鏈接選項之類的信號。在第三步中,處理器50把目標代碼與來自接口庫54a-c中選定一個的指令進行鏈接,從而,在目標代碼中對Read函數(shù)的調(diào)用將導(dǎo)致執(zhí)行來自所選庫的指令,這實現(xiàn)Read函數(shù)。在第四步中,處理器10把鏈接代碼發(fā)送給目標編程單元56,例如,目標編程單元56把鏈接代碼加載到目標處理器中以進行執(zhí)行(或使用產(chǎn)品的代碼控制部分,把集成電路編程為執(zhí)行該程序)。盡管對Read函數(shù)的不同的實現(xiàn)提供了優(yōu)選不同的庫,以使得對不同類型機器可以鏈接相同的程序,但應(yīng)當理解的是,如果處理器10僅提供在一種類型目標機器上的執(zhí)行,那么一個庫就足夠了。
應(yīng)當理解的是,每一步都是傳統(tǒng)的,除了使用一個或多個新的接口函數(shù)庫,這包含訪問FIFO緩沖器的庫Read函數(shù),其中,Read函數(shù)返回一個指示,表示應(yīng)當直接從FIFO存儲器讀為該程序生成的指令或把為該程序生成的指令寫到FIFO存儲器中還是從附加存儲器讀為該程序生成的指令或把為該程序生成的指令寫到附加存儲器中,優(yōu)選在一個由該程序中的指令所指定的緩沖器中。還應(yīng)當理解的是,在第三步中,該函數(shù)的鏈接不是必須的。也可以使用運行時支持的對系統(tǒng)函數(shù)的調(diào)用,或者,作為調(diào)用的結(jié)果,可以包含控制FIFO緩沖的硬件的指令。
根據(jù)本發(fā)明,接口函數(shù)包括一個Read函數(shù),該Read函數(shù)返回對緩沖器的選擇,以進行讀,該選擇表示應(yīng)該直接使用FIFO緩沖存儲器,還是應(yīng)該使用輔助存儲器區(qū)域。因此,如同Eclipse所描述的那樣,任務(wù)說明用于控制硬件和/機器指令的程序的制造,以實現(xiàn)該說明,不同之處在于,Read命令實現(xiàn)為上述結(jié)構(gòu)或其等價物。根據(jù)實現(xiàn)類型,尤其是進程的硬件分布的選擇,選擇Read函數(shù)的實現(xiàn)方式。
權(quán)利要求
1.一種數(shù)據(jù)處理裝置,包括處理電路,被設(shè)置為執(zhí)行數(shù)據(jù)生成進程和數(shù)據(jù)消費進程,所述數(shù)據(jù)生成進程用于生成數(shù)據(jù)流,所述數(shù)據(jù)消費進程在生成所述流的同時消費所述數(shù)據(jù)流;所述數(shù)據(jù)消費進程可訪問的處理存儲器;先進先出環(huán)形緩沖器單元,用于在所述數(shù)據(jù)生成進程和所述數(shù)據(jù)消費進程之間傳遞來自所述流的數(shù)據(jù),所述環(huán)形緩沖器單元包括緩沖存儲器,所述環(huán)形緩沖器單元把來自所述流的數(shù)據(jù)項以環(huán)形方式寫入所述緩沖存儲器中;所述環(huán)形緩沖器單元的消費進程接口,被設(shè)置為使用具體用于所述數(shù)據(jù)消費進程的晶粒尺寸選擇和輔助緩沖器區(qū)域選擇,所述消費進程接口被設(shè)置為處理一條用于把來自所述流的數(shù)據(jù)晶粒提供給所述數(shù)據(jù)消費進程的命令,所述消費進程接口被設(shè)置為通過測試必須要訪問的晶粒內(nèi)的數(shù)據(jù)地址是否在所述緩沖存儲器中繞回,來響應(yīng)所述命令;響應(yīng)于檢測到所述地址繞回,把所述晶粒從所述緩沖存儲器復(fù)制到所述輔助存儲器區(qū)域中,從而在所復(fù)制的晶粒中消除所述繞回;以及當所述晶粒內(nèi)的所述地址沒有繞回時,向所述消費進程返回一個從所述緩沖存儲器中讀取所述晶粒的指示,或者,當所述地址繞回時,返回一個從所述輔助存儲器區(qū)域中讀取的指示。
2.如權(quán)利要求1所述的數(shù)據(jù)處理裝置,其中,所述消費進程接口被設(shè)置為響應(yīng)于所述命令,根據(jù)所述緩沖存儲器中的所述晶粒中的所述數(shù)據(jù)的所述地址是否繞回,返回一個用于對所述緩沖存儲器或所述輔助存儲器區(qū)域進行尋址的指針,以在所述晶粒中對數(shù)據(jù)進行尋址。
3.如權(quán)利要求1所述的數(shù)據(jù)處理裝置,其中,所述消費進程被設(shè)置為選擇所述輔助存儲器的地址和所述晶粒尺寸,作為所述命令的一部分。
4.如權(quán)利要求1所述的數(shù)據(jù)處理裝置,其中,所述數(shù)據(jù)生成進程和所述數(shù)據(jù)消費進程被設(shè)置為分別使用第一和第二晶粒尺寸用于向所述環(huán)形緩沖器單元發(fā)送數(shù)據(jù)以及從所述環(huán)形緩沖器單元中接收數(shù)據(jù),所述第一和第二晶粒尺寸彼此不同。
5.如權(quán)利要求5所述的數(shù)據(jù)處理裝置,其中,所述數(shù)據(jù)處理裝置被設(shè)置為使用可變晶粒尺寸用于發(fā)送數(shù)據(jù)。
6.如權(quán)利要求2所述的數(shù)據(jù)處理裝置,其中,選擇所述第一晶粒尺寸和所述環(huán)形緩沖器單元的尺寸,以使得所述環(huán)形緩沖器單元中的所述數(shù)據(jù)的地址總是在具有所述第一晶粒尺寸的連續(xù)晶粒之間繞回。
7.如權(quán)利要求1所述的數(shù)據(jù)處理裝置,包括數(shù)據(jù)生成進程可訪問的另一處理存儲器,所述數(shù)據(jù)生成進程用于生成所述數(shù)據(jù)流;所述環(huán)形緩沖器單元的生成進程接口,被設(shè)置為接收用于所述數(shù)據(jù)生成進程的另一輔助存儲器區(qū)域選擇,所述生成進程接口被設(shè)置為處理用于輸出來自所述流的輸出數(shù)據(jù)晶粒的另一命令,所述生成進程接口被設(shè)置為通過測試所述輸出晶粒內(nèi)的數(shù)據(jù)的地址是否在所述緩沖存儲器中繞回,對所述另一命令做出響應(yīng);當所述晶粒內(nèi)的所述地址沒有繞回時,向所述生成進程返回一個將所述晶粒寫入所述緩沖存儲器的指示,或者,當所述地址繞回時,返回一個寫入所述輔助存儲器區(qū)域的指示;響應(yīng)于檢測到所述地址繞回,把所述晶粒從輔助存儲器區(qū)域復(fù)制到所述緩沖存儲器中,從而在所復(fù)制的晶粒中創(chuàng)建所述繞回。
8.一種數(shù)據(jù)處理裝置,包括處理電路,被設(shè)置為執(zhí)行數(shù)據(jù)生成進程和數(shù)據(jù)消費進程,所述數(shù)據(jù)生成進程用于生成數(shù)據(jù)流,所述數(shù)據(jù)消費進程在生成所述流的同時消費所述數(shù)據(jù)流;所述數(shù)據(jù)生成進程可訪問的處理存儲器;先進先出環(huán)形緩沖器單元,用于在所述數(shù)據(jù)生成進程和所述數(shù)據(jù)消費進程之間傳遞來自所述流的數(shù)據(jù),所述環(huán)形緩沖器單元包括緩沖存儲器,所述環(huán)形緩沖器單元把來自所述流的數(shù)據(jù)項以環(huán)形方式寫入所述緩沖存儲器中;所述環(huán)形緩沖器單元的生成進程接口,被設(shè)置為使用具體用于所述數(shù)據(jù)生成進程的晶粒尺寸選擇和輔助緩沖器區(qū)域選擇,所述生成進程接口被設(shè)置為處理一條用于把存儲器提供給所述數(shù)據(jù)生成進程以寫入所生成晶粒的命令,所述生成進程接口被設(shè)置為通過測試必須向其提供存儲器的所述晶粒中的數(shù)據(jù)地址是否在所述緩沖存儲器中繞回,來響應(yīng)所述命令;當所述晶粒內(nèi)的所述地址沒有繞回時,向所述生成進程返回一個把所述晶粒寫入所述緩沖存儲器的指示,或者,當所述地址繞回時,返回一個寫入輔助存儲器區(qū)域的指示。
9.一種用于生成信號處理任務(wù)的機器實現(xiàn)的機器實現(xiàn)方法,其中,所述信號處理任務(wù)包括同時執(zhí)行的進程,數(shù)據(jù)流經(jīng)由環(huán)形緩沖存儲器在所述進程之間傳送,該方法包括提供一個應(yīng)用程序接口,所述應(yīng)用程序接口包括由所述進程中的數(shù)據(jù)消費進程調(diào)用以訪問所述緩沖存儲器中存儲的數(shù)據(jù)晶粒的函數(shù),所述應(yīng)用程序接口為所述進程中的所述數(shù)據(jù)消費進程提供所述晶粒尺寸和輔助存儲區(qū)域的可選擇定義,所述函數(shù)被設(shè)置為測試必須要訪問的晶粒的地址是否在所述緩沖存儲器中繞回,當所述晶粒中的所述地址繞回時,把所述晶粒從所述緩沖存儲器復(fù)制到所述輔助存儲器區(qū)域中,從而在所復(fù)制的晶粒中消除所述繞回,以及,作為所述調(diào)用的結(jié)果,當所述晶粒內(nèi)的所述地址沒有繞回時,向所述進程中的所述消費進程返回一個從所述緩沖存儲器中讀來自所述晶粒的數(shù)據(jù)的指示,或者,當所述晶粒中的所述地址繞回時,返回一個從所述輔助存儲器區(qū)域中讀的指示;接收所述信號處理任務(wù)的說明;識別所述說明中對所述函數(shù)的調(diào)用;使用來自所述應(yīng)用程序接口的所述函數(shù),實現(xiàn)所述調(diào)用。
10.如權(quán)利要求9所述的機器實現(xiàn)方法,其中,所述應(yīng)用程序接口對所述處理任務(wù)的所述說明隱藏處理單元上的進程分布,所述函數(shù)的所述實現(xiàn)是根據(jù)所述分布而選擇的。
11.如權(quán)利要求10所述的機器實現(xiàn)方法,該方法包括生成用于實現(xiàn)所述機器實現(xiàn)的集成電路制造控制信息,以及,在所述集成電路制造控制信息的控制下,制造集成電路。
12.一種計算機可讀介質(zhì),包括用于訪問環(huán)形FIFO緩沖器的應(yīng)用程序接口,所述應(yīng)用程序接口為從所述環(huán)形FIFO緩沖器訪問數(shù)據(jù)的應(yīng)用程序,提供晶粒尺寸選擇,并為所述應(yīng)用程序提供輔助存儲器區(qū)域的定義,所述應(yīng)用程序接口包括所述應(yīng)用程序要調(diào)用的函數(shù),以從所述環(huán)形FIFO緩沖器訪問晶粒,所述函數(shù)被配置為測試必須要訪問的所述晶粒中的數(shù)據(jù)地址是否在所述環(huán)形FIFO緩沖器中繞回;當所述晶粒內(nèi)的所述地址繞回時,把所述晶粒從所述FIFO緩沖器復(fù)制到輔助存儲器區(qū)域中,從而在所復(fù)制的晶粒中消除所述繞回;作為所述調(diào)用的結(jié)果,當所述晶粒內(nèi)的所述地址沒有繞回時,返回一個從所述FIFO緩沖器中讀的指示,或者,當所述晶粒內(nèi)的所述地址繞回時,返回一個從所述輔助存儲器區(qū)域中讀的指示。
13.一種包含用于執(zhí)行權(quán)利要求8的方法的指令程序的計算機可讀介質(zhì)。
全文摘要
處理電路執(zhí)行數(shù)據(jù)生成進程和數(shù)據(jù)消費進程。所述數(shù)據(jù)生成進程生成數(shù)據(jù)流,所述數(shù)據(jù)消費進程在生成所述流的同時消費所述數(shù)據(jù)流。先進先出環(huán)形緩沖器在所述數(shù)據(jù)生成進程和所述數(shù)據(jù)消費進程之間傳遞來自所述流的數(shù)據(jù)。所述緩沖器包括緩沖存儲器,所述緩沖器把來自所述流的數(shù)據(jù)項以環(huán)形方式寫入所述緩沖存儲器。消費進程接口被設(shè)置為處理一條用于把來自所述流的數(shù)據(jù)晶粒提供給所述數(shù)據(jù)消費進程的命令。通過測試必須要訪問的晶粒內(nèi)的數(shù)據(jù)地址是否在所述環(huán)形FIFO緩沖器中繞回,所述接口對所述命令做出響應(yīng)。如果所述地址繞回,則所述接口把所述晶粒從所述FIFO緩沖器復(fù)制到所述輔助存儲器區(qū)域中,從而在所復(fù)制的晶粒中消除所述繞回。當所述晶粒內(nèi)的所述地址沒有繞回時,所述接口向所述消費進程返回一個從所述FIFO緩沖器中讀所述晶粒的指示,或者,當所述地址繞回時,返回一個從所述輔助存儲器區(qū)域中讀的指示。
文檔編號G06F5/06GK1774694SQ200480010032
公開日2006年5月17日 申請日期2004年4月8日 優(yōu)先權(quán)日2003年4月16日
發(fā)明者奧姆·普拉卡什·甘瓦爾 申請人:皇家飛利浦電子股份有限公司