新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TMS320C55x DSP并行處理技術(shù)分析與應(yīng)用

TMS320C55x DSP并行處理技術(shù)分析與應(yīng)用

作者: 時(shí)間:2008-12-12 來(lái)源:網(wǎng)絡(luò) 收藏

  TMS320C55x 是一種高性能的數(shù)字信號(hào)處理器,其強(qiáng)大的能力能夠進(jìn)一步提高其運(yùn)算能力。本文介紹了C55x的內(nèi)核結(jié)構(gòu)以及用戶自定義并行指令時(shí)必須遵守如下3條基本規(guī)則,并介紹了6種典型的應(yīng)用。利用本文介紹的方法使用并行處理能力將有效提高程序執(zhí)行效率,同時(shí)降低系統(tǒng)功耗。

  德州儀器公司()的TMS320C55x(簡(jiǎn)稱C55x)內(nèi)核是在TMS320C54x(簡(jiǎn)稱C54x)基礎(chǔ)上開(kāi)發(fā)出來(lái)的,并可以兼容C54x的源代碼。C55x的內(nèi)核電壓降到了1V,功耗降到0.05mW/MIPS,是C54x的1/6。C55x的運(yùn)行時(shí)鐘可以達(dá)到 200MHz,是C54x的兩倍,再加上C55x在C54x結(jié)構(gòu)上作了相當(dāng)大的擴(kuò)展,程序執(zhí)行時(shí)可以大量采用并行處理,這樣使得C55x的實(shí)際運(yùn)算能力可以達(dá)到300MIPS以上?!?/P>

  C55x DSP已越來(lái)越多地應(yīng)用于各種手持便攜終端當(dāng)中。以下我們將通過(guò)詳細(xì)介紹C55x的CPU內(nèi)核結(jié)構(gòu),討論其并行處理技術(shù)的應(yīng)用。

  C55x DSP內(nèi)核結(jié)構(gòu)

  C55x DSP是一款采用改良型哈佛結(jié)構(gòu),高度模塊化的數(shù)字信號(hào)處理器擁有比普通DSP更為豐富的硬件資源,能夠有效提高運(yùn)算能力。其內(nèi)核結(jié)構(gòu)如圖1所示.

  整個(gè)處理器內(nèi)部分為5個(gè)大的功能單元:存儲(chǔ)器緩沖單元(M單元)、指令緩沖單元(I單元)、程序控制單元(P單元)、地址生成單元(A單元)和數(shù)據(jù)計(jì)算單元(D 單元),各個(gè)功能單元之間通過(guò)總線連接。C55x DSP中有1條32位程序數(shù)據(jù)總線(P總線),1條24位程序地址總線(PA總線),5條16位的數(shù)據(jù)總線(B、C、D、E、F總線)和5條24位的數(shù)據(jù)地址總線(BA、CA、DA、EA、FA總線)。這種高度模塊化的多總線結(jié)構(gòu)使得C55x DSP擁有超強(qiáng)的并行處理能力。[next]

  M單元主要管理數(shù)據(jù)區(qū)(包括I/O數(shù)據(jù)區(qū))與中央處理器(CPU)之間的數(shù)據(jù)傳送,使得高速CPU與外部相對(duì)低速的存儲(chǔ)器之間在吞吐量上的瓶頸可以得到一定程度的緩解。

  I單元從程序數(shù)據(jù)總線接收程序代碼,并將其放入指令緩沖隊(duì)列(IBQ)中,然后利用指令譯碼器將指令緩沖隊(duì)列中的程序代碼進(jìn)行譯碼,最后再將譯碼后的指令送給P單元、A單元、D單元進(jìn)行處理。

  P單元主要是通過(guò)判斷是否滿足條件執(zhí)行指令的條件來(lái)控制程序地址的產(chǎn)生,達(dá)到控制程序流程的目的。程序控制單元中還含有程序控制寄存器、循環(huán)控制寄存器、中斷寄存器和狀態(tài)寄存器等硬件寄存器。通過(guò)循環(huán)控制寄存器的設(shè)置,可以直接控制程序中的循環(huán)次數(shù)等,而不必像在普通DSP中一樣在外部對(duì)循環(huán)條件進(jìn)行判斷,從而可以有效提高運(yùn)行效率。

  A單元的功能是產(chǎn)生讀寫(xiě)數(shù)據(jù)空間的地址。地址生成單元由數(shù)據(jù)地址產(chǎn)生電路(DAGEN)、16位的算術(shù)邏輯單元(ALU)和一組寄存器構(gòu)成。C55x DSP地址產(chǎn)生與其他功能模塊分開(kāi),保證不會(huì)因?yàn)榈刂樊a(chǎn)生的原因使得單條指令需要在多個(gè)時(shí)鐘周期內(nèi)完成,提高了DSP的運(yùn)行效率。A單元中的寄存器包括數(shù)據(jù)頁(yè)寄存器、輔助寄存器、堆棧指針寄存器、循環(huán)尋址寄存器和臨時(shí)寄存器等。

  D單元是C55x DSP中主要的數(shù)據(jù)執(zhí)行部件,完成大部分?jǐn)?shù)據(jù)的算術(shù)運(yùn)算工作。它由移位器、40位ALU、兩個(gè)17位的乘累加器(MAC)和若干寄存器構(gòu)成。數(shù)據(jù)計(jì)算單元的兩個(gè)乘累加器能夠并行使用,可以有效提高DSP運(yùn)行效率。D單元中的寄存器包括累加器和兩個(gè)用于維特比譯碼的專用指令寄存器。[next]

  并行處理基本準(zhǔn)則

  如圖1所示C55x DSP內(nèi)核結(jié)構(gòu)可知,整個(gè)處理器的地址及數(shù)據(jù)運(yùn)算由P單元、A單元和D單元完成。這三個(gè)單元相對(duì)獨(dú)立,各自通過(guò)總線與數(shù)據(jù)區(qū)及程序區(qū)相連。這種相互獨(dú)立的模塊化結(jié)構(gòu),在硬件特性上確保這三個(gè)單元在同一時(shí)鐘周期內(nèi)能夠進(jìn)行并行處理,完成各自不同的運(yùn)算操作。

  在C55x DSP指令集中有一些固定搭配的并行執(zhí)行指令(主要是利用D單元雙MAC結(jié)構(gòu)的并行指令),這些被固定使用的并行指令之間使用“::”符號(hào)連接。除了這些固有的并行指令外,用戶也可以根據(jù)CPU結(jié)構(gòu)特征自行定義并行指令,并行的兩條指令之間需使用“||”符號(hào)連接,以區(qū)分指令集中的并行指令。

  用戶自定義并行指令時(shí),必須遵守如下3條并行處理基本規(guī)則:

  規(guī)則1: 保證不產(chǎn)生硬件沖突,包括操作數(shù)、寄存器、總線及各運(yùn)算模塊的沖突。在對(duì)C55x DSP的所有操作中,對(duì)P、A、D三個(gè)單元進(jìn)行操作的指令類型有14類,這14類操作指令之間有很大一部分可以相互并行運(yùn)行。經(jīng)過(guò)我們對(duì)C55x DSP硬件電路結(jié)構(gòu)的分析,在只考慮硬件模塊沖突的情況下,我們得出如圖2所示的C55xDSP并行處理能力分析圖。圖中將14類操作指令組成了一個(gè)14 ×14的矩陣,列出了每一類指令與其自身及其他13類指令并行執(zhí)行的能力。圖中畫(huà)有(符號(hào)的空格代表不能并行執(zhí)行,相反沒(méi)有任何符號(hào)的空格代表可以并行執(zhí)行。

  在考慮并行處理的硬件沖突時(shí),還需要考慮總線資源的沖突??偩€資源的沖突通常發(fā)生在數(shù)據(jù)總線和常量總線,C55x DSP中含有5條數(shù)據(jù)總線和2條常量總線,各條總線與各運(yùn)算模塊的連接如圖3所示。

  數(shù)據(jù)總線中,C、D總線是讀數(shù)據(jù)總線,通過(guò)這兩條總線進(jìn)行數(shù)據(jù)讀??;E、F總線是寫(xiě)數(shù)據(jù)總線,通過(guò)這兩條總線進(jìn)行數(shù)據(jù)寫(xiě)操作;另外還有一條特殊的B總線,這條總線可以進(jìn)行讀或?qū)懖僮?,但是它只能被CDP寄存器使用,而其它輔助寄存器無(wú)法使用B總線。

  兩條常量總線分別是KA、KD總線。KA常量總線用于產(chǎn)生地址數(shù)據(jù)。P單元的KA常量總線負(fù)責(zé)產(chǎn)生程序地址,例如跳轉(zhuǎn)指令B #Routine2中,常量#Routine2就是通過(guò)KA常量總線被送到P單元的。A單元的KA常量總線負(fù)責(zé)產(chǎn)生數(shù)據(jù)存儲(chǔ)區(qū)地址,例如在指令 Mov*SP(#7),Brc0中,偏移量#7就是通過(guò)KA常量總線被送到A單元的。KD總線用于傳送參與運(yùn)算的常量數(shù)據(jù),例如指令A(yù)DD #123,AC0中,常量123就是通過(guò)KD總線傳送的。

  規(guī)則2:受指令緩沖隊(duì)列(IBQ)的限制,并行語(yǔ)句的總長(zhǎng)度不能超過(guò)6個(gè)字節(jié)。 I單元中的譯碼器只能將IBQ中的1~6個(gè)字節(jié)的程序進(jìn)行譯碼。如果一條并行語(yǔ)句的長(zhǎng)度超過(guò)6個(gè)字節(jié),則需要在兩個(gè)時(shí)鐘周期內(nèi)對(duì)其進(jìn)行兩次譯碼。因此必須將兩條并行語(yǔ)句的總長(zhǎng)度限制在6個(gè)字節(jié)。

  規(guī)則3:當(dāng)需要尋址兩個(gè)及以上數(shù)據(jù)存儲(chǔ)區(qū)數(shù)據(jù)時(shí),必須使用雙重AR間接尋址方式。

  采用雙重AR間接尋址方式,可以通過(guò)使用2個(gè)不同的輔助寄存器(AR0~AR7)同時(shí)訪問(wèn)數(shù)據(jù)存儲(chǔ)區(qū)中兩個(gè)不同的數(shù)據(jù)。在這種尋址方式下,我們可以通過(guò)兩條不同的數(shù)據(jù)總線,在同一時(shí)鐘周期內(nèi)尋址兩個(gè)不同數(shù)據(jù),并將其輸入不同的運(yùn)算模塊進(jìn)行計(jì)算。

  常用并行處理應(yīng)用

  在編程實(shí)現(xiàn)過(guò)程中,對(duì)每一個(gè)并行處理都進(jìn)行仔細(xì)分析將能達(dá)到事半功倍的效果。下面是我們總結(jié)出的幾種典型并行處理應(yīng)用:

  1. D單元雙MAC結(jié)構(gòu)的并行處理

  在C55x DSP的D單元中采用了雙MAC的結(jié)構(gòu),其結(jié)構(gòu)如圖4所示。這里有3條數(shù)據(jù)總線(B、C、D數(shù)據(jù)總線)與兩個(gè)MAC模塊相連。在同一時(shí)鐘周期里,可以同時(shí)通過(guò)3條數(shù)據(jù)總線將三個(gè)不同地址的數(shù)據(jù)傳入兩個(gè)MAC模塊中進(jìn)行并行計(jì)算。[next]

  通常情況下,兩個(gè)MAC模塊的運(yùn)算總共需要4個(gè)數(shù)據(jù),而這里的總線數(shù)卻只有3條,所以在并行使用雙MAC結(jié)構(gòu)時(shí),兩個(gè)MAC模塊必須共用一組數(shù)據(jù),而另外兩組數(shù)據(jù)分別分配給兩個(gè)MAC模塊。這使得雙MAC結(jié)構(gòu)的并行應(yīng)用受到一定的限制。

  C55x的雙MAC結(jié)構(gòu)比較典型的應(yīng)用如不同數(shù)據(jù)的相同算法處理和同一數(shù)據(jù)的不同算法處理。下面是對(duì)不同數(shù)據(jù)進(jìn)行相同F(xiàn)IR濾波的實(shí)例:

  MAC *AR0+,*CDP+,AC0

  ::MAC *AR1+,*CDP+,AC1

  其中AR0和AR1寄存器分別指向輸入的兩組數(shù)據(jù),CDP寄存器指向FIR濾波器的抽頭系數(shù)。C55x DSP的指令集中還含有其它與雙MAC模塊并行處理的專用指令,在此就不再仔細(xì)分析。

  2. 存儲(chǔ)區(qū)數(shù)據(jù)裝載指令與存儲(chǔ)指令的并行

  A單元、P單元和D單元均可以對(duì)存儲(chǔ)器中數(shù)據(jù)實(shí)現(xiàn)裝載及存儲(chǔ)。數(shù)據(jù)的裝載與存儲(chǔ)使用的是不同總線,不會(huì)發(fā)生硬件沖突,易于實(shí)現(xiàn)并行處理。以下是在D單元內(nèi)實(shí)現(xiàn)兩個(gè)數(shù)據(jù)裝載與存儲(chǔ)的實(shí)例:

  MOV AC0,*AR1

  ||MOV *AR2,AC1

  此例是在D單元內(nèi)對(duì)AC0進(jìn)行存儲(chǔ)并裝載數(shù)據(jù)到AC1。程序執(zhí)行時(shí),將數(shù)據(jù)通過(guò)D總線讀入AC1寄存器,同時(shí)將AC0數(shù)據(jù)通過(guò)E總線寫(xiě)入存儲(chǔ)器,這樣就避免了硬件沖突,滿足并行規(guī)則1。兩條指令總長(zhǎng)度為4字節(jié),小于IBQ6個(gè)字節(jié)的限制,滿足了并行規(guī)則2。兩條指令均采用雙重間接尋址,滿足了并行規(guī)則3。通過(guò)上機(jī)調(diào)試,這條并行指令確實(shí)能夠正確編譯并執(zhí)行。

  3. A單元中ALU運(yùn)算與D單元中ALU、MAC和移位運(yùn)算的并行

  下面我們以一個(gè)實(shí)例來(lái)進(jìn)行說(shuō)明:

  ADD T0,AR1

  ||MOV HI(AC0#18),*AR2

[next]

  這是一個(gè)A單元ALU模塊與D單元移位操作模塊的并行處理實(shí)例。它在A單元完成16位加法運(yùn)算,并將結(jié)果存放于AR1,同時(shí)在D單元完成對(duì)寄存器AC0的移位存儲(chǔ)操作。這兩條指令之間不存在硬件沖突,滿足并行規(guī)則1。兩條指令總共長(zhǎng)度為5個(gè)字節(jié),小于IBQ6個(gè)字節(jié)的限制,滿足了并行規(guī)則 2。這里只使用了一個(gè)儲(chǔ)器中的數(shù)據(jù),不需要滿足并行規(guī)則3的規(guī)定。通過(guò)上機(jī)調(diào)試,這條并行指令能夠正確編譯并執(zhí)行。

  4. 累加器的移位、飽和及存儲(chǔ)操作與D單元ALU或MAC的并行處理

  下面我們以一個(gè)實(shí)例來(lái)進(jìn)行說(shuō)明:

  MOV HI(AC0#18),*AR2

  ||ADD AC0,AC1

  這是一個(gè)D單元移位操作模塊與D單元ALU模塊的并行處理實(shí)例。它在移位操作模塊中完成寄存器AC0的移位,然后將移位后的值通過(guò)E總線存儲(chǔ)到存儲(chǔ)器中,同時(shí)在ALU模塊中完成寄存器AC0與AC1的加法運(yùn)算,然后將結(jié)果存放于AC1。這兩條指令不存在硬件沖突,滿足并行規(guī)則1。兩條指令總長(zhǎng)度為5個(gè)字節(jié),小于IBQ6字節(jié)的限制,滿足并行規(guī)則2。這里只需使用一個(gè)存儲(chǔ)器中的數(shù)據(jù),不需滿足并行規(guī)則3。通過(guò)上機(jī)調(diào)試,這條并行指令能夠正確編譯并執(zhí)行。

  5. 程序控制操作與運(yùn)算操作的并行

  P單元程序控制模塊與其他的算術(shù)運(yùn)算模塊相對(duì)較獨(dú)立,不易發(fā)生硬件沖突,便于進(jìn)行并行處理。下面是一個(gè)程序控制指令與算術(shù)運(yùn)算指令的并行:

  ADD *AR2,AC0

  ||RPTBLOCAL JUMP1 這是一個(gè)D單元ALU模塊與P單元程序控制模塊的并行實(shí)例。它在D單元ALU中將D總線送來(lái)的數(shù)據(jù)與AC0相加并存入AC0,同時(shí)完成程序循環(huán)控制。程序執(zhí)行中不存在硬件模塊和總線的沖突,滿足并行規(guī)則1;兩條指令總長(zhǎng)度為5字節(jié),滿足并行規(guī)則2;此例只使用一個(gè)存儲(chǔ)器中的數(shù)據(jù),不需要滿足并行規(guī)則3。通過(guò)上機(jī)調(diào)試,這條并行指令能夠正確編譯并執(zhí)行。

  6. 使用常量對(duì)存儲(chǔ)器進(jìn)行初始化

  D單元擁有兩條寫(xiě)總線(E、F總線),在通常情況下我們只使用了其中的一條寫(xiě)總線造成資源浪費(fèi)。假如我們需要對(duì)某塊數(shù)據(jù)存儲(chǔ)區(qū)清零,通常的做法如下:

  RPT #9

  MOV #0,*AR1+

  這段程序?qū)Υ鎯?chǔ)區(qū)數(shù)據(jù)逐一清零,每次只使用了D單元的E總線,總共需要10個(gè)時(shí)鐘周期才能完成。在這種情況下,如果我們充分利用E、F總線,將有效地降低這段程序的運(yùn)算量。具體實(shí)現(xiàn)如下:

  MOV #0,AC0

  ||RPT #4

  MOV AC0,DBL(*AR1+)

  這段程序與上一段的最大不同點(diǎn)在于,一個(gè)時(shí)鐘周期內(nèi)通過(guò)E、F總線將兩個(gè)初始數(shù)據(jù)同時(shí)傳送到指定的數(shù)據(jù)區(qū),同時(shí)初始化兩個(gè)字的存儲(chǔ)空間。這段程序只需要5個(gè)時(shí)鐘周期就可以完成10個(gè)字的初始化,比普通做法節(jié)約一半的運(yùn)算量,提高了使用效率。



關(guān)鍵詞: TI DSP 并行處理

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉