專利名稱:具有提高的操作效率的計(jì)算機(jī)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)和計(jì)算機(jī)處理器領(lǐng)域,具體涉及一種允許計(jì)算機(jī)執(zhí)行 從外部源接收到的指令而不需要先存儲所述指令的方法和裝置,以及一種利 用該方法和裝置來促進(jìn)計(jì)算機(jī)之間的通信和計(jì)算機(jī)使用另 一計(jì)算機(jī)的可用 資源的能力的相關(guān)方法。本創(chuàng)造性直接執(zhí)行方法和裝置的當(dāng)前主要應(yīng)用是, 在單個(gè)微芯片上與多臺計(jì)算機(jī)相結(jié)合,其中操作效率很重要,這不僅是因?yàn)?提高操作速度的需要,而且還因?yàn)楦咝仕鶎?dǎo)致的省電和降低熱量的緣 故。
背景技術(shù):
在計(jì)算領(lǐng)域,處理速度是一種非常期望的品質(zhì),因此對創(chuàng)建更快計(jì)算機(jī) 和處理器的探索一直在進(jìn)行。不過,在業(yè)界,通常公認(rèn)的是,提高微處理器速度的極限正被迅速逼近,至少對于利用目前已知的技術(shù)而言。因此,利用 多處理器通過分享處理器中的計(jì)算任務(wù)來提高整體計(jì)算速度越來越引起大 家的興趣。
多處理器的使用需要處理器之間的通信。因此,有相當(dāng)大的一部分時(shí)間 花費(fèi)于在處理器之間傳輸指令和數(shù)據(jù)的過程中。每條為了實(shí)現(xiàn)通信所必須被 執(zhí)行的附加指令,在處理過程中設(shè)置了一種遞增的延遲,其累積起來可能是 相當(dāng)大的。將指令或數(shù)據(jù)從一 臺計(jì)算機(jī)傳送到另 一 臺計(jì)算機(jī)的常規(guī)方法包
括首先將數(shù)據(jù)或指令存儲在接收計(jì)算機(jī)中,隨后調(diào)用數(shù)據(jù)或指令以用于在 所述計(jì)算機(jī)上執(zhí)行(在為指令的情況下)或者操作(在為數(shù)據(jù)的情況下)。
在現(xiàn)有技術(shù)中,已知的是,有時(shí)必需"引起計(jì)算機(jī)的注意,,。也就是說, 有時(shí)候即使計(jì)算機(jī)可能忙于一個(gè)任務(wù),但仍可能需要另一對時(shí)間敏感的任 務(wù),即可能必需使計(jì)算機(jī)暫時(shí)從第一任務(wù)移開。這種示例包括但不限于,將 輸入提供給計(jì)算機(jī)的情況。在這種情況下,計(jì)算機(jī)可能需要暫時(shí)對輸入進(jìn)行 確認(rèn)和/或#4居輸入進(jìn)行響應(yīng)。然后,計(jì)算機(jī)繼續(xù)在輸入之前正在進(jìn)行的工 作,或者基于該輸入改變正在進(jìn)行的工作。盡管在此處使用外部輸入作為示 例,不過當(dāng)在計(jì)算機(jī)內(nèi)部各方面之間存在用于引起ALU注意的潛在沖突時(shí), 也發(fā)生相同的狀況。
當(dāng)從1/ O端口接收數(shù)據(jù)或狀態(tài)改變時(shí),在現(xiàn)有技術(shù)中已存在兩種可用的 方法。 一種是"輪詢"該端口 ,這包括以固定的間隔讀取端口的狀態(tài),以確 定是否已接收到任何數(shù)據(jù)或者狀態(tài)改變已經(jīng)發(fā)生。不過,輪詢端口消耗相當(dāng) 多的時(shí)間和資源通常,較佳的可選方案是使用"中斷"。當(dāng)使用中斷時(shí),處 理器可以著手執(zhí)行其被分配的任務(wù),并且當(dāng)1/0端口/設(shè)備需要注意或狀態(tài)變 化時(shí),它將中斷請求(IRQ)發(fā)送到處理器。 一旦處理器接收到中斷請求, 處理器例如就結(jié)束其當(dāng)前指令,將少許事情放在堆棧中,然后執(zhí)行適當(dāng)?shù)闹?斷請求程序(ISR)。 一旦ISR結(jié)束,處理器就返回至其離開的位置。利用 這種方法,處理器不必要浪費(fèi)時(shí)間來查看1/0設(shè)備是否需要注意,而是僅在 設(shè)備需要注意時(shí)提供中斷服務(wù)。不過,在許多情況下,使用中斷遠(yuǎn)達(dá)不到期望,這是由于可能存在大量的與使用中斷有關(guān)的開銷。例如,每次發(fā)生中斷 時(shí),計(jì)算機(jī)可能不得不暫時(shí)存儲一定的與它之前試圖實(shí)現(xiàn)的任務(wù)有關(guān)的數(shù) 據(jù),然后載入有關(guān)中斷的數(shù)據(jù),再然后一旦處理完中斷,就再載入先前任務(wù) 所需的數(shù)據(jù)。
利用基于Forth計(jì)算機(jī)語言的系統(tǒng)可以發(fā)現(xiàn)上述系統(tǒng)的改進(jìn)。Forth系統(tǒng) 已經(jīng)能夠使代碼的一個(gè)以上的"線程,,(thread)同時(shí)執(zhí)行。這通常稱為協(xié) 作循環(huán)(round-robin)。線程利用中央處理單元(CPU)獲得時(shí)機(jī)(turn) 的順序是固定的;例如,線程4總是在線程3之后且在線程5之前獲得時(shí)機(jī)。 每個(gè)線程都被允許占用CPU它想占用的時(shí)間,然后自愿地放棄它。線程通 過調(diào)用字PAUSE來這樣做。相對于在中斷作用期間需要被節(jié)省的大量上下 文,為了待被恢復(fù)的原始任務(wù),在PAUSE作用期間僅有少許數(shù)據(jù)項(xiàng)需要被 節(jié)省。
每個(gè)線程都可能有或沒有工作要做。如果任務(wù)4有工作要做,并且循環(huán) 中在它之前的任務(wù)(任務(wù)3)調(diào)用PAUSE,那么任務(wù)4將醒來并且工作,直 到它確定再次PAUSE。如果任務(wù)4沒有工作要做,則它將控制傳遞給任務(wù)5。 當(dāng)任務(wù)調(diào)用將執(zhí)行輸入/輸出功能并將因此需要等待輸入/輸出完成的字時(shí), PAUSE被內(nèi)置于輸入/輸出調(diào)用中。
PAUSE的可預(yù)測性考慮到了十分有效的代碼?;贔orth的協(xié)作循環(huán)經(jīng) ??梢栽谳^之利用搶先多任務(wù)器來判斷誰應(yīng)該在下一次獲得CPU所用的時(shí) 間少的時(shí)間內(nèi),在CPU處給每條現(xiàn)有線程一時(shí)機(jī)。不過,特定的任務(wù)可能 趨于覆蓋或壓倒CPU。
通過最小化計(jì)算機(jī)系統(tǒng)中的漏電流可以發(fā)現(xiàn)操作效率的另 一方面。在使 設(shè)備更小的探索中,隨著絕緣層變薄,漏電流會增加。在不久的將來,泄漏 功率可能高達(dá)有效功率的50%。 一種抑制漏電流的嘗試可以通過利用休眠 (sleeping)晶體管來達(dá)到。休眠的晶體管用作在不需要電源與邏輯塊時(shí)來 隔離或斷開電源與邏輯塊的開關(guān)。這可以使泄漏功率降低2-1000倍,如同 2006年7月14日公布在Embedded.Com上的Bob Crepps的名稱為如/^炎供
9才^"《卓^傳,秀潛種f //ow to/Vov/c e a尸ow^v^9c/ewf Ac/i"ecZMre j的文章 中所揭示的一樣。
不過,在利用休眠晶體管時(shí)存在若干缺點(diǎn)。為了有效使用這些晶體管, 在系統(tǒng)中需要考慮許多因素。休眠晶體管的閾值電壓需要很大;否則,休眠 晶體管將具有很高的漏電流。這需要CMOS技術(shù)工藝中進(jìn)行修改,以既支 持用于休眠晶體管的高閾值電壓器件,又支持用于邏輯門電路的低閾值電壓 器件。此外,大休眠晶體管增加了區(qū)域開銷以及用于導(dǎo)通和截止晶體管所消 耗的動(dòng)能。
為了確保電路的適當(dāng)功能性,休眠晶體管必須被小心地設(shè)計(jì)尺寸以減少 它們導(dǎo)通時(shí)的壓降。在不同時(shí)刻切換的兩個(gè)門電路可以共享一個(gè)休眠晶體 管。不過,這對大型電路來說是不太實(shí)際。確定用于大型電路的休眠晶體管 的最佳實(shí)施方式的算法是必要的。
有關(guān)休眠晶體管的其它問題包括在電路中生成噪聲,以及當(dāng)用于將雙穩(wěn) 態(tài)多諧振蕩器與地或供給電壓斷開時(shí)的數(shù)據(jù)丟失,如同2004年公布的Farzan Fallah等人的名稱為CMOS 冶廖戶W^y^和承動(dòng)濕冶^控鉀和處小^ M她必y朋d ^4WveCmat^ Cow&o/ awJ Mz>n>m-za^ow CMOS 的文章中所揭示的一樣。所需要的是一種減少漏電流并提供 更有效且問題更少的計(jì)算機(jī)處理器系統(tǒng)的方法和/或裝置。
發(fā)明內(nèi)容
減少在計(jì)算機(jī)之間傳送、接收然后使用數(shù)據(jù)或指令格式的信息所需的步 驟數(shù),將是十分有用的。減少或消除中斷期間所消耗的時(shí)間和資源也將是需 要的。此外,除了CPU之外,擴(kuò)展PAUSE功能將是十分有利的。不過,據(jù) 發(fā)明人所知,沒有任何現(xiàn)有技術(shù)的系統(tǒng)以有效的方式簡化了上述過程。
計(jì)算機(jī)處理器陣列被公開,其中功率使用和熱量發(fā)散被最小化,而計(jì)算 效率被最大化。這部分地通過計(jì)算機(jī)處理器陣列來實(shí)現(xiàn),其中處理器,也稱 為節(jié)點(diǎn)或核在不處于操作模式時(shí)變成不活躍但警醒。不活躍的節(jié)點(diǎn)或核心在不活躍時(shí)基本上不消耗功率,并且當(dāng)相鄰節(jié)點(diǎn)或管腳試圖與之通信時(shí)變成活 躍。在執(zhí)行輸入的任務(wù)之后,節(jié)點(diǎn)將變回到不活躍的狀態(tài),直到另一任務(wù)被 發(fā)送至該節(jié)點(diǎn)。
在核為當(dāng)前執(zhí)行代碼或指令時(shí)也能實(shí)現(xiàn)陣列效率,并且相鄰核與執(zhí)行核 通信。除了如常規(guī)計(jì)算系統(tǒng)一樣中斷執(zhí)行核之外,核也可以被編程為,偶爾 暫停以檢驗(yàn)輸入的消息。如果有輸入的消息在等待,那么執(zhí)行核可以在暫停 之后作用于輸入的消息,然后繼續(xù)它原來的任務(wù)。
如同此處所描述的和在附圖的幾幅圖中所圖示的 一 樣,考慮到對執(zhí)行本 發(fā)明的模式和其工業(yè)實(shí)用性的說明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明的 這些和其它目的和優(yōu)點(diǎn)將變得清楚。所列出的目的和優(yōu)點(diǎn)不是本發(fā)明所有可 能優(yōu)點(diǎn)的窮盡列舉。而且,即使在一個(gè)或多個(gè)預(yù)計(jì)目的和/或優(yōu)點(diǎn)在實(shí)際應(yīng) 用中可能缺少或者不需要的情況下,也將可能實(shí)現(xiàn)本發(fā)明。
進(jìn)一步地,本領(lǐng)域的^支術(shù)人員應(yīng)該認(rèn)識到本發(fā)明的各種實(shí)施例可以實(shí)現(xiàn) 所描述的目的和/或優(yōu)點(diǎn)中的一個(gè)或更多,但沒有必要是全部。因此,這里 所描述的目的和/或優(yōu)點(diǎn)不是本發(fā)明的必要元素,也不應(yīng)該作為限制來解釋。
圖1是根據(jù)本發(fā)明的計(jì)算機(jī)陣列的簡圖2是示出圖1計(jì)算^L的子集和圖1中互連數(shù)據(jù)總線的更多詳情的詳細(xì)視
圖3是描述圖1和圖2中的一臺處理器的通用布局的框圖4是根據(jù)本創(chuàng)造性申請的指令字的圖示;
圖5是描述根據(jù)本發(fā)明的微循環(huán)示例的流程圖6是描述用于執(zhí)行來自端口的指令創(chuàng)造性方法的示例的流程圖7是描述用于提警(alert)計(jì)算機(jī)的創(chuàng)造性改進(jìn)方法的示例的流程圖8是描述用于喚醒處理器并將輸入發(fā)送到執(zhí)行處理器的方法的流程圖9是帶有處理器或節(jié)點(diǎn)識別并且利用鏡像與相鄰處理器共享端口的圖1中處理器陣列的簡圖9a是帶有附加端口細(xì)節(jié)的圖9的局部視圖10是I/O寄存器的局部視圖ll是描述工作員模式循環(huán)的流程圖;和
圖12是描述具有PAUSE例行程序的執(zhí)行處理器的流程圖。
具體實(shí)施例方式
參照附圖對本發(fā)明進(jìn)行說明,在附圖中,相同的標(biāo)記表示相同或相似的 元件。雖然按照用于實(shí)現(xiàn)本發(fā)明目的的方式對本發(fā)明進(jìn)行描述,但是本領(lǐng)域 的技術(shù)人員應(yīng)該理解,可以根據(jù)這些所教授的東西在不脫離所要求的本發(fā)明 的精神或范圍的情況下做出各種修改。
此處所描述和/或在附圖中所示的本發(fā)明的實(shí)施例和變形,僅通過示例 的方式被呈現(xiàn)出來,并不用于限制本發(fā)明的范圍。除非以另外的方式具體指 出,否則由于本發(fā)明意在適于多種變化,所以本發(fā)明可以在保持所要求發(fā)明 的精神和范圍的同時(shí),針對多種實(shí)際應(yīng)用對本發(fā)明的各個(gè)方案和部件省略或 修改。
以下發(fā)明中描述了這樣的處理器(也稱為計(jì)算機(jī)、節(jié)點(diǎn)或者核),即運(yùn) 行在稱作"休眠但警醒"或"不活躍但警醒"的模式中,這兩種模式都是指, 處理器的功能已經(jīng)被暫時(shí)地掛起、暫停或停止而基本上不使用任何功率的操 作模式。同時(shí),處理器是警醒的或者處于準(zhǔn)備就緒的狀態(tài),從而當(dāng)被指示進(jìn) 行處理功能時(shí)能立即開始處理功能。當(dāng)不活躍處理器接收到處理指令時(shí),稱 作"正被喚醒"或"變成激活"。
一種用于實(shí)現(xiàn)本發(fā)明的模式是各個(gè)計(jì)算機(jī)處理器的陣列。該陣列在圖1 的簡圖中被描述,并且在此處總地用附圖標(biāo)記IO表示。處理器陣列IO具有 多個(gè)(在所示的示例中,為24個(gè))計(jì)算機(jī)處理器12 (在陣列的示例中,有 時(shí)也稱作"核"或"節(jié)點(diǎn),,)。在所示的示例中,所有處理器12都位于單 個(gè)芯片(die) 14上。根據(jù)本發(fā)明,每個(gè)處理器12通常都是獨(dú)立運(yùn)行的處理
12器,這在下文中將更詳細(xì)地論述。處理器12通過多條(該數(shù)量將在下文中 更詳細(xì)地論述)互連數(shù)據(jù)總線16互連。在該示例中,數(shù)據(jù)總線16是雙向、 異步、高速、并行的數(shù)據(jù)總線,盡管針對此目的采用其它互連方式也落入本 發(fā)明的范圍中。在本實(shí)施例的陣列IO中,不僅處理器12之間的數(shù)據(jù)通信是 異步的,而且各個(gè)處理器12內(nèi)部也以異步模式運(yùn)行。這些已經(jīng)由本發(fā)明人 發(fā)現(xiàn),從而提供重要的優(yōu)勢。例如,由于時(shí)鐘信號不必要被分布在整個(gè)處理 器陣列10上,因此就很省電。此外,不必發(fā)布時(shí)鐘信號消除了許多定時(shí)問 題,這些定時(shí)問題可能限制陣列10的尺寸或可能導(dǎo)致其它公知的麻煩。而 且,各個(gè)計(jì)算機(jī)異步運(yùn)行的事實(shí),節(jié)省了大量的功率,這是由于每臺計(jì)算機(jī) 不執(zhí)行指令時(shí),將基本上不使用任何功率,原因在于其中不運(yùn)行任何時(shí)鐘。
本領(lǐng)域的技術(shù)人員應(yīng)該認(rèn)識到,出于清晰的考慮,芯片14上的額外部 分在圖1的視圖中被省略了。這些額外部分包括但不限于電力總線、外部連 接鍵盤和微處理器芯片的其它這類公共方面。
處理器12e是一個(gè)不位于陣列IO周界上的處理器12的示例。也就是說, 處理器12e具有四個(gè)垂直相鄰的處理器12a、 12b、 12c和12d,盡管使用四 個(gè)以上的相鄰處理器也落入本發(fā)明的范圍內(nèi)。作為示例,對處理器12a-12e 進(jìn)行的這種分組將在下文中用于對陣列IO的處理器12之間的通信進(jìn)行更為 詳細(xì)的討論。在圖1的示圖中可以看到的是,例如處理器12e的內(nèi)部處理器 將具有經(jīng)由總線16與其直接通信的其它至少四個(gè)處理器12。在下面的論述 中,所論述的原理將適用于所有的處理器12,除了位于陣列IO周界上的處 理器12將僅與其它三個(gè)處理器12直接通信之外,還除了邊角處理器12將 僅與其它兩個(gè)處理器12直接通信。
圖2是圖1的一部分的更為詳細(xì)的視圖,其僅僅示出了一些處理器12, 具體而言,僅僅包括處理器12a-12e。圖2的示圖還揭示出每條數(shù)據(jù)總線 16均具有讀取線18、寫入線20和多條(在該示例中,為18條)數(shù)據(jù)線22 。 數(shù)據(jù)線22能夠幾乎同時(shí)地并行傳輸一個(gè)18比特的指令字的所有比特。應(yīng)該 注意的是,在本發(fā)明的一個(gè)實(shí)施例中, 一些處理器12是相鄰處理器的鏡像。不過,不論處理器12是全部同一定向的或者是作為相鄰計(jì)算機(jī)的鏡像,都 不是目前所描述發(fā)明的限制方案。
根據(jù)本發(fā)明的一個(gè)方案,例如處理器12e的處理器12可以將其讀取線 18中的一條、兩條、三條或所有四條都設(shè)定為高電平,以便預(yù)備從相應(yīng)的 一臺、兩臺、三臺或四臺相鄰處理器12接收數(shù)據(jù)。類似地,處理器12將其 寫入線20中的一條、兩條、三條或所有四條都設(shè)定為高電平也是可能的。
當(dāng)相鄰處理器12a、 12b、 12c或12d中的一個(gè)將它本身與處理器12e之間的 寫入線20設(shè)定為高電平時(shí),如果處理器12e已經(jīng)將對應(yīng)的讀取線18設(shè)定為 高電平,那么在相關(guān)數(shù)據(jù)線22上,字將從那個(gè)處理器12a、 12b、 12c或12d 傳輸?shù)教幚砥?2e。然后,發(fā)送處理器12將釋放寫入線20,而接收處理器
(在該示例中,為12e)將寫入線20和讀取線18都拉低。后一動(dòng)作將向發(fā) 送處理器12確認(rèn)已經(jīng)接收到數(shù)據(jù)。需要注意的是,上述描述意不在于必需 按次序表示事件的順序。在實(shí)際實(shí)踐中,接收處理器可以在發(fā)送處理器12 釋放(停止拉高)其寫入線20之前不久,就試圖將寫入線20設(shè)定為低電平。 在這樣的例子中,發(fā)送處理器12 —旦釋放其寫入線20,寫入線20就由接 收處理器12e拉低。重要的是要注意到,當(dāng)發(fā)送處理器12的寫入線20變成 高電平時(shí),數(shù)據(jù)或代碼已經(jīng)被傳輸;因此,接收處理器(在該示例中,為 12e)僅需要鎖存該數(shù)據(jù)/代碼,用于基本瞬時(shí)的響應(yīng)。
如果處理器12e試圖向處理器12a寫入,那么處理器12e會將處理器12e 與處理器12a之間的寫入線20設(shè)定為高電平。如果處理器12e與處理器12a 之間的讀取線18那時(shí)還沒有被處理器12a設(shè)定為高電平,那么處理器12e 將只是等待,直到處理器12a確實(shí)將該讀取線20設(shè)定為高電平。當(dāng)相應(yīng)的 一對寫入線18和讀取線20都被設(shè)成高電平時(shí),等待在數(shù)據(jù)線22上被傳輸 的數(shù)據(jù)被傳輸。此后,發(fā)送處理器12e—旦釋放寫入線18,接收處理器12
(在該示例中,是處理器12a)就將兩個(gè)處理器(在該示例中,是12e和12a) 之間的讀取線18和寫入線20都設(shè)定為低電平。
除非數(shù)據(jù)將要發(fā)送到的處理器12已經(jīng)將其讀取線18設(shè)置為高,在這種情況下,數(shù)據(jù)會被立即發(fā)送,否則,只要諸如處理器12e的處理器12已經(jīng) 將其寫入線20中的一條設(shè)置為高以期望寫入,它都將僅僅等待而幾乎不耗 電,直到數(shù)據(jù)如上文所述那樣由合適的鄰近處理器12 "請求"。類似地, 只要處理器12在期望讀取過程中將其一或多條讀取線18設(shè)定為高電平,它 就只是等待而幾乎不耗電,直到連接至所選擇處理器12的寫入線20成為高 電平,以在這兩個(gè)處理器12之間傳輸指令字。
如上所述,可能存在幾種潛在的裝置和/或方法,以使得處理器12如所 描述的一樣運(yùn)行。不過,在本示例中,處理器12之所以這樣運(yùn)轉(zhuǎn),僅僅是 因?yàn)樗鼈冊趦?nèi)部通常也異步運(yùn)行(除了以所描述的異步方式在它們之間傳輸 數(shù)據(jù)之外)。也就是說,指令通常被順序地完成。當(dāng)寫入或讀取指令出現(xiàn)時(shí), 可以不采取任何進(jìn)一步的動(dòng)作,直到指令被完成(或者,或許可選地,直到 其被"重置,,等中止)。在現(xiàn)有技術(shù)的意義中,并不存在規(guī)則的時(shí)鐘脈沖。 更確切地說,只有當(dāng)正被執(zhí)行的指令不是讀取型或?qū)懭胄椭噶?假定讀取或 寫入型指令通常需要由另一實(shí)體完成)時(shí),或者當(dāng)讀取型或?qū)懭胄偷牟僮鲗?shí) 際上已經(jīng)完成時(shí),脈沖才產(chǎn)生以實(shí)現(xiàn)下一指令。
圖3是描述圖1和圖2中一臺處理器12示例的通用布局的框圖。從圖 3的示圖中可以看出,每臺處理器12—般均為自身具有RAM24和ROM26 的計(jì)算機(jī)。如之前所提到的是,處理器12有時(shí)還稱為各個(gè)"節(jié)點(diǎn)",在該 示例中假定它們被組合在單個(gè)芯片上。
處理器12的其它基礎(chǔ)部件是返回堆棧(return stack) 28 (包括下文中 將論述的R寄存器29)、指令區(qū)域30、算術(shù)邏輯部件("ALU"或"處理 器")32、數(shù)據(jù)堆棧34和用于解碼指令的解碼邏輯部分36。本領(lǐng)域的技術(shù) 人員通常會熟悉基于堆棧的計(jì)算機(jī)的操作,例如本示例的處理器12。處理 器12是具有數(shù)據(jù)堆棧34和分立的返回堆棧28的雙堆棧處理器。圖3還示 出了分別用于返回堆棧和數(shù)據(jù)堆棧的循環(huán)寄存器陣列28a和34a,連同數(shù)據(jù) 堆棧34的T寄存器44和S寄存器46。
在本發(fā)明的該實(shí)施例中,處理器12具有四個(gè)通信端口 38,用于與相鄰處理器12通信。通信端口 38是三態(tài)驅(qū)動(dòng)器,具有截止?fàn)顟B(tài)、接收狀態(tài)(用 于將信號驅(qū)動(dòng)進(jìn)入處理器12中)和發(fā)送狀態(tài)(用于將信號驅(qū)動(dòng)出處理器12)。 如果特定的處理器12不位于陣列(圖1)內(nèi)部,例如處理器12e的示例,那 么至少為了以上所描述的目的,在所述特定的處理器中將不會使用一個(gè)或多 個(gè)通信端口 38。不過,那些確實(shí)鄰接芯片14邊緣的通信端口 38可以具有 被設(shè)計(jì)在這種處理器12中或者被設(shè)計(jì)在處理器12的外部但與之相連的附加 電路,從而使得這種通信端口 38擔(dān)當(dāng)外部1/0端口 39 (圖1)。這樣的外 部I/O端口 39的示例包括但不限于USB (通用串行總線)端口 、 RS232串 行總線端口 、并行通信端口 、模擬-數(shù)字和/或數(shù)字-模擬轉(zhuǎn)換端口 ,和其它許 多可能的變形。無論是什么類型的附加或修改電路應(yīng)用于這個(gè)目的,根據(jù)本 發(fā)明當(dāng)前所描述的實(shí)施例,"外部"1/0端口 39的對于從其接收到的指令和 /或數(shù)據(jù)的處理的操作方法,將與此處關(guān)于"內(nèi)部,,通信端口 38所描述的相 似。在圖l中,"邊緣,,處理器12f被描述為與相關(guān)接口電路80 (示為塊圖 形式) 一起通過外部1/0端口 39與外部設(shè)備82通信。
在當(dāng)前所描述的實(shí)施例中,指令區(qū)域30包括許多寄存器40,在該示例 中,包括有A寄存器40a、 B寄存器40b,和P寄存器40c。在該示例中,A 寄存器40a是滿18位的寄存器,而B寄存器40b和P寄存器40c是9位的 寄存器。I/O寄存器47 ( 18位)位于存儲器(ROM 26和RAM 24 )與通信 端口 38之間。1/0寄存器47將在下文中更詳細(xì)地進(jìn)行公開。
盡管本發(fā)明不受該示例的限制,但是目前處理器12執(zhí)行自然的Forth。 熟悉Forth計(jì)算機(jī)語言的人員應(yīng)該理解,被認(rèn)為是Forth "字"的復(fù)雜Forth 指令,由為計(jì)算機(jī)設(shè)計(jì)的自然處理器指令構(gòu)成。Forth字的集合被認(rèn)為是"字 典(dictionary)"。如下文中將更詳細(xì)描述的,處理器12每次從RAM 24、 ROM26或直接從一條數(shù)據(jù)總線16 (圖2)讀取18比特。由于在Forth中, 大多數(shù)指令(被認(rèn)為是無操作數(shù)指令)直接從堆棧28和34獲得它們的操作 數(shù),所以它們通常在長度上只有五比特,以便在組中的最后指令選自只需要 3比特的有限指令集合的狀況下,有多達(dá)四條指令都可以被包括在單個(gè)18
16比特的指令字中。
圖4是指令字48的圖示。(應(yīng)該注意的是,指令字48實(shí)際可以包含指 令、數(shù)據(jù),或它們的某種組合。)指令字48由18比特50組成。由于是二 進(jìn)制計(jì)算機(jī),所以每個(gè)比特50都將為"1"或"0"。 如在此之前所論述的, 18比特寬的指令字48可以在稱為時(shí)段零54a、時(shí)段一 54b、時(shí)段二54c和時(shí) 段三54d的四個(gè)時(shí)段54中包括多達(dá)四條指令52。在本發(fā)明的該實(shí)施例中, 18比特的指令字48 —直作為整體被讀取。因此,由于在指令字48中一直 存在具有多達(dá)四條指令的可能性,所以NOP (非操作)指令被包括在處理 器12的指令集合中,以規(guī)定當(dāng)使用所有可用時(shí)段54可能不必要或者甚至不 需要時(shí)的情況。
除了此處之前論述的寄存器之外,指令區(qū)域30還具有用于存儲當(dāng)前正 被使用的指令字48的18比特的指令寄存器30a;和在當(dāng)前被執(zhí)行的特定指 令中針對指令的附加5比特操作碼寄存器30b。
如前面所述,每條指令52的i4比特66根據(jù)該指令是讀取還是寫入型 指令而被設(shè)置,相對于該指令是不需要任何輸入還是不需要輸出的一條指 令。指令52中的其余比特50為該指令提供了特定操作碼的剩余部分。在讀 取或?qū)懭胄椭噶畹那闆r下,在該特定處理器12中, 一個(gè)或更多的比特可以 用于指示數(shù)據(jù)將從何處讀取或者寫入何處。在本發(fā)明的該示例中,將被寫入
的數(shù)據(jù)直來自于T寄存器44 (數(shù)據(jù)堆棧34的頂部),但是數(shù)據(jù)可以有選 擇地被讀入T寄存器44或者指令區(qū)域30,從此處可以執(zhí)行數(shù)據(jù)。這是由于 在本發(fā)明的該具體實(shí)施例中,數(shù)據(jù)或者指令可以以此處所描述的方式被傳 送,并且指令因此可以直接從數(shù)據(jù)總線16執(zhí)行。
一個(gè)或者更多的比特50將被用于指示端口 38的哪一個(gè)將被設(shè)置成讀取 或?qū)懭耄绻羞@樣端口的話??蛇x地,后一操作通過利用一個(gè)或更多的比 特來指定寄存器40,例如A寄存器40a、 B寄存器40b等而被完成。在這樣 的示例中,所指定的寄存器40將被預(yù)載入數(shù)據(jù),數(shù)據(jù)具有對應(yīng)于每個(gè)端口 38 (并且還有處理器12可能試圖與其通信的其它任何潛在實(shí)體,例如存儲器(RAM24或ROM26)、外部通信端口 39,等等)的比特。例如,特定 寄存器40中的四個(gè)比特中的每個(gè)可以分別對應(yīng)于上端口 38a、右端口 38b、 左端口 38c或下端口 38d中的每個(gè)。在這種情況下,在那些比特的位置的任 一處存在'l,的地方,通信將被設(shè)定成通過相應(yīng)端口 38進(jìn)行。在本發(fā)明的該 實(shí)施例中,所期望的是,讀取操作碼可能在單個(gè)指令中設(shè)置一個(gè)以上的用于 通信的端口 38。
緊接下來的例子將假定處理器12e試圖寫入處理器12c的通信,盡管該 示例適用于任何相鄰處理器12之間的通信。當(dāng)寫入指令在寫入處理器12e 中被執(zhí)行時(shí),所選擇的寫入線20(在該示例中是處理器12e與12c之間的寫 入線20)被設(shè)定為高電平,如果相應(yīng)的讀取線18已經(jīng)是高電平,那么數(shù)據(jù) 從所選擇的位置通過所選擇的通信端口 38:故立即發(fā)送?;蛘?,如果相應(yīng)的 讀取線18還不是高電平,那么處理器12e將僅停止操作,直到相應(yīng)的讀取 線18確定變成高電平。
至于當(dāng)讀取或?qū)懭胄椭噶畋煌瓿蓵r(shí)處理器12e的操作如何重新開始,這 種^L制是這樣的當(dāng)處理器12e與12c之間的讀取線18和相應(yīng)的寫入線20 都為高電平時(shí),那么線18和20都將由保持其為高電平的每個(gè)相應(yīng)的處理器 12釋放。(在該示例中,發(fā)送處理器12e將保持寫入線18為高電平,而接 收處理器12c將保持讀取線20為高電平)。然后,接收處理器12c將線18 和20都拉低。在實(shí)際的實(shí)踐中,接收處理器12c可能在發(fā)送處理器12e釋 放寫入線18之前就試圖將線18和20拉低。但是,由于線18和2(H皮拉高 并且僅被不牢靠地保持(鎖存)為低電平,因此任何將線18和20拉低的企 圖實(shí)際上將無法成功,直到線18或20由正保持其為高電平的處理器12所 釋放。
當(dāng)數(shù)據(jù)總線16中的線18和20都被拉低時(shí),這為"確認(rèn)"條件?;?這種確認(rèn)條件,每一處理器12e和12c將它自己內(nèi)部的確認(rèn)線設(shè)定為高電平。
依照前面論述可以理解的是,不管處理器12e是首先試圖向處理器12c 寫入還是處理器12c首先試圖從處理器12e讀取,這些操作在本質(zhì)上是相同
18的。直到處理器12e和12c都預(yù)備好,并且無論哪一個(gè)處理器12e或者12c 首先預(yù)備好第一個(gè)處理器12都僅僅"變?yōu)椴换钴S"直到另一處理器12e或 12c完成傳輸,操作才能完成。觀察前述過程的另一方式在于,實(shí)際上寫入 處理器12e和接收處理器12c當(dāng)它們分別執(zhí)行寫入和讀出指令時(shí)都變?yōu)椴换?躍,但是,當(dāng)讀取線18和寫入線20都是高電平時(shí),進(jìn)行處理的后者幾乎立 即重新激活(reactivate),然而開始處理的第一處理器12可以幾乎不確定 地保持不活躍直到第二處理器12預(yù)備好完成該過程。
發(fā)明人相信的是,用于實(shí)現(xiàn)設(shè)備之間有效異步通信的關(guān)鍵特征在于確認(rèn) 信號或條件的類型。在現(xiàn)有技術(shù)中,大多數(shù)設(shè)備之間的通信被計(jì)時(shí),并且對 于發(fā)送設(shè)備來說并沒有了解接收設(shè)備已正確接收到數(shù)據(jù)的直接方式。例如校 驗(yàn)和的操作方法可能已經(jīng)用于試圖確保數(shù)據(jù)被正確接收到,但是發(fā)送設(shè)備沒 有操作完成的任何直接指示。如此處所描述的,本創(chuàng)造性的方法提供了必要 的確認(rèn)條件,其允許或至少使設(shè)備之間的異步通信實(shí)用化。此外,確認(rèn)條件 也使一或多臺設(shè)備"變?yōu)椴换钴S"直到確認(rèn)條件發(fā)生成為可能。確認(rèn)條件可 以通過正在處理器12之間發(fā)送(或者通過互連數(shù)據(jù)總線16或者通過單獨(dú)的 信號線)的單獨(dú)信號而在處理器12之間被傳送,并且這樣的確認(rèn)信號將在 本發(fā)明的該方案的范圍之內(nèi)。然而,根據(jù)此處所描述的本發(fā)明的實(shí)施例,可 以理解的是,這里存在甚至更多的經(jīng)濟(jì)利益,原因在于,用于確認(rèn)的方法不 需要任何額外的信號、時(shí)鐘周期、定時(shí)脈沖,或除了上述之外的任何這類資 源,來實(shí)際上影響通信。
由于四條指令52可以被包括在指令字48中,并且由于根據(jù)本發(fā)明,整 個(gè)指令字48可以在處理器12之間被一次傳送,這展示了用于在一個(gè)操作中 傳送非常小程序的理想機(jī)會。例如,多數(shù)小"For/Next"循環(huán)可以在單個(gè)指 令字48中被實(shí)現(xiàn)。圖5是微循環(huán)100的圖示。不同于其它現(xiàn)有技術(shù)的循環(huán), 微循環(huán)100具有FOR指令102和NEXT指令104。由于指令字48 (圖4 ) 包含多達(dá)四條指令52,因此指令字48可以在單個(gè)指令字48中包括三個(gè)操 作指令106。操作指令106本質(zhì)上可以是程序員可能想要將其包括在微循環(huán)100中的任何可用的指令。可以從一個(gè)處理器12傳送到另一個(gè)的微循環(huán)100 的典型示例可以是,用于讀取或者寫入第二個(gè)處理器12的RAM 24的一組 指令,以便第一處理器12可以"借出"可用的RAM24容量。
FOR指令102將表示所需迭代數(shù)的值壓入返回堆棧28上。也就是說, 數(shù)據(jù)堆棧34頂部的T寄存器44中的值被壓入(PUSH )到返回堆棧28的R 寄存器29中。FOR指令102可以被設(shè)置在任意時(shí)段54中。當(dāng)FOR指令102 沒有被設(shè)置在時(shí)段三54d中時(shí),該指令字48中的剩余指令52將在進(jìn)行微循 環(huán)IOO之前被執(zhí)行,這通常將是下一次被載入的指令字48。
根據(jù)本發(fā)明當(dāng)前所描述的實(shí)施例,在圖5的示圖中所描述的NEXT指令 104是特定類型的NEXT指令104。這是因?yàn)樗挥跁r(shí)段三54d (圖4)中。 根據(jù)本發(fā)明的該實(shí)施例,假定特定指令字40中所有遵照"普通,,NEXT指 令(未示出)的數(shù)據(jù)是地址(for/next循環(huán)開始的地址)。無論用于NEXT 指令104的操作碼位于四個(gè)時(shí)段54中的哪一個(gè)(除了很明顯的例外,即如 前面所論述的,如果其位于時(shí)段三54d,則前兩位數(shù)被布i定,而不是詳細(xì)寫 出)中,它都是相同的。但是,由于當(dāng)處于時(shí)段三54d中時(shí)沒有任何遵照 NEXT指令104的地址數(shù)據(jù),因此也可以假定時(shí)段三54d中的NEXT指令 104是MICRO-NEXT指令104a。 MICRO-NEXT指令104a使用第 一指令52 的地址,其位于所在的同一指令字48的時(shí)段零54a中,作為其返回地址。 MICRO-NEXT指令104a也可以取R寄存器29中的值(它最初由FOR指令 壓到這里),對它減l,然后將它返回到R寄存器29。當(dāng)R寄存器29中的 值達(dá)到預(yù)定值(例如0)時(shí),那么MICRO-NEXT指令將載入下一個(gè)指令字 48,并在此處如上所述繼續(xù)進(jìn)行。但是,當(dāng)MICRO-NEXT指令104a從R 寄存器29中讀取的值大于預(yù)定值時(shí),在自身指令字48的時(shí)段零54a處重新 開始操作,并執(zhí)行其中包含的位于在時(shí)段零到時(shí)段三中的三條指令52。也 就是說,在本發(fā)明的該實(shí)施例中,MICRO-NEXT指令104a將一直執(zhí)行三條 操作指令106。在某些情況下,由于可能不需要使用所有三條潛在可用的指 令52,因此按照需要,"NOP"指令可用于填充一個(gè)或兩個(gè)時(shí)段54。應(yīng)該注意的是,微循環(huán)IOO可以整個(gè)被用于單個(gè)處理器12中。實(shí)際上, 整組可用的機(jī)器語言指令都可以作為操作指令106使用,并且對微循環(huán)的應(yīng) 用和使用僅受限于程序員的構(gòu)想。但是,當(dāng)在單個(gè)指令字48中執(zhí)行整個(gè)微 循環(huán)100的能力,與允許處理器12將指令字48發(fā)送到相鄰處理器12以在 其中執(zhí)行本質(zhì)上直接來自數(shù)據(jù)總線16的指令52的能力相結(jié)合時(shí),這提供了 用于允許處理器12利用其相鄰處理器的資源有力工具。
如此處所述,全部包含在單個(gè)數(shù)據(jù)字48中的小孩t循環(huán)IOO可以在處理 器12之間被傳送,并且其可以直接從接收處理器12的通信端口 38被執(zhí)行, 如同此處所述的指令字48中所包含的其它任何指令組。這類"微循環(huán)"100 雖然存在很多用途,但典型的用途在于一個(gè)處理器12想要將一些數(shù)據(jù)存儲 在相鄰處理器12的存儲器中。例如,它可以首先將指令發(fā)送到該相鄰處理 器,以告訴它將輸入的數(shù)據(jù)字存儲在特定的存儲器地址,然后遞增該地址, 再然后重復(fù)給定的迭代數(shù)(數(shù)據(jù)字將被傳送的次數(shù))。為了讀回?cái)?shù)據(jù),第一 處理器將僅指令第二計(jì)算機(jī)(這里指用于存儲的計(jì)算機(jī))使用類似的微循環(huán) 將已存儲數(shù)據(jù)寫回到第 一處理器。
通過結(jié)合此處所述的直接執(zhí)行方案來使用微循環(huán)100結(jié)構(gòu),處理器12 可以使用另一休眠的相鄰處理器12,用于當(dāng)數(shù)據(jù)存儲需要超過內(nèi)置于單個(gè) 處理器12中的相對較小容量時(shí),存儲超出數(shù)據(jù)。雖然該示例按照數(shù)據(jù)存儲 進(jìn)行了描述,不過相同的技術(shù)可以等同地用于允許處理器12使其鄰居共享 其計(jì)算資源-通過創(chuàng)建微循環(huán)100來使其它處理器12執(zhí)行一些操作,存儲 結(jié)果,并且重復(fù)給定次數(shù)。可以理解的是,本創(chuàng)造性的微循環(huán)IOO結(jié)構(gòu)可以 被使用的方式的數(shù)量幾乎是無限的。
如在此之前所提到的,在本發(fā)明的當(dāng)前所描述實(shí)施例中,數(shù)據(jù)或指令都 可以通過此處所描述的方式進(jìn)行通信,因此指令實(shí)質(zhì)上可以直接從數(shù)據(jù)總線 16^皮執(zhí)行。也就是說,不需要在執(zhí)行之前將指令存儲到RAM 24中,然后 再調(diào)用它們。相反,根據(jù)本發(fā)明的這個(gè)方案,在通信端口 38接收到的指令 字48在本質(zhì)上沒有被視為與假設(shè)從RAM 24或ROM 26再調(diào)用的情況有所不同。
一種可用的機(jī)器語言指令是FETCH指令。FETCH指令使用A寄存器 40a中的地址以確定從何處取出18比特的字。當(dāng)然,將不得不為了在A寄 存器40a中設(shè)置正確的地址而提供程序。如在此之前所論述的,A寄存器40a 是18比特的寄存器,以便有足夠的地址數(shù)據(jù)范圍,以用于區(qū)別所述取出可 能發(fā)生自哪個(gè)任何潛在資源。也就是說,存在分配給ROM的地址范圍,分 配給RAM的不同地址范圍,并且存在用于每個(gè)端口 38和用于外部I/O端口 39的特定地址。FETCH指令一直將其取出的18比特設(shè)置在T寄存器44中。 在此存在重要的優(yōu)點(diǎn),原因在于循環(huán)內(nèi)部沒有任何指令取出。因此,在效率 上有接近30%的提高,并且在功耗上有相應(yīng)的減少。
相反地,如在此之前所論述的,可執(zhí)行指令(相對于數(shù)據(jù))被暫時(shí)存儲 在指令寄存器30a中。不存在專用的命令,用于將18比特的指令字48 "取,, 到指令寄存器30a中。相反,當(dāng)在指令寄存器30a中未留下任何更多的可執(zhí) 行指令時(shí),處理器將自動(dòng)取出"下一"指令字48。"下一"指令所在位置 是由"程序計(jì)數(shù)器,,或"pc,,,此處稱為P寄存器40c來確定的。在從RAM 24或ROM 26中取出指令字48序列的情況下,P寄存器40c通常自動(dòng)遞增。 然而,對于這個(gè)總原則也有許多例外。例如,JUMP或CALL指令將導(dǎo)致P 寄存器40c將被載入地址,該地址由JUMP或CALL指令后的當(dāng)前栽入指令 字48的剩余部分中的數(shù)據(jù)所指定,而不是被遞增。然后,當(dāng)P寄存器40c 被載入對應(yīng)于一或更多端口 38的地址時(shí),那么下一指令字48將從端口 38 被載入指令寄存器30a。當(dāng)指令字48剛從端口 38被取回到指令寄存器30a 時(shí),P寄存器40c也不遞增。相反,它將繼續(xù)保持相同端口地址,直到執(zhí)行 專用JUMP或CALL指令,以改變P寄存器40c。也就是說, 一旦告訴處理 器12從端口 38尋找它的下一條指令,那么它就將從同一端口 38 (或多個(gè) 端口 38)繼續(xù)尋找指令,直到其被告知尋找其它地方,例如返回到存儲器 (RAM24或ROM26)以尋找它的下一指令字48。
如以上所應(yīng)該注意的,在當(dāng)前指令字48中未留下任何更多的可執(zhí)行指
22令時(shí),處理器12知道已取出的下一個(gè)18比特將被放置在指令寄存器30a中。 在默認(rèn)情況下,在JUMP或CALL指令(或者也在此處將不被具體論述的其 它一些指令)之后,在當(dāng)前指令字48中未留下任何更多的可執(zhí)行指令,這 是因?yàn)楦鶕?jù)定義遵照J(rèn)UMP或CALL指令的18比特的指令字的剩余部分被 專用于由JUMP或CALL指令所引用的地址。另一種陳述方式是,前述過程 在許多方式下是獨(dú)一無二的,包括但不限于這種事實(shí),即JUMP或CALL指 令可選地到端口 38而不是只到存儲器地址等等。
應(yīng)該記住的是,如在此之前所論述的,處理器12可以從一個(gè)端口 38或 從端口組38的任何一個(gè)尋找其下一條指令。因此,提供對應(yīng)于端口 38的各 種組合的地址。例如,當(dāng)處理器被告知從端口組38中取出指令時(shí),它將從 所選擇端口 38的任一個(gè)接受第一個(gè)可用指令字48。如果沒有相鄰處理器12 試圖向這些端口 38中的任一個(gè)寫入,如前面所詳細(xì)描述的,所被考慮的是 處理器12將"變?yōu)椴换钴S",直到鄰居確實(shí)向所選擇的端口 38寫入為止。 圖6是描述以上所述的直接執(zhí)行方法120的示例的流程圖。如在此之前 所論述的,當(dāng)指令寄存器30a中不再留下可執(zhí)行指令時(shí),操作的"正常 (normal)"流程將開始。這時(shí),如由"取出字"操作122所指示的,處理 器12將"取出"另一指令字(注意這里所使用術(shù)語"取出"是普通含義上 的,因?yàn)閷?shí)際的FETCH指令并沒有被使用)。該操作將按照P寄存器40c 中的地址(由圖6流程圖中的"地址"判斷操作124所指示)被完成。如果 P寄存器40c中的地址是RAM 24或ROM 26地址,那么下一指令字48將 在"從存儲器中取出"的操作126中從指定的存儲器位置被取回。另一方面, 如果P寄存器40c中的地址是端口 38或多個(gè)端口 38的地址(不是存儲器地 址),那么下一指令字48將在"從端口取出,,的操作128中從指定的端口 位置被取回。在任一情況下,被取回的指令字48在"取回指令字,,的操作 130中被放置在指令寄存器30c中。如在此之前所描述的,在"執(zhí)行指令字,, 的操作132中,指令字48的時(shí)段54中的指令依次被完成。
在"跳轉(zhuǎn)"判斷的操作134中,確定指令字48中的操作之一是JUMP,其它的將操作從連續(xù)"正常"進(jìn)程轉(zhuǎn)移的指
令。如果是,那么如圖6的示圖所示,在"載入P寄存器"的操作136中, 在JUMP (或其它這種)指令之后,指令字48中所提供的地址被提供給P 寄存器40c,并且在"取出字,,的操作122中,序列再次開始。如果否,那 么下一個(gè)動(dòng)作取決于最后指令的取出是來自端口 38還是來自存儲器地址, 如"端口地址"判斷操作138中所示。如果最后指令的取出是來自端口 38, 那么不對P寄存器30a作任何修改,并且序列從"取出字,,的操作122開始 重復(fù)。另一方面,如果最后指令的取出是來自存儲器地址(RAM24或ROM 26),那么在"取出字,,的操作122完成之前,P寄存器30a中的地址被遞 增,如圖6中的"遞增P寄存器"操作140所示。
以上描述并不是用來表示實(shí)際的操作步驟。相反,它是由此產(chǎn)生的根據(jù) 本發(fā)明所述實(shí)施例被執(zhí)行的各種判斷和操作的圖示。實(shí)際上,該流程圖不應(yīng) 該被理解成意味著每個(gè)所描述和所顯示的步驟都需要分開的明顯的順序步 驟。實(shí)際上,圖6的流程圖中的許多所述操作在實(shí)踐中通常同時(shí)完成。
圖7是描述用于提醒處理器的方法示例150的流程圖。如在此之前所論 述的,所述實(shí)施例中的處理器12在等待輸入的同時(shí)將"變?yōu)椴换钴S"。這 樣的輸入可以來自關(guān)于圖1到圖4所述實(shí)施例中的相鄰處理器12??蛇x擇 地,也如同在此之前所論述的,具有鄰接芯片14邊緣的通信端口 38的處理 器12可以具有附加電路,所述附加電路設(shè)計(jì)在這種處理器12中或者設(shè)計(jì)在 處理器12與之相連的外部,以4吏這種通信端口 38擔(dān)當(dāng)外部I/0端口 39。在 任一情況下,本創(chuàng)造性的組合可以提供附加優(yōu)點(diǎn),即"不活躍,,處理器12 可以保持狀態(tài),并預(yù)備好在接收到輸入時(shí)激活并跳轉(zhuǎn)到 一些規(guī)定的動(dòng)作中。 該過程稱作工作員模式(worker mode)。
每臺處理器12被編程為,跳轉(zhuǎn)(JUMP)到其被啟動(dòng)時(shí)的地址,該地址 是將啟動(dòng)該特定處理器12開始處理其指定工作的第一指令字48的地址。指 令字可以位于,例如ROM26中。在冷啟動(dòng)之后,處理器12可以載入程序, 例如被認(rèn)為是工作員模式循環(huán)的程序。用于中央處理器12、邊緣處理器12
24和邊角處理器12的工作員模式循環(huán)是不同的。此外, 一些處理器12可以在 與它們在陣列10內(nèi)位置有關(guān)的ROM中的引導(dǎo)程序(boot-up)處具有專用 任務(wù)。下文中將對工作員模式進(jìn)行更詳細(xì)地描述。
雖然有很多可以使用這種特征的方式,在圖7的示圖中僅示出一種示例 用于圖示這樣的"計(jì)算機(jī)提醒方法,,,并且在此處用附圖標(biāo)記150列出。從 圖7的示圖中可以看出,在"不活躍但警醒狀態(tài),,的操作152中,處理器 12被促使"變?yōu)椴换钴S,,,以便其正在等待來自相鄰處理器12或者一臺以 上(可多達(dá)所有的四臺)相鄰計(jì)算機(jī)的輸入,或者在"邊緣,,處理器12的 情況下,等待外部輸入,或者等待外部輸入和/或來自鄰居處理器12的輸入 的某種組合。如同在此之前所述的,處理器12可以在等待讀取或?qū)懭氩僮?的完成時(shí)"變?yōu)椴换钴S"。如同該示例中所描述的,當(dāng)處理器12正被用于 等待一些可能的"輸入"時(shí),那么自然會假定,等待處理器在等待來自鄰居 或外部源的"寫入"時(shí)已將它的讀取線18設(shè)定為高電平。實(shí)際上,目前所 預(yù)期的是,這將是通常的狀況。然而,等待處理器12將它的寫入線20設(shè)定 為高電平并且因此在鄰居或外部源從其"讀取"時(shí)將被激活,都在本發(fā)明的 范圍之內(nèi)。
在"激活"的操作154中,不活躍的處理器12被促使重新開始操作, 這是因?yàn)橄噜徧幚砥?2或外部設(shè)備39已完成了正被等待的處理。如果正被 等待的處理是接收將被執(zhí)行的指令字48,那么處理器12將在此繼續(xù)執(zhí)行其 中的指令。如果正被等待的處理是接收數(shù)據(jù),那么處理器12將繼續(xù)執(zhí)行隊(duì) 列中的下一條指令,其將是目前指令字48的下一時(shí)段54中的指令,或者下 一指令字48將被載入,并且下一指令將位于下一指令字48的時(shí)段0中。在 任何情況下,既然以所描述的方式被使用,那么下一條指令將開始一條或多 條指令的序列(sequence),用于處理剛接收到的輸入。用于處理這種輸入 的選項(xiàng)可以包括,對執(zhí)行某種內(nèi)部預(yù)定功能的反應(yīng),與陣列10中的一臺或 多臺其它處理器12通信,甚或是忽略輸入(正如同常規(guī)現(xiàn)有技術(shù)一樣,中 斷可以在規(guī)定的條件下被忽略)。選項(xiàng)在圖7的示圖中被描述為"作用于輸
25入"的操作156。應(yīng)該注意的是,在一些例子中,輸入的內(nèi)容可能不重要。 例如,在一些情況下,外部設(shè)備試圖進(jìn)行感興趣的通信可能才是事實(shí)。
本領(lǐng)域的技術(shù)人員人將認(rèn)識到,前述操作模式將用作比使用常規(guī)中斷更 有效的替代方案。當(dāng)處理器12已將其一條或多條讀取線18 (或?qū)懭刖€20) 設(shè)定為高電平時(shí),可以說是處于"警醒,,狀態(tài)。在警醒狀態(tài)中,處理器12 預(yù)備好立即執(zhí)行在對應(yīng)于被設(shè)定為高電平的一條或多條讀取線18的數(shù)據(jù)總 線16上被發(fā)送至此的任何指令,或者可選擇地,作用于在數(shù)據(jù)總線16上被 傳輸?shù)臄?shù)據(jù)。當(dāng)有處理器12的陣列可用時(shí),在任何給定時(shí)刻, 一臺或多臺 處理器將處于前述警醒狀態(tài),以便所規(guī)定的輸入組中的任一個(gè)將觸發(fā)它進(jìn)行 動(dòng)作狀態(tài)。優(yōu)選地,使用常規(guī)中斷技術(shù)來"引起處理器的注意",這是因?yàn)?中斷將導(dǎo)致處理器必須響應(yīng)于中斷需求來存儲一定數(shù)據(jù),載入一定數(shù)據(jù),等 等。按照本發(fā)明,處理器可以被設(shè)置在警醒狀態(tài)并專用于等待感興趣的輸入, 以便在由這些輸入觸發(fā)的指令開始執(zhí)行時(shí),不會浪費(fèi)一個(gè)指令周期。此外, 注意到的是,在目前所述的實(shí)施例中,警醒狀態(tài)中的處理器實(shí)際上將是"不 活躍",這意味著它們基本上不使用任何功率,但在它們會由輸入立即觸發(fā) 進(jìn)入動(dòng)作方面,又是"警醒"的。不過,即使不處于"不活躍"狀態(tài),"警 醒"狀態(tài)仍可以體現(xiàn)在處理器中,這些都在本發(fā)明的該方案的范圍之內(nèi)。所 描述的警醒狀態(tài)基本上可以用于任何狀況下,其中常規(guī)現(xiàn)有技術(shù)的中斷(或 者是硬件中斷或者是軟件中斷)可能以其它方式被使用。
圖8是計(jì)算機(jī)提警方法150a的另一示例。這只是一個(gè)示例,其中監(jiān)控 處理器12f (圖1)與另一個(gè)被分配以其它某種任務(wù)的處理器12g (圖1)之 間的交互可能是需要的或必要的。從圖8中的示圖可見,有兩個(gè)通常獨(dú)立的 流程圖,分別對應(yīng)處理器12f和12g。這指示出本發(fā)明的合作共同處理器方 式的自然特性,其中每個(gè)處理器12自身通常獨(dú)立執(zhí)行地分配,除了此處描 述的完成交互的情況之外。該發(fā)明提供了使用中斷以處理輸入的可選方案, 無論這樣的輸入是來自于外部輸入設(shè)備還是來自于陣列10中的另一處理器 12。代替為了處理中斷而使處理器12必須停止其正在進(jìn)行的工作,此處所描述的本創(chuàng)造性組合將允許處理器12處于"不活躍但警醒,,的狀態(tài),如先 前所描述的一樣。因此, 一臺或多臺處理器12可以被分配以接收并作用于 一定的輸入。
對于處理器12f來說,"進(jìn)入不活躍但警醒狀態(tài)"的操作152,"激活,, 操作154和"作用于輸入"的操作156中的每個(gè),都如在此之前關(guān)于處理器 提醒方法150的第一示例所描述的一樣被實(shí)現(xiàn)。但是,由于該示例預(yù)期可能 需要處理器12f與12g之間的交互,所以接著"作用于輸入"的操作156的 是,處理器12f進(jìn)入"發(fā)送信息?"的判斷操作158,其中其按照自己的程 序,確定剛接收到的輸入是否需要引起其它處理器12g的注意。如果否,那 么處理器12f返回到不活躍但警醒狀態(tài),或者例如前所論述的其它一些可選 擇項(xiàng)。如果是,那么在"發(fā)送到其它"的操作160中,如此前詳細(xì)描述的, 處理器12f開始與處理器12g通信。應(yīng)該注意的是,按照程序員的選擇,處 理器12f可以發(fā)送指令,例如可以發(fā)送響應(yīng)于來自外部設(shè)備82的輸入而在 內(nèi)部產(chǎn)生的指令??蛇x擇地,處理器12f可以將數(shù)據(jù)傳遞到處理器12g,并 且這些數(shù)據(jù)可以在處理器12內(nèi)部產(chǎn)生,或者從外部設(shè)備82 "經(jīng)過,,。另一 可選方案還可以是,在一些狀況下,處理器12f可能在接收來自外部設(shè)備82 的輸入時(shí)試圖從處理器12g讀取。所有這些可能程序員都可以使用。
如在"執(zhí)行主要功能"操作162中所示的,處理器12g通常執(zhí)行代碼以 完成它被分配的主要任務(wù),無論是什么任務(wù)。然而,如果程序員確定需要處 理器12f和12g之間的偶然交互處理,那么程序員將提供出,處理器12g偶 然暫停以查看其一臺或多臺相鄰處理器是否試圖通信,如"尋找輸入,,操作 166中所示。在存在通信等待(例如,處理器12f已開始向處理器12g寫入) 的情況下,進(jìn)行"輸入?,,的判斷操作168。如果存在已開始的通信(是), 那么如此之前詳細(xì)描述的,在"從其它接收"操作170中處理器12g將完成 通信。如果否,那么處理器12g將返回執(zhí)行其被分配功能,如圖8所示。在 "從其它接收,,操作170之后,處理器12g將作用于在"作用于輸入,,操作 172中接收到的輸入。如前面提到的,程序員可能已經(jīng)提供了處理器12g所期待的諸如輸入之類的指令,在這種情況下,如同在此之前所描述的,處理
器12g將執(zhí)行指令。可選擇地,處理器12g可以被編程以等待所作用的數(shù)據(jù)。
在圖8示例中,示出了在"作用于輸入"的操作172之后,處理器12g 返回完成它的主要功能(也就是說,其返回到"執(zhí)行主要功能"的操作162)。 然而, 一定存在甚至更復(fù)雜示例的可能性。例如,編程可以是這樣的,即從 處理器12f接收到的某種輸入將導(dǎo)致其中斷之前被分配的主要功能,并開始 一個(gè)新功能,或者它可以簡單地暫時(shí)停止并等待進(jìn)一步的輸入。本領(lǐng)域的技 術(shù)人員將認(rèn)識到,此處動(dòng)作的各種可能性僅受限于程序員的構(gòu)思。
應(yīng)該注意的是,按照此處所描述的本發(fā)明的實(shí)施例,給定的處理器12 當(dāng)正執(zhí)行任務(wù)時(shí)不需要被中斷,這是因?yàn)榱硪惶幚砥?2被分配了監(jiān)控和處 理可能另外需要中斷的輸入的任務(wù)。但是,有趣的是,還注意到,忙于處理 其它任務(wù)的處理器12也不能被打擾,除非并且直到它的程序提供了它查看 其端口38以尋找輸入。因此,有時(shí)將需要使處理器12暫停尋找其它輸入。 "Pause"的概念和如何使用將稍后進(jìn)行更詳細(xì)地描述。。
處理器12之間的每個(gè)端口 38都包括數(shù)據(jù)線22、 一條讀取線18和一條 寫入線20,它們?nèi)拷M成數(shù)據(jù)總線16。除了數(shù)據(jù)總線16之外,每個(gè)端口 38還包括握手控制信號。數(shù)據(jù)總線22連接在兩臺相鄰處理器12的端口 38 之間。例如,字或操作碼可以在STORE (寫入)指令期間駐留于T寄存器 44中;處理器12e的寫入線20然后將被設(shè)定為高電平。當(dāng)處理器12c的讀 取線18被設(shè)定為高電平時(shí),在FETCH (讀取)指令的作用下數(shù)據(jù)被傳輸?shù)?處理器12c的T寄存器44中。在完成處理后,讀取線18和寫入線20都被 設(shè)定為低電平。在該示例中,該數(shù)據(jù)當(dāng)由P寄存器40c讀取時(shí)變?yōu)橹噶睢?br>
當(dāng)處理器12讀取消息時(shí),該消息可以采用數(shù)據(jù)、指令或信號格式。指 令可以被存儲在存儲器中,并且稍后由同一處理器12使用,或者被存儲在 不同的處理器12中,并直接從端口38執(zhí)行。如果處理器12正利用其P寄 存器40c從存儲器讀取,那么它將通過將指令放入指令寄存器30a而立即執(zhí) 行指令,或者讀取消息作為數(shù)據(jù),并將其放入T寄存器44。 FETCH指令當(dāng)
28被指引到或?qū)ぶ返蕉丝?38時(shí),將讀取消息作為數(shù)據(jù)。如果JUMP或CALL 指令被指引到端口 38,或者RETURN指令被指引到端口 38地址,那么P 寄存器40c將讀取正寫入端口 38的內(nèi)容作為指令,并且指令將被認(rèn)為是可 執(zhí)行代碼。
接收處理器12可以讀取消息作為數(shù)據(jù)并且然后寫入消息作為數(shù)據(jù)。被 路由的(即通過中間處理器12從一臺處理器12發(fā)送至非相鄰處理器12) 消息被解釋成數(shù)據(jù),并且被讀取到每個(gè)順序處理器12的T寄存器44中,直 到到達(dá)預(yù)定的接受者,然后消息被解釋成代碼(從P寄存器40c讀取),之 后被執(zhí)行。因此,如果在FETCHA(定義為讀取A寄存器40a指定的存儲器 的內(nèi)容)或?£丁<:11八+ (定義為讀取A寄存器40a指定的存儲器的內(nèi)容,并 將A寄存器40a加1 )或FETCH P + (定義為讀取P寄存器40c指定的存儲 器的內(nèi)容,并將P寄存器40c加1)期間讀取消息,那么消息被傳輸?shù)竭M(jìn)行 讀取的處理器12的T寄存器44中。如果處理器12正在從P寄存器40c讀 取消息,那么消息被傳輸?shù)浇邮仗幚砥?2的指令寄存器30a中。
圖l示出了位于單個(gè)芯片14上的互連處理器12的陣列10;作為示例 給出了總數(shù)為24的處理器12,其中每個(gè)處理器12具有位于其外圍的若干 管腳。每個(gè)處理器12具有4個(gè)指定為右、下、左和上(RDLU)的端口 38。 在圖1中,處理器12e具有4個(gè)相鄰處理器12,其中相對于中心的處理器 12e,處理器12b是右鄰居,處理器12d是下鄰居,處理器12c是左鄰居, 處理器12a是上鄰居。即使邊緣處理器12只有三個(gè)相鄰的鄰居,邊角處理 器12只有兩個(gè)相鄰的鄰居,那么邊緣和邊角處理器12仍然具有4個(gè)也指定 為RDLU的端口 38。
圖9是可替換陣列10a的簡圖描述。在本發(fā)明的這個(gè)示例中,陣列10a 有二十四(24)個(gè)處理器12。另外,在本發(fā)明的這個(gè)實(shí)施例中,處理器12 以被稱為"鏡像"的特定相對方位被排列。也就是說,在從陣列10a頂部的 第二和第四行173中的處理器12已關(guān)于它們的x軸174被翻轉(zhuǎn)(flip),以 致下端口 38d現(xiàn)在朝上。在相對于陣列10a左邊的第二、第四和第六列176中的所有處理器12已關(guān)于它們的y軸178>^皮翻轉(zhuǎn),以致右端口 38b現(xiàn)在都 朝向陣列IO的左側(cè)。這樣使得處理器N6、 N8、 NIO、 N18、 N20和N22保 持它們初始的RDLU方位;處理器NO、 N2、 N4、 N12、 N14和N16已只是 關(guān)于它們的x軸174被翻轉(zhuǎn);處理器N7、 N9、 Nll、 N19、 N21和N23只 是關(guān)于它們的y軸178被翻轉(zhuǎn);節(jié)點(diǎn)N1、 N3、 N5、 N13、 N15和N17已關(guān) 于它們的x軸174和它們的y軸178被翻轉(zhuǎn)。除了位于陣列10a的邊角和邊 緣的處理器12以外,這些旋轉(zhuǎn)使得所有的右端口 38b彼此直接面對;所有 的下端口 38d彼此直接面對;所有的左端口 38c彼此直接面對;以及所有的 上端口 38a彼此直接面對。如同下文中將要更加詳述,這允許處理器12與 其最近的相鄰處理器12直接對準(zhǔn)并相連,這是因?yàn)樘幚砥?2的互連"鏡像" 了相鄰的連接鄰近處理器12的互連。
為了有一種方式指示陣列10a中的方向,其中陣列10a不會隨著其中處 理器12被鏡像的方式發(fā)生變化,本發(fā)明人選用術(shù)語North(北)、South(南)、 East (東)和West (西)(NSEW)。即使利用鏡像,方向North、 South、 East和West保持它們的相對方向。在i 各由期間,即先前^C描述的通過中間 處理器12將消息從處理器12發(fā)送到另一個(gè)非相鄰處理器12,這是相對的。 方向(NSEW)在位于ROM26的表中。
當(dāng)左端口 38c和上端口 38a在陣列10a的外部邊界時(shí),它們不連^t妄到陣 列10a內(nèi)部的任何元件,盡管如在此之前所討論的,它們可能連接到外部I/O 端口 39 (圖1)。只要行和列的數(shù)字是偶數(shù),下端口 38d和右端口 38b總是 連接到另一處理器12。作為一個(gè)示例,處理器N7有4個(gè)垂直相鄰的鄰居, 即連接到右端口 38b的N6,連接到下端口 38d的Nl,連接到左端口 38c的 N8,和連接到上端口 38a的N13。圖9a是圖9中四個(gè)節(jié)點(diǎn),即N7、 N8、 N13和N14的放大視圖,具有右端口38b、下端口38d、左端口38c和上端 口 38a符號。
每個(gè)處理器12都具有18比特的1/0寄存器47,如圖3所示。每個(gè)1/0 寄存器47都包括關(guān)于相鄰的鄰居是從端口 38正在讀取還是正在寫入它的端
30口 38的信息,和其它事物。圖IO是處理器12的1/0寄存器47的部分視圖。 比特B9到B16指示了處理器12的讀取和寫入狀態(tài)。1/0寄存器47包含在 其通信端口 38上的讀取和寫入握手狀態(tài)位50。這些是只讀位50。通過讀取 這些位,處理器12可查看鄰居是處于等待寫入其端口 38中的一個(gè)的不活躍 狀態(tài)還是等待從端口 38中的一個(gè)讀取的不活躍狀態(tài)。如果鄰居正等待寫入 處理器12,那么處理器12的1/0寄存器47中寫入線狀態(tài)位將變?yōu)楦唠娖剑?這指示出了來自其特定鄰居的寫入消息正等待發(fā)送。同樣地,如果鄰居正等 待從處理器12中讀取,那么處理器12的I/O寄存器47讀取線狀態(tài)位將變 為高電平,這指示出了用于該特定鄰居的讀取消息正等待被接收。
接下來的參照圖9、圖9a和圖10的示例將進(jìn)一步示例以上步驟。用于 節(jié)點(diǎn)7的I/O寄存器47指示右端口 38b的讀取和寫入狀態(tài)位(分別是B16 和B15),右端口 38b在該示例中連接至處理器N6。比特B14和B13分別是 下端口 38d (連接到處理器Nl )的讀取和寫入狀態(tài)位;比特B12和B11分 別是左端口 38c (連接到處理器N8)的讀取和寫入狀態(tài)位;比特B10和B9 分別是上端口 38a(連接到處理器N13)的讀取和寫入狀態(tài)位;在該示例中, 比特16-9總是以右、下、左和上(RDLU)的順序給出相鄰節(jié)點(diǎn)的讀取和寫 入狀態(tài)。接下來繼續(xù)參考圖10對1/0寄存器47另外闡述,其示出用于Node7 的局部I/0寄存器。如果比特B16是高電平,那么存在來自于處理器N6的 讀取請求;如果比特B15是高電平,那么存在來自于處理器N6的寫入請求; 如果比特B14是高電平,那么存在來自于處理器N1的讀取請求等等。
如前面所討論的,PAUSE導(dǎo)致處理器12暫時(shí)掛起其正在處理的^f壬務(wù)或 保持不活躍以檢驗(yàn)輸入數(shù)據(jù)或指令。有兩個(gè)例子適用于PAUSE例行程序。 第一個(gè)例子發(fā)生在處理器12從之前不活躍的狀態(tài)被激活之后。第二個(gè)例子 發(fā)生在處理器12正在執(zhí)行程序但采取了中斷、暫停以尋找新的消息的時(shí)候。
NOP(也稱為"no-op,,)是無操作指令,并且在指令代碼中被指定為四 個(gè)點(diǎn)(....)。返回參照圖4, NOP可以纟皮用在使用一些或所有可用時(shí)l爻54 可能是不必要的或不需要的情況下。例如,在消息中,4個(gè)NOP (....)被用作消息頭,這部分地因?yàn)閬G棄頭(如被激活后)以及執(zhí)行頭(如同已執(zhí)行
或采取執(zhí)行處理器自身代碼中的中斷)必須是安全的,這兩個(gè)條件都由NOP 指令來滿足。對于來自不同方向的多條消息來說,通常同時(shí)到達(dá)也必須是安 全的。當(dāng)每個(gè)消息以四個(gè)NOP開始時(shí),由于每個(gè)處理器正在讀取相同的消 息頭,所以兩個(gè)或者更多不同消息的同步讀取將不會是災(zāi)難性的。
處理器12可被指定為主要是工作員或"生產(chǎn)型"處理器12。在缺少其 它任何指令的情況下,該處理器12可以默認(rèn)為工作員,并且執(zhí)行圖11所述 的工作員模式循環(huán)200,該循環(huán)位于ROM中。該工作員處理器12保持休眠 或非活躍,直到在工作員模式循環(huán)200開始時(shí),包括四個(gè)NOP的消息頭被 發(fā)送到工作員處理器12。圖11是表示利用PAUSE例行程序的工作員模式 循環(huán)200的示例的流程圖。當(dāng)工作員處理器12在默認(rèn)的ROM中的工作員 模式循環(huán)200中是非活躍時(shí),消息頭的四個(gè)NOP在"讀取消息"的操作210 中被作為數(shù)據(jù)讀取。當(dāng)消息到達(dá)時(shí),F(xiàn)ETCH A指令讀取一個(gè)字作為數(shù)據(jù), 其是來自于相鄰處理器12的四個(gè)NOP,被放置進(jìn)工作員處理器12的T寄 存器44中。讀取這四個(gè)NOP將喚醒工作員處理器12,如圖ll的流程圖中 的"喚醒"操作211所示。"喚醒"消息將激活工作員處理器12。作為工 作員模式循環(huán)200的一部分,B寄存器40b的內(nèi)容或地址作為默認(rèn)設(shè)置在I/O 寄存器47處被指出,因此FETCH B指令將在"讀取I/0寄存器"操作212 中讀取I/0寄存器47的內(nèi)容,以確定消息從哪個(gè)端口發(fā)送。
在"開始暫停,,的操作213中,工作員處理器12沒有任何處理活動(dòng), 以按照前一步212中讀取出的I/O寄存器47的內(nèi)容準(zhǔn)備下一步的"檢查適 合端口"的操作214。接下來進(jìn)行來自適合端口的"執(zhí)行消息"的操作215 的步驟。在所有的輸入消息都被執(zhí)行之后,PAUSE將在"結(jié)束暫停"操作 216中結(jié)束。這時(shí),工作處理器12在"休眠/非活躍"的操作217中將變?yōu)?非活躍,并一直等待直到另一條消息頭到達(dá),以激活或喚醒工作員處理器 12。
簡而言之,所有的工作員處理器12都休眠并暫停(PAUSE)。在所有相鄰處理器12的寫入請求被檢驗(yàn),開始PAUSE,然后執(zhí)行輸入消息的情況 下,工作員處理器12休眠、喚醒并讀取I/0寄存器47。在輸入消息的結(jié)尾, 有一返回(;),或者帶有返回(;)的到端口 38的JUMP。工作員處理 器12然后返回到PAUSE例行程序,為另 一條消息檢驗(yàn)I/O寄存器47中的 下一比特,執(zhí)行消息,如果有的話,然后返回到工作員循環(huán)并進(jìn)入休眠以等 待更多的消息。
消息被視為任務(wù)。PAUSE將當(dāng)前的輸入消息視為喚醒任務(wù),并沒有任 何東西的端口 38視為休眠任務(wù)。
圖12示出了使用PAUSE的第二種情況,其中處理器12正處于"處理 主要功能"的操作220中。有時(shí),處理器12將在"讀取I/0寄存器,,的操 作221中檢驗(yàn)I/O寄存器47,以檢驗(yàn)相鄰處理器12的輸入狀態(tài)。如果I/O 寄存器47指示有輸入消息,那么處理器12將在"調(diào)用暫停"的操作222中 PAUSE。然后,處理器12將在"檢驗(yàn)用于輸入的端口,,的操作223中檢驗(yàn) 由1/0寄存器47指示的端口 38。如在"輸入?"的判斷操作224中所示, 如果在指定的端口 38有消息,那么處理器12將"執(zhí)行輸入消息中的所有代 碼"的操作225,包括四個(gè)NOP。執(zhí)行輸入消息之后,"最后端口完成?,, 的判斷操作226將執(zhí)行,以確定是否有其它端口 38等待發(fā)送消息。如果其 它端口需要被檢驗(yàn)可能的輸入,那么操作將從"檢驗(yàn)用于輸入的端口"操作 的步驟223開始重復(fù)。如果沒有輸入,如判斷224所示,處理器12將返回 其初始任務(wù)(步驟220),在那些條件下,它將永遠(yuǎn)不會進(jìn)入休眠。在按照 右、下、左和上(RDLU)的順序檢驗(yàn)用于輸入消息和執(zhí)行任何代碼的所有 的端口 38之后,最后的端口將完成(步驟226),并且處理器12在步驟220 處將返回到其初始的主要功能。
多數(shù)時(shí)候,不同處理器12的通信序列處理由一組處理器12來執(zhí)行。如 果相鄰處理器12沒有準(zhǔn)備好接受消息,那么傳送處理器12將休眠,或工作 于其它任務(wù),并需要輪詢I/O寄存器47以尋找消息。但是,多數(shù)時(shí)候當(dāng)一 組正在進(jìn)行不同處理器12的通信序列處理時(shí),處理器12剛剛寫入端口 38
33而相鄰處理器12剛剛從其端口 38中讀取。從所有四個(gè)端口 38的讀取可以 由處理器12執(zhí)行,然后處理器12進(jìn)入休眠,直到四個(gè)相鄰處理器12中的 任何一個(gè)寫入;讀取處理器12需要檢驗(yàn)I/O寄存器47以查看哪個(gè)處理器12 在被喚醒之后寫入。該處理器12通過數(shù)據(jù)讀取^皮喚醒。處理器12可以用A 寄存器40a (數(shù)據(jù))或B寄存器40b (數(shù)據(jù)),或P寄存器40c (數(shù)據(jù)或代 碼)讀??;用P寄存器40c讀取整個(gè)消息意味著,將執(zhí)行包括四個(gè)NOP的 完整消息。
處理器12可以作為工作員讀取所有四個(gè)端口 38,然后如果沒有等待消 息(圖11 )就進(jìn)入休眠。如果處理器12忙于執(zhí)行任務(wù)(循環(huán)),那么PAUSE 調(diào)用可以進(jìn)入任務(wù)循環(huán)工作以掛起第一個(gè)任務(wù)。主任務(wù)將被掛起,并將讀取 四個(gè)端口 38,這向任務(wù)循環(huán)中添加四個(gè)更多的任務(wù),然后返回到被掛起的 主任務(wù)(圖12)。
具有所連接的I/O管腳的處理器在I/O端口 39中具有用于設(shè)置并顯示 這些管腳狀態(tài)的比特。 一些管腳是只讀的,并可以通過讀取I/0端口 39的 比特來讀取。 一些管腳可被讀取/寫入的,并可以通過讀取或?qū)懭隝/0寄存器 47中的比特來進(jìn)行讀取或?qū)懭搿T谕瓿勺x取或?qū)懭牒?,握手信號消失,?且在I/O寄存器47中不可讀。連接到未連接端口的喚醒管腳握手電路的管 腳,在I/O寄存器47將是不可見的。如果包括喚醒管腳的地址被讀取,那 么當(dāng)信號出現(xiàn)在管腳時(shí),處理器12將喚醒,但是如果I/O寄存器47被讀取, 那么處理器12將看不到喚醒握手。喚醒管腳只被連接到喚醒電路,而不連 接到1/0寄存器47。因此,管腳必須直接讀取,以了解管腳是否喚醒了處理 器12。如果管腳讀取為0 (零),那么其它端口 38中的一個(gè)喚醒了處理器 12。這就是串行工作員處理器中的ROM代碼如何運(yùn)轉(zhuǎn)的情況。
串行處理器具有連接到1/0寄存器比特(比特17)的串行輸入管腳,在 比特可以被作為數(shù)據(jù)讀取的情況下,但是它們也連接到未連接的串行通信端 口的握手線。當(dāng)管腳上的數(shù)據(jù)告訴處理器12到管腳或幻像(phantom)端口 的寫入正在發(fā)生時(shí),讀取未連接的串行通信端口的處理器12將喚醒。當(dāng)實(shí)
34際端口38被讀取時(shí),處理器12將休眠,直到它獲得寫入握手信號,然后喚 醒,讀取數(shù)據(jù)。處理器被喚醒后,ROM代碼通過讀取管腳來區(qū)別處理器12 被管腳喚醒或被端口 38喚醒。如果管腳是低電平,處理器12讀取1/0寄存 器47并暫停,如果管腳是高電平,處理器12執(zhí)行串行引導(dǎo)代碼。
當(dāng)讀取或?qū)懭腴_始時(shí),就升高讀取或?qū)懭胛帐治?。?dāng)一對讀取或?qū)懭胛?手位被其它處理器12升高時(shí),所有由該處理器12升高的位被拉低,處理器 12蘇醒,并且數(shù)據(jù)被傳輸。在數(shù)據(jù)被傳輸之后,任何升高的讀取/寫入握手 標(biāo)志位被拉低。
如果處理器12 JUMP到RDLU (四個(gè)相鄰端口 38的地址名稱),它試 圖在所有四個(gè)端口 38上讀取并升高讀取標(biāo)志。然后,它進(jìn)入到實(shí)質(zhì)上是無 源模式的休眠。當(dāng)鄰居向一個(gè)或更多的這些端口 38寫入并升高寫入標(biāo)志時(shí), 所有端口 38的標(biāo)志被復(fù)位,并且第一處理器12喚醒。如果處理器12使用 A寄存器40a或B寄存器40b以及數(shù)據(jù)FETCH或STORE來讀取地址,那 么將發(fā)生相同的情況。它將進(jìn)入休眠,直到四個(gè)(三個(gè)或兩個(gè))鄰居中的一 個(gè)利用數(shù)據(jù)將它喚醒。
如果喚醒管腳作為四個(gè)端口 38所讀取的地址的一部分,并且管腳沒有 變高電平,那么處理器12就會了解喚醒是來自于其它三個(gè)鄰居的一個(gè)。串 行引導(dǎo)處理器12的ROM中的串行引導(dǎo)來自于喚醒處理器12的管腳;如果 管腳是高電平,那么代碼從串行管腳載入并由處理器12引導(dǎo)。
有一種推薦路由,其通過使用X0包而不與任何東西發(fā)生沖突。X0代 表在RAM服務(wù)器的0節(jié)點(diǎn)上的執(zhí)行;用于特定路徑上的節(jié)點(diǎn)0的消息頭被 定義在ROM中。 一個(gè)不能相對于彼此路由消息。PAUSE允許消息被安全地 路由。RAM服務(wù)緩沖器(在節(jié)點(diǎn)6即RAM服務(wù)器的下一個(gè)節(jié)點(diǎn)上)允許 輸入消息到達(dá)RAM服務(wù)器的節(jié)點(diǎn)0以在節(jié)點(diǎn)6的RAM中被緩沖,以便它 們不阻止和阻塞從RAM服務(wù)器中發(fā)出的消息。這是不與X0沖突的推薦的 路由路徑。
重要的是要認(rèn)識到,此處所描述的是若干處理器12之間的"協(xié)作多任務(wù)"。 一組任務(wù)駐留在一個(gè)或多個(gè)端口 38以及本才幾存儲器上。FETCHB和 PAUSE將依次檢驗(yàn)用于輸入可執(zhí)行代碼的所有端口 38,并將端口 38視為任 務(wù)。端口 38的指令可以從端口 38被直接執(zhí)行,而不需要先載入到處理器的 RAM中。
盡管此處參照Froth公開了多個(gè)處理器12之間的PAUSE例行程序,但 語言中。
以上所有示例只是本發(fā)明可用實(shí)施例的一些示例。本領(lǐng)域的技術(shù)人員將 容易觀察到,在不脫離本發(fā)明的精神和范圍的情況下,可以進(jìn)行其它許多修 改和替換。因此,此處的公開并不用于限定,而且所附權(quán)利要求書將被解釋 為包括本發(fā)明的整個(gè)范圍。
權(quán)利要求
1、一種用于在多臺計(jì)算機(jī)處理器之間通信的方法,包括提供第一處理器;提供第二處理器;以及將輸入從所述第一處理器發(fā)送至所述第二處理器,其中所述發(fā)送不在所述第二處理器的處理功能中引起中斷。
2、 如權(quán)利要求l所述的方法,其中所述輸入包括從所述第一處理器到所述第二處理器的寫入功能。
3、 如權(quán)利要求l所述的方法,其中 所述多臺處理器中的每臺都包括多個(gè)通信端口。
4、 如權(quán)利要求3所述的方法,其中所述多臺處理器中的每臺都進(jìn)一步包括輸入/輸出(I/O)寄存器。
5、 如權(quán)利要求4所述的方法,其中每個(gè)所述輸入/輸出(I/O)寄存器都包括讀取和寫入狀態(tài)位。
6、 如權(quán)利要求5所述的方法,進(jìn)一步包括 檢驗(yàn)所述讀取和寫入狀態(tài)位的狀態(tài)的步驟。
7、 如權(quán)利要求l所述的方法,其中所述多臺處理器包括位于芯片上的處理器陣列。
8、 如權(quán)利要求7所述的方法,其中所述發(fā)送經(jīng)由所述第一處理器與所述第二處理器之間的數(shù)據(jù)總線被提供。
9、 如權(quán)利要求7所述的方法,其中所述處理器陣列包括至少一臺具有四個(gè)相鄰鄰居處理器的內(nèi)部處理器。
10、 如權(quán)利要求7所述的方法,其中所述處理器陣列包括至少一臺位于所述陣列的周界上的處理器,并且其中 所述的至少一臺處理器進(jìn)一步包括到輸入/輸出(I/O)管腳的連接并進(jìn)一步包 括輸入/輸出(I/O)狀態(tài)位。
11、 一種用于在多臺處理器之間共享處理任務(wù)的方法,包括 提供第一處理器;提供第二處理器;在所述第一處理器與所述第二處理器之間提供通信端口; 將輸入從所述第一處理器發(fā)送至所述第二處理器;以及 由所述第二處理器從所述第 一處理器接收所述輸入,其中所述發(fā)送不中斷 所述第二處理器的處理功能。
12、 如權(quán)利要求11所述的方法,其中 當(dāng)所述第二處理器在執(zhí)行任務(wù)時(shí),發(fā)生所述發(fā)送。
13、 如權(quán)利要求12所述的方法,其中當(dāng)所述第二處理器暫時(shí)暫停所述執(zhí)行并從所述第一處理器接受所述發(fā)送 時(shí),所述接收被完成。
14、 如權(quán)利要求12所述的方法,其中所述將輸入從所述第一處理器發(fā)送的步驟進(jìn)一步包括將輸入標(biāo)志位設(shè)置為高。
15、 如權(quán)利要求12所述的方法,其中由所述第二處理器對接收到的所述輸入進(jìn)行響應(yīng)的步驟包括直接從所述端 口執(zhí)行所接收到的所述輸入的代碼。
16、 如權(quán)利要求15所述的方法,其中所述直接從所述端口執(zhí)行代碼的步驟,在所述直接執(zhí)行代碼的步驟之前不 將所述代碼存儲在存儲器位置的情況下被執(zhí)行。
17、 如權(quán)利要求12所述的方法,進(jìn)一步包括一軟件程序,其中所述軟件程序包括暫時(shí)暫停執(zhí)行所述第二處理器的任務(wù) 并針對來自所述第一處理器的潛在輸入檢驗(yàn)所述端口的步驟。
18、 一種方法,包括將輸入從第一處理器發(fā)送至第二處理器,其中所述第二處理器在所述發(fā)送 時(shí)不活躍;喚醒所述第二處理器以接收所述輸入;由所述第二處理器檢驗(yàn)輸7v/輸出(1/0)寄存器,以確定所述輸入的來源; 由所述第二處理器從所述第一處理器接收所述輸入;以及 由所述第二處理器對來自所述第一處理器的所述輸入進(jìn)行響應(yīng)。
19、 如權(quán)利要求18所述的方法,其中 所述方法由軟件循環(huán)來執(zhí)行。
20、 如權(quán)利要求18所述的方法,其中 所述喚醒包括在所迷喚醒之后安全丟棄的消息頭。
21、 如權(quán)利要求18所述的方法,其中所述檢驗(yàn)的步驟包括確定相鄰處理器的讀取和寫入握手狀態(tài)位的狀態(tài)。
22、 如權(quán)利要求21所述的方法,其中所述接收步驟之后,跟隨著降低所述第一處理器和所述第二處理器的讀取 和寫入握手狀態(tài)位。
23、 如權(quán)利要求18所述的方法,其中 所述動(dòng)作之后,跟隨著所述第二處理器返回到不活躍;漠式。
24、 如權(quán)利要求18所述的方法,其中 所述喚醒由多端口讀取功能引起。
25、 如權(quán)利要求18所述的方法,其中 所述喚醒由管腳引起。
26、 如權(quán)利要求18所述的方法,其中 所述接收包括讀取所述輸入作為數(shù)據(jù)語句。
27、 如權(quán)利要求18所述的方法,其中 所述方法位于ROM中。
28、 如權(quán)利要求27所述的方法,其中 所述方法是ROM中的引導(dǎo)任務(wù)的部分。
29、 一種計(jì)算機(jī)可讀介質(zhì),其中具有用于使電子設(shè)備執(zhí)行權(quán)利要求18中的 所述步驟的代碼。
30、 一種用于在多臺計(jì)算機(jī)處理器之間通信的方法,包括 提供第一處理器;提供第二處理器,其中所述第二處理器處于警醒但不活躍的狀態(tài);為所述多臺計(jì)算機(jī)處理器中的每臺提供I/O寄存器;將輸入從所述第 一處理器發(fā)送至所述第二處理器,其中所述發(fā)送使所述第 二處理器變到活躍狀態(tài);讀取所述第二處理器的I/O寄存器,以確定從哪個(gè)處理器發(fā)出所述輸入; 以及由所述第二處理器直接執(zhí)行所述輸入。
31、 如權(quán)利要求30所述的方法,進(jìn)一步包括讀取所述第二處理器的所述I/O寄存器以附加的次數(shù),以確定附加輸入是 否已經(jīng)凈皮發(fā)送至所述第二處理器;以及 由所述第二處理器執(zhí)行所述附加輸入。
32、 如權(quán)利要求31所述的方法,其中 所述附加輸入從第三處理器發(fā)出。
33、 一種處理系統(tǒng),包括互連的計(jì)算機(jī)處理器的陣列,其中每臺處理器進(jìn)一步包括 I/O寄存器;位于所述處理器的四側(cè)中的每側(cè)上的通信端口 ; 用于將輸入發(fā)送至其它所述處理器的發(fā)送機(jī)制;和 用于從其它所述處理器接收輸入的接收機(jī)制; 監(jiān)控才幾制,Jt中備臺用千^喜收所這輸入的所這處斑器可^ 源;和執(zhí)行機(jī)制, 應(yīng)。
34、 如權(quán)利要求33所述的系統(tǒng),其中所述發(fā)送機(jī)制包括位于發(fā)送所述輸入的第一處理器上的第一端口 ,所述第一端口被設(shè)置為鄰近預(yù)期的接收處理器;以及所述接收機(jī)制包括位于所述預(yù)期接收處理器上的第二端口 ,所述第二端口 被設(shè)置為鄰近所述第一處理器。
35、 如權(quán)利要求34所述的系統(tǒng),其中所述接收機(jī)制進(jìn)一步包括鎖存機(jī)制,用于接收直接從所述第一端口到所述 第二端口的所述輸入。
36、 如權(quán)利要求33所述的系統(tǒng),其中第 一處理器的所述監(jiān)控機(jī)制掛起所述第 一處理器的活躍執(zhí)行任務(wù),以確定 輸入是否正由第二處理器試圖發(fā)送。
37、 如權(quán)利要求33所述的系統(tǒng),其中所述輸入由接收處理器直接從發(fā)送處理器的端口接收。
38、 如權(quán)利要求33所述的系統(tǒng),其中所述發(fā)送機(jī)制具有將所述輸入從一臺處理器發(fā)送至非相鄰接收處理器的能力。
全文摘要
一種微處理器系統(tǒng),其中處理器陣列通過利用工作員模式功能來更有效地通信。不是當(dāng)前正在執(zhí)行代碼的處理器保持在不活躍但警醒狀態(tài),直到由相鄰處理器將任務(wù)發(fā)送至所述處理器。處理器還可以被編程為,暫時(shí)掛起任務(wù)以檢驗(yàn)輸入的任務(wù)或消息。
文檔編號G06F9/46GK101454755SQ200780000018
公開日2009年6月10日 申請日期2007年2月16日 優(yōu)先權(quán)日2005年5月26日
發(fā)明者杰佛瑞·亞瑟·??怂? 查理斯·H·莫爾, 約翰·W·瑞博 申請人:Vns組合有限責(zé)任公司