專(zhuān)利名稱(chēng):用于多線(xiàn)程處理器的轉(zhuǎn)移指令的制作方法
背景技術(shù):
本發(fā)明涉及轉(zhuǎn)移指令。
在計(jì)算處理中并行處理是同時(shí)發(fā)生事件的信息處理的有效形式。并行處理要求在一臺(tái)計(jì)算機(jī)中同時(shí)執(zhí)行多個(gè)程序。相反,順序處理或串行處理在單個(gè)站沿順序完成所有任務(wù),或者一個(gè)管線(xiàn)(流水線(xiàn))機(jī)器以專(zhuān)用的站完成各任務(wù)。計(jì)算機(jī)程序無(wú)論是以并行處理、管線(xiàn)或順序處理方式執(zhí)行均包括轉(zhuǎn)移,其中一個(gè)指令流以順序方式執(zhí)行,并從一個(gè)指令序列轉(zhuǎn)移到不同的指令序列。附圖概述
圖1是使用基于硬件的多線(xiàn)程處理器的一個(gè)通信系統(tǒng)的方框圖。
圖2是圖1的基于硬件的多線(xiàn)程處理器的詳細(xì)的方框圖。
圖3是在圖1和圖2的基于硬件的多線(xiàn)程處理器中使用的微引擎功能單元的方框圖。
圖4是在圖3的微引擎中管線(xiàn)的方框圖。
圖5A和圖5B是示出與轉(zhuǎn)移型指令有關(guān)的環(huán)境(語(yǔ)境)(context)的示例性格式的方框圖。
圖6是示出通用寄存器地址安排的方框圖。
圖7是用于在基于硬件的多線(xiàn)程處理器中使用的增強(qiáng)帶寬操作的存儲(chǔ)器的方框圖。
圖7A是一個(gè)流程圖,表示在圖7的SDRAM控制器的判優(yōu)(仲裁)策略。
圖7B是一個(gè)時(shí)序圖,示出優(yōu)化SDRAM控制器的優(yōu)點(diǎn)。
圖8是對(duì)于在基于硬件的多線(xiàn)程處理器中使用的受等待時(shí)間限制的操作的存儲(chǔ)器控制器的方框圖。
圖8A是示出優(yōu)化SDRAM控制器的優(yōu)點(diǎn)的時(shí)序圖。
圖9是在圖1的處理器中通信總線(xiàn)接口的方框圖。
描述參考圖1,通信系統(tǒng)10包括一個(gè)并行的、基于硬件的多線(xiàn)程處理器12?;谟布亩嗑€(xiàn)程處理器12連結(jié)到如PCI總線(xiàn)14之類(lèi)的總線(xiàn)、存儲(chǔ)器系統(tǒng)16和第二總線(xiàn)18。對(duì)于能夠分解成并行子任務(wù)或功能的任務(wù),系統(tǒng)10特別有用。具體說(shuō)來(lái),基于硬件的多線(xiàn)程處理器12對(duì)于面向帶寬而非面向等待時(shí)間的任務(wù)是有用的?;谟布亩嗑€(xiàn)程處理器12具有多個(gè)微引擎22,每個(gè)帶有多個(gè)能同時(shí)激活并獨(dú)立對(duì)一個(gè)任務(wù)工作的硬件控制的線(xiàn)程。
基于硬件的多線(xiàn)程處理器12還包括一個(gè)中央處理器20,它幫助加載用于基于硬件的多線(xiàn)程處理器12的其他資源的微碼控制,并完成其他通用計(jì)算機(jī)類(lèi)型的功能,如處理協(xié)議,例外,對(duì)包處理的額外支持,其中微引擎掃描該包以便作如邊界條件那樣的更詳細(xì)的處理。在一個(gè)實(shí)施例中,處理器20是基于Strong Arm(Arm是英國(guó)ARM有限公司的商標(biāo))的結(jié)構(gòu)。通用微處理器20具有操作系統(tǒng)。通過(guò)此操作系統(tǒng),處理器20能調(diào)用功能對(duì)微引擎22a-22f操作。處理器20能使用任何支持的操作系統(tǒng),最好是實(shí)時(shí)操作系統(tǒng)。對(duì)于作為StrongArm結(jié)構(gòu)實(shí)現(xiàn)的核心處理器,可以使用如MicrosoftNTreal-time,VXWorks和□CUS那樣可在因特網(wǎng)上使用的自由軟件操作系統(tǒng)。
基于硬件的多線(xiàn)程處理器12還包括多個(gè)功能微引擎22a-22f。功能微引擎(微引擎)22a-22f中每一個(gè)包含多個(gè)硬件的程序計(jì)數(shù)器和與這些計(jì)數(shù)器相關(guān)的狀態(tài)。實(shí)際上,對(duì)應(yīng)多個(gè)線(xiàn)程組能在每個(gè)微引擎22a-22f上同時(shí)激活,雖然在任何時(shí)刻只有一個(gè)實(shí)際上在操作。
在一個(gè)實(shí)施例中,示出6個(gè)微引擎22a-22f。每個(gè)微引擎具有處理4個(gè)硬件線(xiàn)程的能力。6個(gè)微引擎22a-22f帶著共享資源操作,包括存儲(chǔ)器系統(tǒng)16和總線(xiàn)接口24和28。存儲(chǔ)器系統(tǒng)16包括一個(gè)同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SDRAM)控制器26a和靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)控制器26b。SDRAM存儲(chǔ)器16a和SDRAM控制器26a通常用于處理大量數(shù)據(jù),如處理從網(wǎng)絡(luò)包來(lái)的網(wǎng)絡(luò)有效負(fù)載。SRAM控制器26b和SRAM存儲(chǔ)器16b用在對(duì)低等待時(shí)間,快速訪(fǎng)問(wèn)任務(wù)的網(wǎng)絡(luò)實(shí)施中,如對(duì)核心處理器20的訪(fǎng)問(wèn)查找表,訪(fǎng)問(wèn)存儲(chǔ)器等。
6個(gè)微引擎22a-22g根據(jù)數(shù)據(jù)的特征訪(fǎng)問(wèn)SDRAM 16a或SRAM16b。低等待時(shí)間,低帶寬數(shù)據(jù)存在SRAM并從中取出,而等待時(shí)間不重要的較高帶寬的數(shù)據(jù)存入SDRAM,并從中取出。微引擎22a-22f能執(zhí)行對(duì)SDRAM控制器26a或SRAM控制器16b的存儲(chǔ)器調(diào)用指令。
硬件多線(xiàn)程的優(yōu)點(diǎn)能通過(guò)SRAM或SDRAM存儲(chǔ)器的訪(fǎng)問(wèn)解釋。作為例子,由thread_0(線(xiàn)程_0)從一個(gè)微引擎請(qǐng)求的SRAM訪(fǎng)問(wèn)引起SRAM控制器26b啟動(dòng)對(duì)SRAM存儲(chǔ)器16b的訪(fǎng)問(wèn)。SRAM控制器控制對(duì)SRAM總線(xiàn)的判優(yōu),訪(fǎng)問(wèn)SRAM16b,從SRAM 16b取出數(shù)據(jù),并將數(shù)據(jù)返回到請(qǐng)求的微引擎22a-22b。在SRAM訪(fǎng)問(wèn)過(guò)程中,如果微引擎,如22a,只能操作單個(gè)線(xiàn)程,該微引擎在數(shù)據(jù)從SRAM返回以前休眠。通過(guò)在每個(gè)微引擎22a-22f中應(yīng)用硬件環(huán)境(context)交換,使得其他帶著唯一程序計(jì)數(shù)器的其他環(huán)境能在同一微引擎中執(zhí)行。因此在第一線(xiàn)程,如thread_0,等待讀數(shù)據(jù)返回時(shí),另一線(xiàn)程,如thread_1能工作。在執(zhí)行中thread_1可訪(fǎng)問(wèn)SDRAM存儲(chǔ)器16a。當(dāng)thread_1對(duì)SDRAM單元操作,且thread_0對(duì)SRAM單元操作的同時(shí),一個(gè)新的線(xiàn)程,如thread_2,現(xiàn)在能在微引擎22a中操作。thread_2能操作一定時(shí)間,直到它需要訪(fǎng)問(wèn)存儲(chǔ)器,或完成某些如作出對(duì)總線(xiàn)接口訪(fǎng)問(wèn)那樣另外的長(zhǎng)等待時(shí)間操作。因此,處理器12能同時(shí)具有一個(gè)總線(xiàn)操作、SRAM操作和SDRAM操作,所有均由一個(gè)微引擎22a操作或完成,并且能具有一個(gè)以上線(xiàn)程以在數(shù)據(jù)通道中處理更多的工作。
硬件環(huán)境交換也同步任務(wù)的完成。例如,兩個(gè)線(xiàn)程可以選中同一個(gè)共享資源,如SRAM。這些分別的功能單元的每一個(gè),如FBUS接口28、SRAM控制器26a和SDRAM控制器26b,在它們完成從一個(gè)微引擎來(lái)的請(qǐng)求任務(wù)時(shí),線(xiàn)程環(huán)境回報(bào)一個(gè)標(biāo)志,通知一個(gè)操作的完成。當(dāng)微引擎接收到此標(biāo)志時(shí),該微引擎能確定打開(kāi)哪個(gè)線(xiàn)程。
對(duì)基于硬件的多線(xiàn)程處理器12的一個(gè)應(yīng)用例子是作為網(wǎng)絡(luò)處理器。作為網(wǎng)絡(luò)處理器,基于硬件的多線(xiàn)程處理器12接口到如媒體訪(fǎng)問(wèn)控制設(shè)備那樣網(wǎng)絡(luò)設(shè)備,如10/100 BaseT Octal MAC 13a或Gigabit Ethernet(千兆以太網(wǎng))設(shè)備13b。通常,作為網(wǎng)絡(luò)處理器,基于硬件的多線(xiàn)程處理器12能接口到接收/發(fā)送大量數(shù)據(jù)的通信設(shè)備或接口設(shè)備。在網(wǎng)絡(luò)應(yīng)用中工作的通信系統(tǒng)10能從設(shè)備13a,13b接收多個(gè)網(wǎng)絡(luò)包,并以并行方式處理那些包。用基于硬件的多線(xiàn)程處理器12能分別地處理每個(gè)網(wǎng)絡(luò)包。
使用處理器12的另一個(gè)例子是用于頁(yè)式圖象(postscript)處理器的打印機(jī)引擎作為對(duì)存儲(chǔ)子系統(tǒng),即RAID盤(pán)存儲(chǔ)器的處理器。另一個(gè)使用是匹配引擎。在例如安全行業(yè)中,電子商務(wù)的興起需要使用電子匹配引擎匹配買(mǎi)方和賣(mài)方之間的訂單。這些和其他并行類(lèi)型的任務(wù)能在系統(tǒng)10上完成。
處理器12包括一個(gè)連結(jié)處理器到第2總線(xiàn)18的總線(xiàn)接口28。在一個(gè)實(shí)施例中,總線(xiàn)接口28將處理器12連結(jié)到所謂FBUS18(FIFO總線(xiàn))。FBUS接口28負(fù)責(zé)控制并連結(jié)處理器12到FBUS18。FBUS18是64位寬的FIFO總線(xiàn),用于連結(jié)到媒體訪(fǎng)問(wèn)控制器(MAC)設(shè)備。
處理器12包括一個(gè)第二接口,如PCI總線(xiàn)接口24,它將在PCI14總線(xiàn)上的其他系統(tǒng)部件連接到處理器12。PCI總線(xiàn)接口24提供高速數(shù)據(jù)通道24a到存儲(chǔ)器16,如SDRAM存儲(chǔ)器16a。經(jīng)過(guò)該通道,數(shù)據(jù)能借助直接存儲(chǔ)器訪(fǎng)問(wèn)(DMA)傳輸,從SDRAM16a穿過(guò)PCI總線(xiàn)14快速移動(dòng)?;谟布亩嗑€(xiàn)程處理器12支持圖像傳輸?;谟布亩嗑€(xiàn)程處理器12能使用多個(gè)DMA通道,所以如果DMA傳輸?shù)囊粋€(gè)目標(biāo)忙,另一個(gè)DMA通道能在PCI總線(xiàn)將信息提交到另一個(gè)目標(biāo),以保持高的處理器12的效率。此外,PCI總線(xiàn)接口24支持目標(biāo)操作和主操作。目標(biāo)操作是這樣一種操作,其中在總線(xiàn)14上的從屬設(shè)備通過(guò)讀和寫(xiě)訪(fǎng)問(wèn)SDRAM,而讀和寫(xiě)從屬于目標(biāo)操作。在主要操作中,處理器核心20直接發(fā)送數(shù)據(jù)到PCI接口24或從中接收數(shù)據(jù)。
每個(gè)功能單元連結(jié)一個(gè)或多個(gè)內(nèi)部總線(xiàn)。如下所述,內(nèi)部總線(xiàn)是雙的32位總線(xiàn)(即一個(gè)總線(xiàn)用于讀,一個(gè)總線(xiàn)用于寫(xiě))?;谟布亩嗑€(xiàn)程處理器12,還構(gòu)造成使得處理器12中內(nèi)部總線(xiàn)的帶寬之和超過(guò)連結(jié)到處理器12的外部總線(xiàn)的帶寬。處理器12包括一個(gè)內(nèi)部核心處理器總線(xiàn)32,如ASB總線(xiàn)(先進(jìn)系統(tǒng)總線(xiàn)),它將處理器核心20連結(jié)到存儲(chǔ)控制器26a,26c,并連結(jié)到如下所述的ASB翻譯器30。ASB總線(xiàn)是與Strong Arm處理器核心一起使用的AMBA總線(xiàn)的子集。處理器12還包括一個(gè)專(zhuān)用總線(xiàn),將微引擎單元連結(jié)到SRAM控制器26b、ASB翻譯器30和FBUS接口28。存儲(chǔ)器總線(xiàn)38將存儲(chǔ)控制器26a,26b連接到總線(xiàn)接口24和28以及包括用于自引導(dǎo)等操作的閃存ROM 16c的存儲(chǔ)器系統(tǒng)16。
參考圖2,每個(gè)微引擎22a-22f包括一個(gè)判優(yōu)器,它檢查標(biāo)志以確定操作可用的線(xiàn)程。從任何一個(gè)微引擎22a-22f來(lái)的任何一個(gè)線(xiàn)程能訪(fǎng)問(wèn)SDRAM控制器26a,SRAM控制器26b,或FBUS接口28。存儲(chǔ)控制器26a,26b中每一個(gè)包括多個(gè)隊(duì)列,以存儲(chǔ)未完成的存儲(chǔ)器調(diào)用請(qǐng)求。此隊(duì)列或者保持存儲(chǔ)器調(diào)用的次序,或者安排存儲(chǔ)器調(diào)用以?xún)?yōu)化存儲(chǔ)器帶寬。例如,如果thread_0不依賴(lài)于thread_1或與其沒(méi)有關(guān)系,線(xiàn)程1和0沒(méi)有理由不能不按順序地完成它們對(duì)SRAM單元的存儲(chǔ)器調(diào)用。微引擎22a-22f對(duì)存儲(chǔ)控制器26a和26b發(fā)出存儲(chǔ)器調(diào)用請(qǐng)求。微引擎22a-22f將足夠的存儲(chǔ)器調(diào)用操作充滿(mǎn)存儲(chǔ)器子系統(tǒng)26a和26b,使得存儲(chǔ)器子系統(tǒng)26a和26b成為處理器12操作的瓶頸。
如果存儲(chǔ)器子系統(tǒng)16用本質(zhì)上獨(dú)立的存儲(chǔ)器請(qǐng)求充滿(mǎn),處理器12能夠完成存儲(chǔ)器調(diào)用排序。存儲(chǔ)器調(diào)用排序改善了可得到的存儲(chǔ)器帶寬。如下所述,存儲(chǔ)器調(diào)用排序減少了訪(fǎng)問(wèn)SRAM發(fā)生的停頓時(shí)間或泡沫。隨著對(duì)SRAM的存儲(chǔ)器調(diào)用,將信號(hào)線(xiàn)的電流方向在讀和寫(xiě)之間切換產(chǎn)生一個(gè)泡沫或停頓時(shí)間,等待在SRAM16b與SRAM控制器26b連結(jié)導(dǎo)線(xiàn)上的電流穩(wěn)定下來(lái)。
即,驅(qū)動(dòng)總線(xiàn)電流的驅(qū)動(dòng)器在改變狀態(tài)以前需要穩(wěn)定下來(lái)。重復(fù)的讀周期后面跟一個(gè)寫(xiě)能降低峰值帶寬。存儲(chǔ)器調(diào)用排序允許處理器12組織對(duì)存儲(chǔ)器的調(diào)用,使得一長(zhǎng)串讀能跟一長(zhǎng)串的寫(xiě)。這能用于使在管線(xiàn)中停頓時(shí)間最小,從而更有效地達(dá)到接近最大可用的帶寬。調(diào)用排列幫助維持并行的硬件環(huán)境線(xiàn)程。在SDRAM中,調(diào)用排序允許隱藏從一個(gè)存儲(chǔ)區(qū)別另一個(gè)存儲(chǔ)區(qū)的預(yù)裝載。具體說(shuō)來(lái),如果存儲(chǔ)系統(tǒng)組織成奇數(shù)存儲(chǔ)區(qū)和偶數(shù)存儲(chǔ)區(qū),當(dāng)處理器在奇數(shù)存儲(chǔ)區(qū)上操作的同時(shí),存儲(chǔ)控制器能開(kāi)始預(yù)裝載偶數(shù)存儲(chǔ)器。如果存儲(chǔ)器調(diào)用在奇數(shù)和偶數(shù)存儲(chǔ)區(qū)之間交換,預(yù)裝載是可能的。通過(guò)排列存儲(chǔ)器調(diào)用到對(duì)相反的存儲(chǔ)器的另外的訪(fǎng)問(wèn),處理器12改善了SDRAM的帶寬。此外,也可使用其他的優(yōu)化。例如,將可以合并的操作在存儲(chǔ)器訪(fǎng)問(wèn)前合并的合并優(yōu)化;通過(guò)檢查地址,存儲(chǔ)器的已打開(kāi)的頁(yè)面不再重新打開(kāi)的打開(kāi)頁(yè)面優(yōu)化;如下所述的鏈接;和刷新機(jī)構(gòu)都可以使用。
FBUS接口28支持用于每個(gè)MAC設(shè)備支持的端口的發(fā)送和接收標(biāo)志,以及指示何時(shí)需要服務(wù)的中斷標(biāo)志。FBUS接口28還包括一個(gè)控制器28a,它完成從FBUS18進(jìn)入的包的首部處理。控制器28a提取包的首部并完成在SRAM中的一個(gè)微程序可編程的源/目標(biāo)/協(xié)議的散列查找(用于地址平滑)。如果散列不能成功地解決,該包的首部被送到處理器核心20作另外的處理。FBUS接口28支持下列環(huán)境數(shù)據(jù)事務(wù)FBUS單元 (共享總線(xiàn)SRAM) 到/從微引擎。
FBUS單元 (經(jīng)過(guò)專(zhuān)用總線(xiàn)) 來(lái)自SDRAM單元寫(xiě)。
FBUS單元 (經(jīng)過(guò)Mbus) 讀至SDRAM。
FBUS18是標(biāo)準(zhǔn)的工業(yè)總線(xiàn)并包括一個(gè)數(shù)據(jù)總線(xiàn)(如64位寬)和用于地址和讀/寫(xiě)控制的邊帶控制。FBUS接口28提供使用一系列輸入和輸出FIFO 29a-29b輸入大量數(shù)據(jù)的能力。從FIFO 29a-29b,微引擎22a-22f取出數(shù)據(jù),或命令SDRAM控制器26a將數(shù)據(jù)從一個(gè)接收FIFO送到FBUS接口28,在接收FIFO中數(shù)據(jù)從總線(xiàn)18的設(shè)備來(lái)。借助直接存儲(chǔ)器訪(fǎng)問(wèn),數(shù)據(jù)能經(jīng)過(guò)存儲(chǔ)控制器26a送到SDRAM存儲(chǔ)器16a。類(lèi)似地,微引擎能將數(shù)據(jù)從SDRAM 26a移到接口28,經(jīng)過(guò)FBUS接口28,移出FBUS18。
數(shù)據(jù)功能在各微引擎中分配。到SRAM26a,SDRAM26b和FBUS的聯(lián)絡(luò)是通過(guò)命令請(qǐng)求。命令請(qǐng)求可以是存儲(chǔ)器請(qǐng)求或FBUS總線(xiàn)請(qǐng)求。例如,一個(gè)命令請(qǐng)求可將數(shù)據(jù)從位于微引擎22a中的寄存器移到共享資源,如SDRAM位置,SRAM位置,閃存儲(chǔ)器或某些MAC地址。命令發(fā)送到每個(gè)功能單元及共享資源。但是,共享資源不需要保持?jǐn)?shù)據(jù)的本地緩存。而是,共享資源訪(fǎng)問(wèn)位于微引擎內(nèi)部的分布數(shù)據(jù)。這使得微引擎22a-22f有對(duì)數(shù)據(jù)的當(dāng)?shù)卦L(fǎng)問(wèn),而不是仲裁總線(xiàn)訪(fǎng)問(wèn)和總線(xiàn)風(fēng)險(xiǎn)競(jìng)爭(zhēng)。以這個(gè)特征,有0周期的停頓,等待在微引擎22a-22f內(nèi)部的數(shù)據(jù)。
連結(jié)如存儲(chǔ)控制器26a和26b這類(lèi)共享資源的數(shù)據(jù)總線(xiàn),如ASB總線(xiàn)30、SRAM總線(xiàn)34和SDRAM總線(xiàn)38,具有足夠的帶寬,使得沒(méi)有內(nèi)部瓶頸。因此,為了避免瓶頸,處理器12有帶寬要求,給每個(gè)功能單元提供至少兩倍的內(nèi)部總線(xiàn)的最大帶寬。作為一個(gè)例子,SDRAM能以83MHz運(yùn)行64位寬的總線(xiàn)。SRAM數(shù)據(jù)總線(xiàn)能具有分別的讀和寫(xiě)總線(xiàn),如能是以166MHz運(yùn)行的32位寬讀總線(xiàn)和以1 66MHz運(yùn)行的32位寬寫(xiě)總線(xiàn)。本質(zhì)上,那是以166MHz運(yùn)行的64位,它是SDRAM帶寬的有效的兩倍。
核心處理器20也能訪(fǎng)問(wèn)共享資源。核心處理器20具有通過(guò)總線(xiàn)32對(duì)SDRAM控制器26a、總線(xiàn)接口24和SRAM控制器26b的直接通信。然后,為了訪(fǎng)問(wèn)微引擎22a-22f以及位于任何一個(gè)微引擎22a-22f的傳輸寄存器,核心處理器20經(jīng)過(guò)總線(xiàn)34,借助ASB翻譯器30訪(fǎng)問(wèn)微引擎22a-22f。ASB翻譯器30能物理地駐留在FBUS接口28中,但邏輯上是分開(kāi)的。ASB翻譯器30完成FBUS微引擎?zhèn)鬏敿拇嫫魑恢煤秃诵奶幚砥鞯刂?即ASB總線(xiàn))之間的地址翻譯,所以核心處理器20能訪(fǎng)問(wèn)屬于微引擎22a-22c的寄存器。
雖然微引擎22能使用寄存器組如下所述地交換數(shù)據(jù),還可提供便箋存儲(chǔ)器(暫時(shí)存儲(chǔ)器)27,以允許微引擎將數(shù)據(jù)寫(xiě)到存儲(chǔ)器以外,用于其他微引擎讀取。便箋存儲(chǔ)器27連結(jié)到總線(xiàn)34。
處理器核心20包括一個(gè)實(shí)現(xiàn)以5階段管線(xiàn)在單個(gè)周期完成一個(gè)操作數(shù)或二個(gè)操作數(shù)的單循環(huán)移位的RISC核心50,提供乘法支持和32位滾動(dòng)移位支持。此RISC核心50是標(biāo)準(zhǔn)的Strong Arm結(jié)構(gòu),但為了性能的原因用5階段管線(xiàn)實(shí)現(xiàn)。處理器核心20還包括16千字節(jié)的指令高速緩存器52和8千字節(jié)的數(shù)據(jù)高速緩存器54以及預(yù)取流緩存器56。核心處理器20與存儲(chǔ)寫(xiě)和指令的讀取并行地完成算術(shù)操作。核心處理器20經(jīng)過(guò)ARM確定的ASB總線(xiàn)與其他功能單元接口。ASB總線(xiàn)是32位雙向總線(xiàn)32。
微引擎參考圖3,示出微引擎22a-22f的一個(gè)例子,如22f。微引擎包括一個(gè)控制存儲(chǔ)70,在一個(gè)實(shí)施例中,它包括一個(gè)RAM,這里是1024個(gè)32位字。RAM存儲(chǔ)微程序。微程序可由核心處理器20加載。微引擎22f還包括控制器邏輯72??刂破鬟壿嫲ㄒ粋€(gè)指令解碼器73和程序計(jì)數(shù)器(PC)單元72a-72d。4個(gè)微程序計(jì)數(shù)器72a-72d保持在硬件中。微引擎22f還包括環(huán)境事件切換邏輯74。環(huán)境事件邏輯74從如SRAM26a、SDRAM26b或處理器核心20及控制和狀態(tài)寄存器等那樣的共享資源中的每一個(gè)接收消息(如SEQ_#_EVENT_RESPONSE;FBI_EVENT_RESPONSE;SRAM_EVENT_RESPONSE;SDRAM_EVENT_RESPONSE和ASB_EVENT_RESPONSE)。這些消息提供有關(guān)所請(qǐng)求的功能是否已完成的信息。根據(jù)由線(xiàn)程請(qǐng)求的功能是否已經(jīng)完成并產(chǎn)生完成信號(hào),該線(xiàn)程需要等待該完成信號(hào),且如果該線(xiàn)程能操作,則該線(xiàn)程被放置于可用的線(xiàn)程表(未圖示)。微引擎22f能具有最多例如4個(gè)可用的線(xiàn)程。
除了對(duì)執(zhí)行線(xiàn)程是本地的事件信號(hào)以外,微引擎22使用全局的信令狀態(tài)。一個(gè)執(zhí)行線(xiàn)程能用信令號(hào)狀態(tài)對(duì)所有微引擎22廣播一個(gè)信號(hào)狀態(tài)。接收請(qǐng)求有效信號(hào),在微引擎中的任何和所有線(xiàn)程能根據(jù)這些信令狀態(tài)轉(zhuǎn)移。能使用這些信令狀態(tài)確定一個(gè)資源的可用性或一個(gè)資源是否已準(zhǔn)備好服務(wù)。
環(huán)境事件邏輯74具有對(duì)4個(gè)線(xiàn)程的判優(yōu)。在一個(gè)實(shí)施例中,判優(yōu)是一個(gè)循環(huán)算法機(jī)構(gòu)??梢允褂闷渌夹g(shù),包括優(yōu)先級(jí)排隊(duì)或加權(quán)公平排隊(duì)。微引擎22f還包括一個(gè)執(zhí)行箱(框)(EBOX)數(shù)據(jù)通道76,它包括一個(gè)算術(shù)邏輯單元76a和通用寄存器組76b。算術(shù)邏輯單元76a完成算術(shù)和邏輯功能以及移位功能。寄存器組76b具有相當(dāng)大數(shù)目的通用寄存器。如在圖6中將描述,在本實(shí)施例中第一存儲(chǔ)區(qū)Bank A中有64個(gè)通用寄存器,且在第二存儲(chǔ)區(qū)Bank B中也有64個(gè)。如將描述的,寄存器組分成窗,使得它們可被相對(duì)地和絕對(duì)地編址。
微引擎22f還包括一個(gè)寫(xiě)傳輸寄存器堆棧78和一個(gè)讀傳輸堆棧80。這些寄存器也分窗,使得它們可相對(duì)地和絕對(duì)地編址。寫(xiě)傳輸寄存器堆棧78是寫(xiě)到資源去的數(shù)據(jù)位于的地方。類(lèi)似的,讀寄存器堆棧80是用于從共享資源返回的數(shù)據(jù)。在數(shù)據(jù)到達(dá)之后或同時(shí),從如SRAM控制器26a、SDRAM控制器26b或核芯處理器20那樣各共享資源來(lái)的一個(gè)事件信號(hào)提供到環(huán)境事件判優(yōu)器74,后者將提醒線(xiàn)程,數(shù)據(jù)已可用或已發(fā)出。傳輸寄存器存儲(chǔ)區(qū)78和80通過(guò)數(shù)據(jù)通道連結(jié)到執(zhí)行箱(EBOX)76。在一個(gè)實(shí)施例中,讀傳輸寄存器有64個(gè)寄存器且寫(xiě)傳輸寄存器有64個(gè)寄存器。
參考圖4,微引擎數(shù)據(jù)通道保持5級(jí)微管線(xiàn)82。此微管線(xiàn)包括查找微指令字82a;形成寄存器文件地址82b;從寄存器文件82c讀出操作數(shù);ALU;移位或比較操作82d;將結(jié)果寫(xiě)回到寄存器82e。通過(guò)提供寫(xiě)回?cái)?shù)據(jù)旁路到ALU/移位單元,并通過(guò)假設(shè)寄存器作為寄存器文件實(shí)現(xiàn)(而非RAM),微引擎能完成同時(shí)的寄存器讀和寫(xiě),這完全隱藏了寫(xiě)操作。
SDRAM接口26a將一個(gè)信號(hào)回到請(qǐng)求讀的微引擎,指出在讀請(qǐng)求時(shí)是否發(fā)生奇偶校驗(yàn)錯(cuò)誤。當(dāng)微引擎使用任何返回?cái)?shù)據(jù)時(shí),該引擎的微碼負(fù)責(zé)檢查SDRAM讀的奇偶校驗(yàn)標(biāo)志。在檢查標(biāo)志時(shí),如果它被置位,根據(jù)它轉(zhuǎn)移的動(dòng)作將其清除。只有當(dāng)SDRAM能夠檢查且SDRAM是奇偶校驗(yàn)保護(hù)的時(shí)候才發(fā)送奇偶校驗(yàn)標(biāo)志。微引擎和PZI單元是得知奇偶校驗(yàn)錯(cuò)誤的僅有的請(qǐng)求者。因此,如果處理器核心20或FIFO請(qǐng)求奇偶校驗(yàn)保護(hù),一個(gè)微引擎在請(qǐng)求中預(yù)以協(xié)助。微引擎22a-22f支持條件轉(zhuǎn)移。當(dāng)轉(zhuǎn)移決定是由以前的微控制指令置位的條件碼的結(jié)果時(shí),發(fā)生最壞情況條件轉(zhuǎn)移等待時(shí)間(不包括跳轉(zhuǎn))。等待時(shí)間示于下面的表1| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |-------------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找| n1 | cb | n2 | XX | b1 | b2 | b3 | b4 |寄存器地址生成 | | n1 | cb | XX | XX | b1 | b2 | b3 |寄存器文件查找 | | | n1 | cb | XX | XX | b1 | b2 |ALU/shifter/cc | | | | n1 | cb | XX | XX | b1 |寫(xiě)回| | | m2 | | n1 | cb | XX | XX |其中nx是預(yù)轉(zhuǎn)移微字(n1置位cc’s),cb是條件轉(zhuǎn)移,bx是轉(zhuǎn)移后微字和XX是中止的微字。
如表1所示,在循環(huán)4以前,n1的條件碼被置位,并能作出轉(zhuǎn)移決定(在此情況導(dǎo)致轉(zhuǎn)移路徑在循環(huán)5中查找)。微引擎引起2個(gè)循環(huán)等待時(shí)間的代價(jià),因?yàn)樵谵D(zhuǎn)移路徑開(kāi)始用操作b1充滿(mǎn)管線(xiàn)以前它必須中止管線(xiàn)中的操作n2和n3(緊跟在轉(zhuǎn)移之后的2個(gè)微字)。如果轉(zhuǎn)移未發(fā)生,不中止微字而執(zhí)行正常延續(xù)。微引擎有若干機(jī)構(gòu)來(lái)減少或消除有效的轉(zhuǎn)移等待。
微引擎支持延遲的轉(zhuǎn)移。延遲轉(zhuǎn)移是當(dāng)一個(gè)微引擎在轉(zhuǎn)移有效以前允許在轉(zhuǎn)移后的1或2個(gè)微字存在(即轉(zhuǎn)移的效果在時(shí)間上“延遲”了)。因此,如果在轉(zhuǎn)移微字之后能夠找到有用的工作填補(bǔ)此浪費(fèi)的周期,則轉(zhuǎn)移的等待就能穩(wěn)藏。下面示出一個(gè)1-周期延遲的轉(zhuǎn)移,其中n2允許在cb后,但在b1之前執(zhí)行。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |-------------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找| n1 | cb | n2 | XX | b1 | b2 | b3 | b4 |寄存器地址生成 | | n1 | cb | n2 | XX | b1 | b2 | b3 |寄存器文件查找 | | | n1 | cb | n2 | XX | b1 | b2 |ALU/shifter/cc | | | | n1 | cb | n2 | XX | b1 |寫(xiě)回| | | | | n1 | cb | n2 | XX |在下面示出一個(gè)2-周期延遲的轉(zhuǎn)移,其中n2和n3均允許在發(fā)生到b1的轉(zhuǎn)移前完成。注意,只有當(dāng)條件碼在轉(zhuǎn)移前在微字上置位時(shí),才允許2-周期的傳輸延遲。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |-----------------+----+----+----+----+----+----+----+----+----+微存儲(chǔ)查找 | n1 | cb | n2 | n3 | b1 | b2 | b3 | b4 | b5 |寄存器地址生成 | | n1 | cb | n2 | n3 | b1 | b2 | b3 | b4 |寄存器文件查找 | | | n1 | cb | n2 | n3 | b1 | b2 | b3 |ALU/shifter/cc | | | | n1 | cb | n2 | n3 | b1 | b2 |寫(xiě)回| | | | | n1 | cb | n2 | n3 | b1 |微引擎還支持條件碼計(jì)算。如果以此作出轉(zhuǎn)移決定的條件碼在轉(zhuǎn)移前設(shè)成2個(gè)或更多的微字,則1周期的轉(zhuǎn)移等待能被消除,因?yàn)檗D(zhuǎn)移決定能在1周期以前作出。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |-------------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找 | n1 | n2 | cb | XX | b1 | b2 | b3 | b4 |寄存器地址生成 | | n1 | n2 | cb | XX | b1 | b2 | b3 |寄存器文件查找 | | | n1 | n2 | cb | XX | b1 | b2 |ALU/shifter/cc | | | | n1 | n2 | cb | XX | b1 |寫(xiě)回 | | | | | n1 | n2 | cb | XX |在本例中,n1置位條件碼而n2不置位條件碼。因此,轉(zhuǎn)移決定能在周期4(而非周期5)作出,以消除1個(gè)周期的轉(zhuǎn)移等待。在下面例中,1周期的轉(zhuǎn)移延遲和條件碼的提前設(shè)置結(jié)合起來(lái)完全隱藏了轉(zhuǎn)移等待。
在1-周期等待轉(zhuǎn)移前條件碼(cc)設(shè)置2周期| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |-----------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找 | n1 | n2 | cb | n3 | b1 | b2 | b3 | b4 |寄存器地址生成 | | n1 | n2 | cb | n3 | b1 | b2 | b3 |寄存器文件查找 | | | n1 | n2 | cb | n3 | b1 | b2 |ALU/shifter/cc| | | | n1 | n2 | cb | n3 | b1 |寫(xiě)回 | | | | | n1 | n2 | cb | n3 |在條件碼不能提前設(shè)置的情況(即它們?cè)谵D(zhuǎn)移前的微字中設(shè)置),微引擎支持轉(zhuǎn)移推測(cè),它試圖減少1個(gè)周期余下的暴露的轉(zhuǎn)移等待。通過(guò)“推測(cè)”轉(zhuǎn)移路徑或順序執(zhí)行路徑,微定序器在它確定知道哪個(gè)路徑要執(zhí)行前一個(gè)周期預(yù)取推測(cè)的路徑。如果推測(cè)正確,如下所述消除了一個(gè)周期的轉(zhuǎn)移等待。
推測(cè)轉(zhuǎn)移發(fā)生/轉(zhuǎn)移發(fā)生| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |---------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找| n1 | cb | n1 | b1 | b2 | b3 | b4 |b5 |寄存器地址生成 | | n1 | cb | XX | b1 | b2 | b3 | b4 |寄存器文件查找 | | | n1 | cb | XX | b1 | b2 | b3 |ALU/shifter/cc | | | | n1 | cb | XX | b1 | b2 |寫(xiě)回| | | | | n1 | cb | XX | b1 |如果推測(cè)轉(zhuǎn)移發(fā)生的微碼不正確,微引擎仍然只浪費(fèi)1個(gè)周期推測(cè)轉(zhuǎn)移發(fā)生/轉(zhuǎn)移未發(fā)生
| 1 | 2 | 3| 4 | 5 | 6 | 7 | 8 |------------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找 | n1 | cb | n1 | XX | n2 | n3 | n4 | n5 |寄存器地址生成 | | n1 | cb | n1 | XX | n2 | n3 | n4 |寄存器文件查找 | | | n1 | cb | n1 | XX | n2 | n3 |ALU/shifter/cc| | | | n1 | cb | n1| XX | n2 |寫(xiě)回 | | | | | n1 | cb | n1 | XX |但是當(dāng)微碼推測(cè)轉(zhuǎn)移未發(fā)生,等待的懲罰被不同地分配。
對(duì)推測(cè)轉(zhuǎn)移未發(fā)生/轉(zhuǎn)移未發(fā)生。如下所示沒(méi)有浪費(fèi)的周期。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |----------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找| n1 | cb | n1 | n2 | n3 | n4 | n5 | n6 |寄存器地址生成 | | n1 | cb | n1 | n2 | n3 | n4 | n5|寄存器文件查找 | | | n1 | cb | n1 | n2 | n1 | b4 |ALU/shifter/cc | | | | n1 | cb | n1 | n2 | n3 |寫(xiě)回| | | | | n1 | cb | n1 | n2 |但是對(duì)于推測(cè)轉(zhuǎn)移未發(fā)生/轉(zhuǎn)移發(fā)生的情況,有2個(gè)浪費(fèi)的周期。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |-------------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找 | n1 | cb | n1 | XX | b1 | b2 | b3 | b4 |寄存器地址生成 | | n1 | cb | XX | XX | b1 | b2 | b3 |寄存器文件查找 | | | n1 | cb | XX | XX | b1 | b2 |ALU/shifter/cc | | | | n1 | cb | XX | XX | b1 |寫(xiě)回 | | | | | n1 | cb | XX | XX |微引擎能將轉(zhuǎn)移推測(cè)與1-周期的轉(zhuǎn)移延遲相結(jié)合來(lái)進(jìn)一步改善結(jié)果。對(duì)于推測(cè)產(chǎn)生帶1-周期延遲轉(zhuǎn)移的轉(zhuǎn)移/轉(zhuǎn)移發(fā)生是| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |------------------+----+----+----+----+----+----+----+----+微存儲(chǔ)查找 | n1 | cb | n2 | b1 | b2 | b3 | b4 | b5 |寄存器地址生成| | n1 | cb | n2 | b1 | b2 | b3 | b4 |寄存器文件查找| | | n1 | cb | n2 | b1 | b2 | b3 |ALU/shifter/cc | | | | n1 | cb | n2 | b1 | b2 |寫(xiě)回 | | | | | n1 | cb | n2 | b1 |
在上面情況,由于執(zhí)行n2,以及由于正確地推測(cè)轉(zhuǎn)移的方向,2周期的轉(zhuǎn)移等待被隱藏。如果微碼推測(cè)不正確,如下所示1個(gè)周期的轉(zhuǎn)移等待仍然暴露。
推測(cè)帶1-周期延遲的轉(zhuǎn)移發(fā)生轉(zhuǎn)移/轉(zhuǎn)移未發(fā)生| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |----------------+----+----+----+----+----+----+----+----+----+微存儲(chǔ)查找| n1 | cb | n2 | XX | n3 | n4 | n5 | n6 | n7 |寄存器地址生成 | | n1 | cb | n2 | XX | n3 | n4 | n5 | n6 |寄存器文件查找 | | | n1 | cb | n2 | XX | n3 | n4 | n5 |ALU/shifter/cc | | | | n1 | cb | n2 | XX | n3 | n4 |寫(xiě)回 | | | | | n1 | cb | n2 | XX | n3 |如果微碼正確地推測(cè)轉(zhuǎn)移未發(fā)生,則管線(xiàn)在正常未受擾動(dòng)的情況下順序流動(dòng)。如果微碼不正確地推測(cè)轉(zhuǎn)移未發(fā)生,如下所示微引擎又暴露了1個(gè)周期的沒(méi)有結(jié)果的執(zhí)行推測(cè)轉(zhuǎn)移未發(fā)生/轉(zhuǎn)移發(fā)生|1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |----------------+----+----+----+----+----+----+----+----+----+微存儲(chǔ)查找| n1 | cb | n2 | XX | b1 | b2 | b3 | b4 | b5 |寄存器地址生成 | | n1 | cb | n2 | XX | b1 | b2 | b3 | b4 |寄存器文件查找 | | | n1 | cb | n2 | XX | b1 | b2 | b3 |ALU/shifter/cc | | | | n1 | cb | n2 | XX | b1 | b2 |寫(xiě)回 | | | | | n1 | cb | n2 | XX | b1 |這里,nx是預(yù)轉(zhuǎn)移微字(n1設(shè)置cc)cb是條件轉(zhuǎn)移bx是轉(zhuǎn)移后微字xx是丟棄的微字在跳轉(zhuǎn)指令的情況,引起3個(gè)額外的等待周期,因?yàn)樘D(zhuǎn)在ALU階段的周期結(jié)束以前,轉(zhuǎn)移地址是未知的。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |----------------+----+----+----+----+----+----+----+----+----+微存儲(chǔ)查找| n1 | jp | XX | XX | XX | j1 | j2 | j3 | j4 |寄存器地址生成 | | n1 | jp | XX | XX | XX | j1 | j2 | j3 |寄存器文件查找 | | | n1 | jp | XX | XX | XX| j1 | j2 |ALU/shifter/cc | | | | n1 | jp | XX | XX | XX | j1 |寫(xiě)回 | | | | | n1 | jp | XX | XX | XX |微引擎支持包括邏輯和算術(shù)操作的各種標(biāo)準(zhǔn)類(lèi)型的ALU指令,它們對(duì)一個(gè)或兩個(gè)操作數(shù)完成ALU操作并將結(jié)果放入目標(biāo)寄存器。根據(jù)操作的結(jié)果,ALU更新所有的ALU條件碼。在環(huán)境更換期間條件碼的值丟失。
參考圖5A,示出環(huán)境轉(zhuǎn)移指令BR=CTX,BR?。紺TX。環(huán)境轉(zhuǎn)移指令使得如微引擎22f那樣的處理器根據(jù)當(dāng)前的執(zhí)行環(huán)境是否為指定環(huán)境號(hào)而轉(zhuǎn)移到指定標(biāo)號(hào)的指令。如圖5A所示,環(huán)境轉(zhuǎn)移指令在等于“0”或“9”時(shí)從轉(zhuǎn)移的屏蔽字段確定。環(huán)境轉(zhuǎn)移指令可以具有下列格式br=ctx[ctx,label#],optional_token(可選標(biāo)記)br?。絚tx[ctx,label#],optional_token字段label#是對(duì)應(yīng)于指令地址的符號(hào)標(biāo)號(hào)。字段ctx是環(huán)境號(hào)。在一個(gè)實(shí)施例中,有效的ctx值是0,1,2或3。環(huán)境轉(zhuǎn)移指令可具有optional_token。可選標(biāo)記“defer one”引起微引擎在完成轉(zhuǎn)移操作前執(zhí)行該指令后的一條指令。
如果環(huán)境(ctx)是指定的數(shù),指令br=ctx轉(zhuǎn)移,如果環(huán)境不是指定的數(shù),指令br=ctx!轉(zhuǎn)移。
參考圖5B,環(huán)境交換指令是引起選擇不同的環(huán)境(及相關(guān)PC)的轉(zhuǎn)移的特殊形式。環(huán)境切換或交換也引起某些轉(zhuǎn)移等待??紤]下面的環(huán)境切換| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |---------------+----+----+----+----+----+----+----+----+----+微存儲(chǔ)查找 | o1 | ca | br | n1 | n2 | n3 | n4 | n5 | n6 |寄存器地址生成 | | o1 | ca | XX | n1 | n2 | n3 | n4 | n5 |寄存器文件查找| | | o1 | ca | XX | n1 | n2 | n3 | n4 |ALU/shifter/cc | | | | o1 | ca | XX | n1 | n2 | n3 |寫(xiě)回 | | | | | o1 | ca | XX | n1 | n2 |其中ox是老的環(huán)境流
br是在老的環(huán)境的轉(zhuǎn)移微字ca是環(huán)境重判優(yōu)(引起環(huán)境切換)nx是新的環(huán)境流XX是丟棄的微字在一個(gè)環(huán)境切換中丟棄“br”微字以避免由于保存正確的老的環(huán)境PC引起的控制和時(shí)序的復(fù)雜性。
對(duì)轉(zhuǎn)移前在微字上設(shè)置的ALU條件碼操作的條件轉(zhuǎn)移可選擇0,l或2周期的轉(zhuǎn)移延遲模式。在所操作的條件轉(zhuǎn)移可選擇0或1-周期轉(zhuǎn)移延遲方式之前,條件碼設(shè)置2個(gè)或更多的微字。所有其他轉(zhuǎn)移(包括環(huán)境重判優(yōu))能選擇0或1-周期轉(zhuǎn)移延遲方式??梢栽O(shè)計(jì)那樣的結(jié)構(gòu),使得在以前的轉(zhuǎn)移、跳轉(zhuǎn)或環(huán)境判優(yōu)微字的轉(zhuǎn)移延遲窗中的環(huán)境判優(yōu)微字成為一個(gè)無(wú)效操作。即在某些實(shí)施例中,在轉(zhuǎn)移過(guò)渡期間不允許發(fā)生環(huán)境交替,因?yàn)槿缟咸岬?,保存老的環(huán)境程序計(jì)數(shù)器(PC)可能非常復(fù)雜。還可以設(shè)計(jì)那樣的結(jié)構(gòu),使得在以前的轉(zhuǎn)移、跳轉(zhuǎn)或環(huán)境微字的轉(zhuǎn)移延遲窗中的轉(zhuǎn)移無(wú)效,以避免復(fù)雜和可能的非預(yù)料的轉(zhuǎn)移行為。
環(huán)境交換指令CTX_ARB將特定的微引擎中當(dāng)前運(yùn)行的環(huán)境交換到存儲(chǔ)器中,讓另外的環(huán)境在那個(gè)微引擎中運(yùn)行。當(dāng)指定的信號(hào)被激活時(shí),環(huán)境交換指令CTX_ARB再喚醒交換出去的環(huán)境。環(huán)境交換指令的格式是ctx_arb[parameter],optional_token“parameter(參數(shù))字段可具有若干值之一。如果該參數(shù)指定為“sramSwap”,環(huán)境交換指令將當(dāng)前的環(huán)境交換出去,并當(dāng)接收到線(xiàn)程的SRAM信號(hào)時(shí)喚醒它。該參數(shù)也能指定為“FBI”,并交換出當(dāng)前的環(huán)境,而當(dāng)接收到線(xiàn)程的FBI信號(hào)時(shí)喚醒它。FBI信號(hào)指出,F(xiàn)BI CSR、Scratchpad(便箋存儲(chǔ)器)、TFIFO或RFIFO操作已完成。
參數(shù)也能規(guī)定成“seq_numl_change/seq_num2_change”,它交換出當(dāng)前的環(huán)境并當(dāng)順序號(hào)的值改變時(shí)喚醒它。該參數(shù)能指定成“inter_thread”,它交換出當(dāng)前的環(huán)境并當(dāng)收到線(xiàn)程的線(xiàn)程內(nèi)信號(hào)時(shí)喚醒它;也可指定為“Voluntarg”,在其他線(xiàn)程準(zhǔn)備運(yùn)行時(shí)交換出當(dāng)前的環(huán)境,否則不交換出環(huán)境。如果線(xiàn)程被交換出,使能夠自動(dòng)地在某個(gè)后續(xù)的環(huán)境判優(yōu)點(diǎn)重使能運(yùn)行。參數(shù)也能是“anto_push”,它交換出當(dāng)前的環(huán)境并當(dāng)SRAM傳輸讀寄存器數(shù)據(jù)自動(dòng)地被FBUS接口壓入時(shí)喚醒它;參數(shù)或者是“Start_receive”,它交換出當(dāng)前的環(huán)境并當(dāng)在接收FIFO中的新的包數(shù)據(jù)可用于此線(xiàn)程處理時(shí)喚醒它。
該參數(shù)也能是“kill”,它防止當(dāng)前的環(huán)境或線(xiàn)程在適當(dāng)?shù)膶?duì)該線(xiàn)程的使能位在CTX_ENABLES寄存器中置位以前再次執(zhí)行;參數(shù)或者是“pci”,它交換出當(dāng)前的環(huán)境,并當(dāng)PCI單位為DMA傳輸已經(jīng)完成的信號(hào)時(shí)喚醒它。
環(huán)境交換指令CTX_ARB能具有下述optional_token,defer one,它規(guī)定在此環(huán)境被交換出以前,此調(diào)用后將執(zhí)行一條指令。
每個(gè)微引擎22a-22f支持4個(gè)環(huán)境的多線(xiàn)程執(zhí)行。對(duì)此的一個(gè)理由是允許一個(gè)線(xiàn)程緊跟在另一個(gè)線(xiàn)程發(fā)生存儲(chǔ)器調(diào)用,并在做其他工作前等待調(diào)用完成之后開(kāi)始執(zhí)行。此行為對(duì)維持微引擎的有效硬件執(zhí)行是重要的,因?yàn)榇鎯?chǔ)器的等待是較大的。換言之,如果只支持單線(xiàn)程執(zhí)行,微引擎將空閑很大數(shù)目的周期等待調(diào)用返回存儲(chǔ)器,因而減少了整個(gè)的計(jì)算量。多線(xiàn)程執(zhí)行允許借助對(duì)若干線(xiàn)程完成有用的獨(dú)立工作而隱藏了存儲(chǔ)器等待。提供兩個(gè)同步機(jī)構(gòu),以允許一個(gè)線(xiàn)程發(fā)出SRAM或SDRAM調(diào)用,并隨后同步到調(diào)用完成的時(shí)間點(diǎn)。
一個(gè)機(jī)構(gòu)是即時(shí)同步(Immediate Synchronization)。在即時(shí)同步中,微引擎發(fā)出調(diào)用并立即交換出環(huán)境。當(dāng)對(duì)應(yīng)的調(diào)用完成時(shí)通知該環(huán)境。一旦通知到了,當(dāng)發(fā)生環(huán)境交換事件且轉(zhuǎn)向運(yùn)行時(shí),該環(huán)境交換回來(lái)以備執(zhí)行。因此,從單個(gè)環(huán)境的指令流的觀(guān)點(diǎn)看,在發(fā)出存儲(chǔ)器調(diào)用以后的微字在調(diào)用完成以前未予以執(zhí)行。
第二個(gè)機(jī)構(gòu)是延遲同步(Delayed Synchronization)。在延時(shí)同步中,微引擎發(fā)出調(diào)用,然后繼續(xù)執(zhí)行某些其他與該調(diào)用無(wú)關(guān)的有用工作。過(guò)了若干時(shí)間,必須將線(xiàn)程執(zhí)行流在另外的工作完成前同步到發(fā)出調(diào)用的完成。在此時(shí),同步微字被執(zhí)行,它或者交換出當(dāng)前的線(xiàn)程,并過(guò)若干時(shí)間當(dāng)調(diào)用完成時(shí)再將其交換回來(lái),或者繼續(xù)執(zhí)行當(dāng)前線(xiàn)程,因?yàn)樵撜{(diào)用已經(jīng)完成。使用兩個(gè)不同的信令方案實(shí)現(xiàn)延遲同步。
如果存儲(chǔ)器調(diào)用與傳輸寄存器有關(guān),當(dāng)對(duì)應(yīng)的轉(zhuǎn)移寄存器的有效位置位或清除時(shí)產(chǎn)生觸發(fā)該線(xiàn)程的信號(hào)。例如,將數(shù)據(jù)放入傳輸寄存器A的SRAM讀在A的有效位置位時(shí)收到信號(hào)。如果存儲(chǔ)器調(diào)用與傳輸FIFO或接收FIFO有關(guān)而非與轉(zhuǎn)移寄存器有關(guān)。則當(dāng)在SDRAM控制器26a中調(diào)用完成時(shí)產(chǎn)生該信號(hào)。在微引擎調(diào)度程序中每個(gè)環(huán)境只保存一個(gè)信號(hào)狀態(tài),因此在此方案中只能存在一個(gè)未完成的信號(hào)。
至少有兩個(gè)能用于設(shè)計(jì)微控制器的微程序的普通操作范例。一個(gè)是整個(gè)微控制器計(jì)算數(shù)據(jù)通量和整個(gè)存儲(chǔ)器帶寬以單線(xiàn)程執(zhí)行等待為代價(jià)進(jìn)行優(yōu)化。在系統(tǒng)具有多個(gè)執(zhí)行多個(gè)線(xiàn)程的微引擎且每個(gè)微引擎對(duì)互不相關(guān)的數(shù)據(jù)包執(zhí)行時(shí)此范例有意義。
第二個(gè)是以整個(gè)微引擎計(jì)算數(shù)據(jù)通量及整個(gè)存儲(chǔ)器帶寬為代價(jià)優(yōu)化微引擎執(zhí)行等待。此范例包含到帶有實(shí)時(shí)約束的線(xiàn)程的執(zhí)行,實(shí)時(shí)約束要求某些工作必須在某個(gè)指定時(shí)間絕對(duì)地完成。該約束需要單線(xiàn)程執(zhí)行的優(yōu)化得到比如存儲(chǔ)器帶寬或整個(gè)計(jì)算數(shù)據(jù)量等其他考慮更大的優(yōu)先。實(shí)時(shí)線(xiàn)程意指只執(zhí)行一個(gè)線(xiàn)程的單個(gè)微引擎。應(yīng)不處理多線(xiàn)程,因?yàn)槟繕?biāo)是允許單個(gè)實(shí)時(shí)線(xiàn)程盡可能快地執(zhí)行,多線(xiàn)程的執(zhí)行將妨礙此能力。
對(duì)于發(fā)出存儲(chǔ)器調(diào)用及環(huán)境切換,這兩個(gè)范例的編碼風(fēng)格可非常不同。在實(shí)時(shí)情況,目標(biāo)是盡可能快地發(fā)出許多存儲(chǔ)器調(diào)用以便使這些調(diào)用引起的存儲(chǔ)器等待最小。盡可能早地發(fā)出許多調(diào)用以后,目標(biāo)是以與調(diào)用并行的方式象微引擎那樣完成盡可能多的計(jì)算。對(duì)應(yīng)于實(shí)時(shí)優(yōu)化的計(jì)算流程是o)發(fā)出存儲(chǔ)器調(diào)用1o)發(fā)出存儲(chǔ)器調(diào)用2o)發(fā)出存儲(chǔ)器調(diào)用3o)完成與存儲(chǔ)器調(diào)用1、2和3無(wú)關(guān)的工作o)同步到存儲(chǔ)器調(diào)用1的完成o)完成依賴(lài)于存儲(chǔ)器調(diào)用1而與存儲(chǔ)器調(diào)用2和3無(wú)關(guān)的工作o)根據(jù)以前的工作發(fā)出任何新的存儲(chǔ)器調(diào)用o)同步到存儲(chǔ)器調(diào)用2的完成o)完成依賴(lài)于存儲(chǔ)器調(diào)用1和2且與存儲(chǔ)器調(diào)用3無(wú)關(guān)的工作o)根據(jù)以前的工作發(fā)出任何新的存儲(chǔ)器調(diào)用o)同步到存儲(chǔ)器調(diào)用3的完成o)完成依賴(lài)所有3個(gè)調(diào)用完成的工作o)根據(jù)以前的工作發(fā)出任何新的存儲(chǔ)器調(diào)用。
相反,對(duì)數(shù)據(jù)通量和帶寬的優(yōu)化采用不同的方法。對(duì)于微引擎計(jì)算數(shù)據(jù)通量和總的存儲(chǔ)器帶寬的優(yōu)化,較少考慮單線(xiàn)程執(zhí)行等待。為了實(shí)現(xiàn)此點(diǎn),目標(biāo)是對(duì)每個(gè)線(xiàn)程的微程序等間距地調(diào)用存儲(chǔ)器。這將提供對(duì)SRAM和SDRAM控制器的均勻的存儲(chǔ)器調(diào)用流,并使得在另一個(gè)線(xiàn)程被交換出時(shí)一個(gè)線(xiàn)程總是可用,以便隱藏存儲(chǔ)器等待這種情況的概率最大。
寄存器文件地址類(lèi)型參考圖6,存在兩個(gè)寄存器地址空間,當(dāng)?shù)乜稍L(fǎng)問(wèn)的寄存器和全局可訪(fǎng)問(wèn)的寄存器,后者可由所有微引擎訪(fǎng)問(wèn)。通用寄存器(GPR)作為兩個(gè)分別的存儲(chǔ)區(qū)(A存儲(chǔ)區(qū)和B存儲(chǔ)器)實(shí)現(xiàn),它們的地址逐字交叉,使得A存儲(chǔ)區(qū)寄存器有l(wèi)sb=0,B存儲(chǔ)區(qū)寄存器有l(wèi)sb=1(lsb是最低有效位)。每個(gè)存儲(chǔ)區(qū)能實(shí)現(xiàn)到該存儲(chǔ)區(qū)中兩個(gè)不同字的同時(shí)讀和寫(xiě)。
在存儲(chǔ)區(qū)A和B內(nèi),寄存器組76b也被組織成4個(gè)32個(gè)寄存器的窗76b0-76b3,它們是每個(gè)線(xiàn)程相對(duì)可編址。因此,thread_0在77a找到它的寄存器0(寄存器0),thread_1在77b找到它的寄存器_0(寄存器32),thread_2在77c找到它的寄存器_0(寄存器64),而thread_3在77d找到它的寄存器_0(寄存器96)。支持相對(duì)編址,使得多線(xiàn)程能使用完全相同的控制存儲(chǔ)和位置,而訪(fǎng)問(wèn)不同的寄存器窗并完成不同的功能。使用寄存器窗編址和存儲(chǔ)區(qū)編址,只要在微引擎22f中采用雙口RAM就提供了需要的帶寬。
這些分窗的寄存器從環(huán)境切換到環(huán)境切換不需要保存數(shù)據(jù),因而消除了環(huán)境交換文件或堆棧的正常壓入或彈出。這里的環(huán)境切換對(duì)于從一個(gè)環(huán)境改變?yōu)榱硪粋€(gè)具有0周期開(kāi)銷(xiāo)。相對(duì)寄存器編址將寄存器存儲(chǔ)區(qū)按通用寄存器組的地址寬度分成窗。相對(duì)編址也允許對(duì)于窗起始點(diǎn)訪(fǎng)問(wèn)任何窗。在此結(jié)構(gòu)中也支持絕對(duì)編址,通過(guò)提供寄存器的精確地址,任何一個(gè)絕對(duì)寄存器能被任何一個(gè)線(xiàn)程訪(fǎng)問(wèn)。
通用寄存器78的編址以?xún)煞N方式出現(xiàn),取決于微字的格式。兩種方式是絕對(duì)方式和相對(duì)方式。在絕對(duì)方式中,寄存器地址的編址直接在7位源字段(aa-a0或b6-b0)中指定7 6 5 4 3 2 1 0+---+---+---+---+---+---+---+---+A GPR|a6|0|a5|a4|a3|a2|a1|a0| a6=0B GPR|b6|1|b5|b4|b3|b2|b1|b0| b6=0SRAM/ASB|a6|a5|a4|0|a3|a2|a1|a0| a6=1,a5=0,a4=0 SDRAM|a6|a5|a4|0|a3|a2|a1|a0| a6=1,a5=0,a4=1寄存器地址直接在8位目標(biāo)字段(d7-d0)中指定
7 6 5 4 3 2 1 0+---+---+---+---+---+---+---+---+A GPR|d7|d6|d5|d4|d3|d2|d1|d0| d7=0,d6=0B GPR|d7|d6|d5|d4|d3|d2|d1|d0| d7=0,d6=1SRAM/ASB|d7|d6|d5|d4|d3|d2|d1|d0| d7=1,d6=0,d5=0SDRAM|d7|d6|d5|d4|d3|d2|d1|d0| d7=1,d6=0,d5=1如果<a6∶a5>=1,1,<b6∶b5>=1,1或<d7∶d6>=1,1,則較低位解釋為環(huán)境相關(guān)的地址字段(下面描述)。當(dāng)在A,B絕對(duì)字段中指字一非相關(guān)的A或B的源地址,只有SRAM/ASB和SDRAM地址空間的低一半能編址。實(shí)際上,讀絕對(duì)SRAM/SDRAM設(shè)備具有有效的地址空間;但是因?yàn)榇讼拗共粦?yīng)用于目標(biāo)字段,寫(xiě)SRAM/SDRAM仍然使用全部地址空間。
在相對(duì)方式中,指定地址的編址是在環(huán)境空間中偏移,如5位源字段(a4-a0,或b4-b0)所限定的7 6 5 4 3 2 1 0+---+---+---+---+---+---+---+---+A GPR|a4|0|context|a3|a2|a1|a0| a4=0B GPR|b4|1|context|b3|b2|b1|b0| b4=0SRAM/ASB|ab4|0|ab3|context|b2|b1|ab0| ab4=1,ab3=0SDRAM|ab4|0|ab3|context|b2|b1|ab0| ab4=1,ab3=1或6位目標(biāo)字段(d5-d0)所定義的7 6 5 4 3 2 1 0+---+---+---+---+---+---+---+---+A GPR|d5|d4|context|d3|d2|d1|d0| d5=0,d4=0B GPR|d5|d4|context|d3|d2|d1|d0| d5=0,d4=1SRAM/ASB|d5|d4|d3|context|d2|d1|d0| d5=1,d4=0,d3=0SDRAM|d5|d4|d3|context|d2|d1|d0| d5=1,d4=0,d3=1如果<d5∶d4>=1,1,則目標(biāo)地址不編址一個(gè)有效寄存器,因此不寫(xiě)回目標(biāo)操作數(shù)。
下面的寄存器可以全局地從微引擎和存儲(chǔ)控制器訪(fǎng)問(wèn)散列單元寄存器便箋及公用寄存器接收FIFO和接收狀態(tài)FIFO
發(fā)送FIFO發(fā)送控制FIFO微引擎不是中斷驅(qū)動(dòng)的。每個(gè)微流執(zhí)行直到完成并然后根據(jù)由處理器12中其他設(shè)備發(fā)信號(hào)的狀態(tài)選擇新的流。
參考圖7,SDRAM存儲(chǔ)器控制器26a包括存儲(chǔ)器調(diào)用隊(duì)列90,其中存儲(chǔ)器調(diào)用請(qǐng)求從各個(gè)微引擎22a-22f到達(dá)。存儲(chǔ)控制器26a包括一個(gè)判優(yōu)器91,它選擇下一個(gè)微引擎調(diào)用請(qǐng)求進(jìn)入到任何功能單元。假定一個(gè)微引擎提供一個(gè)調(diào)用請(qǐng)求,該調(diào)用請(qǐng)求將在SDRAM控制器26a內(nèi)通過(guò)地址和命令隊(duì)列90。如果該調(diào)用請(qǐng)求是由稱(chēng)為“優(yōu)化的存儲(chǔ)器位”的位置位,該進(jìn)入的調(diào)用請(qǐng)求將被排序到偶數(shù)存儲(chǔ)區(qū)隊(duì)列90a或奇數(shù)存儲(chǔ)區(qū)隊(duì)列90b。如果該存儲(chǔ)器調(diào)用請(qǐng)求不具有存儲(chǔ)器優(yōu)化位置位,默認(rèn)地將進(jìn)入到一個(gè)命令隊(duì)列90c。SDRAM控制器26是在FBUS接口28、核心處理器20和PCI接口24中共享的資源。SDRAM控制器26還保持一個(gè)狀態(tài)機(jī),用于完成RGAD_MODIFY_Write(讀-修改-寫(xiě))微操作。SDRAM控制器26還完成用于從SDRAM數(shù)據(jù)請(qǐng)求的字節(jié)對(duì)齊。
命令隊(duì)列90c保持從微引擎來(lái)的調(diào)用請(qǐng)求的命令。對(duì)于一系列奇數(shù)及偶數(shù)存儲(chǔ)區(qū)的調(diào)用,要求信號(hào)只有當(dāng)完成對(duì)奇數(shù)和偶數(shù)存儲(chǔ)區(qū)的存儲(chǔ)器調(diào)用序列時(shí)才返回。如果微引擎22f將存儲(chǔ)器請(qǐng)求排序到奇數(shù)數(shù)據(jù)區(qū),而偶數(shù)數(shù)據(jù)區(qū)的調(diào)用和數(shù)據(jù)區(qū)之一,如偶數(shù)數(shù)據(jù)區(qū)在奇數(shù)數(shù)據(jù)區(qū)之前被存儲(chǔ)器調(diào)用所遺漏,但是信號(hào)卻認(rèn)定最后一次偶數(shù)調(diào)用,存儲(chǔ)控制器26a可以想象地將信號(hào)發(fā)回到完成存儲(chǔ)器調(diào)用的微引擎,雖然尚未對(duì)奇數(shù)存儲(chǔ)區(qū)調(diào)用服務(wù)。這種情況能引起相干性問(wèn)題。通過(guò)提供命令隊(duì)列90c,允許微引擎具有多個(gè)存儲(chǔ)器調(diào)用,其中只有奇數(shù)最后的存儲(chǔ)器調(diào)用需要發(fā)完成信號(hào),來(lái)避免上述情況。
SDRAM控制器26a還包括一個(gè)高優(yōu)先級(jí)隊(duì)列90d。在高優(yōu)先級(jí)隊(duì)列90d中,從一個(gè)微引擎進(jìn)入的存儲(chǔ)器調(diào)用直接進(jìn)入到高優(yōu)先級(jí)隊(duì)列,并且接比其他隊(duì)列中的其他存儲(chǔ)器調(diào)用更高的優(yōu)先級(jí)操作。偶數(shù)存儲(chǔ)區(qū)隊(duì)列90a、奇數(shù)存儲(chǔ)區(qū)隊(duì)列90b、命令隊(duì)列90c和高優(yōu)先級(jí)隊(duì)列,所有這些隊(duì)列在單個(gè)RAM結(jié)構(gòu)中實(shí)現(xiàn),該結(jié)構(gòu)邏輯上分段成4個(gè)不同的窗,每個(gè)窗有其自己的頭及尾指針。因?yàn)槌涮罴奥┏霾僮鲀H是單個(gè)輸入和單個(gè)輸出,它們也能放在同一個(gè)RAM結(jié)構(gòu)中以增加RAM結(jié)構(gòu)的密度。
SDRAM控制器26a還包括核心總線(xiàn)接口邏輯,即ASB總線(xiàn)92。ASB總線(xiàn)接口邏輯92將核心處理器20接口到SDRAM控制器26a。ASB總線(xiàn)是包括32位數(shù)據(jù)通路及28位地址通路的總線(xiàn)。通過(guò)MEM ASB數(shù)據(jù)設(shè)備98,如緩沖器,數(shù)據(jù)存到存儲(chǔ)器或從中取出。MEM ASB數(shù)據(jù)設(shè)備98是用于寫(xiě)數(shù)據(jù)的隊(duì)列。如果有經(jīng)ASB接口92從核心處理器20進(jìn)入的數(shù)據(jù),該數(shù)據(jù)能存入MEM ASB設(shè)備98,并隨后從EME ASB設(shè)備98經(jīng)過(guò)SDRAM接口110移到SDRAM存儲(chǔ)器16a。雖然未示出,對(duì)讀可以提供同樣的隊(duì)列結(jié)構(gòu)。SDRAM控制器26a還包括一個(gè)引擎97,將數(shù)據(jù)從微引擎和PCI總線(xiàn)彈性。
另外隊(duì)列包括PCI地址隊(duì)列94和ASB讀/寫(xiě)隊(duì)列96,后者保持一系列請(qǐng)求。存儲(chǔ)器請(qǐng)求通過(guò)多路復(fù)用器106發(fā)送到SDRAM接口110。多路復(fù)用器106由SDRAM判優(yōu)器91控制,后者檢測(cè)每個(gè)隊(duì)列的滿(mǎn)度和請(qǐng)求的狀態(tài),并由此根據(jù)存儲(chǔ)在優(yōu)先級(jí)服務(wù)控制寄存器100的一個(gè)可編程值決定優(yōu)先級(jí)。
一旦對(duì)多路復(fù)用器106的控制選擇一個(gè)存儲(chǔ)器調(diào)用請(qǐng)求,該存儲(chǔ)器調(diào)用請(qǐng)求送到解碼器108,在那里它被解碼并產(chǎn)生一個(gè)地址。被解碼的地址送到SDRAM接口110,在那里它被分解成行和列的地址選通來(lái)訪(fǎng)問(wèn)SDRAM16a,并經(jīng)過(guò)將數(shù)據(jù)送到總線(xiàn)112的數(shù)據(jù)線(xiàn)16a寫(xiě)或讀數(shù)據(jù)。在一個(gè)實(shí)施中,總線(xiàn)112實(shí)際上是兩條分別的總線(xiàn)而不是單個(gè)總線(xiàn)。分別的總線(xiàn)包括一個(gè)連結(jié)到分布微引擎22a-22f的讀總線(xiàn)和一個(gè)連結(jié)到分布式微引擎22a-22f的寫(xiě)總線(xiàn)。
SDRAM控制器26a的特征在于當(dāng)一個(gè)存儲(chǔ)器調(diào)用存入隊(duì)列90時(shí),除了可以置位的優(yōu)化的MEM位以外,有一個(gè)“鏈接位-chaining bit”。鏈接位在置位時(shí),允許專(zhuān)門(mén)處理連續(xù)的存儲(chǔ)器調(diào)用。如前所述,判優(yōu)器12控制選擇哪個(gè)微引擎將存儲(chǔ)器調(diào)用請(qǐng)求經(jīng)過(guò)命令總線(xiàn)提供給隊(duì)列90(圖7)。鏈接位的確定將控制判優(yōu)器選擇以前請(qǐng)求那個(gè)總線(xiàn)的功能單元,因?yàn)樵撴溄游恢梦恢赋鲈撐⒁姘l(fā)出一個(gè)鏈接請(qǐng)求。
當(dāng)鏈接位被置位時(shí),連續(xù)的存儲(chǔ)器調(diào)用將在隊(duì)列中被接收。那些連續(xù)的調(diào)用通常被存入命令隊(duì)列90c,因?yàn)樵撨B續(xù)的存儲(chǔ)器調(diào)用是從單個(gè)線(xiàn)程來(lái)的多重存儲(chǔ)器調(diào)用。為了提供同步,存儲(chǔ)控制器26a只在鏈接的存儲(chǔ)器調(diào)用完成的終點(diǎn)需要信號(hào)。然而,在一個(gè)優(yōu)化的存儲(chǔ)器鏈中(如當(dāng)優(yōu)化的MEM位和鏈接位被置位),存儲(chǔ)器調(diào)用能夠進(jìn)入不同的存儲(chǔ)區(qū)并可能在一個(gè)存儲(chǔ)區(qū)上完成,在其他存儲(chǔ)器被完全遺漏以前發(fā)出信號(hào)“done”,因而破壞相干性。因此,由控制器110使用鏈接位保持從當(dāng)前的隊(duì)列來(lái)的存儲(chǔ)器調(diào)用。
參考圖7A,示出在SDRAM控制器26a中判優(yōu)策略的流程表示。判優(yōu)策略有利于鏈接的微引擎存儲(chǔ)器請(qǐng)求。過(guò)程115通過(guò)檢查鏈接的微引擎存儲(chǔ)器調(diào)用請(qǐng)求115a開(kāi)始。過(guò)程115停留在鏈接的請(qǐng)求,直到鏈接位被清除。該過(guò)程檢查ASB總線(xiàn)請(qǐng)求115b,隨后是PCI總線(xiàn)請(qǐng)求115c、高優(yōu)先級(jí)隊(duì)列服務(wù)115d、另一邊存儲(chǔ)區(qū)請(qǐng)求115e、命令隊(duì)列請(qǐng)求115f和同一存儲(chǔ)區(qū)請(qǐng)求115g。鏈接的請(qǐng)求被完全地服務(wù),而服務(wù)115b-115d以循環(huán)的次序服務(wù)。僅當(dāng)服務(wù)115a-115d被完全地跳過(guò),過(guò)程才處理服務(wù)115e-115g。鏈接的微引擎存儲(chǔ)器調(diào)用請(qǐng)求是在以前SDRAM存儲(chǔ)器請(qǐng)求已置位了鏈接位的時(shí)刻。當(dāng)鏈接位被置位時(shí),判優(yōu)引擎簡(jiǎn)單地再次服務(wù)同一隊(duì)列,直到鏈接被清除。因?yàn)楫?dāng)ASB處于等待狀態(tài)時(shí)在Strong Arm核心上產(chǎn)生嚴(yán)重的性能損失,ASB比PCI有更高的優(yōu)先級(jí)。由于PCI的等待要求PCI具有比微引擎更高的優(yōu)先級(jí)。然而對(duì)其他總線(xiàn),判優(yōu)的優(yōu)先級(jí)可以是不同的。
如圖7B所示,其中示出沒(méi)有激活的存儲(chǔ)器優(yōu)化及帶有激活的存儲(chǔ)器優(yōu)化的通常時(shí)序??梢钥吹剑褂眉せ畹拇鎯?chǔ)器優(yōu)化使總線(xiàn)的使用最大,因而隱藏了在實(shí)際的SDRAM設(shè)備中的固有等待。在此例中,非優(yōu)化的訪(fǎng)問(wèn)可占14個(gè)周期,而優(yōu)化的訪(fǎng)問(wèn)占7個(gè)周期。
參考圖8,其中示出對(duì)SRAM的存儲(chǔ)控制器26b。存儲(chǔ)控制器26b包括一個(gè)地址和命令隊(duì)列120。雖然存儲(chǔ)控制器26a(圖7)具有一個(gè)用于根據(jù)奇數(shù)或偶數(shù)存儲(chǔ)區(qū)的存儲(chǔ)器優(yōu)化的隊(duì)列,存儲(chǔ)控制器26b根據(jù)存儲(chǔ)器操作的類(lèi)型,即讀或?qū)憙?yōu)化。地址和命令隊(duì)列120包括一個(gè)高優(yōu)先級(jí)隊(duì)列120a、一個(gè)作為SRAM完成的起支配作用的存儲(chǔ)器調(diào)用功能的讀隊(duì)列120b、和一個(gè)命令隊(duì)列120c,后者通常包括所有到SRAM的寫(xiě)和未優(yōu)化的讀。雖然未顯示,地址和命令隊(duì)列120也能包括一個(gè)寫(xiě)隊(duì)列。
SRAM控制器26b還包括核心總線(xiàn)接口邏輯,即ASB總線(xiàn)122。ASB總線(xiàn)接口邏輯122將核心處理器20接口到SRAM控制器26b。ASB總線(xiàn)是包括32位數(shù)據(jù)線(xiàn)和28位地址線(xiàn)的總線(xiàn)。通過(guò)如緩沖器那樣的MEM ASB數(shù)據(jù)設(shè)備128,數(shù)據(jù)被存入存儲(chǔ)器或從中取出。MEM ASB數(shù)據(jù)設(shè)備128是用于寫(xiě)數(shù)據(jù)的隊(duì)列。如果有從核心處理器20經(jīng)過(guò)ASB接口122進(jìn)入的數(shù)據(jù),數(shù)據(jù)能存入MEM ASB設(shè)備128,并隨后從MEM設(shè)備128通過(guò)SRAM接口140移到SRAM存儲(chǔ)器16b。雖然未顯示,對(duì)讀能提出同樣的隊(duì)列結(jié)構(gòu)。SRAM控制器26b還包括一個(gè)將數(shù)據(jù)從微引擎和PCI總線(xiàn)彈出的引擎127。
存儲(chǔ)器請(qǐng)求經(jīng)過(guò)多路復(fù)用器126被送到SRAM接口140。多路復(fù)用器126由SRAM判優(yōu)器131控制,后者檢測(cè)每個(gè)隊(duì)列的滿(mǎn)度及請(qǐng)求的狀態(tài),并由此根據(jù)儲(chǔ)存在優(yōu)先級(jí)服務(wù)控制寄存器130的可編程值決定優(yōu)先級(jí)。一旦對(duì)多路復(fù)用器126的控制選擇了一個(gè)存儲(chǔ)器調(diào)用請(qǐng)求,該存儲(chǔ)器調(diào)用請(qǐng)求被送到解碼器138,在那里被解碼并產(chǎn)生地址。
SRAM單元保持對(duì)存儲(chǔ)器映射芯片外的SRAM(Memory Mapped off-chipSRAM)及擴(kuò)展ROM的控制。SRAM控制器26b可選址如16兆字節(jié),其中如8兆字節(jié)對(duì)SRAM16b映射,且8兆字節(jié)保留用于特定功能,包括由閃存ROM 16c的自引導(dǎo)空間;和對(duì)MAC設(shè)備13a,13b的控制臺(tái)端口訪(fǎng)問(wèn)以及對(duì)有關(guān)(RMON)計(jì)數(shù)器的訪(fǎng)問(wèn)。SRAM被用于當(dāng)?shù)夭檎冶砗完?duì)列管理功能。
SRAM控制器26b支持下列事務(wù)微引擎請(qǐng)求(經(jīng)過(guò)專(zhuān)用總線(xiàn))到/從SRAM。
核心處理器(經(jīng)過(guò)ASB總線(xiàn))到/從SRAM。
SRAM控制器26b完成存儲(chǔ)器調(diào)用排序使得從SRAM接口140到存儲(chǔ)器16b的管線(xiàn)中的延遲(泡沫)最小。SRAM控制器26b根據(jù)讀功能做存儲(chǔ)器調(diào)用排序。泡沫可以是1個(gè)或2個(gè)周期,取決于使用存儲(chǔ)器設(shè)備的類(lèi)型。
SRAM控制器26b包括一個(gè)鎖定查找設(shè)備142,它是用于讀鎖定的查找的8個(gè)輸入地址的環(huán)境可編址存儲(chǔ)器。每個(gè)位置包括一個(gè)有效位,它通過(guò)后續(xù)的讀鎖定請(qǐng)求檢查。地址和命令隊(duì)列120還包括一個(gè)讀鎖定失效(Read Lock Fail)隊(duì)列120d。該讀鎖定失效隊(duì)列120d被用于保存由于在存儲(chǔ)器的一個(gè)部分鎖定引起失效的讀存儲(chǔ)器調(diào)用請(qǐng)求。即,一個(gè)微引擎發(fā)出一個(gè)具有讀鎖定請(qǐng)求的存儲(chǔ)器請(qǐng)求,它在地址和控制隊(duì)列120中被處理。存儲(chǔ)器請(qǐng)求將在命令隊(duì)列120c或讀隊(duì)列120b上操作,且作為讀鎖定請(qǐng)求識(shí)別??刂破?6b訪(fǎng)問(wèn)鎖定查找設(shè)備142以確定此存儲(chǔ)器位置是否已被鎖定。如果此存儲(chǔ)器位置被從任何以前讀鎖定請(qǐng)求所鎖定,則此存儲(chǔ)器鎖定請(qǐng)求將失敗,并將其存入讀鎖定失效隊(duì)列120d。如果它未被鎖定,或如果142示出在那個(gè)地址未鎖定,則該存儲(chǔ)器調(diào)用的地址將被SRAM接口140使用以完成對(duì)存儲(chǔ)器16b的SRAM地址讀/寫(xiě)請(qǐng)求。命令控制器和地址生成器138還將鎖定輸入到鎖定查找設(shè)備142,使得后續(xù)的讀鎖定請(qǐng)求將找到鎖定的存儲(chǔ)器位置。在鎖定的需要結(jié)束以后通過(guò)程序中微控制指令的操作,解鎖存儲(chǔ)器位置。該位置通過(guò)清除在CAM中的有效位解鎖。在解鎖以后,讀鎖定失效隊(duì)列120d成為最高優(yōu)先級(jí)隊(duì)列,給所有排隊(duì)未得到讀鎖定的請(qǐng)求,一個(gè)發(fā)出存儲(chǔ)器鎖定請(qǐng)求的機(jī)會(huì)。
參考圖9,其中示出在微引擎22和FBUS接口邏輯(FBI)之間的通訊。在網(wǎng)絡(luò)應(yīng)用中的FBUS接口28能完成從FBUS18進(jìn)入的包的首部處理。FBUS接口完成的關(guān)鍵功能是提取包的首部,和在SRAM中可微編程的源/目標(biāo)/協(xié)議的散列查找。如果散列未成功地分解,促使包的首部被送到核心處理器28用于更復(fù)雜的處理。
FBI28包含一個(gè)發(fā)送FIFO182、一個(gè)接收FIFO183、一個(gè)散列單元188和FBI控制及狀態(tài)寄存器189。這4個(gè)單元通過(guò)對(duì)連接到微引擎中的傳輸寄存器78,80的SRAM總線(xiàn)38的時(shí)間-多路復(fù)用訪(fǎng)問(wèn),與微引擎22通信。即,所有與微引擎的通信通過(guò)傳輸寄存器78,80。FBUS接口28包括一個(gè)壓入狀態(tài)機(jī)200,用于將數(shù)據(jù)在SRAM不使用SRAM數(shù)據(jù)總線(xiàn)(總線(xiàn)38的部分)的時(shí)間周期內(nèi)壓入轉(zhuǎn)輸寄存器,還包括一個(gè)彈出狀態(tài)機(jī)202,用于從對(duì)應(yīng)的微引擎中的傳輸寄存器取得數(shù)據(jù)。
散列單元包括一對(duì)FIFO=S,188a,188b。散列單元確定,F(xiàn)BI28接收FBI_hash請(qǐng)求。散列單元188從調(diào)用的微引擎22取得散列鍵。在鍵被取得并散列以后,其索引被送回到調(diào)用的微引擎22。在單個(gè)FBI_hash請(qǐng)求下完成最多到3個(gè)散列??偩€(xiàn)34和38均為單向的SDRAM_push/pull_data,和Sbus_push/pull_data。這些總線(xiàn)的每一個(gè)需要控制信號(hào),它向適當(dāng)?shù)奈⒁?2的傳輸寄存器提供讀/寫(xiě)控制。
通常,傳輸寄存器需要保護(hù)以免環(huán)境控制它們,以便保證讀出的正確性。特別是,如果一個(gè)寫(xiě)傳輸寄存器被thread_1使用以提供數(shù)據(jù)到SDRAM 16a,thread_1必須不改寫(xiě)此寄存器直到從SDRAM控制器26a回來(lái)信號(hào),指出此寄存器已被激勵(lì)并現(xiàn)在可以重新使用。每次寫(xiě)不需要從目標(biāo)返回信號(hào),指出此功能已完成,因?yàn)?,如果該線(xiàn)程帶著多個(gè)請(qǐng)求寫(xiě)入在那個(gè)目標(biāo)的同一命令隊(duì)列,保證在那個(gè)命令隊(duì)列中完成的次序,因此只有最后的命令需要發(fā)回信號(hào)到該線(xiàn)程。但是,如果該線(xiàn)程使用多個(gè)命令隊(duì)列(讀隊(duì)列和命令隊(duì)列),則這些命令請(qǐng)求必須分解成各個(gè)環(huán)境任務(wù),使得通過(guò)環(huán)境交換保持次序。在本章節(jié)開(kāi)頭指出的例外情況與某種類(lèi)型的操作有關(guān),這些操作使用未經(jīng)請(qǐng)求的PUSH從用于FBUS狀態(tài)信息的FBI推到傳輸寄存器。為了保護(hù)對(duì)傳輸寄存器的讀/寫(xiě)確定性,在建立這些特定的FBI壓入操作時(shí),F(xiàn)BI提供專(zhuān)門(mén)的Push_protect(壓入保護(hù))信號(hào)。
任何使用FBI未經(jīng)請(qǐng)求壓入技術(shù)的微引擎22在訪(fǎng)問(wèn)與傳輸寄存器一致的FBUS接口/微引擎以前必須檢測(cè)保護(hù)標(biāo)志。如果該標(biāo)志不斷定,則該傳輸寄存器由該微引擎訪(fǎng)問(wèn)。如果該標(biāo)志斷定,則該環(huán)境在訪(fǎng)問(wèn)該寄存器前應(yīng)等待N周期。推測(cè)的計(jì)數(shù)由進(jìn)行壓入的傳輸寄存器數(shù)加上前端保護(hù)窗來(lái)確定。基本概念是,微引擎必須檢測(cè)此標(biāo)志,然后在連接周期內(nèi)很快地將希望從讀傳輸寄存器讀出的數(shù)據(jù)移到GPR,使得壓入引擎與微引擎讀不沖突。
其他實(shí)施例在下面權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種計(jì)算機(jī)指令,其特征在于包括環(huán)境轉(zhuǎn)移,它根據(jù)當(dāng)前的環(huán)境號(hào)是否匹配指定的環(huán)境號(hào)使指令流轉(zhuǎn)移到具有在指定標(biāo)號(hào)處地址的另一個(gè)指令流。
2.如權(quán)利要求1所述的環(huán)境轉(zhuǎn)移指令,其特征在于,所述指令具有下述格式br=ctx[ctx,label#],optional_tokenbr?。絚tx[ctx,label#],optional_token
3.如權(quán)利要求2所述的環(huán)境轉(zhuǎn)移指令,其特征在于,label#是對(duì)應(yīng)于一條指令的地址的符號(hào)標(biāo)號(hào),ctx是環(huán)境號(hào)。
4.如權(quán)利要求3所述的環(huán)境轉(zhuǎn)移指令,其特征在于,所述的環(huán)境號(hào)具有有效值1,2或3。
5.如權(quán)利要求1所述的環(huán)境轉(zhuǎn)移指令,其特征在于,所述指令具有optional_token。
6.如權(quán)利要求5所述的環(huán)境轉(zhuǎn)移指令,其特征在于,所述指令具有可選標(biāo)記,使得延時(shí)引起處理器在完成轉(zhuǎn)移操作之前執(zhí)行轉(zhuǎn)移指令后面的指令。
7.一種操作處理器的方法,其特征在于,包括下述步驟估算一個(gè)執(zhí)行環(huán)境的環(huán)境號(hào)以確定是否執(zhí)行環(huán)境的環(huán)境號(hào)匹配指定的環(huán)境號(hào);且按照計(jì)算執(zhí)行環(huán)境的環(huán)境號(hào),轉(zhuǎn)移到一條指定的指令。
8.如權(quán)利要求7所述的方法,其特征在于,所述轉(zhuǎn)移進(jìn)一步包括如果執(zhí)行環(huán)境號(hào)匹配指定的環(huán)境號(hào)就轉(zhuǎn)移。
9.如權(quán)利要求7所述的方法,其特征在于,所述的環(huán)境號(hào)具有有效值0、1、2或3。
10.一種能執(zhí)行多個(gè)環(huán)境的處理器,其特征在于,它包括一個(gè)寄存器堆棧;用于每個(gè)執(zhí)行環(huán)境的程序計(jì)數(shù)器;連接到寄存器堆棧的算術(shù)邏輯單元和存儲(chǔ)環(huán)境交換指令的程序控制存儲(chǔ),它使處理器執(zhí)行計(jì)算一個(gè)執(zhí)行環(huán)境的環(huán)境號(hào)以確定是否執(zhí)行環(huán)境的環(huán)境號(hào)匹配指定的環(huán)境號(hào);且按照計(jì)算的執(zhí)行環(huán)境的環(huán)境號(hào)轉(zhuǎn)移到一條指定的指令。
11.如權(quán)利要求10所述的處理器,其特征在于,如果所述執(zhí)行環(huán)境的號(hào)匹配指定的環(huán)境號(hào),則發(fā)生轉(zhuǎn)移。
12.如權(quán)利要求10所述的處理器,其特征在于,所述的環(huán)境號(hào)具有有效值0、1、2或3。
13.一種留駐在計(jì)算機(jī)可讀介質(zhì)、用于使執(zhí)行多個(gè)環(huán)境的處理器完成一個(gè)功能的計(jì)算機(jī)程序產(chǎn)品,其特征在于,它包括的指令使處理器執(zhí)行下列動(dòng)作計(jì)算一個(gè)執(zhí)行環(huán)境的環(huán)境號(hào)以確定是否執(zhí)行環(huán)境的環(huán)境號(hào)與指定的環(huán)境號(hào)匹配;且根據(jù)計(jì)算的執(zhí)行環(huán)境的環(huán)境號(hào),轉(zhuǎn)移至一條規(guī)定的指令。
14.如權(quán)利要求13所述的產(chǎn)品,其特征在于,如果所述執(zhí)行環(huán)境的號(hào)匹配指定的環(huán)境號(hào),發(fā)生轉(zhuǎn)移。
15.如權(quán)利要求13所述的產(chǎn)品,其特征在于,所述的環(huán)境號(hào)具有有效值0、1、2或3。
全文摘要
本發(fā)明描述一個(gè)并行的基于硬件的多線(xiàn)程處理器(12)。處理器(12)包括一個(gè)協(xié)調(diào)系統(tǒng)功能的通用處理器和多個(gè)微引擎(22a-22f),后者支持多個(gè)硬件線(xiàn)程或環(huán)境。處理器(12)還包括一個(gè)存儲(chǔ)控制系統(tǒng)(16),它具有第一存儲(chǔ)控制器(26a),根據(jù)存儲(chǔ)器調(diào)用是否針對(duì)一個(gè)偶數(shù)存儲(chǔ)器或一個(gè)奇數(shù)存儲(chǔ)器來(lái)排序存儲(chǔ)器調(diào)用;還具有第二存儲(chǔ)控制器(26b),根據(jù)該存儲(chǔ)器調(diào)用是讀調(diào)用或?qū)懻{(diào)用優(yōu)化存儲(chǔ)器調(diào)用。本發(fā)明還揭示了用于根據(jù)執(zhí)行環(huán)境切換和轉(zhuǎn)移的指令。
文檔編號(hào)G06F9/32GK1402846SQ00814874
公開(kāi)日2003年3月12日 申請(qǐng)日期2000年8月31日 優(yōu)先權(quán)日1999年9月1日
發(fā)明者G·沃爾瑞奇, M·J·艾迪萊塔, W·威勒, D·伯恩斯坦因, D·胡伯 申請(qǐng)人:英特爾公司