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