摘 要: 基于SELP算法模型原理,,設(shè)計(jì)了一款高質(zhì)量多速率語音專用處理器芯片,。芯片使用可重構(gòu)" title="可重構(gòu)">可重構(gòu)體系結(jié)構(gòu)和超長指令字系統(tǒng)設(shè)計(jì)方法,將復(fù)雜度高的子程序" title="子程序">子程序進(jìn)行優(yōu)化,,能夠顯著提高指令并行度。仿真結(jié)果表明,在該芯片上實(shí)現(xiàn)語音壓縮編碼算法,,執(zhí)行效率高于相同工藝水平的通用DSP,并保持原有編碼質(zhì)量,。該處理器能夠?qū)崿F(xiàn)多種類型的語音壓縮算法" title="壓縮算法">壓縮算法,,可以達(dá)到對語音算法的高保密性、低復(fù)雜度和易開發(fā)性,。
關(guān)鍵詞: 語音壓縮 專用芯片 可重構(gòu)體系結(jié)構(gòu) 超長指令字
在通信過程中,,為了適應(yīng)多種應(yīng)用目的,需要使用不同的語音壓縮編碼算法,。如果利用DSP進(jìn)行編程[1],,存在編程難、保密性差,、成本高等缺點(diǎn);如果使用ASIC完成算法實(shí)現(xiàn),,只能用于實(shí)現(xiàn)單一算法,不能擴(kuò)展到其他算法,,難以進(jìn)行二次開發(fā)[2][3],。
利用可重構(gòu)體系結(jié)構(gòu)[4],可以將各類語音算法常用的功能模塊使用專用指令集邏輯化實(shí)現(xiàn),,而對算法的可變成分仍使用基本指令集編寫,,能大幅度降低程序量和編程工作量。片內(nèi)FLASH(包括程序區(qū)與數(shù)據(jù)區(qū))對外不可見,,只能通過注入方式進(jìn)行修改而不能讀取,。這樣,既可以有效地達(dá)到算法的保密性,,又能在固化的專用指令基礎(chǔ)上方便進(jìn)行算法的改進(jìn),,同時(shí)保持專用芯片制造成本低的特點(diǎn)?;诖怂悸烽_發(fā)了一種可編程專用語音編解碼芯片TR100,。
1 SELP算法介紹
壓縮算法采用實(shí)驗(yàn)室自行開發(fā)的基于SELP(Sinusoidal Excitation Linear Prediction)的多幀聯(lián)合編碼算法[5],在線性預(yù)測正弦激勵模型的基礎(chǔ)上,,引入多幀參數(shù)聯(lián)合矢量量化" title="矢量量化">矢量量化方法,,進(jìn)一步壓縮幀間冗余,,使語音譜包絡(luò)信息和余量信號得到較好表示,在0.6kbps的極低速率下,,獲得了很好的重建語音質(zhì)量,,可懂度達(dá)到90%以上。
?
算法原理如圖1和圖2所示,。輸入8kHz采樣率的語音信號以200個(gè)樣點(diǎn)為一幀,,首先經(jīng)過預(yù)處理后進(jìn)行線性預(yù)測分析,對每幀語音提取預(yù)測系數(shù),、基音周期,、子帶清濁音度和余量信號短時(shí)能量等參數(shù)。解碼器端采用多帶混合正弦激勵,,分別通過由清濁音信息調(diào)制的帶通濾波器合成激勵信號,,而后進(jìn)行合成濾波和后濾波產(chǎn)生合成語音。
在0.6kbps速率運(yùn)行時(shí)采用多幀聯(lián)合量化編碼技術(shù),,將相鄰的3個(gè)語音幀聯(lián)合起來形成一個(gè)超幀,。將預(yù)測系數(shù)轉(zhuǎn)化成線譜對系數(shù),采用基于模式的余量分裂多級矩陣量化P-RS-MSMQ算法來量化3幀聯(lián)合的線譜對(LSP)參數(shù),。模式信息來自于帶通濁音度參數(shù)量化結(jié)果,,用在LSP參數(shù)的矢量量化算法上,能夠提高量化性能,。LSP參數(shù)量化分三個(gè)步驟:均值去除,、模式預(yù)測和對LSP殘差子矩陣進(jìn)行多級矩陣量化。用于模式預(yù)測的系數(shù)矢量是基于超幀模式的轉(zhuǎn)移,,由前一超幀和當(dāng)前超幀確定,。預(yù)測的殘差矢量就是余量LSP參數(shù)矢量。將當(dāng)前超幀各子幀的無偏LSP預(yù)測殘差矢量組成一個(gè)3×10的矩陣,,然后分別進(jìn)行三級矩陣量化,,各級量化比特?cái)?shù)分別為7、6,、6,、5。
根據(jù)不同的信道狀況與質(zhì)量要求,,算法包括0.8kbps,、1.2kbps和2.4kbps的三種速率壓縮方式,流程與0.6kbps算法基本相同,,僅增加對余量信號的提取與編碼過程,,其中需要進(jìn)行512點(diǎn)FFT運(yùn)算。
2 TR100芯片體系結(jié)構(gòu)設(shè)計(jì)
芯片設(shè)計(jì)工作主頻為20MHz,,采用取指-譯碼-執(zhí)行3級流水線設(shè)計(jì),。語音接口與PCM采樣芯片連接,,壓縮數(shù)據(jù)接口使用RS232標(biāo)準(zhǔn)。內(nèi)部結(jié)構(gòu)如圖3所示,。
設(shè)計(jì)中采用了可重構(gòu)體系的思想,。所謂可重構(gòu)體系結(jié)構(gòu),是指某一計(jì)算系統(tǒng)能夠利用可重用的硬件資源,,根據(jù)不同的應(yīng)用需求,,靈活地改變自身的體系結(jié)構(gòu),以便為每個(gè)特定的應(yīng)用需求提供與之相匹配的體系結(jié)構(gòu),。TR100芯片采用粗粒度可重構(gòu)體系結(jié)構(gòu),,基本的可重構(gòu)硬件單元包括存儲系統(tǒng)、運(yùn)算單元,、程序調(diào)度控制,、寄存器和數(shù)據(jù)通路等類型,。
存儲系統(tǒng)包括FLASH和RAM兩部分,,為避免數(shù)據(jù)存儲瓶頸,芯片內(nèi)部包含2個(gè)16K×16位數(shù)據(jù)FLASH,、5個(gè)2K×16位數(shù)據(jù)RAM,,6個(gè)地址寄存器可以獨(dú)立對各個(gè)存儲器進(jìn)行單周期" title="單周期">單周期讀寫操作,3個(gè)地址運(yùn)算單元可以完成地址變換功能,。
在運(yùn)算單元設(shè)計(jì)上,,芯片內(nèi)部包括2個(gè)32位增強(qiáng)型算術(shù)邏輯單元ALU,能夠完成以加減運(yùn)算為中心,、包括規(guī)格化,、算術(shù)移位、四舍五入等輔助邏輯的復(fù)雜運(yùn)算功能,;1個(gè)32位乘法器MUL,;1個(gè)40位乘累加器MAC;1個(gè)16位除法器DIV,。除法運(yùn)算需要10個(gè)周期,,其他運(yùn)算單元均為單周期執(zhí)行。
程序調(diào)度控制包括程序存儲器,、2級硬循環(huán),、比較跳轉(zhuǎn)部件、比較設(shè)置部件,、調(diào)用/返回部件,、溢出判斷等單元。程序分兩部分存儲:程序FLASH存儲功能相對簡單,、指令長度較短的部分,,而程序RAM存儲功能較為復(fù)雜,、占用運(yùn)算量較大、指令長度較長的部分,。這種設(shè)計(jì)方法稱為專用指令集設(shè)計(jì),,一方面保證了大多數(shù)語音壓縮算法可以在TR100芯片上可重組實(shí)時(shí)實(shí)現(xiàn),另一方面也因?yàn)橥瓿闪瞬煌惴ǖ耐ㄓ媚K而方便二次開發(fā),。
輔助系統(tǒng)包括一個(gè)二組多層寄存器,,每組包括19個(gè)32位寄存器,兩個(gè)寄存器組可以被同時(shí)訪問,; 6個(gè)32位選通器作為數(shù)據(jù)通路將存儲系統(tǒng)與運(yùn)算部件進(jìn)行互聯(lián),,在保證數(shù)據(jù)連接靈活性的同時(shí)可以有效減少數(shù)據(jù)線寬;存儲器選通寄存器,,用于設(shè)置指令訪問不同存儲器,,以滿足多次調(diào)用相同子程序而使用不同數(shù)據(jù)的要求。
小結(jié)一下該芯片的主要特性:
1. 50ns運(yùn)算周期,,20MHz主頻,;
2. 2個(gè)32位增強(qiáng)型ALU, 1個(gè)32位乘法器,,1個(gè)40位乘累加器,;
3. 6個(gè)地址寄存器,3個(gè)地址變換部件,;
4. 雙重硬件循環(huán),;
5. 38×32bit雙寄存器組,支持分層窗口式訪問,;
6. 5×2K字?jǐn)?shù)據(jù)RAM,,2×16K字?jǐn)?shù)據(jù)FLASH;
7. 2K×256bit程序RAM,;8K×64bit程序FLASH,。
3 超長指令字格式設(shè)計(jì)
為解決RISC體系結(jié)構(gòu)下,隨著并行操作能力增強(qiáng)而導(dǎo)致的內(nèi)部控制邏輯趨向復(fù)雜的問題,,在七十年代開始,,超長指令字(VLIW)體系結(jié)構(gòu)開始進(jìn)入研究領(lǐng)域。它的目的是既能支持較高指令級并行性,,又能使硬件控制邏輯比較簡單[6],。
在針對語音編碼算法的專用處理器設(shè)計(jì)中,VLIW方法是非常適用的,。而VLIW體系結(jié)構(gòu)能在低復(fù)雜度的控制邏輯水平上產(chǎn)生較高指令并行性,,從而使芯片在低主頻下就能夠?qū)崿F(xiàn)語音運(yùn)算算法,這是優(yōu)于通用DSP的方面。由于算法中對資源并行度要求較高的程序模塊數(shù)量不大,,可以通過全遍歷所有運(yùn)算量較大的模塊,,提取所有可用的指令并行模式,在硬件控制邏輯復(fù)雜度增加很小的前提下實(shí)現(xiàn)超長指令譯碼,。
本文設(shè)計(jì)的VLIW指令系統(tǒng)包括兩種形態(tài):基本指令形態(tài)和專用指令形態(tài),。基本指令形態(tài)包括16位,、32位,、48位和64位四種指令長度,并行程度較低,,用于設(shè)計(jì)對資源并行性要求不高的子程序,。專用指令形態(tài)包括128位、192位和256位三種指令長度,,并行程度較高,,用于設(shè)計(jì)算法中時(shí)間復(fù)雜度較高、對資源并行性要求大的子程序,?;局噶钚螒B(tài)和專用指令形態(tài)均使用相同的指令格式,區(qū)別僅在于長度不同,,這樣就可以使用相同的譯碼器進(jìn)行譯碼,,從而簡化了電路設(shè)計(jì)。在編解碼程序運(yùn)行過程中,,基本指令模塊直接從程序FLASH中取指,專用指令模塊從程序RAM中取指,,均能做到單周期取指-單周期譯碼-單周期執(zhí)行(除法運(yùn)算除外),。
具體指令格式如表1。
其中,,CBLength惟一確定本條指令的長度,;CBSF惟一確定本長度下選用的指令子格式;CBCFi為第i個(gè)算子段的控制域,,其編碼標(biāo)識第i個(gè)算子編碼段所對應(yīng)的算子,;OPi為第i個(gè)算子編碼段編碼,其含義由CBCFi惟一確定,。指令格式中的算子是指由硬件資源確定的指令字中的最小并行單元,。
4 算法程序向芯片指令的移植
各類語音編碼算法中,會有一些子程序是通用的功能模塊,。表2是在TR100上實(shí)現(xiàn)這些常用程序的執(zhí)行效率,。
可以看到,整個(gè)壓縮算法中運(yùn)算量較大的模塊,,如濾波器,、點(diǎn)積,、矢量量化等,TR100的運(yùn)行效率均明顯高于DSP,,甚至能夠達(dá)到2倍以上,。這是由于對于運(yùn)算、存儲單元訪問密集的模塊,,硬件體系結(jié)構(gòu)中各個(gè)獨(dú)立的ALU,、乘法器、乘累加器與7個(gè)存儲體在指令系統(tǒng)中也有相應(yīng)的指令格式進(jìn)行并行訪問,,保證可以單周期進(jìn)行兩加兩乘運(yùn)算同時(shí)可以向存儲器中進(jìn)行兩讀一寫的操作,。而對LPC參數(shù)計(jì)算與轉(zhuǎn)換、數(shù)學(xué)函數(shù)等雖然運(yùn)算量不大,、但各種語音算法都要使用的模塊,,TR100的運(yùn)行效率也與DSP基本相當(dāng)。這就保證了在TR100芯片上移植各類語音算法時(shí),,受程序執(zhí)行效率的限制較小,,而可以專注于算法功能的開發(fā)。同時(shí),,芯片的注入功能可以對基本指令與專用指令進(jìn)行修改,,開發(fā)者如果需要對現(xiàn)有專用指令進(jìn)行擴(kuò)充,可以很方便地進(jìn)行注入更改,。
下面以加權(quán)矢量量化為例,,說明芯片的運(yùn)算效率。在低速率語音算法中,,由于線譜對系數(shù)常使用多幀聯(lián)合矢量量化,,使得碼本的維數(shù)與規(guī)模都大為增加,導(dǎo)致搜索碼本的運(yùn)算量非常巨大,。在本文SELP算法中,,600速率使用的多級LSP碼本最大是30維×128個(gè)的規(guī)模,搜索時(shí)需要計(jì)算全部碼本與當(dāng)前系數(shù)的最小加權(quán)距離:
循環(huán)內(nèi)需要進(jìn)行減法和2次乘法,。對于一些有并行功能的DSP,,使用流水線方式進(jìn)行循環(huán)內(nèi)的操作。由于指令寬度的限制,,循環(huán)體內(nèi)至少需要3個(gè)周期才能完成操作,。
在TR100芯片中,專用指令集長度可以達(dá)到256位,,因此能夠?qū)⒀h(huán)體內(nèi)的操作使用一條指令:
REPEAT 30
ALUR1=R2-R3 || MULR=R1*ALUR1 ||
ALUR2=ALUR1*MULR || LD1 *(AR1+) ||
LD2 *(AR2+) || LD3 *(AR3+) ;
循環(huán)開始前進(jìn)行數(shù)據(jù)準(zhǔn)備,,循環(huán)內(nèi)只要將所有運(yùn)算和取數(shù)操作并行起來即可正確完成求加權(quán)矢量誤差的計(jì)算。在循環(huán)體內(nèi)的一個(gè)操作周期相當(dāng)于每秒87萬次運(yùn)算。與通用DSP的實(shí)現(xiàn)相比,,本芯片可以在循環(huán)體內(nèi)減少5次運(yùn)算,,對矢量搜索模塊的優(yōu)化超過4MIPS。
5 芯片性能
存儲器的使用情況如表3,,需要注意的是數(shù)據(jù)FLASH中存儲的是4個(gè)速率的不同碼本,,因此規(guī)模較大。
?
600bps速率算法各子模塊的運(yùn)算量如表4,。
與C54x系列DSP實(shí)現(xiàn)結(jié)果相比,,TR100芯片完成編解碼的運(yùn)算復(fù)雜度為12.5MIPS,明顯低于C54xDSP所需要的40MIPS,。TR100芯片需要9.7K字變量存儲空間與28K字碼本存儲空間,,與C54xDSP所需的變量存儲空間與碼本存儲空間相當(dāng)。
為了驗(yàn)證芯片編解碼工作的正確性,,對比了浮點(diǎn)C程序,、定點(diǎn)C程序以及芯片仿真三種情況下各個(gè)參數(shù)的重建誤差。表5中列出了三種情況下的各種結(jié)果,,采用91 280幀中國軍標(biāo)語音測試數(shù)據(jù),,可以看出芯片運(yùn)算結(jié)果達(dá)到了計(jì)算機(jī)C程序仿真的水平。
對于語音壓縮算法,,由于基本算法模型相同,,因此可以使用相同的專用處理器結(jié)構(gòu)進(jìn)行設(shè)計(jì),在保證各類算法均可實(shí)現(xiàn)的前提下,,提高運(yùn)行效率,。減少運(yùn)算復(fù)雜度的意義在于能夠降低芯片功耗和工藝要求。即使不同算法有各自專用的處理模塊,,也可以很方便地通過注入新的專用指令來進(jìn)行修改,。與DSP實(shí)現(xiàn)相比,專用處理器的運(yùn)行效率更高,,開發(fā)難度更低,保密度更好,,更容易降低芯片規(guī)模,。
參考文獻(xiàn)
1 賈志科, 崔慧娟,, 唐 昆等. 低速率語音編解碼專用芯片的設(shè)計(jì)[J]. 清華大學(xué)學(xué)報(bào),,1999;39(5):73~76
2 McDonough J , Chang C , Kantak P, et al. A single chip QCELP vocoder for CDMA digital cellular[A]. Proceedings of IEEE Custom Integrated Circuits Conference[C]. New York, NY: IEEE, 1994;211~214
3 Byun K J, Hahn M, Kim K S. Implementation of 13 kbps QCELP vocoder ASIC[A]. Proceedings of AP-ASIC′99: The First IEEE Asia-Pacific Conference on ASICs[C]. Piscat-away, NJ: IEEE, 1999;258~261
4 王昭順, 王 沁,, 曲英杰. 可重構(gòu)計(jì)算機(jī)體系結(jié)構(gòu)[J]. 北京科技大學(xué)學(xué)報(bào),,2001;23(4):386~388
5 李軍林, 崔慧娟, 杜 松等. 0.8kb/s高質(zhì)量聲碼器算法[J]. 清華大學(xué)學(xué)報(bào),,2003;43(1):12~15
6 王 沁. VLIW體系結(jié)構(gòu)微處理器設(shè)計(jì)考慮. 微計(jì)算機(jī)信息,,1999;15(5):6~7