傳輸觸發架構

在電腦架構中，傳輸觸發架構（Transport triggered architecture，TTA）是一種處理器設計，其中程序直接控制處理器的內部傳輸總線。計算作為數據傳輸的副作用發生：將數據寫入功能單元的觸發埠會觸發功能單元開始計算。這與脈動陣列中的情況類似。由於其模塊化結構，TTA是應用特定指令集處理器（ASIP）的理想處理器模板，具有定製的數據路徑，但沒有固定功能硬體加速器的靈活性和設計成本。

通常，傳輸觸發處理器具有多個傳輸總線和多個連接到總線的功能單元，這為指令級並行性提供了機會。並行性由程式設計師靜態定義。在這方面（顯然由於指令字寬度較大），TTA架構類似於非常長指令字（VLIW）架構。TTA指令字由多個槽組成，每個總線一個槽，每個槽確定在相應總線上發生的數據傳輸。細粒度控制允許一些在傳統處理器中無法實現的優化。例如，軟體可以在功能單元之間直接傳輸數據，而無需使用寄存器。

傳輸觸發暴露了一些通常對程式設計師隱藏的微架構細節。這大大簡化了處理器的控制邏輯，因為許多通常在運行時做出的決策在編譯時就已固定。然而，這也意味著為一個TTA處理器編譯的二進位文件如果在兩個處理器之間的架構存在微小差異，則無法在另一個處理器上運行，必須重新編譯。二進位不兼容問題，加上實現完整上下文切換的複雜性，使得TTA更適合嵌入式系統而非通用計算。

在所有單指令集電腦架構中，TTA架構是為數不多的有基於其構建的處理器的架構之一，也是唯一一個有基於其的處理器進行商業銷售的架構。

## 與VLIW架構相比的優勢

TTA可以被視為「暴露數據路徑」的VLIW架構。雖然VLIW是通過操作進行編程的，但TTA將操作執行拆分為多個移動操作。與標準VLIW相比，低級編程模型帶來了幾個好處。例如，TTA架構可以提供比VLIW更簡單的寄存器文件和更多的並行性。由於程式設計師可以控制操作數和結果數據傳輸的時序，因此寄存器文件（RF）的複雜性（輸入和輸出埠的數量）不必根據多個並行指令的最壞情況發射/完成場景進行縮放。

由傳輸編程啟用的一種重要獨特軟體優化稱為軟體旁路。在軟體旁路的情況下，程式設計師通過將數據直接移動到下一個功能單元的操作數埠來繞過寄存器文件的寫回。當這種優化被積極應用時，傳輸結果到寄存器文件的原始移動可以完全消除，從而減少寄存器文件埠的壓力，並為其他臨時變量釋放一個通用寄存器。減少的寄存器壓力，除了簡化RF硬體所需的複雜性外，還可以帶來顯著的CPU能量節省，這在移動嵌入式系統中尤其是一個重要的好處。

## 結構

TTA處理器由獨立的功能單元和寄存器文件構成，這些單元通過傳輸總線和插座連接。

### 功能單元

每個功能單元實現一個或多個操作，這些操作的功能範圍從簡單的整數加法到複雜的任意使用者定義的特定應用計算。操作的操作數通過功能單元埠傳輸。

每個功能單元可能有一個獨立的流水線。如果一個功能單元是完全流水線化的，那麼每個時鐘周期都可以開始一個需要多個時鐘周期才能完成的新操作。另一方面，流水線可以是這樣的：在一個舊操作仍在執行時，它並不總是接受新的操作啟動請求。

數據記憶體訪問和與處理器外部的通信是通過使用特殊功能單元來處理的。實現記憶體訪問操作並連接到記憶體模塊的功能單元通常稱為加載/存儲單元。

### 控制單元

控制單元是功能單元的一個特殊案例，它控制程序的執行。控制單元可以訪問指令存儲器，以便獲取要執行的指令。為了允許已執行的程序將執行（跳轉）轉移到已執行程序中的任意位置，控制單元提供控制流操作。控制單元通常具有指令流水線，包含獲取、解碼和執行程序指令的各個階段。

### 寄存器文件

寄存器文件包含通用寄存器，用於在程序中存儲變量。與功能單元一樣，寄存器文件也具有輸入和輸出埠。讀寫埠的數量，即在同一個時鐘周期內能夠讀取和寫入多個寄存器的能力，可以在每個寄存器文件中有所不同。

### 傳輸總線和埠

互連架構由傳輸總線組成，這些總線通過插座連接到功能單元埠。由於連接的成本，通常會減少單元之間的連接數量（功能單元和寄存器文件）。如果每個單元的輸出埠到每個單元的輸入埠之間都有路徑，則稱TTA為完全連接。

套接字（Sockets）提供了編程TTA處理器的手段，通過允許在任何時刻選擇插座的哪些總線到埠連接被啟用。因此，發生在一個時鐘周期內的數據傳輸可以通過定義每個總線要啟用的源和目標插座/埠連接來編程。

### 條件執行

某些TTA實現支持條件執行。

條件執行是通過保護器實現的。每個數據傳輸都可以通過一個保護器進行條件化，該保護器連接到一個寄存器（通常是一個1位條件寄存器）和一個總線。如果被保護寄存器的值評估為假（零），則連接到該保護器的總線上的數據傳輸將被壓制，即不寫入其目的地。無條件數據傳輸不連接到任何保護器，並始終執行。

### 分支

所有處理器，包括TTA處理器，都包含控制流指令，這些指令會改變程序計數器，用於實現子程序、if-then-else、for 循環等。TTA處理器的彙編語言通常包括控制流指令，如無條件跳轉（JUMP）、條件相對跳轉（BNZ）、子程序調用（CALL）、條件返回（RETNZ）等，這些指令與其他處理器的相應彙編語言指令看起來相同。

與TTA機器上的所有其他操作一樣，這些指令作為「移動」指令實現到一個特殊功能單元。

支持條件執行的TTA實現，例如sTTAck和第一個MOVE原型，可以將大多數這些控制流指令實現為對程序計數器的條件移動。

僅支持無條件數據傳輸的TTA實現，例如Maxim Integrated MAXQ，通常具有一個與程序計數器緊密連接的特殊功能單元，該單元響應各種目的地址。每個這樣的地址在作為「移動」的目的地時，對程序計數器有不同的影響——每個「相對分支」指令對於每個條件都有不同的目的地址；其他目的地址用於CALL、RETNZ等。

## 編程

在更傳統的處理器架構中，處理器通常通過定義執行的操作及其操作數來編程。例如，RISC架構中的加法指令可能如下所示。

```
add r3, r1, r2
```

這個示例操作將通用寄存器r1和r2的值相加，並將結果存儲在寄存器r3中。粗略地說，處理器中指令的執行可能會導致將指令轉換為控制信號，這些控制信號控制互連網路連接和功能單元。互連網路用於將寄存器r1和r2的當前值傳輸到能夠執行加法操作的功能單元，通常稱為ALU，即算術邏輯單元。最後，一個控制信號選擇並觸發ALU中的加法操作，其結果被傳回寄存器r3。

TTA程序不定義操作，僅定義寫入和讀取操作數值所需的數據傳輸。操作本身是通過向操作的觸發操作數寫入數據來觸發的。因此，操作是作為觸發數據傳輸的副作用執行的。因此，在TTA中執行加法操作需要三個數據傳輸定義，也稱為移動。移動定義了在傳輸總線中進行的數據傳輸的端點。例如，移動可以聲明從功能單元F，埠1，到寄存器文件R，寄存器索引2的數據傳輸應在總線B1中進行。如果目標處理器中有多個總線，則可以在同一個時鐘周期內並行利用每個總線。因此，通過在同一條指令中調度多個數據傳輸，可以利用數據傳輸級別的並行性。

在TTA處理器中，可以執行加法操作，如下所示：

```
r1 -> ALU.operand1
r2 -> ALU.add.trigger
ALU.result -> r3
```

第二個操作，即對稱為ALU的功能單元的第二個操作數進行寫入，觸發了加法操作。這使得加法的結果在'add'的執行延遲後可在輸出埠'result'中獲得。

與ALU相關的埠可以充當累加器，允許創建抽象底層TTA的宏指令：

```
lda r1    ''; "load ALU": move value to ALU operand 1''
add r2    ''; add: move value to add trigger''
sta r3    ''; "store ALU": move value from ALU result''
```

## 程式設計師可見的操作延遲

TTAs的主要理念是將複雜性從硬體轉移到軟體。因此，程式設計師面臨著幾個額外的風險。其中之一是延遲槽，即功能單元的可見操作延遲。時序完全由程式設計師負責。程式設計師必須安排指令，以確保結果既不會過早讀取，也不會過晚讀取。如果結果過早讀取，硬體不會檢測到並鎖定處理器。例如，考慮一個具有延遲為1的加法操作和延遲為3的乘法操作的架構。當觸發加法操作時，可以在下一條指令（下一個時鐘周期）中讀取結果，但在乘法操作的情況下，必須等待兩條指令才能讀取結果。結果在觸發指令後的第3條指令時準備就緒。

過早讀取結果會導致讀取到先前觸發的操作的結果，或者在函數單元中沒有先前觸發的操作時，讀取的值是未定義的。另一方面，結果必須足夠早地讀取，以確保下一個操作的結果不會覆蓋輸出埠中尚未讀取的結果。

由於程式設計師可見的處理器上下文豐富，實際上除了寄存器文件內容外，還包括功能單元管道寄存器內容和/或功能單元輸入輸出埠，因此在TTA處理器中，外部中斷支持所需的上下文保存可能變得複雜且實現成本高。因此，TTA處理器通常不支持中斷，而是將其任務委託給外部硬體（例如，I/O處理器），或者通過使用輪詢等替代同步/通信機制來避免其需求。

## 實現

- MAXQ來自Maxim Integrated，是唯一一款基於傳輸觸發架構的商用微控制器，它是一種OISC或「單指令集電腦」。它提供了一個靈活的MOVE指令，可以通過將值直接移動到程式計數器來充當各種虛擬指令。
- 「move project」設計並製造了幾個實驗性的TTA微處理器。
- OpenASIP是一個開源的應用特定指令集工具集，利用TTA作為處理器模板。
- AmigaCopper的架構具有傳輸觸發架構的所有基本特徵。
- 新英格蘭數字公司開發的Able處理器。
- 基於Wireworld的電腦。
- Dr. Dobb's發布了One-Der，一個用Verilog編寫的32位TTA，配有匹配的交叉彙編器和Forth編譯器。
- Mali (200/400) 頂點處理器，使用128位指令字單精度浮點標量TTA。