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