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