圖靈獎演講:微管線 (Turing Award Lecture: Micropipelines)

IVAN E. SUTHERLAND

管線處理器是一種常用於超高速計算機器的範例。管線處理器之所以提供高速,是因為它們的分離階段可以同時運作,很像製造業組裝線上的不同人員在材料沿線傳遞時同時工作。儘管管線處理器的並行性使其設計成為一項艱鉅的任務,但它們可以在圖形處理器、訊號處理設備、用於執行算術的積體電路元件,以及通用計算機器的指令解釋單元和算術運算中找到。

因為我計劃描述各種管線處理器,所以我想先為它們的各種形式建議名稱。管線處理器,或者更簡單地說就是管線,在資料沿著它們傳遞時對資料進行操作。管線的延遲衡量單個資料值通過它的時間。管線的吞吐量衡量每單位時間可以通過它的資料值數量。

管線既儲存又處理資料;其中的儲存元件和處理邏輯沿其長度交替排列。我稍後將描述其完整形式的管線,但首先我將僅關注其儲存元件,剝離所有處理邏輯。

剝離所有處理邏輯後,任何管線都像一系列儲存元件,資料可以通過這些元件。管線可以是時脈控制的或事件驅動的,取決於它們的部件是響應某個廣泛分佈的外部時脈而行動,還是只要局部事件允許就獨立行動。有些管線是無彈性的;其中的資料量是固定的。無彈性管線的輸入速率和輸出速率必須完全匹配。剝離任何處理邏輯後,無彈性管線就像一個移位暫存器。其他管線是彈性的;其中的資料量可能會變化。彈性管線的輸入速率和輸出速率可能因內部緩衝而暫時不同。剝離所有處理邏輯後,彈性管線成為一個流動式先進先出記憶體,或稱為FIFO。FIFO可以是時脈控制的或事件驅動的;它們的重要特性是它們具有彈性。

© 1989 ACM OOOl-O782/89/o6oo-o72o $1.5o

我將微管線命名為一種特別簡單的事件驅動彈性管線形式,無論其內部是否包含處理。這個名稱中的「微 (micro)」部分對我來說似乎很合適,因為微管線包含非常簡單的電路,因為微管線在很短的長度內很有用,並且因為微管線適合於微電子形式的布局。

我選擇微管線作為本次演講的主題有三個原因。首先,微管線簡單易懂。我相信簡單的想法是最好的,我在微管線的簡單性和對稱性中找到了美感。其次,我看到圍繞著FIFO設計的混亂。我希望通過對微管線的描述來減少一些混亂。

我選擇這個主題的第三個原因,是針對目前數位系統設計中普遍使用的時脈邏輯概念框架對我們施加的限制。我相信這種概念框架或思維定式,將像微管線這樣簡單且有用的結構從我們的思考中隱藏起來;換一種概念框架,它們的設計和應用將會非常容易。由於微管線是事件驅動的,因此它們的簡單性在時脈邏輯概念框架中是不可得的。我提供對微管線的描述,希望將注意力集中在另一種轉換訊號概念框架上。

我們需要一個新的概念框架,因為VLSI技術的複雜性現已達到設計時間和設計成本常常超過製造時間和製造成本的地步。此外,當今設計的大多數系統都是整體式的,且難以在生命週期中進行改進。轉換訊號概念框架提供了通過分層組合更簡單的元件來構建複雜系統的機會。所得系統易於修改。我相信轉換訊號概念框架在減少複雜系統的設計時間和成本,以及增加其使用壽命方面具有巨大的潛力。我將對微管線的描述作為轉換訊號概念框架的一個例子。

兩種概念框架 (Two Conceptual Frameworks)

直到最近,只有少數堅韌不拔的人使用轉換訊號概念框架進行設計,因為它太難了。設計構成複雜系統基本構建模塊的那些由10到100個電晶體組成的小電路幾乎是不可能的。此外,要證明所得組合的任何特性也很困難。然而,在過去五年裡,這兩方面都取得了很大的進展。Charles Molnar 和他在 Washington University 的同事開發了一種設計小型基本構建模塊的簡單方法 [9]。Martin Rem 在 Technical University of Eindhoven 的「VLSI Club」一直在有效研究事件驅動系統的數學 [6, 10, 11, 19]。這些新興的概念工具現在使轉換訊號成為廣泛應用的可行選項。

在時脈邏輯概念框架中,使用共同時脈運作的觸發器暫存器,將處理邏輯的各個階段分開。每次時脈進入其活動狀態時,一個新的資料元素進入每個暫存器。資料元素像鎖定步驟一樣,在連續的暫存器中向前推進,每個資料元素通過系統中固定數量的暫存器和介於其間的邏輯階段,需要固定數量的時脈週期。時脈邏輯概念框架被廣泛使用是因為 1) 它提供了一種設計計算設備的簡單方法,2) 它被廣泛教授和理解,3) 與時脈配合運作的元件廣泛可用,以及 4) 系統雜訊在時脈事件發生時已經消退。

為了構建這裡描述的微管線,我們必須拋棄時脈邏輯概念框架,轉而思考一種不同但同樣簡單的控制形式,稱為轉換訊號。換用轉換訊號概念框架,我們將獲得三種新的靈活性。在硬體設計中,我們獲得了一種新的靈活性,可以從先前設計和測試過的小部件組合系統;在軟體中,我們實現了處理可變長度向量的新靈活性;在系統中,我們可以通過在有速度或成本更優的元件可用時替換獨立部件來延長系統壽命。

拋棄概念框架常常很難。圖 1 所示的著名謎題說明了這種困難,它要求我們用四條直線穿過九個點,而且筆不能離開紙。我們在看這個謎題時,對於圖形與背景的自然概念,使得我們認為要畫的線應該保持在點的方框內,這種概念框架使得任務變得不可能。只有通過在點的邊界之外畫線才能解決這個謎題。

FIGURE 1. 一個謎題 筆不離紙,用四條直線連接這些點。(請注意,圖 1 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

在FIFO的設計中,也可以看到拋棄概念框架的類似困難。時脈邏輯概念框架中的傳統觀念認為,流動式FIFO的每個階段都應該有一個時脈控制的暫存器,其輸出饋送到下一階段的輸入。現在回想一下,FIFO必須具有彈性;它必須能夠儲存可變數量的資料;如果它有固定數量的階段,其中一些階段可能未被佔用。繼續在時脈邏輯概念框架下,每個階段需要一個「滿」或「空」的時脈控制觸發器才能使FIFO具有彈性。

每個階段還必須具有涉及其滿或空觸發器的狀態以及其他階段的狀態的邏輯,以決定何時捕捉新資料。一個簡單的控制規則如下運作:a) 每個階段在為空且其前一階段為滿時捕捉新資料並將其滿觸發器設定為滿狀態。b) 每個階段在為滿且其後一階段為空時將其滿觸發器設定為空狀態。此規則僅在交替的時脈週期中傳遞輸出資料。更複雜的同步FIFO控制規則,通過向前看許多階段以決定是否可以在下一個週期中將整個資料塊向前移動來獲得更好的性能。時脈邏輯概念框架本身就產生了這種複雜性,因為所有暫存器必須同時行動;任何未能現在行動的都必須承受一個完整的週期延遲,以等待下一次機會。

時脈邏輯概念框架與FIFO設計不匹配還有另一個原因:FIFO通常連接具有獨立時脈的發送端和接收端。當人們問是使用輸入時脈還是輸出時脈來控制內部階段時,設計具有獨立輸入和輸出時脈的FIFO的困難顯而易見。在FIFO中沒有自然的時間點將控制權從輸入時脈轉移到輸出時脈。這種轉移應該發生在管線的開始、中間還是結尾附近?為什麼?

如果在FIFO的輸入和輸出端使用傳統時脈且兩個時脈是獨立的,則在設計的某個地方需要進行仲裁或同步。仲裁或同步是必要的,因為資料必須從輸入時脈的控制轉移到輸出時脈的控制,即使兩個時脈之間的相位關係是未知且可變的。兩個獨立時脈之間總是存在某種相位關係,會違反某個鎖存器或觸發器的建立時間或保持時間要求。

時脈控制的FIFO中,在某處需要仲裁或同步的事實引入了許多問題 [1]。不可能製作一個完全可靠的仲裁器或同步器;相反,人們必須設計一個電路,其失敗的可能性足夠低到可以忽略不計。遺憾的是,儘管同步器和仲裁器的固有問題已為人知多年,同步器失敗仍然造成困難,令人驚訝的是,目前市場上出售的FIFO的描述中,很大程度上沒有討論仲裁和同步。同步器固有問題的解決方案留給了使用者。

這裡描述的微管線的內部階段,其時序訊號既不直接來自輸入控制訊號,也不直接來自輸出控制訊號。相反,每個內部階段在其後續階段已經接受當前資料值,且其前一階段已經準備好新資料時,才捕捉一個新的資料值。每個階段按照自己的步調運作,僅使用來自相鄰階段的控制資訊。讓每個階段獨立運作,而無需共同時脈,避免了對仲裁的需求並簡化了設計。儘管在時脈邏輯概念框架下設計FIFO和其他微管線非常困難,但在拋棄該框架而轉用轉換訊號後,就像我在本次演講中將一直做的那樣,它就變得容易了。

轉換訊號 (Transition Signalling)

在轉換訊號中,任何轉換,無論是上升沿還是下降沿,都具有相同的意義,如圖 2 所示;兩種轉換都稱為事件。正如圖中所示,也正如其名稱所暗示的,轉換訊號避免區分兩種轉換類型,即使它們可能看起來很不一樣。實際上,對轉換訊號的所有響應都是邊緣觸發的,並且在上升沿和下降沿都被觸發。由於轉換訊號將上升沿和下降沿都用作觸發事件,因此它可能提供比傳統時脈快一倍的速度潛力。

FIGURE 2. 兩個等效轉換 訊號線上的上升和下降轉換具有相同的意義。它們被稱為事件。(請注意,圖 2 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

轉換訊號避免為控制訊號的絕對高電平或低電平賦予意義。我將僅相對於其他相關控制訊號的狀態來使用控制訊號的狀態;一個控制訊號的狀態可能與另一個相同或不同,但其絕對狀態永遠不重要。由於轉換控制訊號的絕對狀態不重要,因此無需在事件之間將其返回到某個中立狀態。通過避免這種返回到中立或低電平狀態,轉換訊號節省了返回轉換的時間和能量成本,以及不必要的事件帶來的設計混亂。轉換訊號非常類似於不歸零 (NRZ) 磁記錄。

許多人起初很難理解上升沿和下降沿應該具有相同意義的概念。這並不令人驚訝,因為這需要改變概念框架。大多數人習慣於區分高電平與低電平,以及一個在動作之間返回到中立狀態的時脈。但是,儘管起初可能看起來很難,轉換訊號概念框架很快就變得非常容易使用。拋棄時脈邏輯概念框架而轉用轉換訊號概念框架,可以在速度和簡單性方面提供真正的優勢,這在微管線中尤為顯著。

轉換訊號電路必須對於控制訊號的高電平與低電平狀態是對稱的,因為上升和下降轉換都具有相同的意義。在整個本次演講中尋找這種對稱性。還要請注意,我對電路動作的描述僅使用相對術語來表示控制訊號電平是相同還是不同,而不是絕對術語是高還是低,這也是為了保持對稱性。我只對資料值使用傳統電平,高或低。轉換訊號的對稱性在互補金屬氧化物半導體 (CMOS) 電路中提供了引人入勝的簡單性,因為它與構成CMOS電路的互補電晶體對稱性非常吻合。

兩階段捆綁資料協定 (The Two-Phase Bundled Data Convention)

如果發送端和接收端使用轉換訊號進行通訊,它們之間將有兩根控制線和許多資料線,如圖 3 所示。資料線傳輸傳統的高電平或低電平,以傳達真或假的布林資料。發送端將資料值放在資料線上,然後在其控制線(稱為「request」)上產生一個事件,以指示有效資料已準備好。在某些週期中,request事件將是上升轉換,在某些週期中將是下降轉換;我們不對其進行區分。接收端接收資料,然後在其控制線(稱為「acknowledge」)上產生一個事件,以指示資料已被接受。三個事件,即資料變化、request事件、acknowledge事件,總是按週期順序發生,如圖 4 所示。連續的週期可能需要不同的時間量,如圖中週期長度的差異所示。有時,這兩根控制線使用「request」和「acknowledge」以外的名稱 [7]。您可能希望將此協定與圖 5 中的非重疊時脈協定進行比較。

FIGURE 3. 捆綁資料介面 除了任意數量的資料線,遵循兩階段捆綁資料協定的介面還有兩條訊號線,此處稱為「request」和「acknowledge」。發送端將有效資料放在資料線上,然後在acknowledge線上產生一個事件。接收端獲取資料,然後在acknowledge線上產生一個事件。request和acknowledge線有時會被賦予其他名稱。(請注意,圖 3 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

FIGURE 4. 兩階段捆綁資料協定 在兩階段捆綁資料協定中,每個週期的三個事件按圖所示的順序週期性地發生。它們是:O 在發送端的活動階段(實線箭頭所示),發送端可以隨意更改資料。~ 在發送端確定正確的資料值後,它通過產生request事件來結束其活動階段。在接收端的活動階段(虛線箭頭所示),發送端必須保持資料恆定。(~) 在接收端不再需要這些資料值後,它通過產生acknowledge事件來結束其活動階段。每個階段的時間長度都可以由其控制單元決定,可長可短。請注意request和acknowledge事件是交替發生的。(請注意,圖 4 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

FIGURE 5. 非重疊時脈 傳統的非重疊時脈,~1 和 2,每個週期需要 5 個事件。它們是:O 資料變化,) ~1 上升,® 1 下降,() ~2 上升,以及 @ ~2 下降。與圖 4 的每個週期三個事件進行比較。(請注意,圖 5 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

Seitz [13] 描述了圖 4 所示的協定,我們稱之為兩階段捆綁資料協定。名稱中的「兩階段 (two-phase)」部分表示只區分兩種操作階段:發送端的活動階段和接收端的活動階段。每個階段都由一個事件終止:request事件終止發送端的活動階段,acknowledge事件終止接收端的活動階段。發送端可以在其活動階段自由更改資料,並在資料有效後在request線上產生一個事件;然後它必須在接收端的活動階段保持資料恆定。名稱中的「捆綁資料 (bundled data)」部分表示資料線和request訊號線必須被視為一個捆綁;資料傳輸的延遲必須小於傳輸request事件的延遲,以免request事件在有效資料到達接收端之前就到達。acknowledge線不需要捆綁。

除了多條資料線外,使用兩階段捆綁資料協定的介面還需要兩條控制線。人們可能認為這比只需要一條時脈線的傳統時脈系統更昂貴。然而,這兩條線不僅取代了時脈線,而且至少還取代了在時脈系統中使管線具有彈性所需的兩條或更多額外線路。

事件邏輯 (Event Logic)

轉換訊號的控制電路由對事件進行各種邏輯組合的模組構成。這裡有一些例子:

異或 (XOR) 電路作為事件的或 (OR) 元件。當XOR電路的任一輸入改變狀態時,其輸出也改變狀態。因此,在XOR的第一個輸入或第二個輸入上接收到一個事件,都會產生一個輸出事件。對於兩個以上的輸入,XOR概括為奇偶校驗;奇偶校驗電路作為事件的多輸入或 (OR)。我們使用帶有兩個或多個輸入的標準XOR邏輯符號來表示這些事件的OR元件。這些元件有時稱為MERGE元件,因為它們合併兩個或多個事件流。

Muller C元件 [8],我稍後將展示其電路,作為事件的與 (AND) 元件。當Muller C元件的兩個輸入處於相同的邏輯狀態時,Muller C元件的狀態和其輸出是該狀態的副本。當兩個輸入不同時,Muller C元件使用內部儲存保留其先前的狀態並保持其輸出不變。因此,只有在其兩個輸入上都發生事件後,Muller C元件才會在其輸出端產生一個事件。Muller C元件很容易擴展到三個或更多輸入,要求所有輸入達到新的邏輯狀態後,才將該新狀態複製為輸出。我們使用帶有一個大C的標準與 (AND) 邏輯符號來表示實現轉換事件邏輯與 (AND) 功能的Muller C元件。這些元件有時稱為RENDEZVOUS元件,因為它們僅在所有輸入事件到達後才行動。

在CMOS中,Muller C元件可以實現一個特別簡單的動態實現,如圖 6 所示。這個電路使用內部節點的電容作為Muller C元件所需的儲存元件。如果需要靜態Muller C元件,則必須用靜態邏輯增強節點電容,其中一種形式如圖 7 所示。

FIGURE 6. 一個動態 Muller C 元件 在CMOS中,Muller C元件有一個特別簡單的動態實現,它使用內部節點的電容作為儲存元件。主清除期間用於初始化Muller C元件的電晶體未顯示。(請注意,圖 6 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

FIGURE 7. 一個靜態 Muller C 元件 如圖所示,用電晶體替換圖 6 中的電容,即可產生一個靜態Muller C元件。在積體電路佈局中,此處符號較小的電晶體可以非常窄,因為它們僅用於保留已經建立的值。此電路以明顯的方式推廣到三個或更多輸入。(請注意,圖 7 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

儘管轉換訊號的絕對狀態不重要,但其相對於其他相關訊號的狀態很重要。因此,有時反轉轉換訊號很重要。我們在邏輯符號的輸入或輸出上使用「氣泡」(bubbles) 來表示此類反轉,如圖 8 所示。事件流經的每個迴路必須包含奇數次反轉。此類迴路實際上是振盪器,其振盪通過Muller C元件或其他模組在迴路連接點處的動作與其他迴路協調。

FIGURE 8. 帶有反轉器的 Muller C 元件 Muller C元件包含儲存功能,以便在某些輸入條件下保持先前的狀態。當輸入或輸出線中包含反轉器時(如圖中的氣泡所示),其行為如下所列。Muller C元件為事件提供了 AND 功能。

  • IF inputs match in state THEN copy it for output ELSE hold previous state; (如果輸入狀態匹配 則複製該狀態為輸出 否則保持先前狀態;)
  • IF inputs match in state THEN invert it for output ELSE hold previous state; (如果輸入狀態匹配 則反轉該狀態為輸出 否則保持先前狀態;)
  • IF inputs differ in state THEN copy upper for output ELSE hold previous state; (如果輸入狀態不同 則複製上方輸入為輸出 否則保持先前狀態;)

(請注意,圖 8 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

圖 9 顯示了一些其他有用的事件邏輯電路的方框圖符號,這些電路實現了基本操作,其中一些對程式設計師來說很熟悉。TOGGLE電路響應其輸入端的事件,在其兩個輸出端交替產生事件;主清除訊號之後的第一個事件以及之後的每一個事件,都通過它傳輸到帶點的輸出端。SELECT模組根據資料輸入的值將輸入事件引導到一個輸出端或另一個輸出端;它用於測試條件表達式中的布林條件。在它引導的傳入事件發生之前,布林值必須是可用的,這是一個類似於圖 4 協定中捆綁條件的要求。CALL元件記住其哪個輸入端最近接收到事件,並在調用的程序完成後,向匹配的輸出端返回一個事件。CALL元件中的記憶體扮演子程序返回地址的角色。CALL元件只有在每次調用在後續調用發生之前完成時才能正常運作。ARBITER在兩個到達順序未知的事件之間做出明確的決定,即使它們幾乎同時到達,也只會為其中一個產生一個授權 (grant) 事件。就像程式設計中的號誌 (semaphore) 一樣,它會延遲後續的授權,直到收到與較早的授權相對應的done訊號線上的事件之後,這樣一次只會有一個授權發出。ARBITER可以直接連接到CALL元件,以允許兩個完全獨立的處理程序調用單個共享程序。

FIGURE 9. 事件邏輯模組 由 10 到 100 個電晶體組成的模組可以對事件執行有用的邏輯功能。圖中所示符號的模組提供了所示的功能。請注意這些功能與程式設計中使用的基本結構相似。人們可能會認為仲裁器需要 8 個端子,因為左側的request訊號似乎缺乏相應的acknowledge訊號。授權 (grant) 或完成 (done) 訊號用於確認傳入的request,具體取決於應用。

  • XOR provides the OR function for events. (XOR 為事件提供 OR 功能。)
  • Muller C-elements provide the AND function for events. (Muller C 元件為事件提供 AND 功能。)
  • TOGGLE steers events to its outputs alternately starting with the dot. (TOGGLE 將事件交替導向其輸出,從帶點的輸出開始。)
  • SELECT steers events according to the Boolean value of its diamond input. (SELECT 根據其菱形輸入的布林值導向事件。)
  • CALL remembers which client, R1 or R2, called the procedure, R, and after the procedure is done, D, returns a matching done event on D1 or D2. (CALL 記住哪個客戶端 R1 或 R2 調用了程序 R,並且在程序完成 D 後,在 D1 或 D2 上返回一個匹配的完成事件。)
  • ARBITER grants service, G1 or G2, to only one input request, R1 or R2, at a time, delaying subsequent grants until after receiving the matching done event, D1 or D2. (ARBITER 每次只為一個輸入請求 R1 或 R2 授予服務 G1 或 G2,並延遲後續的授權,直到收到匹配的完成事件 D1 或 D2 之後。)

(請注意,圖 9 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

微管線的控制 (Control for Micropipelines)

如圖 10 所示,一連串插入反轉器的Muller C元件,是本次演講描述的微管線所需的唯一邏輯。我覺得令人驚訝的是,在此電路中,微管線正向和反向方向之間的唯一區別,在於捆綁所需的延遲和反向訊號路徑中的一次反轉。請注意,在圖 10 中,request和acknowledge訊號在這種控制電路的相鄰階段之間傳遞。我很快就會描述資料線也在階段之間傳遞,但圖 10 中未顯示這些線。在每個階段之間的介面處,request和acknowledge訊號以及資料值完全遵循圖 4 的兩階段捆綁資料協定。

FIGURE 10. 微管線的控制電路 在省略資料路徑的情況下,微管線的控制電路是一連串的Muller C元件。在此圖中,四個相同階段中的一個被陰影標示,並且交替階段被倒置繪製。在每個階段的輸入和輸出端都有request,R(n),和acknowledge,A(n),訊號。acknowledge路徑中的反轉器由每個Muller C元件的一個輸入端的「氣泡」表示。此處明確顯示的延遲對於簡單的資料路徑可能不是必需的。請注意,此電路中的每個迴路都恰好包含一個反轉(氣泡),因此是一個振盪器。Muller C元件延緩了每個迴路中的振盪,以便與相鄰迴路的動作協調。在此圖及其他圖中,虛線表示事件訊號線。(請注意,圖 10 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

另請注意,圖 10 中輸入介面處的request和acknowledge線與輸出介面處的線是相同的。控制系統輸入和輸出端的訊號形式相似性,確保了任何數量的此類控制系統,即使它們原始速度差異很大,串聯連接後也能正常運作,儘管速度將受到最慢的部分限制。微管線的這種可組合性使得組裝長訊號處理管線變得容易;只需將一個微管線輸出端的request、acknowledge和資料線連接到後續微管線輸入端的相應線路即可。組合控制系統只是圖 10 所示控制系統的進一步重複。

理解圖 10 控制電路如何運作的一種方法是專注於其作為一系列事件流經的迴路的行為。每個迴路中只有一個反轉器,因此每個迴路都會振盪。Muller C元件協調相鄰迴路中的振盪。這種觀點使得很容易看到每個介面處的request和acknowledge事件必須交替發生。

理解此電路如何運作的另一種方法是專注於每個Muller C元件相對於前一階段和後一階段Muller C元件狀態的狀態。記住帶有一個反轉輸入的Muller C元件的行為,我們可以很容易地看出圖 10 控制電路的每個階段都遵循一個非常簡單的階段狀態規則:

IF predecessor and successor differ in state THEN copy predecessor's state ELSE hold present state. (如果前一階段和後一階段狀態不同 則複製前一階段狀態 否則保持當前狀態。)

這個階段狀態規則使得控制系統在所有階段都處於相同狀態,以及在交替階段處於相反狀態時都保持穩定。所有控制元件都處於相同狀態的情況對應於空管線,而交替階段處於相反狀態的情況對應於滿管線。還有其他穩定情況,例如輸入端附近的階段處於相同狀態,輸出端附近的階段處於交替狀態;這些情況對應於部分填充的管線。這個階段狀態規則也使得控制系統在某些狀態下變得不穩定;這種不穩定狀態會隨著事件在管線階段中的傳播而立即改變。要將微管線初始化到空狀態,可以使用主清除訊號將其所有Muller C元件設定為相同狀態。我在圖 6 和圖 7 中省略了執行此操作所需的重置電路。

如上所述的階段狀態規則(以IF THEN ELSE形式描述),是描述海浪和電磁波的微分方程的數位等效。在波動方程中,時間導數(在此例中是複製前一階段狀態)被設定等於空間導數(在此例中是如果前一階段和後一階段狀態不同)。就像由微分波動方程描述的物理定律一樣,階段狀態規則導致波的傳播。

像海浪和電磁波一樣,事件可以沿著圖 10 的控制電路雙向傳播。如果所有Muller C元件最初都處於相同狀態,則控制電路輸入端的事件將向前傳播,從輸入到輸出。如果控制元件最初處於交替狀態,則在控制電路輸出端引入的事件將向後傳播,從輸出到輸入。有趣的是,如此簡單的電路竟然能展現雙向的波傳播。

圖 10 控制系統中事件的正向和反向傳播對於控制微管線都很有用。事件通過控制電路的正向傳播,會將資訊向前推進微管線,很像海浪將衝浪者推向岸邊。反向傳播會將在管線末端創建的空資料空間掃回佔用區域,直至開端。空空間在佔用區域中移動,很像半導體中的空穴或水中的氣泡上升。

事件控制的儲存元件 (An Event-Controlled Storage Element)

本節介紹一種適用於轉換訊號控制系統的儲存元件。為了使這些電路更容易理解,我將使用開關符號來表示幾種不同的電晶體配置,其中一種如圖 11 所示。您可以在圖中看到,這種開關的電晶體實現使用了其控制訊號的真形式和互補形式,C 和 ~C,這意味著控制訊號的反轉未在圖中明確顯示。請注意,該電路對於其控制訊號的高電平或低電平值完全對稱,當其控制訊號為高電平時選擇一個輸入,當其控制訊號為低電平時選擇另一個。我將始終以控制訊號為低電平時的狀態繪製此類開關。

FIGURE 11. 開關符號的電路 此圖右側的雙刀開關符號表示虛線框內所示的電晶體電路。當控制線 C 為低電平時,輸出端 Z 由輸入 Y 控制,如圖所示。當控制線為高電平時,開關切換到輸入 X。這種形式的開關的輸出由其選定的輸入控制,但值會被反轉。使用通過電晶體的其他實現形式也是可能的。(請注意,圖 11 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

與轉換訊號控制系統配合使用的適當儲存元件必須響應轉換事件。與傳統鎖存器不同,在傳統鎖存器中,時脈訊號的「高」和「低」狀態可以執行不同的功能,事件控制的儲存元件必須對上升和下降轉換給予類似的響應。圖 12 所示的適用電路使用了兩條稱為「capture」和「pass」的控制線。這兩個電路中的每一個都並排放置了兩個鎖存器,並交替激活它們。在只有三個反轉器的電路中,輸出反轉器由兩個鎖存器共用。請注意,由於圖示開關控制中隱含的反轉器,這兩個電路對於其控制訊號的高電平與低電平值是完全對稱的。您可能希望將這些電路與圖 13 所示的傳統 D 型觸發器電路進行比較。

FIGURE 12. 事件控制的儲存元件 事件控制的儲存元件響應其兩條控制線上的事件,在此圖中稱為「capture」和「pass」。顯示了兩種不同的配置。右側的形式帶有五個反轉器,比左側的形式帶有三個反轉器稍快,因為其回饋路徑只包含一個開關而不是兩個。主清除後,開關將處於所示位置,在輸入和輸出之間形成一個沒有迴路的直接連接,這種狀態下儲存元件被稱為是透明的。兩種儲存元件都可以通過將其capture和pass控制線並聯連接而形成暫存器。暫存器符號包含控制輸出 Cd 和 Pd,它們是控制輸入訊號 C 和 P 的放大版本,因此必然會有延遲。Cd 和 Pd,名稱來源於「capture done」和「pass done」,在暫存器完成其動作後傳遞輸出事件。(請注意,圖 12 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

FIGURE 13. 傳統 D 型觸發器 傳統的 D 型觸發器由圖 5 中所示的非重疊時脈訊號 ~1 和 ~2 控制。將此電路與圖 12 中的事件控制儲存元件進行比較。(請注意,圖 13 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

事件控制的儲存元件的行為很容易描述,僅使用其兩條控制訊號的相對狀態。當其兩條控制訊號狀態相同時(如圖 12 所示),事件控制的儲存元件是透明的,並將其輸入資料直接傳遞到其輸出端,根本不作為儲存元件運作。您可以看到通過開關和反轉器直接從輸入到輸出的路徑。當其兩條控制訊號狀態不同時,其中一組開關會從圖 12 所示位置翻轉。正如您可以從圖中想像的那樣,如果其中一個開關翻轉,則會形成一個包含兩個反轉器的迴路。這種迴路會捕捉並保留資料值。如果一個開關翻轉形成這樣的迴路,則輸入到輸出之間不存在路徑,事件控制的儲存元件對其資料輸入端的變化不敏感,並且僅在輸出端報告迴路中捕捉到的資料。

事件控制的儲存元件的行為也可以用事件來描述。假設事件控制的儲存元件最初是透明的,如圖 12 所示,並且capture和pass控制訊號事件總是交替發生。其capture控制線上的事件會翻轉連接到capture線的兩個開關,從而導致儲存元件捕捉並保持當時通過它的資料值。此事件隔離了元件的輸出值與其輸入端的變化,但不改變輸出值。隨後的pass控制線上的事件會翻轉另一個開關,使元件返回透明狀態,允許下一個資料值作為其輸出出現,並可能改變其輸出值。在元件的pass控制線上的每個事件之後,一個新的輸出值出現。這正是構建具有先前描述的控制系統的微管線所需的行為。

事件控制的儲存元件以組為單位連接,形成事件控制暫存器。每個暫存器由許多事件控制的儲存元件組成,其capture和pass控制線並聯連接。由於capture和pass線驅動許多電晶體,因此暫存器設計中包含適當的放大器。這些放大器有一些未知延遲,並且由線路實際長度引入進一步的延遲。因此,我在每個事件控制暫存器上都包含了pass done(Pd)和capture done(Cd)事件輸出,如圖 12 暫存器符號所示。這些輸出上的事件完全遵循capture和pass控制輸入上的事件,但由於暫存器中的放大和佈線延遲而有所延遲。明確的done訊號輸出允許在需要時進一步延遲後續操作。如果暫存器是由更簡單的部分組成(我們稍後將看到),或者執行某些副作用,則可能需要此類延遲。值得注意的是,如果將兩個或更多事件控制的儲存暫存器連接起來,使其資料路徑串聯,並提供相同的控制訊號,結果除了總延遲外,與單個事件控制儲存暫存器是無法區分的。

如果涉及寬字元且需要小尺寸而不是高速,則可以使用圖 14 所示的電路作為事件控制儲存暫存器。此電路每個位元僅使用一個鎖存器,但需要額外的設備進行控制。需要額外的控制設備是因為鎖存器只有一個控制線,capture和pass事件都必須流經它。當然,額外設備引入的延遲也會延遲capture done和pass done控制輸出。

FIGURE 14. 作為事件控制儲存暫存器使用的鎖存器 由普通鎖存器製成的事件控制暫存器需要一個 XOR 模組和一個 TOGGLE 模組進行控制。圖中顯示了一個 2 位元暫存器;虛線表示事件訊號線。capture 和 pass 事件在獨立的控制輸入 C 和 P 上交替到達,但 XOR 將它們合併到一條線路上。在 XOR 輸出端,每個 capture 事件成為鎖存器控制線上的上升轉換,並翻轉開關,導致鎖存器捕捉資料。每個 pass 事件成為鎖存器控制線上的下降轉換,並將開關翻轉回所示位置,使鎖存器再次透明。TOGGLE 模組在暫存器完成其動作後,將 capture 和 pass 事件重新分離成兩個獨立的輸出路徑 Cd 和 Pd。此電路比圖 12 的事件控制暫存器慢,並相應地延遲其輸出事件 Cd 和 Pd,但除了延遲外,提供的功能完全相同。(請注意,圖 14 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

圖 14 電路的運作很容易理解。圖頂部所示的XOR電路,將來自兩個控制輸入端的capture和pass控制事件合併到一條線上。由於capture和pass事件是交替發生的,每個capture事件會使XOR的輸出變為高電平,翻轉開關從所示位置,並導致鎖存器捕捉資料。每個pass事件會使XOR的輸出變為低電平,將開關返回到所示位置,並使鎖存器再次透明。圖底部所示的TOGGLE模組,將公共線上的capture和pass事件分離到標記為圖中Cd和Pd的「capture done」和「pass done」控制輸出端。TOGGLE足以用於此目的,因為capture和pass事件是交替發生的。capture done和pass done控制輸出表示XOR和TOGGLE模組中的任何內部延遲以及驅動暫存器中許多鎖存器的控制線路的完成。

不帶處理功能的微管線 (Micropipelines without Processing)

一個不帶處理功能的微管線,也就是一個FIFO,可以通過將圖 10 的控制電路與圖 12 或圖 14 的儲存暫存器結合起來構建。一系列串聯的事件控制儲存暫存器作為其資料路徑,而一連串的Muller C元件作為其控制電路,如圖 15 所示。每個事件控制儲存暫存器都使用其控制階段的控制訊號作為其capture控制訊號,並使用後續階段的控制訊號作為其pass控制訊號。當這個FIFO為空時,其所有儲存暫存器都是透明的,因此存在一條直接從其資料輸入端到其資料輸出端的路徑。

FIGURE 15. 不帶處理功能的微管線 不帶處理功能的微管線使用事件控制暫存器作為資料路徑,使用 Muller C 元件作為控制電路。圖中顯示了四個階段;其中一個被陰影標示。階段之間的每個介面都符合圖 4 的兩階段捆綁資料協定。此圖建議了積體電路佈局的形式;控制訊號在資料路徑上來回穿梭,以適應傳輸延遲。(請注意,圖 15 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

我安排圖 15 的佈局不僅為了使其易於閱讀,還為了建議積體電路實現的佈局。Muller C 元件位於暫存器的兩端,正如圖所示,這樣控制訊號在晶片上呈鋸齒狀穿梭。控制暫存器的線路由暫存器的一側驅動,並用於控制相鄰階段的 Muller C 元件在暫存器的另一側。由於控制暫存器的訊號必須經過放大才能驅動許多儲存元件中的所有開關,並且承載控制訊號穿過暫存器的線路很長,因此控制暫存器總會有一定的延遲。從一側驅動暫存器並在另一側感應其控制訊號的安排,不僅適應了驅動放大器的延遲,還適應了線路本身的任何延遲。

如果微管線中不需要處理功能,也就是說,對於 FIFO,圖 16 中更簡單的資料路徑電路即可使用 [17]。在此電路中,事件控制儲存元件的並排鎖存配置在階段之間擴展。兩個獨立的資料路徑僅在 FIFO 的輸出端通過與事件控制儲存元件中使用的非常相似的輸出選擇開關重新匯合。第一個、第三個及其他奇數索引的資料值通過資料路徑的上層路徑傳遞,而偶數索引的值通過下層路徑傳遞。

FIGURE 16. 一個 FIFO 電路 如果不需要處理(如在 FIFO 中),圖 15 中的事件控制儲存元件可以用這個更簡單的電路替換 [17]。在此圖中,虛線表示控制訊號線,實線表示資料值線,顯示了四個階段。開關繪製在 FIFO 為空時所處的位置。圖示的 FIFO 是一個位元寬度,因此可以儲存四個位元;更多的長度或寬度來自內部部件的進一步重複。交替的輸入通過資料路徑的上層和下層軌道,並且僅在輸出端再次合併。當 FIFO 為空時(如圖所示),它是透明的;可以直接從資料輸入端到資料輸出端追蹤路徑。當每個開關改變時,其每個輸入端都會提供相同的資料;因此,開關在改變時可能會瞬間將其兩個輸入端短路。圖示的微管線包含奇數個反轉,因此反轉其資料值。(請注意,圖 16 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

看看圖 16 中的所有對稱性。除了其輸出端(圖右側所示),其資料路徑在 FIFO 的正向和反向方向之間完全沒有區別。起初,我認為這一定表明其設計存在缺陷。然而沒有缺陷;圖 16 的電路儘管非傳統,但運作良好。拋棄傳統的鎖存器概念,即可獲得一個簡單有效的 FIFO 電路。

當然,資料通過微管線傳播的速度必須快於控制事件通過其控制電路傳播的速度。這通常由三個因素確保。首先,控制電路中使用的Muller C元件比資料路徑中使用的儲存元件更複雜,因此本質上較慢。其次,由於控制系統的每個單一階段必須驅動保持並行字元的許多儲存元件在每個暫存器中,因此控制訊號必須經過放大才能驅動多個負載。這種放大不可避免地延遲了控制訊號。第三,圖 15 中建議的佈局確保了控制訊號的鋸齒形路徑比資料路徑中的線路更長。當然,當使用圖 14 的電路作為暫存器時,每個暫存器的capture done和pass done控制輸出應連接到相鄰階段的Muller C元件輸入端,以便將TOGGLE和XOR模組中的任何延遲包含在整體控制訊號延遲中。如果在資料路徑中沒有顯著的處理邏輯,則可以很容易地確定資料路徑比控制路徑快。只有在資料路徑的儲存單元之間放置了顯著的處理邏輯時,才需要在控制路徑中加入特殊的延遲。

帶處理功能的微管線 (Micropipelines with Processing)

微管線框架為各種管線處理器提供了基礎 [18]。我和我的同事使用微管線框架設計了乘法器、二進制到一中取 N 解碼器、記憶體控制器以及其他電路。在每種情況下,圖 10 的微管線控制模板都為設計提供了基礎。在某些情況下,這個簡單的模板還會用圖 9 的事件邏輯模組組成的電路進行修飾,以提供更複雜的控制功能。例如,僅使用一個 TOGGLE 模組和一個 XOR 模組,就可以很容易地構建一個針對每個輸入事件執行兩個操作的電路。以不同的方式連接這兩個模組,則可以構成一個僅對每隔一個輸入事件執行一次操作的電路。

當需要邏輯處理時,如圖 17 所示的方框圖中,將適當的組合電路放置在儲存暫存器之間。人們可以權衡儲存階段的數量和介入邏輯的複雜性,以在延遲和吞吐量之間獲得適當的平衡。階段之間組合邏輯越少,儲存階段越多,則以較大的延遲為代價獲得更高的吞吐量。圖 18 和圖 19 的解碼電路使用不同數量的儲存來執行相同的功能。

FIGURE 17. 帶處理功能的微管線 帶處理功能的微管線在圖 15 的事件控制暫存器之間使用組合邏輯。圖中顯示了四個階段;其中一個被陰影標示。request事件路徑中的延遲元件模擬處理邏輯延遲,以保持捆綁協定。階段之間的每個介面,無論是在邏輯電路之前還是之後,都符合圖 4 的兩階段捆綁資料協定。每個暫存器的 capture done,Cd,輸出顯示連接到其前一階段的 pass,P,輸入,這比圖 15 中使用的連接方式更為保守;兩種連接方式都有效。(請注意,圖 17 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

FIGURE 18. 具有兩個微管線階段的解碼器 這個兩階段微管線將三個二進制輸入位元解碼為八個一元輸出位元。它可以儲存兩個值,一個尚未解碼,另一個已完全解碼。圖中中央的處理邏輯由三級普通 AND 閘組成。圖底部的延遲必須至少將 request 事件延遲得與三級組合邏輯延遲資料一樣長。(請注意,圖 18 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

微管線後續階段暫存器中的儲存位元數,可以根據不同處理步驟的需求而有很大差異。例如,圖 19 的解碼器有 3 個二進制輸入但有 8 個一元輸出,並在每個內部階段解碼額外的位元輸入時,增加資料字元的寬度。圖 20 中佈局所示的 12 位元 x 12 位元微管線乘法器,在輸入和輸出端都有 24 位元的資料路徑。它使用了 24 個微管線階段:12 個用於執行乘法,12 個用於解析所得產品的進位保存形式。在管線的中間,需要 36 位元的暫存器,因為產品的一半採用進位保存形式,表示產品的每個位元需要兩個位元資料。

FIGURE 19. 具有四個微管線階段的解碼器 這個四階段微管線也將三個二進制輸入位元解碼為八個一元輸出位元。它與圖 18 的電路功能相同,但為部分解碼結果提供了更多儲存空間。它可以儲存四個值,第一個尚未解碼,兩個部分解碼的值,以及最終完全解碼的值。這些 request 路徑中的三個延遲可以比圖 18 中的一個延遲更短,因為每個延遲僅模擬單級組合邏輯。這個解碼器比圖 18 功能等效的解碼器具有更高的吞吐量。(請注意,圖 19 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

FIGURE 20. 微管線乘法器晶片 此照片所示的實驗性微管線乘法器晶片由 Austek Microsystems 製造。它使用 24 個微管線階段來乘以成對的 12 位元數字;前 12 個階段在乘法陣列中,最後 12 個階段解析乘法器輸出的進位保存形式。當為空時,乘法器就像一個無儲存的組合乘法器一樣運作,但當作為管線使用時,它可以接受最多 24 對運算元,然後才提供其第一個產品。(請注意,圖 20 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

因為它有 24 個階段,這個乘法器可以儲存多達 24 個部分處理的產品。它也可以儲存更少的。它會盡可能快速地自動處理任何部分完成的產品,同時考慮已排隊待輸出的產品。在全速運作時,它提供了管線處理器非常高的吞吐量。然而,當為空時,它沒有儲存功能,並作為組合乘法器來產生單個產品。將虛擬資料插入以清除先前輸入的資訊,在微管線中是絕對不需要的。

作為一個更複雜的例子,我們使用微管線框架設計了一個記憶體控制器。這個記憶體控制器旨在對 2^24 字、每字 16 位元的動態隨機存取記憶體 (DRAM) 進行位元組序列存取。其輸入和輸出暫存器寬度為 8 位元,以適應位元組序列資料格式。我們使用圖 4 的兩階段捆綁資料協定作為該記憶體控制器的輸入和輸出端的位元組傳輸協定。它包含七個部分:四個事件控制儲存暫存器以及它們之間的三個邏輯階段。

記憶體控制器中每個控制階段的運作方式與圖 10 微管線控制中的簡單階段非常相似。與圖 10 的階段一樣,每個階段都包含一個Muller C元件,並且每個階段僅使用圖 4 的兩階段捆綁資料協定與相鄰階段進行通訊。每個階段的控制電路由圖 9 中所示的事件邏輯元件組成:XORs、Muller C元件、SELECTs、TOGGLEs和CALLs。在某些階段,這些元件連接成迴路,以允許在確認來自前一個階段的資料或請求來自後續階段的服務之前,在階段內部發生多個操作。此類迴路用於打包和解包資料。獨立的記憶體刷新程序使用ARBITER中斷正常操作。

記憶體控制器中每個階段的邏輯執行不同的功能。第一階段解碼來自 8 位元輸入暫存器的位元組序列輸入,將其轉換為一個 54 位元並行字元,包含記憶體週期所需的所有地址、資料和控制資訊。此階段在請求下一階段的動作之前,接受並確認多個輸入位元組。在第一和第二邏輯階段之間是一個 54 位元事件控制暫存器。第二階段使用每個 54 位元並行字元來控制對外部 DRAM 晶片的一次存取。從記憶體讀取時,此存取將 54 位元地址和控制資訊轉換為 16 位元資料值。控制電路包含記憶體晶片的時序模型,並等待記憶體週期完成後才請求下一階段的動作。在第二和第三邏輯階段之間是一個 16 位元事件控制暫存器,用於捕捉來自 DRAM 晶片的資料輸出。第三階段將 16 位元輸出資料重新打包為位元組序列形式,並通過 8 位元事件控制輸出暫存器呈現在輸出端子。

這個記憶體控制器作為一個管線運作時,可以同時執行記憶體存取,並同時打包先前存取的資料和解包下一個存取的位元組序列地址和控制資訊。由於階段不受共同時脈的約束,並且每個階段按自己的步調運作,因此管線具有彈性。彈性允許在輸入端呈現一組單獨的地址和命令值時(這可能需要幾個輸入位元組),即使沒有提供進一步的輸入,記憶體週期也可以發生。

微管線的行為是組合電路行為和管線處理的混合。請記住,事件控制的儲存元件在空閒時是透明的,並且可以像組合電路一樣運作,不儲存任何東西。因此,當微管線為空時,它就像一個組合電路一樣運作。圖 18 和圖 19 的解碼器在經過其資料路徑延遲後,如果為空,對於任何給定的二進制輸入,都能忠實地報告正確的一中取 N 碼作為輸出。您可以通過檢查圖 18 和圖 19,並記住開關都繪製在資料路徑為空時所處的位置來確認這一點。請注意,存在不涉及任何儲存的完整路徑從輸入到輸出。類似地,圖 20 的乘法器如果為空,在其資料路徑延遲後,也能忠實地報告其輸入運算元的乘積作為輸出。這種行為使得微管線的資料路徑易於測試。

當微管線連續快速地給予多個輸入時,其管線行為就很明顯了。微管線輸入端的request和acknowledge線上的轉換事件,根據圖 4 的兩階段捆綁資料協定,將一個輸入資料元素與另一個分開。request-acknowledge對事件就像雜貨店結帳時使用的橡膠棒,將一位顧客的雜貨與另一位顧客的分開。每一對request-acknowledge事件將一組資料與前面或後面的資料集分開。Muller C元件控制系統的波傳播特性將這些資料分離事件向前傳播通過控制電路,而控制事件則強制資料通過事件控制儲存暫存器向前移動,就像雜貨店傳送帶的運動將橡膠棒和雜貨向前移動到收銀員那裡一樣。

當微管線連續快速地傳遞多個輸出時,其管線行為也很明顯。同樣地,微管線輸出端的request和acknowledge線上的「握手」事件,用於將一個輸出值與另一個輸出值分開。再次使用了圖 4 的兩階段捆綁資料協定,每次握手都將一個新值帶到輸出資料端子。微管線可以展現非常高的突發輸入和輸出資料速率。

圖 4 的兩階段捆綁資料協定自動處理微管線的「滿」和「空」情況。如果微管線變滿,它將延遲其輸入端的acknowledge事件,從而阻止進一步的輸入。請記住,饋送微管線的設備必須符合圖 4 的兩階段捆綁資料協定,因此在收到當前資料的確認之前,不能更改輸入資料。類似地,如果微管線變空,它將延遲其輸出端的request事件,從而阻止輸出設備獲取錯誤的資料。在微管線的每個內部階段都應用相同的訊號協定。因此,如果某個部分已滿,它將自動延遲來自微管線較早部分的新的資料。

使用相同協定的其他設備 (Other Devices Using the Same Protocol)

微管線中使用的兩階段捆綁資料協定也可以應用於其他類型的設備。例如,可以構建一個環形緩衝區 FIFO,其介面特性與圖 15 或圖 16 的微管線 FIFO 相同。此類設備可以使用外部隨機存取記憶體進行所需儲存,並使用兩個地址計數器作為指標,一個用於讀取,一個用於寫入,以將記憶體視為環形緩衝區。它會比較兩個指標的值以判斷環形緩衝區是否已滿或為空,如果已滿或為空,則延遲其端子處的握手訊號。環形緩衝區指標以及比較所得的滿和空訊號可以是控制部分的私有內部訊號,不提供給外部。

如果在這種環形緩衝區 FIFO 中使用單埠記憶體,則必須使用仲裁器來決定下一個記憶體週期是用於讀取還是寫入。仲裁是必需的,因為一個單一資源(即記憶體存取埠)必須在兩個獨立計時的程序(輸入程序和輸出程序)之間共享。如果在完全相同的瞬間,輸入程序傳遞一個新的輸入值,而輸出程序請求一個新的輸出值,仲裁器必須明確決定先處理哪個請求。圖 21 顯示了此類環形緩衝區 FIFO 的轉換邏輯控制電路。

FIGURE 21. 環形緩衝區 FIFO 控制邏輯 環形緩衝區 FIFO 的控制邏輯可以由圖 9 所示的事件邏輯模組組成。除了測試值之外,圖中所示的所有線路都傳輸事件訊號;資料路徑、地址指標和記憶體未顯示。我在四個 SELECT 模組中的每一個都寫下了其測試名稱;標有「E」和「F」的線路傳輸所需的布林值。四個菱形框中描述的功能包括記憶體存取和遞增讀寫指標 RP 和 WP。雖然此圖看起來像方塊圖,但它實際上是一個可以直接實現的電路。已經證明 [5] 外部觀察者無法區分此環形緩衝區 FIFO 控制電路與圖 10 的微管線控制電路。(請注意,圖 21 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

雖然圖 21 的電路看起來像流程圖,但它實際上是一個電路。它由簡單的轉換控制模組組成,所有模組都使用轉換訊號。由於這些模組對延遲不敏感,將它們組合成電路非常類似於繪製流程圖。我的同事 David Dill 使用他開發的工具,Bob Sproull 證明如果圖 10 和圖 21 的 FIFO 控制電路能夠運作,則在記憶體大小相等的情況下,它們在功能上是等效的 [5]。因此,我們可以確信,這種環形緩衝區 FIFO 與微管線 FIFO 是可互換的。能夠進行此類證明是轉換訊號概念框架的吸引力之一。

在微管線階段之間使用圖 4 的兩階段捆綁資料協定,為使每個階段以不同方式執行其功能提供了廣泛的空間。例如,用於算術正規化的管線設備可以構建為多個階段或單個階段。多階段版本在每個階段執行一個位元移位,吞吐量非常高,延遲較長,並提供大量緩衝空間。單階段設備按順序執行其移位,吞吐量和緩衝空間減少,但所需的電路顯著較少。

圖 22 顯示了此類單階段序列正規化器資料路徑的三個位元。串聯使用了兩個圖 14 所示形式的暫存器來捕捉和保持資料。圖頂部的開關選擇輸入資料還是移位資料進入暫存器。此電路左側的 XOR 和 TOGGLE 模組起著與圖 14 中類似的作用。標有「start latch data procedure」的線路上的每個事件都會在每個鎖存器控制線路上產生兩個事件,從而將暫存器開關從所示位置翻轉出去,然後翻轉回所示位置,在暫存器中捕捉一個新的資料值。

FIGURE 22. 序列正規化器的資料路徑 序列正規化器的資料路徑定義了 LATCH DATA PROCEDURE。僅顯示了暫存器的三個位元。未顯示用於檢測全零情況或數字已正確正規化的電路。資料路徑頂部的開關選擇暫存器是接收輸入資料還是移位資料。圖左側的 TOGGLE 和 XOR 模組連接成兩個按順序執行的「執行兩次」迴路。在標有「start latch data procedure」的端子收到事件後,兩級鎖存器依次捕捉資料。資料鎖存後,最後一個 TOGGLE 模組會向標有「done latch data procedure」的端子發出一個事件。(請注意,圖 22 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

您應該將圖 22 視為 LATCH DATA PROCEDURE 的定義。此程序有一個輸入參數,即所示的「shift control」訊號,和一個輸出參數,即圖中省略的電路生成的「normalized or all zero」訊號。

序列形式的正規化器運作方式,就像電腦只能一次左移一位元的正規化程序一樣。圖 23 顯示了控制電路。圖頂部是一個Muller C元件,類似於我們在其他微管線階段看到的元件。在一個事件離開Muller C元件後,其第一個動作是通過使用CALL模組的上方客戶端端子R1,來存取由菱形框代表並在圖 22 中定義的鎖存資料程序,從而捕捉一個輸入資料。當鎖存資料程序完成後,它會返回一個事件到CALL模組的D端子,該端子又會返回一個事件到其D1端子。因此,在資料被捕捉後不久,並在資料正規化之前,控制電路在其輸入acknowledge線上產生一個事件,A(in)。從微管線階段的角度來看,A(in)下方算法的其餘部分只是R(out)之前的一個延遲。

FIGURE 23. 序列正規化器的控制電路 序列正規化器的控制電路使用一個 call 模組,使得鎖存資料程序可以服務於兩個獨立的目的。上方客戶端使用鎖存資料程序在移位控制開關處於圖 22 頂部所示位置時捕捉輸入資料。下方客戶端是 while 迴路的一部分,也包含一個 XOR 和一個 SELECT 模組。一個事件在此迴路中循環,只要值尚未正規化,每次循環就執行一次移位。每次移位之間的時間由迴路延遲決定,可以像相關電路一樣快或慢。當 while 迴路完成時,事件通過 SELECT 模組的「true」輸出離開迴路。因此,當移位完成時,控制電路在其輸出 request 線路 R(out) 上產生一個事件。(請注意,圖 23 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

捕捉輸入資料後,控制電路使用一個 while 迴路將資料移位到正規化形式。這個 while 迴路包含一個 XOR 模組、一個 SELECT 模組,以及通過 CALL 模組的下方客戶端端子調用的鎖存資料程序。一個事件在 while 迴路中循環,並通過鎖存資料程序,只要資料尚未正規化,每次循環就進行一次移位。每次移位之間的時間由迴路延遲決定,可以像相關電路一樣快或慢。當 while 迴路完成時,事件通過 SELECT 模組的「true」輸出離開迴路。因此,當移位完成時,控制電路在其輸出 request 線路 R(out) 上產生一個事件。

圖 23 左側所示的 shift control 線路值得特別一提。我們可以通過兩種方式來思考它。首先,從事件的角度思考,我們應該在 while 迴路開始之前在這條控制線上放置一個事件,以將移位控制開關翻轉到移位位置,並且我們需要在 while 迴路完成時在其上放置另一個事件,以將開關翻轉回輸入位置。驅動 shift control 線路的 XOR 元件的兩個輸入端用於包圍 while 迴路,從而提供所需的兩個事件。思考 shift control 的另一種方式是考慮 XOR 模組輸出的值。只要 while 迴路處於活動狀態,其輸入和輸出控制端子將處於不同的狀態,因此 XOR 模組的輸出將為高電平,將開關設置在正確的移位位置。

設計此處所示的控制電路,很像製作程序的方塊圖。事件邏輯模組不僅提供了程式設計師熟悉的條件判斷、程序調用及其他元素,而且它們對事件的響應使得將它們組合成迴路和程序中發現的其他結構變得很容易。使用微管線控制電路的形式,構建並行處理設備也很容易。我們和其他人已經構建和測試了此類事件邏輯模組的庫,並發現它們非常易於使用;將事件驅動模組的組合與程式設計的相似性已得到認可,並且至少自 20 世紀 60 年代的 macromodule 項目 [2, 3] 以來,已在少數地方被有效地利用。我認為它為傳統硬體設計提供了一個令人興奮的替代方案。

微管線在通用計算中的應用 (Micropipelines in General Purpose Computing)

通用計算機使用管線出於兩種目的:計算資料路徑和指令解碼。如果常用記憶體部件和控制器使用微管線框架構建,它們也可以在記憶體取操作中使用管線。讓我們逐一考慮這三種應用,看看微管線框架如何改善系統性能或可用性。

讓我們想像一台通用計算機,其算術向量處理使用微管線。由於微管線提供的儲存量按需變化,因此無需在機器中內建固定的向量長度。程序可以自由地將任何長度(最多一個上限)的向量載入到此類微管線中,然後再卸載結果。例如,使用微管線加法器,程序可以堆疊一系列計算索引記憶體引用所需的地址和偏移量加法任務,並使用微管線的內部儲存來保存所得的地址序列,直到需要時再使用。用於乘以短向量與小矩陣(在電腦圖學中很有用的操作)的程序,可以將向量和矩陣元素載入到一個微管線乘法器,然後再接一個累加器。具有 2、3 或 4 個分量的向量可以很容易且高效地由相同的設備處理。此外,由於輸入和輸出操作可以在時間上分離,因此記憶體存取所需的索引可能得到簡化。

微管線最重要的應用或許將涉及向量長度變化的操作。計算圖學中廣泛使用的裁剪操作 [14, 15] 就是一個例子。裁剪操作會移除一組物件中超出參考視窗的部分。裁剪可能會導致物件數量增加或減少。由於整個物件可能會被移除,輸出可能會少於輸入,但也可能因為連接的邊緣被分成多段而導致輸出多於輸入。此類具有非常簡單介面特性的裁剪設備可以使用微管線框架構建。

排序是微管線在向量長度變化方面的另一個重要應用。微管線可以應用於排序中使用的分區和合併操作。對於分區,假設兩個微管線連接到一個快速微管線分區器的輸出端。給定一個輸入值向量,分區器可以根據某個分區標準將它們分成兩個輸出向量,將每個向量的元素傳遞到相應的輸出微管線中。當然,兩個輸出向量中的元素數量是依賴於資料的,但微管線具有彈性,可以通過按需增加或減少可用儲存量來輕鬆適應可變長度的向量。兩個微管線的輸出可以傳遞分區後的值,無需任何預熱或沖刷。

微管線也可以應用於合併操作。在這種情況下,兩個用於儲存輸入向量的微管線連接到合併設備的兩個輸入端。這個合併設備可以在其所呈現的資料值之間進行任何適當的比較,並選擇其中一個用於輸出。輸入微管線的彈性特性允許合併設備按照資料值所需的任何順序從其中任何一個獲取資料。分區和合併設備在訊號處理管線中也很有用,例如,用於在幾個並行管線之間分配工作負載。

現在讓我們從算術轉向指令處理。管線指令處理已變得非常普遍,並且隨著精簡指令集計算機 (RISC) 架構的出現,現在已得到很好的理解。其副作用之一稱為「延遲分支」。這個名稱描述了一個事實:在每次跳轉或條件跳轉指令之後,會按順序執行一些精確數量的指令(例如恰好 2 條),然後分支才會實際生效。這些「懸空 (overhang)」指令是必要的,以在新的跳轉地址生效時保持無彈性指令處理管線忙碌。如果在這些懸空指令中沒有有用的事情可以做,則必須在指令處理管線完成跳轉指令的工作時,將 NOPs(無操作指令)作為輸入插入。

讓我們想像一個微管線指令處理器。這種處理器可以避免懸空指令的要求,但也允許包含它們以提高額外速度。儘管微管線的延遲可能會在跳轉後產生相當於兩條指令的時間延遲,但這種處理器無需強加 NOPs 的儲存成本。如果沒有有用的事情可以做,可以省略 NOPs 以節省儲存。如果在跳轉後可以有效地執行其他數量的指令(例如,一條或三條),則可以插入它們。通過按需擴展或收縮指令處理管線中使用的儲存量,微管線框架可以增加程式設計師的靈活性。管線不再需要包含恰好固定數量的儲存單元。

條件碼可以有效地通過微管線傳遞。對於管線提供高吞吐量的條件,例如算術比較或奇偶校驗,可以以向量方式計算。為了獲得最大吞吐量,程序應在計算條件和測試其結果之間插入其他操作。如果在計算條件和測試其結果之間沒有有用的事情可以做,可以省略介入的指令,並且條件微管線的行為就像一個組合電路。這樣的程序可能會承受微管線延遲帶來的延遲,但會正常運作。

有了用於儲存條件碼的微管線,程序可以在測試第一個條件之前計算多個條件。條件碼按照先進先出的順序保留在微管線中,直到被測試。這在多路解碼樹中特別有用,例如,三個條件控制一個 8 路分支。計算每個條件的指令只需執行一次,這樣生成的三個條件碼儲存在微管線中,直到在分支樹中被測試。在傳統機器中,計算第二和第三個條件的指令必須在測試樹的每個分支中重複。

最後,記憶體系統顯然非常適合微管線框架。可以使用微管線設計一個動態隨機存取記憶體 (DRAM) 部件。這種記憶體部件可以提供比傳統 DRAM 部件至少兩倍的吞吐量提升。這種提升是因為這種記憶體部件可以同時存取其記憶體陣列、解碼下一個地址以及驅動其資料輸出引腳,並輸出先前檢索到的資料。這種改進的部件只需要相對較少的額外電路,因為 DRAM 中的許多操作已經由內部時序鏈驅動。只需在現有的 DRAM 邏輯、控制機制和延遲模型中添加適當的事件控制鎖存器和 Muller C 元件,即可形成一個微管線。當不需要並行性時,微管線將為空,使得事件控制儲存元件透明,並允許微管線 DRAM 部件的行為很像目前廣泛使用的逐個週期的 DRAM 部件。

人們可能擔心帶有微管線的 DRAM 部件需要四條控制線,輸入埠兩條,輸出埠兩條,而現有部件只有兩條,稱為 RAS 和 CAS。事實並非如此,因為最好使用 DRAM 行為的外部時序模型,基於製造商的最壞情況規格,而不是讓系統中的每個 DRAM 部件都自行報告完成。個體 DRAM 部件上的輸入和輸出埠的完成訊號引腳可以省略,因為外部時序模型代表整個記憶體系統提供兩個缺失的完成訊號,使用其對 DRAM 行為的模型提供適當的延遲。個體 DRAM 部件的輸入埠只需 request 線,而個體 DRAM 部件的輸出埠只需 acknowledge 線。這兩條控制線上的事件分別告訴 DRAM 部件何時接受新的地址資訊或要寫入的資料,以及何時提供新的輸出值。外部時序模型本身將是一個微管線,其階段延遲等於或超過 DRAM 部件中微管線的相應階段延遲,並且是逐階段對應的。

快取記憶體也很適合微管線框架。在此框架內構建的一個高吞吐量快取記憶體,可以同時執行解碼、「命中」檢測和驅動輸出。這種快取記憶體有兩對介面,都使用類似圖 4 的兩階段捆綁資料協定的訊號傳輸協定。一對介面連接快取記憶體到處理器,另一對連接快取記憶體到記憶體,如圖 24 所示。處理器與快取記憶體之間的介面應與快取記憶體與記憶體之間的介面相同,以便系統在有無快取記憶體的情況下都能運作,如圖 24 和圖 25 所示。

FIGURE 24. 帶快取的記憶體介面 處理器、快取記憶體和記憶體系統可以使用符合圖 4 的兩階段捆綁資料協定的介面。介面 1 和 2 傳輸地址和待寫入資料;介面 3 和 4 傳輸讀取資料和指令。整個系統可以作為一個微管線運作,其最大吞吐量速率取決於其最慢的參與者。(請注意,圖 24 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

FIGURE 25. 不帶快取的記憶體介面 省略快取記憶體後,處理器和記憶體仍然可以一起工作。由於每個介面都能適應任意延遲,因此在省略快取記憶體或替換性能不同的快取記憶體時,無需進一步的設計更改。(請注意,圖 25 本身並未包含在翻譯輸出中,此處僅提供其原始描述)

處理器、快取記憶體和記憶體共同構成一個微管線。處理器發出的記憶體請求以微管線方式流入快取記憶體並返回,僅在必要時才進出記憶體。處理器可以在獲取任何資料之前同時向快取記憶體發出多個記憶體請求。為了獲得最高吞吐量,處理器應發出連續的記憶體請求流,但即使它一次只發出一個請求,也能正確運作,儘管吞吐量會降低。由於圖 4 的兩階段捆綁資料協定允許發送方或接收方任意延遲下一次交易,快取記憶體或記憶體存取延遲會自動延遲處理器後續的請求。同樣地,處理器中消耗記憶體資料的部分,會等待信號指示有效資料存在的事件所需的時間。

如果快取記憶體不包含所需資訊,它會將請求傳遞給記憶體。在這種情況下,處理器會承受從記憶體獲取資訊所需的額外延遲。由於處理器僅在檢測到驗證請求事件時才接受來自快取記憶體的資料,處理器可以輕鬆適應任何額外的記憶體延遲。事實上,如果快取記憶體將所有請求都發送給記憶體,或者如果省略了快取記憶體,系統仍然會正常運作,儘管吞吐量會降低。

這讓我想到微管線最重要的意義。由於它們使用事件控制的介面而不是共同時脈,具有不同固有速度的微管線可以直接組合到能夠正常運作的系統中,儘管速度會受限於最慢的部分。如果圖 24 的快取記憶體被省略或替換為具有不同成本和性能特性的快取記憶體,系統仍然會正常運作。同樣地,處理器性能或記憶體性能可以升級,系統仍然會工作,並利用任何可用的速度提升。

結論 (Conclusion)

在轉換訊號概念框架下,FIFO 和管線的設計既簡單又易於理解。在時脈邏輯概念框架下,它們的設計相對困難。通過拋棄時脈邏輯而轉用轉換訊號,可以製造非常簡單的微管線,這些微管線易於組裝成更大的結構。此處提出的概念框架變更簡化了系統設計,因為簡單的模組及其組合可以進一步組合成大型系統。

微管線和轉換訊號提供的可組合性可能是它們最重要的特性。複雜的功能很容易由提供程式設計中已熟悉的基本功能的簡單模組組合而成。通過將它們組合成基本模組和先前設計的組合的分層結構,可以構建更複雜的系統。即使基本構建模塊很難設計(現在已經不難了),它們也是有價值的,因為它們非常容易組合成系統。

這種相同的可組合性提供了一種簡單的方式來升級系統性能,因為改進的電路變得可用。事件驅動介面協定允許用性能更優、延遲更低或成本更低的新的元件替換舊的元件。由於此處使用的握手協定自動處理資料傳輸或使用的延遲,因此可以確信這種替換能夠使系統仍然正常運作。另一方面,在時脈邏輯概念框架下構建的大型系統難以逐步改進,因為任何時脈速度的提高都必須在整個系統中得到適應。隨著對這裡概述的系統進行改進,人們可以預期系統中最慢或最昂貴的部分將首先被替換,從而每次替換都將提高系統性能或降低系統成本。

因此,轉換訊號概念框架、微管線以及圖 4 的兩階段捆綁資料協定結合起來,不僅簡化了初始系統設計,而且允許在新技術可用時快速進行系統的中期升級。

我希望本次演講能幫助系統設計跟上元件技術的進步。如今,新的積體電路技術大約每六個月就會帶來成本或性能的顯著改進。利用這種改進的性能通常很困難,因為提高整個系統的時脈是一個艱鉅且充滿危險的任務。當今的系統設計師,受制於時脈邏輯概念框架,需要花費幾年時間才能生產一個新系統。因此,正在銷售的系統可能比最新技術所能提供的潛在速度或成本優勢落後幾年。我相信我在此處描述的微管線框架可以減少時脈邏輯概念框架所帶來的機會成本。

致謝 (Acknowledgments)

轉換訊號概念框架在很長一段時間以來,在少數地方被使用。我知道早期在 University of Illinois 的 David Muller、在 University of Utah 的 Al Davis,以及在 Massachusetts Institute of Technology 的 Jack Dennis 所進行的工作;我在此預先為可能遺漏的其他項目道歉。

我在轉換訊號概念框架方面的教育得益於一些能人。我最初在 20 世紀 60 年代初期意識到轉換訊號,當時 Washington University in Saint Louis 的一個團隊,由 Wes Clark 領導,在設計一套 Macromodules [2, 3] 中使用了它。我從 Charles Seitz 那裡學到了更多,他現在是 Caltech 的教授,從 1966 年開始的十幾年裡,當時作為 MIT 的研究生,他教會了我我所知道的大部分數位設計知識。我們在 Harvard 和 Evans and Sutherland Computer Corporation 合作,在電腦圖學處理器中使用了幾乎正確的微管線版本,包括最初的「clipping divider」[14]。他在著名的 Mead 和 Conway 的 VLSI 書籍中的那一章是關於轉換訊號介紹得最好、最易懂的參考資料之一 [13]。

另外兩個人對我的教育至關重要。長期以來對我最重要的是 Bob Sproull,我二十五年前開始從他那裡接受終生教育,至今仍然對他的知識和能力感到敬畏。他經常在我思路模糊時糾正我的想法,並使本次演講比我自己能做到的更準確。在過去五年裡,他和我們一起領導了「非同步系統研究」,以學習和教授轉換訊號。作為研究的一部分,我們設計了用於各種目的的微管線,包括我在這裡描述的那些。我們已經向幾百人講授了這個主題,並且正在準備兩本書。最後,我想提及 Charles Molnar,他在 Washington University 的團隊繼續了我之前提到的開創性工作。他無私地貢獻了他的時間和想法以及他的熱情,為我的教育做出了貢獻。他在轉換訊號概念框架方面的貢獻不僅包括邏輯模組的絕對必要的合成方法 [9],沒有它,新框架難以使用,還包括一個整體數學理論的許多重要部分,以及對有用電路的新概念 [12]。他與 Eindhoven 的 Martin Rem 團隊合作進行的理論工作 [6, 10, 11, 19] 開始證明在轉換訊號概念框架下設計的系統的正確性定理。

這裡報告的工作促成了一項更廣泛的「非同步系統研究」,由 Sutherland, Sproull and Associates, Inc. 進行,並得到六家工業贊助商的支持:Apple Computer, Austek Microsystems Ltd., Digital Equipment Corp., Evans and Sutherland Computer Corp., Floating Point Systems, 和 Schlumberger Research Laboratory。我們與 Carnegie Mellon University 和 Imperial College of the University of London 合作進行了這項工作。Erik Brunvand, Ed Frank, Ian Jones, Charles Molnar, 和 Bert Sutherland 與我們合作。我們能夠測試由 University of Southern California 的 Information Sciences Institute 運營的 MOSIS 積體電路製造服務為我們製造的微管線電路。我們很榮幸成為 MOSIS 的第一家商業客戶。

參考文獻 (References)

  1. Chaney, T.J., and Molnar, C.E. Anomalous behavior of synchronizer and arbiter circuits. IEEE Trans. Comput. C-22, 4 (Apr. 1973), 421-422.
  2. Clark, W.A. Macromodular computer systems. In Proceedings of the Spring Joint Computer Conference, AFIPS, April 1967.
  3. Clark, W.A., and Molnar, C.E. Macromodular computer systems. Computers in Biomedical Research, Vol. 4, R. Stacy and B. Waxman, Eds., Academic Press, New York, 1974, 45-85.
  4. Dally, W.J., Seitz, C.L. Deadlock-free message routing in multiprocessor interconnection networks IEEE Trans. Comput. 36, 5 (May 1987), 547-553.
  5. Dill, D.L., Nowick, S.M., and Sproull, R.F. Specification and automatic verification of self-timed queues. Computer Systems Laboratory Report, Stanford University, 1988.
  6. Ebergen, J.C. Translating programs into delay-insensitive circuits. Ph.D. dissertation, Eindhoven University of Technology, 1987.
  7. Levy, J.V. Buses, the skeleton of computer structures. In Computer Engineering, C.G. Bell, J.C. Mudge, and J.E. McNamara, Eds., Digital Press, 1978.
  8. Miller, R.E. "Sequential Circuits", Chapter 10, In Switching Theory, Vol 2, Wiley, NY, 1965.
  9. Molnar, C.E., Fang, T.P., and Rosenberger, F.U. Synthesis of delay-insensitive modules. In Proceedings of the 1985 Chapel Hill Conference on VLSI, H. Fuchs, Ed., Computer Science Press, 1985.
  10. Rem, M., van de Snepscheut, J.L.A., and Udding, J.T. Trace theory and the definition of hierarchical components. In Proceedings of the Caltech Conference on VLSI, 1983.
  11. Rem, M. Trace theory and systolic computations. In Prec. PARLE (Parallel Architectures and Languages Europe), Vol 1, J.W. deBakker, A.J. Nijman, and P.C. Treleaven, Eds, Springer-Verlag, 1987, pp. 14-34.
  12. Rosenberger, F.U., Molnar, C.E., Chaney, T.J., et al. Q-modules: Locally clocked delay-insensitive modules. IEEE Trans. Comput. 37, 9 (Sept. 1988), 1005-1018.
  13. Seitz, C.L. System Timing. In Introduction to VLSI Systems, C.A. Mead and L.A. Conway, Eds., Addison-Wesley, 1980.
  14. Sproull, R.F., and Sutherland, I.E. A clipping divider. FJCC 1968, Thompson Books, Washington, D.C., 765.
  15. Sutherland, I.E., and Hodgman, G.W. Reentrant polygon clipping. Commun. ACM 17,1 (Jan. 1974), 32-42.
  16. Sutherland, I.E. Asynchronous queue system, U.S. Patent 4,679,213, July 7, 1987.
  17. Sutherland, I.E., Asynchronous first-in-first-out register structure. US Patent Pending.
  18. Sutherland, I.E. Asynchronous pipelined data processing system. US Patent pending.
  19. Udding, J.T. A formal model for defining assifying delay-insensitive circuits and systems. J. Distrib. Comptg. 1, 1986, 197-204.

CR Categories and Subject Descriptors: B.2.1 [ Arithmetic and Logic Structures]: Design Styles--pipeline; B.5.1 [Register Transfer-Level Implementation]: Design--styles(e.g., parallel, pipeline, special-purpose; B.7.1 [Integrated Circuits]: Types and Design Styles--Input~Output circuits General Terms: Design Additional Key Words and Phrases: Asynchronous handshake, FIFO, pipeline processing, transition signalling

Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission.