可以獲得同RTL設計一樣的I/O速度
——
可以獲得同RTL設計一樣的I/O速度
可配置處理器基于隊列與端口的機制
對于SoC設計中的許多任務而言,將一個處理器中的所有輸入和輸出接口都映象成存儲器地址既無必要也無效率。有時候將輸入/輸出接口映象到存儲器地址可以讓程序員或者編譯器去動態地選擇幾個計算部件的源和目的。然而,如果動態尋址不那么重要的話,那么將外部信號和處理器執行部件直接相連能夠進一步加速系統的性能并可以減少復雜度?;谟簿€連接的接口對許多RTL設計人員來說也是非常熟悉的,它允許處理器在不改變現存RTL模塊中各個模塊接口(“pin”)定義的情況下去替換那些硬件模塊。
Tensilica為SoC設計的Xtensa LX可配置處理器可以將信號直接與其SoC邏輯模塊中的執行部件進行連接,而且其輸出信號可以直接與其它SoC模塊連接,而不需要利用其傳統的總線。因此,數據搬移就不需要傳統的加載和存儲指令,所以數據輸入/輸出就不會有額外的開銷。這些附加的訪問處理器端口可由Tensilica的指令擴展語言TIE進行建立,TIE語言包含了兩個新的適用于Xtensa LX處理器的技術特征,即TIE端口和隊列技術。
對于SoC設計中的許多任務而言,將一個處理器中的所有輸入和輸出接口都映象成存儲器地址既無必要也無效率。有時候將輸入/輸出接口映象到存儲器地址可以讓程序員或者編譯器去動態地選擇幾個計算部件的源和目的。然而,如果動態尋址不那么重要的話,那么將外部信號和處理器執行部件直接相連能夠進一步加速系統的性能并可以減少復雜度?;谟簿€連接的接口對許多RTL設計人員來說也是非常熟悉的,它允許處理器在不改變現存RTL模塊中各個模塊接口(“pin”)定義的情況下去替換那些硬件模塊。
Tensilica為SoC設計的Xtensa LX可配置處理器可以將信號直接與其SoC邏輯模塊中的執行部件進行連接,而且其輸出信號可以直接與其它SoC模塊連接,而不需要利用其傳統的總線。因此,數據搬移就不需要傳統的加載和存儲指令,所以數據輸入/輸出就不會有額外的開銷。這些附加的訪問處理器端口可由Tensilica的指令擴展語言TIE進行建立,TIE語言包含了兩個新的適用于Xtensa LX處理器的技術特征,即TIE端口和隊列技術。
兩種基本的接口握手信號風格適合不同的輸入和輸出環境,用于將處理器與外部信號直接互連:
● 通過端口進行數值輸入和狀態輸出;
● 輸入和輸出隊列。
考慮圖1所示的一個簡單的硬件功能模塊框圖。該功能模塊基本的輸入和輸出信號可以簡化成模塊邊界的硬線連接。
輸入和輸出端口可以用于可配置處理器操作的源操作數和目的操作數,這樣可以確??焖俣`活的硬件接口。下面的程序是圖1中的功能模塊的實現,用TIE語言寫成。該例子采用隊列技術將數據從功能模塊中搬入和搬出。
1: state state1 24 add_read_write
2: state state2 24 add_read_write
3: state lastinput1 24
4: state nextoutput1 24
5: queue input1 24 in
6: queue input2 24 in
7: queue output1 24 out
8: operation lookup.mul.mul {} {in input1, in input2, in state1, in state2, inout lastinput1, out output1, inout nextoutput1, out VAddr, in MemDataIn32} {
9: assign VAddr = {8'h0, lastinput1 + state1};
10: assign lastinput1 = input1;
11: wire [23:0] mulout = MemDataIn32[23:0] * input2;
12: assign output1 = nextoutput1;
13: assign nextoutput1 = mulout * state2;}
14: schedule inst_sched {lookup.mul.mul} {use state2 4; use nextoutput1 3; use input1 2; use input2 2; def lastinput1 3; def nextoutput1 4; def mulout 3; def output1 3; }
以上為具有輸入和輸出隊列的數據通路TIE實現示例。
在上面的例子中,第14行schedule語句中的“use”和“def”變量說明Xtensa處理器流水線各級中輸入隊列接口有數據(use),而處理器輸出隊列接口則接收從流水線(def)中來的輸出數據。輸入隊列接口在流水線訪存級(第2級)有數據,而輸出隊列接口在流水線寫回級(第3級)接收數據。狀態lastinput1和 狀態nextoutput1允許后輸入到隊列中的數據用于后續的指令,而前面指令中后計算出來的結果則被送入到輸出隊列。
隊列輸入和輸出直接和硬線結構相連接。對相應隊列結構的訪問將自動從輸入隊列中彈出數據以及從輸出隊列中壓入數據。隊列控制機制采用指令消除方法(由于其它各種事件所引起),并確保即使在處理遇到未期望的錯誤條件下也能夠沒有額外的數據壓入或者彈出隊列。
隊列是指令映象連接的一種方式。它們非常適合專用處理器中的操作數數據流,因為請求/應答握手信號已經是隊列接口的一部分,如圖2所示。
隊列輸入表示數據流被處理器上運行的應用程序所使用。使用的指令順序執行,執行結果也是順序可見的。類似地,隊列輸出表示應用程序處理器產生的一系列數據。數據的生產和消費(使用)可以由硬件進行管理,因此可能的指令執行消除效應都被隱藏了,并且不需要顯式的請求/應答握手信號。如果沒有產生出足夠多的數據,那么處理器就會暫停使用這些操作數。如果消費處理器落后的話,那么產生處理器就會暫停產生操作數,并允許數據填入輸入緩沖區。這些隊列會在處理器之間形成一種高效的數據流連接,尤其是當幾個處理器形成一個大規模的計算流水線時更是如此。
第二種接口直接連接的方式是基于端口,即基于一組硬線的數據輸入和狀態輸出。這些端口在執行諸如測試外部狀態、條件信息或者控制其它邏輯功能這些任務時尤其有用。
上面的例子也可以采用輸入數據和輸出狀態方式來實現,如下面圖所示。該實現使用一個顯式的數據輸出信號next_data來指示input1和input2所需要的新的數據值,并且一個新的輸出數據在output1信號線上出現。系統開發人員負責確保外部邏輯在下一次使用input1和input2端口前有足夠的時間來響應輸出的next_data信號。上面的保證對中等程度性能的應用程序而言是非常容易實現的,只需要在一個輸入數據和其后的下一個輸入之間占用幾十個時鐘周期。然而,數據隊列對于超高速數據速率輸入的情況下一般是非常簡單和快速的。注意到,指令集和程序必須顯式說明next_data信號來請求新的輸入數據,并指示一個新的輸出數據可用
評論