專利名稱:硬件協(xié)助處理器間的溝通的制作方法
技術(shù)領(lǐng)域:
本發(fā)明是與處理器之間的溝通(inter-processor communication, IPC)有關(guān),特 另一禾中夕卜胃i己十乙#白勺ftiiftdj (external memory basedfirst-in-first-out, xFIFO)輔助處理器之間溝通的裝置。
背景技術(shù):
一般而言,傳統(tǒng)的基地臺傳輸器是透過預(yù)設(shè)的溝通連結(jié),例如Tl或El線路,連接 至基地臺控制器。這些基地臺控制器彼此連接,并且亦連接至其他網(wǎng)路設(shè)備,例如整合分封 無線服務(wù)(GPRS)網(wǎng)路中的GPRS服務(wù)節(jié)點(diǎn)(SGSN)或閘道GPRS支援節(jié)點(diǎn)(GGSN)。近來,具 有較小尺寸并結(jié)合有無線電網(wǎng)絡(luò)控制器(RNC)及節(jié)點(diǎn)功能的家用基地臺透過網(wǎng)際網(wǎng)路連 接至核心網(wǎng)路(CoreNetwork)0家用基地臺晶片系統(tǒng)包含復(fù)數(shù)個(gè)處理器核心、不同的硬件加速器及周邊介面邏輯 元件。這些處理器核心負(fù)責(zé)自裝置驅(qū)動(dòng)器、韌體、通訊協(xié)定執(zhí)行許多不同的軟體元件至使用 者層級的應(yīng)用。不同的軟體緒需要周期地彼此溝通,例如交換控制權(quán)或信息,或是彼此同步 以確保不同處理器核心所發(fā)生的事件是依照適當(dāng)?shù)捻樞虿a(chǎn)生正確的結(jié)果。隨著同時(shí)至多 有16個(gè)用戶產(chǎn)生聲音及資料的傳輸,這些軟體元件之間的IPC必須能夠快速而又有效率, 才能滿足家用基地臺晶片系統(tǒng)的需求。一般而言,典型使用于多核心嵌入式系統(tǒng)的IPC方案包含訊息遞送 (message passing)、分享記憶體(shared memory)、一 對一同步比擬器(one-to-one synchronization metaphor,例如旗號semaphore及訊號signal)以及N對——同步比擬 器(例如旋鎖spin-lock或測試及設(shè)定test-and-set)。此處強(qiáng)調(diào)的是關(guān)于訊息遞送的方 法。于IPC訊息遞送的范例中,某一軟體緒并不會(huì)與欲溝通的其他軟體緒分享任何記憶體 空間。反而,它們會(huì)透過簡單(一維)的快進(jìn)快出隊(duì)列(FIFO queue)彼此溝通,使得某一 軟體緒固定扮演制造者(producer)的角色,另一軟體緒則固定扮演消費(fèi)者(consumer)的 角色。假設(shè)系統(tǒng)需要的是雙工訊息遞送介面,則只需采用兩個(gè)上述的快進(jìn)快出隊(duì)列即可。既然我們時(shí)常無法預(yù)先得知兩個(gè)不同的軟體緒之間究竟有多少資料需要交換或 是交換頻率為何,因此,兩處理器核心之間的訊息快進(jìn)快出裝置必須具有較低的延遲(low latency),才不會(huì)使得處理器之間由于頻繁地溝通而導(dǎo)致處理速度變慢。此外,兩處理器核 心之間的訊息快進(jìn)快出裝置亦需具有大面積,以避免由于快進(jìn)快出裝置的空或滿而產(chǎn)生處 理器之間不必要的耦合。為了能夠達(dá)成低延遲的目標(biāo),系統(tǒng)通常采用設(shè)置于晶片上的記憶 體(on-chip memory)來提供緩沖空間。至于設(shè)置于晶片外的記憶體(off-chipmemory),例 如DRAM,則是能夠提供大量的緩沖空間,通常作為儲(chǔ)存資料之用。雖然設(shè)置于晶片外的記憶體的成本遠(yuǎn)較設(shè)置于晶片上的記憶體來得低,但通常設(shè) 置于晶片外的記憶體的存取延遲卻比設(shè)置于晶片上的記憶體來得長。因此,欲同時(shí)具有較 低存取延遲又提供較大的緩沖空間的要求其實(shí)是矛盾的,系統(tǒng)設(shè)計(jì)者很難在設(shè)置于晶片外 的記憶體以及設(shè)置于晶片上的記憶體之間進(jìn)行抉擇。
因此,本發(fā)明提出一種能夠輔助處理器之間溝通的裝置,以解決上述問題。
發(fā)明內(nèi)容
本發(fā)明的一范疇在于提出一種建構(gòu)于多執(zhí)行緒直接記憶體存取(Multi-Threaded Direct Memory Access, MT—DMA)弓I擎上的夕卜部記十乙體快進(jìn)快出(external memory based FIFO, xFIFO)裝置,通過硬件加速的方式使得家用基地臺晶片系統(tǒng)中的訊息遞送處理器之 間溝通效率獲得提升。根據(jù)本發(fā)明的第一具體實(shí)施例為一種外部記憶體快進(jìn)快出(xFIFO)裝置。該外部 記憶體快進(jìn)快出裝置分別耦接至一外部記憶體及一注冊匯流排。該注冊匯流排耦接至至少 兩個(gè)處理器。該外部記憶體快進(jìn)快出裝置包含一外部記憶體快進(jìn)快出(xFIFO)引擎、一讀 取式直接記憶體存取(rDMA)引擎、一寫入式直接記憶體存取(wDMA)引擎、一第一虛擬快進(jìn) 快出模塊及一第二虛擬快進(jìn)快出模塊。該第一虛擬快進(jìn)快出模塊及該第二虛擬快進(jìn)快出模 塊均耦接于該讀取式直接記憶體存取引擎與該寫入式直接記憶體存取引擎之間。于此實(shí)施例中,該外部記憶體快進(jìn)快出裝置耦接至該注冊匯流排,用以自該注冊 匯流排接收一快進(jìn)快出指令并產(chǎn)生一讀取DMA指令及一寫入DMA指令。該WDMA引擎耦接至 該xFIFO引擎及該外部記憶體,用以自該xFIFO引擎接收該寫入DMA指令并傳送一進(jìn)來的 資料至該外部記憶體。該rDMA引擎耦接至該xFIFO引擎及該外部記憶體,用以自該xFIFO 引擎接收該讀取DMA指令并自該外部記憶體預(yù)取(pre-fetch) —快進(jìn)快出資料。該wDMA 引擎及該rDMA引擎透過該第一虛擬快進(jìn)快出模塊及該第二虛擬快進(jìn)快出模塊達(dá)到彼此同
止
少ο相較于先前技術(shù),本發(fā)明的處理器間溝通輔助裝置采用建構(gòu)于多執(zhí)行緒直接記憶 體存取引擎上的外部記憶體快進(jìn)快出裝置,通過硬件加速的方式使得家用基地臺晶片系統(tǒng) 中的訊息遞送處理器之間溝通效率獲得提升。由于本發(fā)明的外部記憶體快進(jìn)快出裝置所具 有設(shè)置于晶片上的on-chip記憶體已降至最少,故其存取延遲亦可明顯降低。因此,本發(fā)明 的處理器間溝通輔助裝置能夠同時(shí)提供較低的存取延遲,而又能夠在家用基地臺晶片系統(tǒng) 中采用價(jià)格較為低廉的設(shè)置于晶片外的off-chip記憶體,以降低其生產(chǎn)成本,提升其市場 競爭力。此外,本發(fā)明的外部記憶體快進(jìn)快出裝置包含常見的邏輯電路,以確保扮演制造 者的軟體緒以及扮演消費(fèi)者的軟體緒之間的資料一致性,并且還支援可配置的緩沖址與尺 寸大小以及錯(cuò)誤復(fù)原等功能。關(guān)于本發(fā)明的優(yōu)點(diǎn)與精神可以通過以下的發(fā)明詳述及所附圖式得到進(jìn)一步的了解。
圖1是繪示具有單一執(zhí)行緒的xFIFO裝置的功能方塊圖。圖2是繪示MT-xFIFO裝置的功能方塊圖。主要元件符號說明1:XFIF0裝置2、8:第一中央處理單元3、9:第二中央處理單元4:外部記憶體
B:注冊匯流排11 寫入式直接記憶體存取(wDMA)引擎12 讀取式直接記憶體存取(rDMA)引擎13 寫入緩沖器15 第一虛擬FIFO模塊6 :MT-xFIF0 裝置90 第三中央處理單元61:內(nèi)容 SRAM63 =DMA指令/資料隊(duì)列Bl 寫入資料(wdat)匯流排B2 指令(cmd)匯流排B4 封包指令(packet cmd)匯流排B5 =DMA寫入指令(dma wcmd)匯流排B6 =DMA讀取指令(dma rcmd)匯流排62a 62d、63a 63p 隊(duì)列
具體實(shí)施例方式本發(fā)明提出通過硬件加速來輔助處理器之間的溝通。根據(jù)本發(fā)明的第一具體實(shí)施 例為一種具有單一執(zhí)行緒的xFIFO裝置。實(shí)際上,一個(gè)簡單的xFIFO裝置可通過一對讀取 DMA引擎及寫入DMA引擎、復(fù)數(shù)個(gè)虛擬FIFO裝置、復(fù)數(shù)個(gè)注冊器連接埠及一簡單的DMA指令 產(chǎn)生器所組成。請參照圖1,圖1是繪示具有單一執(zhí)行緒的xFIFO裝置的功能方塊圖。如圖1所示,xFIFO裝置1分別耦接至外部記憶體4及注冊匯流排B,并且注冊匯 流排B耦接至第一中央處理單元(CPU) 2及第二中央處理單元3。xFIFO裝置1包含xFIFO 引擎10、寫入式直接記憶體存取(wDMA)引擎11、讀取式直接記憶體存取(rDMA)引擎12、寫 入緩沖器13、讀取緩沖器14、第一虛擬快進(jìn)快出模塊15及第二虛擬快進(jìn)快出模塊16。于此實(shí)施例中,xFIFO引擎10耦接至wDMA引擎11及rDMA引擎12 ;注冊匯流排B 耦接至寫入緩沖器13 ;寫入緩沖器13耦接至wDMA引擎11 ;wDMA引擎11分別耦接至外部 記憶體4、第一虛擬快進(jìn)快出模塊15及第二虛擬快進(jìn)快出模塊16 ;外部記憶體4、xFIFO引 擎10、第一虛擬快進(jìn)快出模塊15及第二虛擬快進(jìn)快出模塊16均分別耦接至rDMA引擎12 ; rDMA引擎12耦接至讀取緩沖器14 ;讀取緩沖器14耦接至注冊匯流排B。首先,將就xFIFO裝置1的設(shè)定進(jìn)行介紹。起初,xFIFO裝置1需先通過軟體進(jìn)行 FIFO位址、FIFO尺寸及FIFO資料單位大小等信息的程式設(shè)定程序。FIFO位址通常位于 off-chip記憶體位址空間內(nèi)。通過外部記憶體的采用,xFIFO裝置1可以最少的額外硬件 成本支援非常深的資料快進(jìn)快出。至于FIFO尺寸的參數(shù)則指出了可使用的緩沖器空間的 總量。xFIFO裝置1內(nèi)的位址產(chǎn)生器將會(huì)使用FIFO尺寸以確保資料位址能夠總是落于合法 范圍內(nèi)。就邏輯上而言,xFIFO包含多個(gè)具有相同大小的資料物件。FIFO制造者及FIFO消 費(fèi)者之間的同步處理是基于FIFO資料單位大小。惟有當(dāng)一完整的資料單位被寫入至xFIFO 時(shí),F(xiàn)IFO制造者的狀態(tài)才會(huì)被更新。當(dāng)xFIFO僅包含部分的資料單位時(shí),F(xiàn)IFO消費(fèi)者即把
10 :XFIF0 引擎
14 讀取緩沖器 16 第二虛擬FIFO模塊 7 匯流排介面單元 60 :MT-xFIF0 引擎 62 封包指令隊(duì)列 64 多執(zhí)行緒DMA模塊
B3 讀取資料(rdat)匯流排xFIFO視為空的。類似地,惟有當(dāng)一完整的資料單位被讀取自xFIFO時(shí),F(xiàn)IFO消費(fèi)者的狀態(tài) 才會(huì)被更新。唯一的例外是,當(dāng)一資料封包達(dá)到其結(jié)尾時(shí),即使累積的資料量尚未達(dá)到一完 整的資料單位,F(xiàn)IFO制造者及FIFO消費(fèi)者之間的同步處理仍將會(huì)被自動(dòng)地啟動(dòng)。xFIFO的設(shè)定只會(huì)將xFIFO硬件初始化至可以傳輸資料,至于可傳輸?shù)馁Y料量及 同步方法等細(xì)節(jié)是透過封包注冊所提供。封包注冊包含封包大小信息、關(guān)于FIFO制造者是 否應(yīng)該在完整封包被寫入xFIFO后中斷傳輸、中斷的識別、關(guān)于FIFO消費(fèi)者是否應(yīng)該在完 整封包被寫入xFIFO后中斷傳輸?shù)刃畔?。xFIFO引擎10將會(huì)根據(jù)封包注冊的信息分別針對wDMA引擎11、rDMA引擎12產(chǎn) 生命令。wDMA指令將會(huì)設(shè)定wDMA引擎11將進(jìn)來的資料轉(zhuǎn)送至外部記憶體4。rDMA指令將 會(huì)設(shè)定rDMA引擎12自外部記憶體4預(yù)取FIFO資料。依照資料封包的大小,可能會(huì)產(chǎn)生不 只一個(gè)wDMA指令或rDMA指令。因此,在xFIFO引擎10與wDMA引擎11/rDMA引擎12之間 需有一些寫入緩沖區(qū)及讀取預(yù)取區(qū)存在,其數(shù)量應(yīng)為設(shè)計(jì)的參數(shù)。值得注意的是,wDMA引擎11與rDMA引擎12是透過兩個(gè)虛擬FIFO模塊(第一虛 擬FIFO模塊15及第二虛擬FIFO模塊16)或兩個(gè)分享的旗號來達(dá)成彼此同步的目的。其 中,第一虛擬FIFO模塊15及第二虛擬FIFO模塊16的深度應(yīng)該與FIFO總大小除以IFO資 料單元大小的值一致。這等于根據(jù)資料單元的xFIFO容量,且與資料封包大小無關(guān)。至于 第一虛擬FIFO模塊15及第二虛擬FIFO模塊16的操作介紹如下。于此實(shí)施例中,xFIFO引擎10是以資料單元的粒度發(fā)出DMA指令給wDMA引擎11 與rDMA引擎12。舉例而言,假設(shè)每一資料單元包含四個(gè)字元,則xFIFO引擎10將會(huì)每隔四 個(gè)字元產(chǎn)生一個(gè)DMA指令,只有在資料封包尾端的部分資料單元除外。在每一個(gè)wDMA指令之前,wDMA引擎11將會(huì)嘗試“寫入”一單元至第一虛擬FIFO 模塊15,假設(shè)第一虛擬FIFO模塊15沒有可供寫入的空間容納該單元,此一寫入動(dòng)作即會(huì)停 止。一旦上述寫入動(dòng)作結(jié)束,wDMA引擎11將會(huì)進(jìn)行目前資料單元的實(shí)際傳輸動(dòng)作。既然 此實(shí)施例所采用的是虛擬FIFO模塊,因此,上述寫入動(dòng)作僅會(huì)更新虛擬FIFO的狀態(tài),并不 會(huì)有實(shí)際的資料被寫入至第一虛擬FIFO模塊15。在wDMA指令結(jié)束后,wDMA引擎11將會(huì) 寫入一單元至第二虛擬FIFO模塊16以同樣更新第二虛擬FIFO模塊16的狀態(tài)。類似地,在每一個(gè)rDMA指令之前,rDMA引擎12將會(huì)嘗試從第二虛擬FIFO模塊 16 (并非從第一虛擬FIFO模塊15) “讀取” 一資料單元,假設(shè)第二虛擬FIFO模塊16沒有 任何資料單元可供讀取,此一讀取動(dòng)作即會(huì)停止。一旦上述讀取動(dòng)作結(jié)束,rDMA引擎12將 會(huì)進(jìn)行目前資料單元的實(shí)際傳輸動(dòng)作。既然此實(shí)施例所采用的是虛擬FIFO模塊,因此,上 述讀取動(dòng)作僅會(huì)更新虛擬FIFO的狀態(tài),并不會(huì)有實(shí)際的資料從第二虛擬FIFO模塊16被讀 取。在rDMA指令結(jié)束后,rDMA引擎12將會(huì)自第一虛擬FIFO模塊15讀取一單元以同樣更 新第一虛擬FIFO模塊15的狀態(tài)。也就是說,就wDMA引擎11或rDMA引擎12的其一而言,第一虛擬FIFO模塊15及 第二虛擬FIFO模塊16之中的一個(gè)虛擬FIFO模塊被用來在傳輸資料單元之前進(jìn)行“保留” 的動(dòng)作,另一個(gè)虛擬FIFO模塊則被用來在傳輸資料單元之后進(jìn)行“遞交”的動(dòng)作。從rDMA 引擎12的觀點(diǎn)來看,只有當(dāng)先前寫入操作已結(jié)束并遞交至第二虛擬FIFO模塊16后,讀取 操作才會(huì)開始。結(jié)果,rDMA引擎12應(yīng)該在從xFIFO引擎10讀取資料單元之前先檢查第二 虛擬FIFO模塊16,而非檢查第一虛擬FIFO模塊15。
至于從wDMA引擎11的觀點(diǎn)來看,正好與上述rDMA引擎12的觀點(diǎn)所看到的情況 相反。xFIFO引擎10將會(huì)發(fā)出正確的DMA指令去指示wDMA引擎11及rDMA引擎12藉由 DMA指令中的位元場相關(guān)的旗號執(zhí)行必要的虛擬FIFO操作。換句話說,虛擬FIFO與DMA引 擎之間的交互作用被完全遮蔽于軟體或外部主要FIFO裝置。xFIFO引擎10的一種典型的使用方式是作為兩個(gè)嵌入式中央處理單元(第一中央 處理單元2與第二中央處理單元3)之間的訊息隊(duì)列(messagequeue)。然而,xFIFO引擎10 亦可用以提供兩硬件模塊之間的非常深的FIFO隊(duì)列。經(jīng)由xFIFO引擎10遞送的實(shí)際信息 對于xFIFO硬件而言并不重要。反而,第一中央處理單元2與第二中央處理單元3所執(zhí)行 的軟體應(yīng)該會(huì)藉由其他方式在尺寸大小及資料封包的意義上彼此溝通,例如,透過預(yù)先定 義的協(xié)定或透過前置(pr印ended)于每一封包的封包字頭(packet header)等方式。于第一中央處理單元2與第二中央處理單元3之間遞送的實(shí)際資料可能是由軟體 本身動(dòng)態(tài)產(chǎn)生,抑或可能已儲(chǔ)存于記憶體(例如設(shè)置于晶片上的SRAM或設(shè)置于晶片外的 DRAM)的一單獨(dú)片段中,還是上述兩者的混合。為了維持處理器之間資料的先進(jìn)先出的本 性,xFIFO引擎10必須能夠動(dòng)態(tài)地自中央處理單元帶資料進(jìn)入,如同資料已經(jīng)在記憶體內(nèi) 一樣,并且以下述的無縫方式加以組合。首先,定義一特殊注冊連接埠cmd。被寫入注冊連接埠cmd的資料應(yīng)該具有dmaCmd 的型式。無論在任何時(shí)間,應(yīng)該只有一個(gè)中央處理單元(制造者)控制xFIFO引擎10。假 設(shè)是第一中央處理單元2控制xFIFO引擎10,第一中央處理單元2借著寫入至封包注冊連 接埠或注冊埠cmd驅(qū)動(dòng)xFIFO操作。透過封包注冊連接埠或注冊埠cmd而來的參數(shù)將會(huì)被 收集至單一的指令隊(duì)列中。xFIFO引擎10需依序處理在指令隊(duì)列中的該些指令。假設(shè)指令 是透過封包注冊連接埠而來,則xFIFO引擎10將會(huì)產(chǎn)生相對應(yīng)的wDMA指令或rDMA指令, 如同前述討論的情形。假設(shè)指令是透過注冊埠cmd而來,則xFIFO引擎10僅會(huì)簡單地轉(zhuǎn)送 DMA指令至rDMA引擎12,rDMA引擎12將會(huì)自動(dòng)地自緩沖器取得資料。值得注意的是,F(xiàn)IFO資料控制值需要被更新以反映dmaCmd資料的大小。當(dāng)xFIFO 引擎10轉(zhuǎn)送DMA指令至rDMA引擎12時(shí),資料控制值應(yīng)該增加DMA指令中所指示的資料大 小。當(dāng)扮演消費(fèi)者的中央處理單元(第二中央處理單元3)自rdata連接埠讀取資料時(shí),資 料控制值將減至正常值。對任何xFIFO所接收的dmaCmd資料而言,虛擬FIFO操作都應(yīng)跳 過不進(jìn)行。xFIFO引擎10應(yīng)該先將接收到的dmaCmd資料中特定的任何旗號操作均加以清 除,再把dmaCmd資料轉(zhuǎn)送至rDMA引擎12。 接著,將就xFIFO存取及錯(cuò)誤處理進(jìn)行說明。于此實(shí)施例中,F(xiàn)IFO制造者及消費(fèi)者 可以是基于軟體或硬件。若軟體欲寫入至xFIFO或自xFIFO讀取,應(yīng)使用特殊的注冊wdata 及rdata。存取這兩個(gè)注冊wdata及rdata是不會(huì)被阻擋的(non-blocking)。當(dāng)軟體寫入 至注冊wdata時(shí),若FIFO的空間已滿,則寫入資料將會(huì)被棄置,在特殊錯(cuò)誤注冊中代表溢出 的位元將會(huì)被設(shè)定。類似地,當(dāng)軟體自注冊rdata讀取時(shí),若FIFO是空的,亦即沒有任何資 料可讀取,則零將會(huì)回到中央處理單元,并且在錯(cuò)誤注冊中代表不足的位元將會(huì)被設(shè)定。為 了避免上述溢出或不足的情事發(fā)生,在存取注冊wdata/rdata之前,軟體應(yīng)該先周期性地 檢查在特殊狀態(tài)注冊中的資料控制值。 存取注冊wdata/rdata不會(huì)被錯(cuò)誤報(bào)告阻擋的原因在于當(dāng)采用一分享的注冊 時(shí),阻擋操作將會(huì)導(dǎo)致系統(tǒng)鎖死的情事發(fā)生,既然匯流排已被占據(jù),需避免其他部分存取注
8冊以清除此一錯(cuò)誤狀況。在另一方面,對硬件存取讀取/寫入資料連接埠而言,硬件操作將 會(huì)如同一般的注冊FIFO存取是會(huì)阻擋的(blocking)。值得注意的是,非阻擋操作僅對于實(shí)際FIFO狀態(tài)有意義,對于xFIFO中的區(qū)域?qū)?入收集緩沖器或讀取預(yù)取緩沖器而言,并不相關(guān)。若xFIFO的狀態(tài)為未滿(non-full),但區(qū) 域?qū)懭胧占彌_器由于DRAM交通回壓而導(dǎo)致已滿,則寫入操作將會(huì)暫時(shí)停頓直至區(qū)域?qū)?入收集緩沖器被釋放成未滿為止。類似地,若xFIFO的狀態(tài)為非空(non-empty),但區(qū)域讀 取預(yù)取緩沖器由于DRAM存取延遲而導(dǎo)致呈現(xiàn)空的狀態(tài),則讀取操作將會(huì)暫時(shí)停頓直至區(qū) 域讀取預(yù)取緩沖器自外部記憶體取得資料而變成非空狀態(tài)為止。為了避免導(dǎo)致系統(tǒng)鎖死狀 態(tài)發(fā)生,注冊匯流排與資料匯流排必須彼此分離,例如可透過系統(tǒng)中的交錯(cuò)桿連結(jié)構(gòu)造將 兩者加以分離。當(dāng)xFIFO引擎10不作用時(shí),若FIFO制造者欲進(jìn)行寫入,則寫入動(dòng)作將會(huì)以沒有資 料寫入FIFO而完成。并且,溢出錯(cuò)誤旗幟(overflow error flag)將會(huì)被設(shè)定。類似地, 當(dāng)xFIFO引擎10不作用時(shí),若FIFO消費(fèi)者欲進(jìn)行讀取,則讀取動(dòng)作將會(huì)以零為返回資料而 完成,并且不足錯(cuò)誤旗幟(underflowerror flag)將會(huì)被設(shè)定。在任何xFIFO操作之前,需先由軟體進(jìn)行xFIFO設(shè)置的設(shè)定。xFIFO引擎10可透過 特殊控制注冊控制成正常運(yùn)作/不作用及已清除等狀態(tài)。xFIFO引擎10透過狀態(tài)注冊提供 下列FIFO狀態(tài)已滿、已清空及資料計(jì)數(shù)。xFIFO引擎10亦在狀態(tài)注冊中維持忙碌(busy) 或閑置(idle)狀態(tài)。忙碌或閑置狀態(tài)的意義應(yīng)與正常運(yùn)作/不作用及已清除等狀態(tài)一起 討論。當(dāng)xFIFO引擎10被啟動(dòng)而處于正常運(yùn)作狀態(tài)下,在封包被接收之前,xFIFO引擎10 將會(huì)處于閑置狀態(tài)。一旦接收到封包指令,xFIFO引擎10將會(huì)進(jìn)入忙碌模式,持續(xù)處理封 包直至傳輸結(jié)束為止,接著,xFIFO引擎10又會(huì)回到閑置狀態(tài)。當(dāng)xFIFO引擎10不作用時(shí),狀態(tài)機(jī)器將會(huì)進(jìn)入特殊的清理模式,若有任何未決的 匯流排處理程序均會(huì)被結(jié)束。接著,xFIFO引擎10將其狀態(tài)改回閑置,以指示xFIFO狀態(tài) 機(jī)器停止運(yùn)作,無論是否有任何未決的封包指令。在任何時(shí)間下,可重新啟動(dòng)xFIFO以使得 狀態(tài)機(jī)器進(jìn)入自由執(zhí)行模式,或軟體可寫入一清除位元,藉以清除兩個(gè)虛擬FIFO、寫入緩沖 器及預(yù)取緩存器。值得注意的是,只有當(dāng)xFIFO引擎10不作用或處于閑置狀態(tài)時(shí),F(xiàn)IFO指 令才能被更新。根據(jù)本發(fā)明的第二具體實(shí)施例為一種多執(zhí)行緒外部記憶體FIFO(MT-xFIFO)裝 置。MT-xFIFO裝置的功能是由三個(gè)不同的硬件模塊MT-xFIF0引擎、DMA指令/資料隊(duì)列 及多執(zhí)行緒DMA引擎所提供。此僅為一設(shè)計(jì)模版,可以依照實(shí)際執(zhí)行緒的數(shù)目進(jìn)行設(shè)置。 于MT-xFIFO裝置中,每一執(zhí)行緒均可向后相容至單一執(zhí)行緒xFIFO裝置,并且每一執(zhí)行緒 可獨(dú)立于其他執(zhí)行緒進(jìn)行其工作。請參照圖2,圖2是繪示MT-xFIFO裝置的功能方塊圖。如圖2所示,MT-xFIFO裝置6是通過匯流排介面單元(Bus Interface Unit,BIU)7 耦接至第一中央處理單元8、第二中央處理單元9及第三中央處理單元90。實(shí)際上,中央處 理單元的數(shù)目并不以此例為限。MT-xFIFO裝置6包含MT-xFIFO引擎60、內(nèi)容SRAM 61、封 包指令隊(duì)列(Multi-Queue) 62、DMA指令/資料隊(duì)列(Multi-Queue) 63、多執(zhí)行緒DMA模塊 (dmaX)64、寫入資料(wdat)匯流排Bi、指令(cmd)匯流排B2、讀取資料(rdat)匯流排B3、 封包指令(packet cmd)匯流排B4、DMA寫入指令(dma wcmd)匯流排B5及DMA讀取指令 (dma rcmd)匯流排B6。其中,封包指令隊(duì)列62包含隊(duì)列62a 62d,并且DMA指令/資料隊(duì)列63包含隊(duì)列63a 63p。MT-xFIFO引擎60是耦接至封包指令匯流排B4、DMA寫入指 令匯流排B5、DMA讀取指令匯流排B6及內(nèi)容SRAM 61。于此實(shí)施例中,寫入資料匯流排Bl分別傳送資料訊號Wdat O.ffdat Uffdat 2及 Wdat 3至DMA指令/資料隊(duì)列63的隊(duì)列63a、63e、63i及63m。指令匯流排B2分別傳送 BIU指令至隊(duì)列62a、62b、62c及62d。讀取資料匯流排B3自DMA指令/資料隊(duì)列63的隊(duì) 列63d、63h、631及63p讀取資料訊號Rdat 0、Rdat URdat 2及Rdat 3。封包指令匯流排 B4分別自隊(duì)列62a、62b、62c及62d接收隊(duì)列指令并傳送封包指令至MT-xFIFO引擎60。DMA 寫入指令匯流排B5自MT-xFIFO引擎60接收FIFO寫入訊號并分別傳送寫入指令Wcmd 0、 ffcmd Uffcmd 2及Wcmd 3至DMA指令/資料隊(duì)列63的隊(duì)列63b、63f、63 j及63n。DMA讀取 指令匯流排B6自MT-xFIFO引擎60接收FIFO讀取訊號并分別傳送讀取指令Rcmd 0、Rcmd URcmd 2及Rcmd 3至DMA指令/資料隊(duì)列63的隊(duì)列63c、63g、63k及63ο。多執(zhí)行緒DMA 模塊64分別傳送讀取復(fù)數(shù)個(gè)資料訊號至隊(duì)列63d、63h、631及63p。多執(zhí)行緒DMA模塊64 可以與一寫入通道或一讀取通道進(jìn)行溝通。MT-xFIFO裝置6的輸入端為匯流排介面單元7的一硬件介面,而MT-xFIFO裝置6 的輸出端則為晶片系統(tǒng)中的資料匯流排。當(dāng)多執(zhí)行緒中的一執(zhí)行緒被啟動(dòng),MT-xFIFO引擎 60即會(huì)一一檢查所有執(zhí)行緒的狀態(tài)。藉由檢查封包指令的狀態(tài)及DMA指令隊(duì)列,MT-xFIFO 引擎60可從主機(jī)對每個(gè)封包指令產(chǎn)生一系列的寫入/讀取DMA指令。當(dāng)MT-xFIFO引擎60 發(fā)出寫入/讀取DMA指令至多執(zhí)行緒DMA模塊64之后,寫入DMA引擎將資料由該些資料隊(duì) 列移動(dòng)至內(nèi)容SRAM 61,并且讀取DMA引擎將資料由內(nèi)容SRAM 61移動(dòng)至該些資料隊(duì)列。同時(shí),主機(jī)可不需MT-xFIFO引擎60的介面操作即可自資料隊(duì)列讀取新資料或?qū)?入新資料至資料隊(duì)列。換句話說,主機(jī)可傳送資料至資料隊(duì)列或自資料隊(duì)列接收資料,并且 MT-xFIFO引擎60可同時(shí)對每一執(zhí)行緒產(chǎn)生讀取/寫入DMA指令。值得注意的是,主機(jī)的 運(yùn)作與MT-xFIFO引擎60的運(yùn)作彼此獨(dú)立互不相關(guān)。因此,主機(jī)之間的溝通可以僅透過直 接發(fā)出封包指令而實(shí)現(xiàn),不必產(chǎn)生一連串的讀取/寫入DMA指令至多執(zhí)行緒DMA模塊64。 MT-xFIFO引擎60可以只是自主機(jī)根據(jù)封包指令發(fā)出讀取/寫入DMA指令。當(dāng)MT-xFIFO裝置6被啟動(dòng)時(shí),MT-xFIFO引擎60將會(huì)一一對于執(zhí)行緒執(zhí)行一些操 作,包含下列步驟(l)MT-xFIF0引擎60檢查目前的執(zhí)行緒是否處于啟動(dòng)狀態(tài)或清除狀態(tài); (2)若封包指令隊(duì)列62中有新的封包指令且DMA指令/資料隊(duì)列63是空的,則MT-xFIFO 引擎60會(huì)產(chǎn)生一系列的讀取/寫入DMA指令;(3)若在MT-xFIFO引擎60中有任何未結(jié)束 的封包指令且DMA指令/資料隊(duì)列63是空的,則MT-xFIFO引擎60會(huì)產(chǎn)生一系列的讀取/ 寫入DMA指令;(4)當(dāng)MT-xFIFO引擎60正進(jìn)行執(zhí)行緒切換時(shí),MT-xFIFO引擎60重新將目 前執(zhí)行緒狀態(tài)儲(chǔ)存至內(nèi)容SRAM 61或自內(nèi)容SRAM 61儲(chǔ)存目前執(zhí)行緒狀態(tài)。假設(shè)符合下列情況之一,MT-xFIFO引擎60將會(huì)進(jìn)行執(zhí)行緒的切換(1)目前執(zhí)行 緒并未被啟動(dòng);(2)目前封包指令已完成或在指令隊(duì)列中沒有對應(yīng)該執(zhí)行緒的新的封包指 令;(3)讀取DMA指令隊(duì)列及寫入DMA指令隊(duì)列中均沒有空間。并且,內(nèi)容SRAM 61是作為 儲(chǔ)存媒介,用來儲(chǔ)存執(zhí)行緒運(yùn)作時(shí)所需的必要信息。為了最大化系統(tǒng)設(shè)計(jì)的彈性并且最小化硬件資源的需求,多重隊(duì)列 (Multi-Queue)中的每一隊(duì)列的深度以及MT-xFIFO引擎60中的最大支援執(zhí)行緒的數(shù)目可 透過重新配置MT-xFIFO引擎60、封包指令隊(duì)列62、DMA指令/資料隊(duì)列63、多執(zhí)行緒DMA模塊64而輕易地獲得調(diào)整。因此,實(shí)際上并不需要重新設(shè)計(jì)整個(gè)系統(tǒng)及各模塊即可完成調(diào)
iF. ο相較于先前技術(shù),本發(fā)明的處理器間溝通輔助裝置是采用建構(gòu)于多執(zhí)行緒直接記 憶體存取引擎上的外部記憶體快進(jìn)快出裝置,通過硬件加速的方式使得家用基地臺晶片系 統(tǒng)中的訊息遞送處理器之間溝通效率獲得提升。由于本發(fā)明的外部記憶體快進(jìn)快出裝置所 具有設(shè)置于晶片上的on-chip記憶體已降至最少,故其存取延遲亦可明顯降低。因此,本發(fā) 明的處理器間溝通輔助裝置能夠同時(shí)提供較低的存取延遲,而又能夠在家用基地臺晶片是 統(tǒng)中采用價(jià)格較為低廉的設(shè)置于晶片外的off-chip記憶體,以降低其生產(chǎn)成本,提升其市 場競爭力。此外,本發(fā)明的外部記憶體快進(jìn)快出裝置包含常見的邏輯電路,以確保扮演制造 者的軟體緒以及扮演消費(fèi)者的軟體緒之間的資料一致性,并且還支援可配置的緩沖址與尺 寸大小以及錯(cuò)誤復(fù)原等功能。通過以上較佳具體實(shí)施例的詳述,是希望能更加清楚描述本發(fā)明的特征與精神, 而并非以上述所揭露的較佳具體實(shí)施例來對本發(fā)明的范疇加以限制。相反地,其目的是希 望能涵蓋各種改變及具相等性的安排于本發(fā)明所欲申請的專利范圍的范疇內(nèi)。
權(quán)利要求
一種外部記憶體快進(jìn)快出(xFIFO)裝置,分別耦接至一外部記憶體及一注冊匯流排,該外部記憶體快進(jìn)快出裝置包含一外部記憶體快進(jìn)快出引擎,耦接至該注冊匯流排,用以自該注冊匯流排接收一快進(jìn)快出指令并且產(chǎn)生一寫入直接記憶體存取(DMA)指令及一讀取直接記憶體存取指令;一寫入式直接記憶體存取引擎,耦接至該外部記憶體快進(jìn)快出引擎及該外部記憶體,用以自該外部記憶體快進(jìn)快出引擎接收該寫入直接記憶體存取指令并且將一進(jìn)入的資料轉(zhuǎn)送至該外部記憶體;一讀取式直接記憶體存取引擎,耦接至該外部記憶體快進(jìn)快出引擎及該外部記憶體,用以該外部記憶體快進(jìn)快出引擎接收該讀取直接記憶體存取指令并自該外部記憶體預(yù)取一外進(jìn)外出資料;一第一虛擬快進(jìn)快出模塊,耦接于該寫入式直接記憶體存取引擎與該讀取式直接記憶體存取引擎的間;以及一第二虛擬快進(jìn)快出模塊,耦接于該寫入式直接記憶體存取引擎與該讀取式直接記憶體存取引擎的間;其中該寫入式直接記憶體存取引擎與該讀取式直接記憶體存取引擎是透過該第一虛擬快進(jìn)快出模塊與該第二虛擬快進(jìn)快出模塊達(dá)到彼此同步。
2.如權(quán)利要求1所述的外部記憶體快進(jìn)快出裝置,其中在發(fā)出該寫入直接記憶體存取 指令之前,該寫入式直接記憶體存取引擎對該第一虛擬快進(jìn)快出模塊執(zhí)行一虛擬快進(jìn)快出 寫入操作。
3.如權(quán)利要求2所述的外部記憶體快進(jìn)快出裝置,其中一旦該虛擬快進(jìn)快出寫入操作 結(jié)束,該寫入式直接記憶體存取引擎將該進(jìn)入的資料轉(zhuǎn)送至該外部記憶體。
4.如權(quán)利要求1所述的外部記憶體快進(jìn)快出裝置,其中在該寫入直接記憶體存取指令 結(jié)束后,該寫入式直接記憶體存取引擎對該第二虛擬快進(jìn)快出模塊執(zhí)行一寫入操作以更新 該第二虛擬快進(jìn)快出模塊的狀態(tài)。
5.如權(quán)利要求1所述的外部記憶體快進(jìn)快出裝置,其中在發(fā)出該讀取直接記憶體存取 指令之前,該讀取式直接記憶體存取引擎對該第二虛擬快進(jìn)快出模塊執(zhí)行一虛擬快進(jìn)快出 讀取操作。
6.如權(quán)利要求5所述的外部記憶體快進(jìn)快出裝置,其中一旦該虛擬快進(jìn)快出讀取操作 結(jié)束,該讀取式直接記憶體存取引擎自該外部記憶體預(yù)取該快進(jìn)快出資料。
7.如權(quán)利要求1所述的外部記憶體快進(jìn)快出裝置,其中在該讀取直接記憶體存取指令 結(jié)束后,該讀取式直接記憶體存取引擎對該第一虛擬快進(jìn)快出模塊執(zhí)行一讀取操作以更新 該第一虛擬快進(jìn)快出模塊的狀態(tài)。
8.如權(quán)利要求1所述的外部記憶體快進(jìn)快出裝置,其中該外部記憶體快進(jìn)快出裝置是 一多執(zhí)行緒外部記憶體快進(jìn)快出(MT-xFIFO)裝置,其輸入端為一匯流排介面單元的一硬 件介面且其輸出端為一系統(tǒng)晶片(SOC)匯流排介面。
9.如權(quán)利要求1所述的外部記憶體快進(jìn)快出裝置,進(jìn)一步包含耦接至該外部記憶體快 進(jìn)快出引擎的一內(nèi)容記憶體,其中在該外部記憶體快進(jìn)快出引擎發(fā)出該寫入直接記憶體存 取指令或該讀取直接記憶體存取指令至該寫入式直接記憶體存取引擎或該讀取式直接記 憶體存取引擎之后,該外部記憶體快進(jìn)快出引擎將目前執(zhí)行緒的內(nèi)容信息拷貝至該內(nèi)容記憶體,并且自該內(nèi)容記憶體取得下一執(zhí)行緒的內(nèi)容信息。
10.如權(quán)利要求1所述的外部記憶體快進(jìn)快出裝置,其中該注冊匯流排耦接至少兩處 理器,并且該外部記憶體快進(jìn)快出裝置透過該注冊匯流排增進(jìn)該至少兩處理器之間的溝O
全文摘要
一種外部記憶體快進(jìn)快出(xFIFO)裝置,耦接至外部記憶體及注冊匯流排。xFIFO裝置包含xFIFO引擎、讀取式直接記憶體存取(rDMA)引擎、寫入式直接記憶體存取(wDMA)引擎、第一虛擬FIFO模塊及第二虛擬FIFO模塊。xFIFO裝置自注冊匯流排接收快進(jìn)快出指令并產(chǎn)生讀取DMA指令及寫入DMA指令。wDMA引擎自xFIFO引擎接收寫入DMA指令并傳送進(jìn)來的資料至外部記憶體。rDMA引擎自xFIFO引擎接收讀取DMA指令并自外部記憶體預(yù)取快進(jìn)快出資料。wDMA引擎及rDMA引擎透過第一虛擬FIFO模塊及第二虛擬FIFO模塊達(dá)到彼此同步。
文檔編號G06F13/28GK101930416SQ20101021090
公開日2010年12月29日 申請日期2010年6月21日 優(yōu)先權(quán)日2009年6月21日
發(fā)明者劉榮濤, 張正倫, 楊雅超, 蔡景涵 申請人:先耀無線股份有限公司