專利名稱:多線程并行處理器結(jié)構(gòu)中所用的微引擎的存儲器引用指令的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機處理器的存儲器引用(reference)指令。
背景技術(shù):
并行處理是計算過程中并發(fā)事件的信息處理的一種有效的方式。與串行處理對比而言,并行處理請求并行執(zhí)行計算機中的許多程序。在并行處理器的關(guān)聯(lián)文本(context)中,并行性涉及同時做不只一件事。不同于在一個單一的站連續(xù)執(zhí)行所有任務的串行范例或在專用站執(zhí)行任務的流水線程機器,利用并行處理,提供了許多能夠執(zhí)行所有任務的站。也就是說,一般而言,所有或許多站同時并獨立地處理問題的相同或共同的元素。某些問題適合于通過應用并行處理來解決。
附圖概述在附圖和以下的描述中,陳述了本發(fā)明的一個或多個實施例的細節(jié)。通過描述、附圖和權(quán)利要求,本發(fā)明的其他特點、目的和優(yōu)點將一目了然。
本發(fā)明的前述特點和其他方面將通過附圖來進一步加以詳細的描述,其中
圖1是使用基于硬件的多線程處理器的一種通訊系統(tǒng)的方框圖。
圖2是圖1中基于硬件的多線程處理器的詳細的方框圖。
圖3是圖1和圖2的基于硬件的多線程處理器中所使用的微引擎功能單元的方框圖。
圖4是圖3的微引擎中的流水線程的方框圖。
圖5是SRAM地址空間的方框圖。
圖6是SRAM/寫命令的方框圖。
圖7是“壓入/彈出命令”的方框圖。
圖8是“bit_WR命令”的一種“indirect_ref格式”的方框圖。
圖9是“讀/寫命令”的indirect_ref的一種格式的方框圖。
圖10是T_FIFO_WR命令的一種indirect_ref“格式”的方框圖。
圖11是R_FIFO_RD命令的一種indirect_ref“格式”的方框圖。
圖12是“讀/寫命令”的indirect_ref“格式”的一種格式的方框圖。
圖13是bit_WR命令的一種indirect_ref“格式”的方框圖。各幅圖中類似的參考符號表示類似的元素。
具體實施例方式
參考圖1,通訊系統(tǒng)10包括一個并行的、基于硬件的多線程處理器12?;谟布亩嗑€程處理器12被耦合到一個總線(例如,PCI總線14)、存儲器系統(tǒng)16和第二個總線18。系統(tǒng)10對于可以被分成多個并行子任務或功能的任務而言特別有用?;谟布亩嗑€程處理器12對于面向帶寬(而非面向等待時間)的任務而言尤其有用?;谟布亩嗑€程處理器12具有多個微引擎22,每個微引擎具有可以同時運行和獨立執(zhí)行任務的多個硬件受控線程。
基于硬件的多線程處理器12也包括一個中央控制器20,該中央控制器20幫助加載對基于硬件的多線程處理器12的其他資源的微碼控制,并執(zhí)行其他通用計算機類型功能,例如,處理協(xié)議、異常、對數(shù)據(jù)分組處理(其中,例如在邊界條件下微引擎22傳遞數(shù)據(jù)分組,以獲得更加詳細的處理)的額外支持。在一個實施例中,處理器20是一個基于“Strong Arm@”(Arm是英國ARM有限公司的商標)的結(jié)構(gòu)。通用微處理器20擁有一個操作系統(tǒng)。通過該操作系統(tǒng),處理器20可以調(diào)用各種功能來操作微引擎22a-22f。處理器20可以使用任何被支持的操作系統(tǒng),較佳地是使用實時操作系統(tǒng)。對于作為“Strong Arm”結(jié)構(gòu)來被執(zhí)行的核心處理器20而言,可以使用微軟NT實時、VXWorks與微CUS、互聯(lián)網(wǎng)上可用的免費軟件操作系統(tǒng)等各種操作系統(tǒng)。
每個功能微引擎(微引擎)22a-22f在與程序計數(shù)器有關(guān)的硬件和狀態(tài)中都維持多個程序計數(shù)器。實際上,對應的多套線程可以同時在每個微引擎22a-22f上運行,但每次實際上只有一個線程正在操作。
在一個實施例中,所示有六個微引擎22a-22f。每個微引擎22a-22f都具有處理四個硬件線程的能力。六個微引擎22a-22f操作所擁有的共享資源包括存儲器系統(tǒng)16和總線接口24與28。存儲器系統(tǒng)16包括“同步動態(tài)隨機存取存儲器(SDRAM)”控制器26a和“靜態(tài)隨機存取存儲器(SRAM)”控制器26b。SDRAM存儲器16a和SDRAM控制器26a通常用于處理大量數(shù)據(jù)(例如,處理來自網(wǎng)絡數(shù)據(jù)分組的網(wǎng)絡有效載荷)。SRAM控制器26b和SRAM存儲器16b被用于低等待時間的快速訪問任務(例如,訪問查找表格、核心處理器20的存儲器等)的聯(lián)網(wǎng)實施中。
六個微引擎22a-22f根據(jù)數(shù)據(jù)的特征來訪問SDRAM 16a或SRAM 16b。這樣,低等待時間、低帶寬的數(shù)據(jù)被存儲在SRAM中并從那里被取出,而等待時間對其并不重要的較高帶寬數(shù)據(jù)則被存儲在SDRAM 16a中并從那里被取出。微引擎22a-22f可以執(zhí)行對SDRAM控制器26a或SRAM控制器16b的存儲器引用指令。
硬件多線程技術(shù)的優(yōu)點可以由SRAM或SDRAM存儲器訪問來說明。例如,來自微引擎的由thread_0請求的SRAM訪問將使SRAM控制器26b開始對SRAM存儲器16b進行訪問。SRAM控制器26b控制對SRAM總線的仲裁,訪問SRAM 16b,從SRAM 16b取出數(shù)據(jù),并將數(shù)據(jù)返回到提出請求的微引擎22a-22f。在SRAM訪問期間,如果微引擎(例如,微引擎22a)只有一個單一的線程可操作,則該微引擎將處于休眠狀態(tài),直到數(shù)據(jù)從SRAM 16b被返回。通過使用在每個微引擎22a-22f內(nèi)的硬件關(guān)聯(lián)文本交換,硬件關(guān)聯(lián)文本交換使具有唯一程序計數(shù)器的其他關(guān)聯(lián)文本能夠在那個相同的微引擎內(nèi)執(zhí)行。這樣,另一個線程(例如,thread_1)可以運作,而第一個線程(例如,thread_0)正在等待讀取數(shù)據(jù)返回。在執(zhí)行期間,thread_1可以訪問SDRAM存儲器16a。thread_1操作SDRAM單元16a,thread_0正在操作SRAM單元16b,而一個新的線程(例如,thread_2)現(xiàn)在可以在微引擎22a中進行操作。thread_2可以操作一定數(shù)量的時間,直到它需要訪問存儲器或執(zhí)行其他某項等待時間長的操作(例如,對總線接口進行訪問)。所以,處理器12可以同時擁有總線操作、都正在被完成或由微引擎22a操作的SRAM操作和SDRAM操作,并且多擁有一個線程來處理數(shù)據(jù)路徑中的更多工作。
硬件關(guān)聯(lián)文本交換也使各項任務的完成同步化。例如,兩個線程可以找到相同的共享資源(例如,SRAM 16b)。這些分開的功能單元(例如,F(xiàn)BUS接口28、SRAM控制器26a和SDRAM控制器26b)在完成來自一個微引擎線程關(guān)聯(lián)文本的所請求的任務時,其中的每個功能單元都報告返回標志以通知操作完成。當微引擎接收到標記時,微引擎可以確定打開哪個線程。
基于硬件的多線程處理器12的一項應用是作為網(wǎng)絡處理器。作為網(wǎng)絡處理器,基于硬件的多線程處理器12連接到媒體訪問控制器設(shè)備(例如,10/100BaseT八進制MAC 13a或千兆比特以太網(wǎng)設(shè)備13b)等網(wǎng)絡設(shè)備。一般而言,作為網(wǎng)絡處理器,基于硬件的多線程處理器12可以連接到接收/發(fā)送大量數(shù)據(jù)的任何類型的通訊設(shè)備或接口。運作于聯(lián)網(wǎng)應用中的通訊系統(tǒng)10可從設(shè)備13a和13b接收多個網(wǎng)絡數(shù)據(jù)分組,并用并行方式來處理那些數(shù)據(jù)分組。利用基于硬件的多線程處理器12,每個網(wǎng)絡數(shù)據(jù)分組都可以被獨立地處理。
使用處理器12的另一個例子是postscript處理器的印刷引擎或作為存儲子系統(tǒng)的處理器(例如,冗余獨立磁盤陣列(RAID)存儲器,在容錯與性能的組合中使用兩個或多個驅(qū)動器的一類磁盤驅(qū)動器)。進一步的用途是作為匹配引擎。例如,在證券行業(yè)中,電子交易的出現(xiàn)要求使用電子匹配引擎來對買者與賣者之間的定購進行匹配??梢允褂孟到y(tǒng)10來完成這些和其他并行類型的任務。
處理器12包括總線接口28,該總線接口將處理器耦合到第二個總線18。在一個實施例中,總線接口28將處理器12耦合到FBUS(FIFO總線)18。FBUS接口28負責控制并將處理器12連接到FBUS 18。FBUS 18是被用來連接到“媒體訪問控制器(MAC)”設(shè)備(例如,10/100BaseT八進制MAC 13a)的64位寬FIFO總線。
處理器12包括第二個接口(例如,PCI總線接口24),該接口將位于PCI 14總線上的其他系統(tǒng)成分耦合到處理器12。PCI總線接口24將高速數(shù)據(jù)路徑24a提供給存儲器16(例如,SDRAM存儲器16a)。通過PCI總線接口24,經(jīng)由直接存儲器訪問(DMA)傳送,通過PCI總線14,數(shù)據(jù)可以從SDRAM 16a被迅速移動。基于硬件的多線程處理器12支持圖象傳送。基于硬件的多線程處理器12可以使用多個DMA通道,所以,如果DMA轉(zhuǎn)移的一個目標很忙,則DMA通道中的另一個通道可接管PCI總線14來向另一個目標傳遞信息,從而維持處理器12的高效率。此外,PCI總線接口24支持目標與主控操作。在目標操作中,總線14上的從屬設(shè)備通過讀、寫來訪問用作目標操作的從動裝置的SDRAMs。在主控操作中,處理器核心20將數(shù)據(jù)直接發(fā)送到PCI接口24,或直接從PCI接口24接收數(shù)據(jù)。
每個功能單元22被耦合到一個或多個內(nèi)部總線。如下文所述,內(nèi)部總線是雙32位總線(即,一個總線用于讀取,一個總線用于寫入)?;谟布亩嗑€程處理器12也被構(gòu)造成使處理器12中的內(nèi)部總線的帶寬總和超過被耦合到處理器12的外部總線的帶寬。處理器12包括一個內(nèi)部核心處理器總線32(例如,“ASB高級系統(tǒng)總線(ASB)”),該總線將處理器核心20耦合到以下描述的存儲控制器26a、26c和ASB轉(zhuǎn)換器30。ASB總線32是與“Strong Arm”處理器核心20并用的所謂“高級微控制器總線結(jié)構(gòu)(AMBA)”總線的一個子集。AMBA是一個開放標準的芯片上的總線規(guī)范,它詳述了構(gòu)成“芯片上系統(tǒng)(SoC)”的功能塊的互連和管理的策略。處理器12也包括一個專用總線34,該總線將微引擎單元22耦合到SRAM控制器26b、ASB轉(zhuǎn)換器30和FBUS接口28。存儲器總線38將存儲控制器26a和26b耦合到總線接口24、28和包括用于引導操作的快閃只讀存儲器16c等的存儲器系統(tǒng)16。
參考圖2,每個微引擎22a-22f包括一個仲裁器,該仲裁器檢查標記,以確定將被操作的可用的線程。來自微引擎22a-22f中的任何微引擎的任何線程可以訪問SDRAM控制器26a、SDRAM控制器26b或FBUS接口28。存儲控制器26a和26b都包括多個隊列,以存儲未完成的(outstanding)存儲器引用請求。這些隊列或者維持存儲器引用的順序,或者安排存儲器引用,以便優(yōu)化存儲器帶寬。例如,如果thread_0不依賴于thread_1或與thread_1沒有關(guān)系,則thread_1和thread_0沒有理由打亂次序就不能完成它們對SRAM單元16b的存儲器引用。微引擎22a-22f向存儲控制器26a和26b發(fā)出存儲器引用請求。微引擎22a-22f使存儲器子系統(tǒng)26a和26b充滿足夠的存儲器引用操作,使得存儲器子系統(tǒng)26a和26b成為處理器12操作的瓶頸。
如果存儲器子系統(tǒng)16充滿本質(zhì)上獨立的存儲器請求,則處理器12可以執(zhí)行存儲器引用排序(sorting)。存儲器引用排序改善了可實現(xiàn)的存儲器帶寬。如下文所述,存儲器引用排序減少了訪問SRAM 16b時發(fā)生的停滯時間或泡影。利用對SRAM 16b的存儲器引用,在讀與寫之間切換信號線上的電流方向產(chǎn)生了等待電流在將SRAM 16b耦合到SRAM控制器26b的導體上穩(wěn)定的泡影或停滯時間。
也就是說,驅(qū)動總線上的電流的驅(qū)動器需要在變化的狀態(tài)之前達到穩(wěn)定。這樣,由讀取后跟寫入的的重復周期會降低峰值帶寬。存儲器引用排序允許處理器12組織對存儲的引用,以便長字(longword)符串的讀取后面可以跟隨長字符串的寫入。這可以被用來使流水線程中的停滯時間減到最小,以便有效地實現(xiàn)更接近于最大的可用帶寬。引用排序有助于維持并行硬件關(guān)聯(lián)文本線程。在SDRAM 16a上,引用排序允許隱藏從一個排(bank)到另一個排的預先充電。尤其是,如果存儲器系統(tǒng)16b被組織成一個奇數(shù)排和一個偶數(shù)排,在處理器正在操作奇數(shù)排的同時,則存儲控制器可以開始給偶數(shù)排預先充電。如果存儲器引用在奇數(shù)排與偶數(shù)排之間交替改變,則可以進行預先充電。通過命令存儲器引用交替改變對相反排的訪問,處理器12改善了SDRAM帶寬。此外,可使用其他的優(yōu)化。例如,可以使用合并優(yōu)化(其中,可被合并的操作在存儲器訪問之前被進行合并)、開頁優(yōu)化(其中,通過檢查地址,存儲器的打開也門不被重新打開)、鏈鎖(下文將加以描述)和刷新機制。
FBUS接口28支持MAC設(shè)備支持的每個端口的“發(fā)送與接收”標記,以及指出服務何時被保證的“中斷”標記。FBUS接口28也包括一個控制器28a,該控制器執(zhí)行來自FBUS 18的進入數(shù)據(jù)分組的頭部(head)處理??刂破?8a抽取數(shù)據(jù)分組的頭部,并執(zhí)行SRAM 16b中的可編微程序的源/目的地/協(xié)議散列查找(用于地址平滑)。如果散列沒有成功地解決,則數(shù)據(jù)分組的頭部被發(fā)送到處理器核心20作額外的處理。FBUS接口28支持以下的內(nèi)部數(shù)據(jù)處理FBUS單元(共享的總線SRAM)到/從微引擎。
FBUS單元(經(jīng)由專用總線) 從SDRAM單元寫入。
FBUS單元(經(jīng)由M總線) 讀到SDRAM。
FBUS 18是標準工業(yè)總線,包括一個數(shù)據(jù)總線(例如,64位寬以及用于地址的邊帶控制和讀/寫控制)。FBUS接口28通過使用一系列輸入和輸出FIFOs29a-29b來提供輸入大量數(shù)據(jù)的能力。從FIFOs 29a-29b中,微引擎22a-22f從其取出數(shù)據(jù)或命令SDRAM控制器26a將數(shù)據(jù)從接收FIFO(其中,數(shù)據(jù)來自總線18上的一個設(shè)備)移入FBUS接口28。經(jīng)由直接存儲器訪問,數(shù)據(jù)可以通過存儲控制器26a被發(fā)送SDRAM存儲器16a。同樣,經(jīng)由FBUS接口28,微引擎可以將數(shù)據(jù)從SDRAM 26a移到接口28,再移出到FBUS 18。
數(shù)據(jù)功能在各個微引擎22中被分配。與SRAM 26a、SDRAM 26b和FBUS 28的連通性是經(jīng)由命令請求。命令請求可以是存儲器請求或FBUS請求。例如,命令請求可以將數(shù)據(jù)從位于微引擎22a中的一個寄存器移到一個共享的資源,例如,SDRAM位置、SRAM位置、快閃存儲器或某個MAC地址。這些命令被發(fā)送出去到每個功能單元和共享資源。但是,共享資源不需要維持數(shù)據(jù)的局部緩沖。而是共享資源訪問位于微引擎22a-22f內(nèi)的分布式數(shù)據(jù)。這使微引擎22a-22f能夠?qū)?shù)據(jù)進行局部訪問,而不是仲裁總線上的訪問和總線的冒險連接。利用這個特點,就有0周期延遲用于等候微引擎22a-22f的內(nèi)部數(shù)據(jù)。
耦合這些共享資源(例如,存儲控制器26a和26b)的數(shù)據(jù)總線(例如,ASB總線30、SRAM總線34和SDRAM總線38)的帶寬足夠,以便沒有內(nèi)部瓶頸。為了避免瓶頸,處理器12有一個帶寬要求每個功能單元被提供至少是內(nèi)部總線的最大帶寬兩倍的帶寬。例如,SDRAM 16a可以按83MHz來運行64位寬的總線。SRAM數(shù)據(jù)總線可以具有分開的讀、寫總線(例如,可以是按166MHz運行的32位寬的讀總線和按166 MHz運行的32位寬的寫總線)。本質(zhì)上,按166MHz運行的64位實際上是SDRAM的帶寬的兩倍。
核心處理器20也可以訪問共享資源。核心處理器20經(jīng)由總線32與SDRAM控制器26a、總線接口24和SRAM控制器26b具有直接的通訊。但是,為了訪問微引擎22a-22f和位于微引擎22a-22f中的任何微引擎處的傳送寄存器(transfer register),核心處理器20經(jīng)由總線34上的ASB轉(zhuǎn)換器30來訪問微引擎22a-22f。ASB轉(zhuǎn)換器30物理上可以位于FBUS接口28中,但邏輯上是截然不同的。ASB轉(zhuǎn)換器30執(zhí)行FBUS微引擎?zhèn)魉图拇嫫魑恢门c核心處理器地址(即ASB總線)之間的地址轉(zhuǎn)換,以便核心處理器20能夠訪問屬于微引擎22a-22f的寄存器。
雖然微引擎22如以下所述可以使用寄存器裝置來交換數(shù)據(jù),但是,也提供了便箋式存儲器27,以允許微引擎將數(shù)據(jù)寫出到存儲器,供其他微引擎來讀取。便箋式存儲器27被耦合到總線34。
處理器核心20包括用五級流水線程(在一周期內(nèi)執(zhí)行一個操作數(shù)或者二個操作數(shù)的一周期移位)實現(xiàn)的一個RISC核心50,并提供乘法支持和32位桶(barrel)移位支持。這個RISC核心50是一個標準“Strong Arm@”結(jié)構(gòu),但是,由于性能的原因,它用五級流水線程來實現(xiàn)。處理器核心20也包括16千字節(jié)的指令高速緩沖存儲器52、8千字節(jié)的數(shù)據(jù)高速緩沖存儲器54和預先提取流緩沖器56。核心處理器20與存儲寫入和指令提取平行地執(zhí)行算術(shù)運算。核心處理器20經(jīng)由ARM定義的ASB總線與其他的功能單元連接。ASB總線是32位雙向總線32。
參考圖3,示出微引擎22a-22f中的一個示范微引擎(例如,微引擎22f)。微引擎包括控制存儲器70,在一項實施例中,該控制存儲器包括這里的32位1,024字的RAM。RAM存儲微程序(未示出)。微程序可由核心處理器20加載。微引擎22f也包括控制器邏輯72。控制器邏輯72包括指令解碼器73和程序計數(shù)器(PC)單元72a-72d。四個微程序計數(shù)器72a-72d被保持在硬件中。微引擎22f也包括關(guān)聯(lián)文本事件切換邏輯74。關(guān)聯(lián)文本事件邏輯74從每個共享資源(例如,SRAM 26a、SRAM 26b或處理器核心20、控制與狀態(tài)寄存器等)接收消息(例如,SEO_#_EVENT_RESPONSE;FBI_EVENT_RESPONSE;SRAM_EVENT_RESPONSE;SDRAM_EVENT_RESPONSE;以及ASB_EVENT_RESPONSE)。這些消息提供關(guān)于是否已經(jīng)完成被請求的功能的信息。根據(jù)由線程請求的功能是否已經(jīng)完成和已發(fā)出完成信號,線程需要等候那個完成信號;如果使線程能夠操作,則該線程被放置在可用的線程列表(未示出)上。微引擎22f最多可以具有4個可用線程。
除了屬于執(zhí)行線程本地的事件信號以外,微引擎22a-22f使用全局的信令狀態(tài)。利用信令狀態(tài),執(zhí)行線程可以將信號狀態(tài)播送到所有的微引擎22a-22f(例如,“接收請求可用(RRA)”信號),微引擎22a-22f中的任何和所有的線程可以根據(jù)這些信令狀態(tài)而分支轉(zhuǎn)移。這些信令狀態(tài)可被用來確定資源的可用性或資源是否應當用于服務。
關(guān)聯(lián)文本事件邏輯74對四(4)個線程進行仲裁。在一個實施例中,該仲裁是一種輪流機制。其他技術(shù)可被使用,包括優(yōu)先級隊列或加權(quán)的公平隊列。微引擎22f也包括一個執(zhí)行箱(EBOX)數(shù)據(jù)路徑76,該路徑包括一個算術(shù)邏輯單元(ALU)76a和通用寄存器裝置76b。ALU 76a執(zhí)行算術(shù)與邏輯功能,以及移位功能。寄存器裝置76b具有相對較多數(shù)量的通用寄存器。在一個實施例中,第一個排--排A中有64個通用寄存器,第二個排--排B中也有64個。通用寄存器被設(shè)置為窗口,以便它們可相對地和絕對地尋址。
微引擎22f也包括一個寫傳送寄存器堆棧78和一個讀轉(zhuǎn)移堆棧80。這些寄存器78和80也被分為窗口,以便它們可相對地和絕對地尋址。寫傳送寄存器堆棧78是到一個資源的寫數(shù)據(jù)所在之處。同樣,讀寄存器堆棧80用于來自共享資源的返回數(shù)據(jù)。在數(shù)據(jù)達到之后或在數(shù)據(jù)達到的同時,來自各個共享資源(例如,SRAM控制器26a、SDRAM控制器26b或核心處理器20)的一個事件信號將被提供給關(guān)聯(lián)文本事件仲裁器74,然后,該關(guān)聯(lián)文本事件仲裁器將警告線程數(shù)據(jù)可用或已經(jīng)被發(fā)送。傳送寄存器排78和80通過一個數(shù)據(jù)路徑被連接到執(zhí)行箱(EBOX)76。在一個實施例中,讀傳送寄存器擁有64個寄存器,寫傳送寄存器擁有64個寄存器。
參考圖4,微引擎數(shù)據(jù)路徑維持一個5級微流水線程82。這個流水線程包括微指令字的查找82a、寄存器文件地址的形成82b、來自寄存器文件的操作數(shù)的讀取82c、ALU移位或比較操作82d,以及將結(jié)果寫回寄存器82e。通過將一個寫回數(shù)據(jù)旁路提供到ALU/移位器單元內(nèi),并且通過假設(shè)寄存器被作為寄存器文件(而不是RAM)來實現(xiàn),微引擎22f可以執(zhí)行同時的寄存器文件的讀和寫,這完全隱藏了寫操作。
SDRAM接口26a將信號返回給對讀取提出請求的微引擎(指出是否發(fā)生有關(guān)讀取請求的一致校驗(parity)錯誤)。微引擎微碼負責當微引擎使用任何返回數(shù)據(jù)時核查SDRAM 16a讀取Parity(一致校驗)標記。一旦核查標記,如果它被設(shè)置,則在其上的分支轉(zhuǎn)移的動作就將它清除。當使SDRAM 16a能夠核查時,只發(fā)送Parity標記,SDRAM 16a得到一致校驗保護。只有微引擎22和PCI單元14是被通知一致校驗錯誤的請求器(requestors)。所以,如果處理器核心20或FIFO 18請求一致校驗保護,則微引擎協(xié)助實現(xiàn)該請求。微引擎22a-22f支持有條件的分支轉(zhuǎn)移。
指令集也包括發(fā)出存儲器引用給“靜態(tài)隨機存取存儲器(SRAM)”的一個指令。
將存儲器引用發(fā)給SRAM的指令的格式是sram[sram_cmd,$sram_xfer_reg,source_op1,source_op2,ref_count_or_queue_num_or_bit_op],optional_token。每個字段的描述如下所述。
“sram_cmd”字段指將在SRAM上被執(zhí)行的操作。操作包括bit_wr、讀取、read_lock、寫入、write_unlock、解鎖、壓入和彈出。
“bit_wr”操作設(shè)置或清除一個SRAM長字中的用戶指定位?!皉ead”操作從SRAM讀到SRAM傳送寄存器。“read_lock”操作鎖定存儲器,然后再對它進行讀取。如果存儲器已經(jīng)被鎖定,則一直等到它被解鎖。讀取鎖定操作總是要求“ctx_swap”任選標記(token)。
“write”操作從SRAM傳送寄存器寫到SRAM。“write_unlock”操作執(zhí)行寫入并為規(guī)定的地址解鎖。“解鎖”操作為規(guī)定的地址解鎖,而不執(zhí)行讀或?qū)憽?br>
“壓入”操作將由地址規(guī)定的一個列表的元素壓入規(guī)定的堆棧中。“彈出”操作彈出由來自規(guī)定的堆棧的地址所規(guī)定的一個列表的元素。
“$sram_xfer_reg”字段指出是否使用讀取、read_lock、寫入或write_unlocksram_cmd參數(shù),這個傳送寄存器的內(nèi)容是一套鄰近的寄存器的開端,這些寄存器分別接收或提供有關(guān)讀或?qū)懖僮鞯腟RAM數(shù)據(jù)。SRAM傳送寄存器的名稱總是從一個$符號開始。如果使用解鎖sram_cmd參數(shù),則這個寄存器是沒有意義的,并且使用“--”符號來代替寄存器名稱。如果使用彈出sram_cmd參數(shù),則這個寄存器包含執(zhí)行指向列表的指針,該列表從ref_count_orqueue_num所規(guī)定的隊列中被除去。如果壓入被指定為sram_cmd參數(shù),使用“--”符號,則這個寄存器沒有意義。如果使用bit_wr sram_cmd參數(shù),則這個寄存器包含位掩碼,該位掩碼選擇應該設(shè)置或清除哪些位。關(guān)于set_and_set_bits和set_and_clear_bits選項,這個寄存器還按原樣返回設(shè)置或清除位之前存在的原始數(shù)據(jù)。
“source_op1”和“source_op2”字段指有關(guān)關(guān)聯(lián)文本的寄存器或范圍從+31到0的5位零填充最近數(shù)據(jù)。這些字段被加在一起,以構(gòu)成對SRAM存儲空間的一個長字地址。關(guān)于壓入sram_cmd參數(shù),總和規(guī)定了將被壓入隊列中的地址。如果彈出被指定為sram_cmd參數(shù),則這個寄存器沒有意義,并且在這種情況下使用source_op1和source_op2的虛擬參數(shù)。
“ref_count_or_queue_num_or_bit_op”字段指出是否使用讀取、read_lock、寫入或write_unlocksram_cmd參數(shù),它規(guī)定用這一操作要引用的鄰近SRAM長字的數(shù)量。如果計數(shù)>1,則為每個后來的引用隱含地遞增SRAM地址。如果read_lock或write_unlock命令被規(guī)定為ref_count>1,則ref_count只是指被轉(zhuǎn)移的存儲字的數(shù)量,而不是指被鎖定或解鎖的地址的數(shù)量。每個引用的被鎖定或解鎖的地址的數(shù)量總是1。如果使用解鎖sram_cmd參數(shù),則這個寄存器沒有意義,總是使用1。如果使用壓入或彈出sram_cmd參數(shù),則這規(guī)定了8個壓入/彈出隊列中的一個隊列。有效的隊列號是0~7。如果使用bit_wrsram_cmd參數(shù),則必須使用以下參數(shù)中的一個參數(shù)set_bits、clear_bits、set_and_set_bits或set_and_clear_bits。set_bits和clear_bits被用來設(shè)置或清除使用被指定的位掩碼的地址處的位。set_and_set_bits和set_and_clear_bits也被用來設(shè)置或清除位,但是,按原樣返回操作之前存在的原始數(shù)據(jù)。
“sig_done”參數(shù)指出當引用完成時,用信號通知正在提供或吸收存儲數(shù)據(jù)的對應的微引擎/線程對。不與ctx_swap并用。
“ctx_swap”參數(shù)指出當發(fā)出存儲器引用時,交換出當前的線程執(zhí)行,以便讓另一個線程運行。不與sig_done并用,總是為讀取鎖定命令所要求。
“defer[1]”參數(shù)與ctx_swap選項并用;它指定一項指令間在這一引用之后并在關(guān)聯(lián)文本被交換之前被執(zhí)行,且不與sig_done并用。
“ordered”參數(shù)將這個SRAM引用放入有序隊列。有序隊列bl使用有序任選標記的引用的執(zhí)行順序。例如,如果一個線程發(fā)出兩個寫入(在第二個引用上具有sig_done任選標記),則兩個引用將需要是有序的,以確保第二個引用在第一個引用后結(jié)束。不與optimize_mem或優(yōu)先級并用。如果既不指定有序,也不指定optimize_mem,則默認值成為有序的。
“優(yōu)先級”參數(shù)將這個SRAM引用放入“優(yōu)先級”隊列。與其他存儲器引用相比,“優(yōu)先級”隊列為這個存儲器引用提供更高的優(yōu)先級。不與有序或optimize_mem并用。如果既不指定優(yōu)先級,也不指定optimize_mem,則默認值成為有序的。
通過自動地將SRAM引用放入“讀取”或“有序”隊列,“optimize_mem”參數(shù)優(yōu)化存儲器帶寬。根據(jù)操作是讀取還是寫入,來選擇“讀取”或“有序”隊列。這會導致按不同于發(fā)出引用的順序的一種順序來執(zhí)行引用。不與有序或優(yōu)先級并用。如果既不指定優(yōu)先級,也不指定optimize_mem,則默認值成為有序的。
“indirect_ref”參數(shù)指出,首要(overriding)限定符或額外限定符與這個引用有關(guān)。在前面的微字期間,這些限定符由ALU輸出。限定符的格式取決于SRAM命令。如以下插圖所示,讀/寫、壓入/彈出和bit_wr有不同的格式。
參考圖5,示出SRAM地址空間的方框圖。參考圖6,示出SRAM/寫命令的方框圖,其中位 字段 說明31OV如果被設(shè)置,則UENG ADDR字段首要由RAM指令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028UENG ADDR 指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。27OV如果被設(shè)置,則XADD字段首要由SRAM指令隱含的默認傳送寄存器地址。26ABS 如果被設(shè)置,則使微引擎?zhèn)魉图拇嫫髂軌蜻M行絕對尋址。如果位[27](OV)被設(shè)置,則這個位應該總是被設(shè)置。2521XADD 絕對的傳送寄存器地址。有效的地址是關(guān)聯(lián)文本0的0-7八個傳送寄存器。關(guān)聯(lián)文本1的8-15八個傳送寄存器。關(guān)聯(lián)文本2的16-23八個傳送寄存器。關(guān)聯(lián)文本3的24-31八個傳送寄存器。20OV 如果被設(shè)置,則REF CNT字段首要由SRAM指令指定的ref_count。1916REF CNT 將被轉(zhuǎn)移到SRAM或從SRAM被轉(zhuǎn)移的長字的數(shù)量。有效的REF CNT值是0~7,其中,長字的數(shù)量=REF CNT+1。15OV 如果被設(shè)置,則“字節(jié)掩碼”字段首要由SRAM指令隱含的0xFF的默認字節(jié)掩碼。1411RES 被保留。當讀取時,返回0。107 字節(jié)掩碼“字節(jié)掩碼”允許在被尋址的SRAM長字內(nèi)進行對齊的字節(jié)寫入操作。被寫入的這些字節(jié)由字節(jié)掩碼指定。
關(guān)于字節(jié)掩碼中的每個位,1的值使寫入能夠發(fā)生在對應的字節(jié)位置中,0的值保留以前存在的值。最低位對應于最右邊的字節(jié);最高位對應于最左邊的字節(jié)。
字節(jié)掩碼(而不是默認(0xF))請求SRAM控制器執(zhí)行讀取-修改-寫入操作,這會影響性能。63 RES 被保留。當讀取時,返回0。2 OV 如果被設(shè)置,則CTX字段首要由SRAM指令隱含的默認關(guān)聯(lián)文本。10 CTX 指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
參考圖7,示出壓入/彈出命令的方框圖,其中位 字段 說明31 OV如果被設(shè)置,則UENG ADDR字段首要由SRAM命令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028 UENG ADDR 指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。27 OV如果被設(shè)置,則XADD字段首要由SRAM指令隱含的默認傳送寄存器地址。26 ABS 如果被設(shè)置,則使微引擎?zhèn)魉图拇嫫髂軌蜻M行絕對尋址。如果位[27](OV)被設(shè)置,則這個位應該總是被設(shè)置。2521 XADD 絕對的傳送寄存器地址。有效的地址是關(guān)聯(lián)文本0的0-7八個傳送寄存器。關(guān)聯(lián)文本1的8-15八個傳送寄存器。關(guān)聯(lián)文本2的16-23八個傳送寄存器。關(guān)聯(lián)文本3的24-31八個傳送寄存器。20 OV 如果被設(shè)置,則REF CNT字段首要由SRAM指令指定的ref_count。19 RES 被保留。當讀取時,返回0。1816 列表REG 指定8個壓入/彈出寄存器中的一個壓入/彈出寄存器。有效的“列表REG”值是0~7。153 RES 被保留。當讀取時,返回0。2 OV 如果被設(shè)置,則CTX字段首要由SRAM指令隱含的默認關(guān)聯(lián)文本。10CTX 指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
參考圖8,示出“bit_WR命令”的“indirect_ref格式”的方框圖,其中位 字段 說明31 OV 如果被設(shè)置,則UENG ADDR字段首要由SRAM命令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028 UENG ADDR指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。27 OV 如果被設(shè)置,則XADD字段首要由SRAM指令隱含的默認傳送寄存器地址。26 ABS 如果被設(shè)置,則使微引擎?zhèn)魉图拇嫫髂軌蜻M行絕對尋址。如果位[27](OV)被設(shè)置,則這個位應該總是被設(shè)置。2521 XADD 絕對的傳送寄存器地址。有效的地址是關(guān)聯(lián)文本0
的0-7八個傳送寄存器。關(guān)聯(lián)文本1的8-15八個傳送寄存器。關(guān)聯(lián)文本2的16-23八個傳送寄存器。關(guān)聯(lián)文本3的24-31八個傳送寄存器。20OV 如果被設(shè)置,則TS和ST字段首要由SRAM指令指定的位操作。1918RES 被保留。當讀取時,返回0。17TS 當被設(shè)置時,指定讀取數(shù)據(jù)在寫入操作之前被返回,以便可以測試數(shù)據(jù)。16ST 指定操作是被設(shè)置(ST=1)還是清除(ST=0)。153 RES 被保留。當讀取時,返回0。2 OV 如果被設(shè)置,則CTX字段首要由SRAM指令隱含的默認關(guān)聯(lián)文本。10 CTX 指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
SRAM指令的幾個例子如下所述。
在一個例子中,sram[寫,$xfer7,tempa,tempb,1],optimize_mem指示將SRAM傳送寄存器$xfer7的關(guān)聯(lián)文本寫到由tempa+tempb指定的地址處的存儲位置。通過將這個引用放在“讀取”或“順序”隊列中,來優(yōu)化存儲器。
在一個例子中,sram[讀取,$xfer1,tempa,0x15,4],優(yōu)先級,ctx_swap,defer[1]immed[final_queue,0]將由temp+0x15指定的地址處的四個長字存儲位置讀入在$xfer1開始的鄰近的SRAM傳送寄存器。在執(zhí)行下一個指令之后,將引用放在優(yōu)先級隊列中并交換出關(guān)聯(lián)文本。
在另一個例子中,sram[彈出,$xfer2,--,--,4],optimize_mem,ctx_swap,defer[1]1d_field[protocol_group,0110,$$xfer0,>>8]。從隊列號4中彈出指示器,并將它返回SRAM傳送寄存器$xfer2。通過將這個引用放在“讀取”或“有序”隊列中來優(yōu)化存儲器,并且在執(zhí)行下一個指令(1d_field)之后交換出關(guān)聯(lián)文本。source_op1和source_op2的--符號指出,這些操作數(shù)不應用于彈出命令。
在另一個例子中,sram[壓入,--,head_offset,sram_buffer_descriptor_base,4]。將其值由head_offset+sram_buffer_descriptor_base指定的指示器壓入隊列4上。$sram_xfer_reg的--符號指出,這個傳送寄存器與壓入命令無關(guān)。
在另一個例子中,sram[read_lock,$xfer6,queue_descriptor_addr,0,2],optimize_mem,ctx_swap。鎖定由queue_descriptor_addr+0指定的位置處的SRAM存儲器,并且將存儲位置和下一個鄰近的位置讀入從$xfer6開始的鄰近的SRAM傳送寄存器。通過將這個引用放在“讀取”或“有序”隊列中,來優(yōu)化存儲器,并且交換出關(guān)聯(lián)文本。
在一個例子中,[write_unlock,$xfer1,queue_descriptor_addr,0,2],ctx_swap,defer[1]alu[tempa,--,b,@sram_counter_base]。為由queue_descriptor_addr+0指定的位置處的SRAM存儲器解鎖,并且將從$xfer6開始的兩個鄰近的SRAM傳送寄存器寫入SRAM存儲位置和下一個鄰近的位置。在執(zhí)行下一個指令(ALU)之后,交換出關(guān)聯(lián)文本。這個引用被放入默認(“有序”)隊列。
在另一個例子中,sram[解鎖,$xfer],queue_descriptor_addr,0,2],ctx_swap,defer[1]ALU[tempa,--,b,@sram_counter_base]。為由queue_descriptor_addr+0指定的位置處SRAM存儲器解碼。在執(zhí)行下一個指令(ALU)之后,交換出關(guān)聯(lián)文本。
在一個例子中,sram[bit_wr,$xfer5,tempa,0,set_bits]。設(shè)置SRAM傳送寄存器$xfer中的位掩碼所指定的位,該SRAM傳送寄存器$xfer在由tempa+0所指定的SRAM存儲器地址處。
在另一個例子中,sram[bit_wr,$xfer5,tempa,0,set_and_clear_bits]。清除由SRAM傳送寄存器$xfer5中的位掩碼所指定的位。該SRAM傳送寄存器$xfer5在由tempa+0所指定的SRAM存儲器地址處。將這個變化之前的那個位置處的全部32位數(shù)據(jù)返回到SRAM傳送寄存器$xfer5,以便可以測試這些位。
在另一個例子中,sram[讀取,$xfer1,tempa,0,1],有序/引用1sram[讀取,$xfer2,tempb,0,1],optimize_mem/引用2sram[讀取,$xfer3,tempc,0,1],有序/引用3。發(fā)出三個SRAM引用,并且一旦發(fā)出引用3,就交換出關(guān)聯(lián)文本。一旦完成引用3,就喚醒關(guān)聯(lián)文本。由于引用1與引用3整齊有序,因此,當關(guān)聯(lián)文本激活時,保證完成引用1。引用2不是有序的,所以,不保證它已經(jīng)完成。
計算機指令結(jié)構(gòu)也包括將存儲器引用發(fā)出到“同步動態(tài)隨機存取存儲器(SDRAM)”的一個指令。SDRAM指令的格式是sdram[sdram_cmd,$$sdram_xfer_reg,source_op1,source_op2,ref_count],optional_token其中,每個字段如下所述。
“sdram_cmd”字段代表將在SDRAM上執(zhí)行的操作,即,“read”命令從SDRAM讀到SDRAM傳送寄存器?!皐rite”命令從SDRAM傳送寄存器寫到SDRAM。以下將更加全面地描述,“r_fifo_rd”命令從接收FIFO讀到SDRAM,并且只是要求indirect_ref任選標記?!皌_fifo_wr”命令從SDRAM寫到發(fā)送FIFO,并且也總是要求indirect_ref任選標記。
“$$sdram_xfer_reg”字段是一個寄存器,它是分別接收或提供有關(guān)讀或?qū)懖僮鞯腟DRAM數(shù)據(jù)的一組鄰近的寄存器的開端。由于每個ref_count是指四倍字長,因此,兩個鄰近的傳送寄存器與每個ref_count有關(guān)。SDRAM傳送寄存器名稱總是從一個$$符號開始。
“source_op1”和“source_op2”字段是有關(guān)關(guān)聯(lián)文本的寄存器或范圍從+31到0的5位零填充最近數(shù)據(jù)。這些操作數(shù)被加在一起,以便構(gòu)成SDRAM地址。
“ref_count”字段代表將由該操作引用的鄰近的SDRAM四倍字長的數(shù)目。如果ref_count>1,則為每個后來的引用隱含遞增SDRAM地址。有效的ref_count值是1~4。關(guān)于大于4的ref_count值,使用indirect_ref任選標記。
“optional_token”是包含以下參數(shù)中的一個參數(shù)的用戶可任選的字段?!皊ig_done”參數(shù)指出,當引用完成時,用信號通知正在提供或吸收存儲數(shù)據(jù)的對應的微引擎/線程對。它不與ctx_swap或defer[1]參數(shù)并用。
“ctx_swap”參數(shù)指出,當發(fā)出存儲器引用時,交換出當前的線程執(zhí)行,以便讓另一個線程運行。不與chain_ref和sig_done并用。
“chain_ref”參數(shù)指出,來自這個微引擎/線程對的下一個SDRAM引用將由緊跟當前的引用的SDRAM單元來處理。直到鏈完成,SDRAM單元才會接受來自其他微引擎/線程對的引用。它不與ctx_swap或延期參數(shù)并用。一旦鏈開始,微引擎/線程對直到鏈完成才可以執(zhí)行分支轉(zhuǎn)移指令。
“defer[1]”參數(shù)與ctx_swap并用,并規(guī)定在關(guān)聯(lián)文本被交換之前,將在該引用后執(zhí)行一個指令。它不與chain_ref或sig_done參數(shù)并用。
“有序”參數(shù)將這個SDRAM引用放入一個有序隊列。該有序隊列保存使用有序任選標記的引用的執(zhí)行順序。例如,如果一個線程發(fā)出兩個寫入(在第二個引用上具有sig_done任選標記),則兩個引用將需要是有序的,以確保第二個引用在第一個引用后結(jié)束。不與optimize_mem或優(yōu)先級并用。如果既不指定優(yōu)先級,也不指定optimize_mem,則默認值成為有序的。
“優(yōu)先級”參數(shù)將這個SDRAM引用放入優(yōu)先級隊列。與其他存儲器引用相比,優(yōu)先級隊列為這個存儲器引用提供更高的優(yōu)先級。不與有序或optimize_mem并用。如果既不指定優(yōu)先級,也不指定optimize_mem,則默認值成為有序的。
通過自動地將SDRAM引用放入“奇數(shù)”或“偶數(shù)”隊列,“optimize_mem”參數(shù)優(yōu)化存儲器帶寬。根據(jù)地址引用數(shù)據(jù)是在奇數(shù)還是偶數(shù)SDRAM排中,來選擇“奇數(shù)”或“偶數(shù)”隊列。這會導致按不同于發(fā)出引用的順序的一種順序來執(zhí)行引用。不與有序或優(yōu)先級并用。如果既不指定優(yōu)先級,也不指定optimize_mem,則默認值成為有序的。
“indirect_ref”參數(shù)指出,基本限定符或額外限定符與這個引用有關(guān)。這些限定符在前面的微字期間由ALU輸出。限定符的格式取決于SDRAM命令。如以下各圖所示,讀/寫、r_fifo_rd和t_fifo_wr有不同的格式。
圖9是方框圖,表現(xiàn)了“indirect_refer讀/寫命令”的格式,其中位 字段 說明31 OV 如果被設(shè)置,則UENG ADDR字段首要由SDRAM命令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028 UENG ADDR指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。27 OV 如果被設(shè)置,則XADD字段首要由R_FIFO_RD指令隱含的默認傳送寄存器地址。26 ABS 如果被設(shè)置,則使微引擎?zhèn)魉图拇嫫髂軌蜻M行絕對尋址。如果位[27](OV)被設(shè)置,則這個位應該總是被設(shè)置。2521 XADD 絕對的傳送寄存器地址。
有效的地址是
關(guān)聯(lián)文本0的0-7八個傳送寄存器。
關(guān)聯(lián)文本1的8-15八個傳送寄存器。
關(guān)聯(lián)文本2的16-23八個傳送寄存器。
關(guān)聯(lián)文本3的24-31八個傳送寄存器。20 OV 如果被設(shè)置,則REF CNT字段首要由SDRAM指令指定的ref_count。1916 REF CNT 將被轉(zhuǎn)移到SDRAM或從SDRAM被轉(zhuǎn)移的四倍字長的數(shù)量。有效的REF CNT值是0~3,其中,四倍字長的數(shù)量=REF CNT+1。15 OV只應用于SDRAM寫入。如果被設(shè)置,則“字節(jié)掩碼”字段首要由SDRAM指令隱含的0xFF的默認字節(jié)掩碼?!白止?jié)掩碼”值(而非0xFF)要求REF CNT=1。147 字節(jié)掩碼“字節(jié)掩碼”允許在被尋址的SDRAM四倍字長內(nèi)進行對齊的字節(jié)寫入操作。被寫入的這些字節(jié)由字節(jié)掩碼指定。關(guān)于字節(jié)掩碼中的每個位,1的值使寫入能夠發(fā)生在對應的字節(jié)位置中,0的值保存以前存在的值。
最低位對應于最右邊的字節(jié);最高位對應于最左邊的字節(jié)。字節(jié)掩碼(除默認(0xFF)外)請求SDRAM控制器執(zhí)行讀取-修改-寫入操作,這會影響性能。63 RES 被保留。當讀取時,返回0。2OV 如果被設(shè)置,則CTX字段首要由SDRAM指令隱含的默認關(guān)聯(lián)文本。10 CTX 指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
參考圖10,示出“indirect_引用T_FIFO_WR”命令的格式的方框圖,其中位字段說明31 OV 如果被設(shè)置,則UENG ADDR字段首要由T_FIFO_WR指令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028 UENG ADDR指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。2721 RES 被保留。當讀取時,返回0。20 OV 如果被設(shè)置,則REF CNT字段首要由T_FIFO_WR指令指定的ref_count。1916 REF CNT 將被轉(zhuǎn)移到SDRAM或從SDRAM被轉(zhuǎn)移的四倍字長的數(shù)量。有效的REF CNT值是0~15。15 RES 被保留。當讀取時,返回0。1412 字節(jié)ALN 當尋址發(fā)送FIFO時,指出字節(jié)對準。114XMIT FIFOQWD ADDR指定發(fā)送FIFO中160個四倍字長中的一個四倍字長的地址。較低編號的地址首先被發(fā)送到FIFO總線上。3RES 被保留。當讀取時,返回0。2 OV 如果被設(shè)置,則CTX字段首要由T_FIFO_WR指令隱含的默認關(guān)聯(lián)文本。10 CTX 指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
參考圖11,示出read_引用R_FIFO_Rd命令的格式的方框圖,其中位 字段 說明31 OV 如果被設(shè)置,則UENG ADDR字段首要由SDRAM指令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028 UENG ADDR指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。2721 RES 被保留。當讀取時,返回0。20 OV 如果被設(shè)置,則REF CNT字段首要由T_FIFO_WR指令指定的ref_count。1916 REF CNT 將被轉(zhuǎn)移到SDRAM或從SDRAM被轉(zhuǎn)移的四倍字長的數(shù)量。有效的REF CNT值是0~15。1512 RES 被保留。當讀取時,返回0。114RECV FIFO QWD ADDR指定接收FIFO中160個四倍字長中的一個四倍字長的地址。較低編號的地址首先從FIFO總線被接收。3RES被保留。當讀取時,返回0。2 OV 如果被設(shè)置,則CTX字段首要由SDRAM指令隱含的默認關(guān)聯(lián)文本。10 CTX指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
計算機指令集也包括將存儲器引用發(fā)給便箋式存儲器的一個指令。
到暫時存儲器的存儲器引用指令的格式是scratch[scratch_cmd,$sram_xfer_reg,source_op1,source_op2,ref_count_or_bit_op],optional_token。每個字段在下文加以全面的描述。
“Scratch_cmd”字段代表將在便箋式存儲器上執(zhí)行的一項操作?!癰it_wr”操作設(shè)置或清除便箋式存儲器長字中的用戶指定位?!皉ead”操作從便箋式存儲器讀到SRAM傳送寄存器?!皩懭搿辈僮鲝腟RAM傳送寄存器寫到便箋式存儲器?!癷ncr”操作增加被尋址的便箋式存儲器位置;ref_count必須等于1。
如果使用read或write scratch_cmd參數(shù),則“$sram_xfer_reg”字段代表一組鄰近的寄存器的開端,這套寄存器分別接收或提供有關(guān)讀或?qū)懖僮鞯谋愎{式存儲器數(shù)據(jù)。如果使用incr scratch_cmd參數(shù),則這必須是“--”。SRAM傳送寄存器名稱總是從一個$符號開始。如果使用“bit_wr scratch_cmd”參數(shù),則這個寄存器包含一個位掩碼,該位掩碼選擇應該設(shè)置或清除哪些位。關(guān)于set_and_set_bits和set_and_clear_bits選項,當這個寄存器存在于設(shè)置或清除位之前時,它也返回原來的數(shù)據(jù)。
“source_op1”和“source_op2”字段代表有關(guān)關(guān)聯(lián)文本的寄存器或范圍從+31到0的5位零填充最近數(shù)據(jù)。這些操作數(shù)被加在一起,以構(gòu)成便箋式存儲器地址。有效的便箋式存儲器地址的范圍從0到1023。
如果使用read、write或incr scratch_cmd參數(shù),則“ref_count_or_bit_op”字段指定由操作引用的鄰近的便箋式存儲器長字的數(shù)量。如果計數(shù)>1,則為每個后來的引用隱含遞增便箋式存儲器地址。關(guān)于讀、寫操作的有效的引用計數(shù)值是1~8。如果使用incr scratch_cmd參數(shù),則引用計數(shù)必須是1。如果使用bit_wr scratch_cmd參數(shù),則也必須使用以下參數(shù)中的一個參數(shù)“set_bits”被用來設(shè)置或清除使用一個指定位掩碼的地址處的位。“clear_bits”被用來設(shè)置或清除使用指定位掩碼的地址處的位?!皊et_and_set_bits”也被用來設(shè)置或清除位,但按原樣返回操作之前就存在的原始數(shù)據(jù)。“set_and_clear_bits”也被用來設(shè)置或清除位,但按原樣返回當它存在于操作之前就存在的原始數(shù)據(jù)。
“optional_token”字段是包含以下所述的參數(shù)中的一個參數(shù)的用戶可任選的字段。
“sig_done”參數(shù)指出,當引用完成時,用信號通知正在提供或吸收存儲數(shù)據(jù)的對應的微引擎/線程對。不與ctx_swap并用。
“ctx_swap”參數(shù)指出,當發(fā)出存儲器引用時,交換出當前的線程執(zhí)行,以便讓另一個線程運行。不與sig_done并用。
“defer[1]”參數(shù)與sig_done或ctx_swap選項并用。在交換關(guān)聯(lián)文本之前,指定一個指令將在這個引用后被執(zhí)行。不與sig_done并用。
“indirect_ref”參數(shù)指出,基本限定符或額外限定符與這個引用有關(guān)。這些限定符在前面的微字期間由ALU輸出。限定符的格式取決于便箋式存儲器命令。
參考圖12,示出“讀/寫命令”的indirect_ref的格式的方框圖,其中,位字段 說明31 OV 如果被設(shè)置,則UENG ADDR字段首要由SCRATCH指令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028 UENG ADDR 指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。27 OV 如果被設(shè)置,則XADD字段首要由SCRATCH指令隱含的默認傳送寄存器地址。26 ABS 如果被設(shè)置,則使微引擎?zhèn)魉图拇嫫髂軌蜻M行絕對尋址。如果位[27](OV)被設(shè)置,則這個位應該總是被設(shè)置。2521 XADD絕對的傳送寄存器地址。
有效的地址是關(guān)聯(lián)文本0的0-7八個傳送寄存器。
關(guān)聯(lián)文本1的8-15八個傳送寄存器。關(guān)聯(lián)文本2的16-23八個傳送寄存器。關(guān)聯(lián)文本3的24-31八個傳送寄存器。20OV如果被設(shè)置,則REF CNT字段首要由SCRATCH指令指定的ref_count。1916REF CNT 將被轉(zhuǎn)移到便箋式存儲器或從便箋式存儲器被轉(zhuǎn)移的長字的數(shù)量。有效的REF CNT值是0~7,其中,長字的數(shù)量=REF CNT+1。15OV如果被設(shè)置,則“字節(jié)掩碼”字段首要由SCRATCH指令隱含的0xF的默認字節(jié)掩碼。1411RES 被保留。當讀取時,返回0。107 字節(jié)掩碼 “字節(jié)掩碼”允許在被尋址的便箋式存儲器長字內(nèi)進行對齊的字節(jié)寫入操作。被寫入的這些字節(jié)由字節(jié)掩碼指定。關(guān)于字節(jié)掩碼中的每個位,1的值使寫入能夠發(fā)生在對應的字節(jié)位置中,0的值保留以前存在的值。最低位對應于最右邊的字節(jié);最高位對應于最左邊的字節(jié)。字節(jié)掩碼(而不是默認(0xF))請求讀取-修改-寫入操作,這會影響性能。63 RES 被保留。當讀取時,返回0。2 OV如果被設(shè)置,則CTX字段首要由SCRATCH指令隱含的默認關(guān)聯(lián)文本。10 CTX 指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
參考圖13,示出“indirect_refbit_WR命令”的格式的方框圖,其中,位 字段 說明31 OV如果被設(shè)置,則UENG ADDR字段首要由擦除指令隱含的默認微引擎地址,它是發(fā)出引用的微引擎。3028 UENG ADDR 指定與存儲器引用有關(guān)的微引擎。如果位[31]=0,則這個字段任意。有效的UENG ADDR值是0~5。27 OV 如果被設(shè)置,則XADD字段首要由SCRATCH指令隱含的默認傳送寄存器地址。26 ABS 如果被設(shè)置,則使微引擎?zhèn)魉图拇嫫髂軌蜻M行絕對尋址。如果位[27](OV)被設(shè)置,則這個位應該總是被設(shè)置。2521 XADD 絕對的傳送寄存器地址。有效的地址是關(guān)聯(lián)文本0的0-7八個傳送寄存器。關(guān)聯(lián)文本1的8-15八個傳送寄存器。關(guān)聯(lián)文本2的16-23八個傳送寄存器。關(guān)聯(lián)文本3的24-31八個傳送寄存器。20 OV 如果被設(shè)置,則TS和ST字段首要由SCRATCH指令指定的位操作。1918 RES 被保留。當讀取時,返回0。17 TS 當被設(shè)置時,指定讀取數(shù)據(jù)在寫入操作之前被返回,以便可以測試數(shù)據(jù)。16 ST 指定操作是被設(shè)置(ST=1)還是清除(ST=0)。153RES 被保留。當讀取時,返回0。2 OV 如果被設(shè)置,則CTX字段首要由擦除指令隱含的默認關(guān)聯(lián)文本。10 CTX 指定與存儲器引用有關(guān)的關(guān)聯(lián)文本。如果位[2]=0,則這個字段任意。有效的CTX值是0~3。
不言而喻,已詳細描述了本發(fā)明,但是,前述的描述意在展示而不是限制本發(fā)明的范圍。本發(fā)明的范圍由所附權(quán)利要求的范圍定義。其他的方面、優(yōu)點和修改在以下的權(quán)利要求范圍內(nèi)。
權(quán)利要求
1.一種計算機指令,其特征在于包括一命令指令,該命令指令在線程的關(guān)聯(lián)文本無效時,向微處理器中執(zhí)行的線程所共享的存儲器中的一個地址發(fā)出一條存儲器引用。
2.權(quán)利要求1的指令,其特征在于其中,命令指令包括一命令字段,該命令字段設(shè)置或清除長字中的用戶指定位的命令字段。
3.權(quán)利要求1的指令,其特征在于其中,命令指令包括一命令字段,該命令字段從所述地址讀到與微引擎有關(guān)的傳送寄存器。
4.權(quán)利要求1的指令,其特征在于其中,命令指令包括一命令字段,該命令字段鎖定存儲器然后讀取存儲器。
5.權(quán)利要求1的指令,其特征在于其中,命令指令包括一命令字段,該命令字段從與微引擎有關(guān)的傳送寄存器寫到存儲器。
6.權(quán)利要求1的指令,其特征在于其中,命令指令包括一命令字段,該命令字段寫到所述地址并為所述地址解鎖。
7.權(quán)利要求1的指令,其特征在于其中,命令指令包括一命令字段,該命令字段將由所述地址指定的列表的元素壓入指定的堆棧中。
8.權(quán)利要求1的指令,其特征在于其中,命令指令包括一命令字段,該命令字段從指定的堆棧中彈出由所述地址指定的列表的元素。
9.權(quán)利要求1的指令,其特征在于包括被指定為指令中的一個參數(shù)的傳送寄存器。
10.權(quán)利要求1的指令,其特征在于還包括第一源操作數(shù)字段;以及,第二源操作數(shù)字段。
11.權(quán)利要求10的指令,其特征在于其中,第一源操作數(shù)和第二源操作數(shù)是與關(guān)聯(lián)相關(guān)的寄存器。
12.權(quán)利要求10的指令,其特征在于其中,第一源操作數(shù)和第二源操作數(shù)是范圍從+31到0的5位中間數(shù)據(jù)。
13.權(quán)利要求1的指令,其特征在于還包括被指定為指令中的一個參數(shù)的一個引用計數(shù)字段。
14.權(quán)利要求13的指令,其特征在于其中,引用計數(shù)字段在將被引用的存儲器中指定許多鄰近的長字。
15.權(quán)利要求1的指令,其特征在于還包括作為指令中的一個參數(shù)的一個隊列號。
16.權(quán)利要求15的指令,其特征在于其中,隊列號指定八個壓入/彈出隊列中的一個。
17.權(quán)利要求1的指令,其特征在于還包括作為指令中的一個參數(shù)的位操作數(shù)。
18.權(quán)利要求17的指令,其特征在于其中,位操作數(shù)用一字段的位掩碼來設(shè)置或清除一地址處的位。
19.權(quán)利要求1的指令,其特征在于還包括由程序設(shè)計員設(shè)置的一個任選標記。
20.權(quán)利要求19的指令,其特征在于其中,任選標記在完成時使所述指令給正在提供或吸收存儲數(shù)據(jù)的相應微引擎/線程對發(fā)出信號。
21.權(quán)利要求19的指令,其特征在于其中,任選標記換出當前線程執(zhí)行的關(guān)聯(lián)文本,以便讓另一個線程關(guān)聯(lián)文本執(zhí)行。
22.權(quán)利要求19的指令,其特征在于其中,任選標記在執(zhí)行一個指令之后換出一當前關(guān)聯(lián)文本線程。
23.權(quán)利要求19的指令,其特征在于其中,任選標記將存儲器引用放入一個有序隊列。
24.權(quán)利要求19的指令,其特征在于其中,任選標記將存儲器引用放入一個優(yōu)先級隊列。
25.權(quán)利要求19的指令,其特征在于其中,任選標記通過將存儲器引用放入一讀取或有序隊列來優(yōu)化存儲器帶寬。
26.權(quán)利要求19的指令,其特征在于其中,任選標記指示首要限定符。
27.權(quán)利要求1的指令,其特征在于其中,存儲器是同步動態(tài)隨機存取存儲器(SDRAM)。
28.權(quán)利要求1的指令,其特征在于其中,存儲器是同步隨機存取存儲器(SRAM)。
29.權(quán)利要求1的指令,其特征在于其中存儲器是便箋式存儲器。
30.一種操作處理器的方法,其特征在于包括將命令發(fā)給在微處理器中執(zhí)行的線程所共享的存儲器,每個線程具有一個有關(guān)的關(guān)聯(lián)文本;以及,當命令正在執(zhí)行時,不啟用發(fā)出所述命令的線程的關(guān)聯(lián)文本。
31.權(quán)利要求30的方法,其特征在于其中,命令包括在長字中設(shè)置用戶指定位。
32.權(quán)利要求30的方法,其特征在于其中,命令包括清除長字中的用戶指定位。
33.權(quán)利要求30的方法,其特征在于還包括提供存儲器中的一個地址,以引起變化。
34.權(quán)利要求33的方法,其特征在于其中,命令包括鎖定存儲器。
35.權(quán)利要求34的方法,其特征在于其中,命令還包括從所述地址讀到與微處理器有關(guān)的傳送寄存器。
36.權(quán)利要求33的方法,其特征在于還包括為存儲器解鎖;以及,從與微處理器有關(guān)的傳送寄存器寫到所述地址。
全文摘要
一種計算機指令包括一命令指令,該命令指令在線程的關(guān)聯(lián)文本無效時對微處理器中執(zhí)行的線程所共享的存儲器中的一個地址發(fā)出一存儲器引用。
文檔編號G06F9/30GK1402845SQ00815412
公開日2003年3月12日 申請日期2000年9月1日 優(yōu)先權(quán)日1999年9月1日
發(fā)明者G·沃爾瑞奇, M·J·艾迪萊塔, W·威勒, D·伯恩斯坦因, D·胡伯 申請人:英特爾公司