語音編碼專用處理器

An Application Specific Processor for Speech Coding Processing

 

學生:張河杰

 

指導教授:林進燈

 

國立交通大學電機與控制工程學系(研究所)碩士班

 

          

 

語音傳輸是目前最主要也最普遍的通訊傳輸服務。在數位下語音的傳輸更有彈性,能夠降低價格、維持品質、並提供保密的功能。由於使用者的增加與有限的頻寬。新的語音編碼傳傳輸位元率已由8Kbps(CELP)4.8Kbps(CS-ACELP)發展降至2.4Kbps(MELPSTC)。由於傳輸位元率的降低,語音的品質就只能由更複雜的演算法來提升,這使得即時實現語音編碼相當困難。

 

本論文提出一個新的語音編碼專用處理器。這個處理器專門設計處理線性預估與語調預估,這兩者均是語音編碼的核心技術。我們使用硬體-軟體雙重設計的方式使處理器的架構與指令集最佳化。並由於使用四級的管線式架構而得以平衡處理速度與晶片面積。它同時擁有兩個向量處理用的記憶體、24 bits精確的浮點運算單元、提供很大動態運算範圍的8 bits的指數處理單元以及具平行處理能力的指令。在指令長度固定為16 bits下,此處理器提供4種定址模式與三元運算。此晶片能於40MHz下工作,其處理能力約是TMS320C304.75倍。

 

此高性能的晶片使用TSMC 0.6mm 1P3M CMOS製程,並以COMPASS Cell Library設計合成。晶片的面積約為23mm2。此處理器已被國科會晶片設計製作中心接受製作。

功能與規格說明

人類的發聲首先決定發出的聲音種類,發出的聲音為母音時則為Voice,子音為Unvoice,以作為圖1中V/U Switch的選擇。發出的聲音為母音如( I )則需要一個有規律的脈衝來激發聲門,也就之前所提到的Pitch。若發出的聲音如為子音( s ),則激發原是一個Noise。經過放大(Gain)後,再通過咽喉與嘴唇輸出就是一個語音訊號。

1 模擬人的Voice/Un-voice模型

再經過化簡之語音發聲模型,所有發聲濾波器均被一個全極點的濾波器所取代。由此可看出語音編碼傳輸的幾個要件,包含了有:Pitch,V/U,Gain,與All pole filter的參數(也就是LPC的參數)。當然要達到toll quality 的效果是無法使用如此簡單的模型就能達到,如很多研究就集中於激發原的改良。如CELP就是利用Code Book來做為激發原。目前語音編碼主要使用的方法均是LPC Base,如CELP、MELP、VSELP,因此Pitch Estimation 與 LPC參數的求取都是必須的演算。好的預估與較高的準確度能使編碼的效果更接近於原音。

 

我們所設計的語音輔助運算處理器主要解決兩個語音編碼運算,包括線性預估與音調預估,這兩種演算法均是語音處理的核心部分。線性預估是利用短時間內人體內的喉嚨就如一個All Pole Filer的特性,找出此濾波器的參數以降低傳輸資料。

 

線性預估(LPC)在此我們選擇的演算法為Auto-correlation Method(AM),這種演算法的特點是計算量比較小且運算出的結果可以保證它的穩定性。音調的預估( Pitch Estimation )則是採用Normalized Auto-correlation method它比一般的AMDF法有較高的準確性,但其運算量會較高。由於語音編碼對於音調高低有很高的敏感性,因此精準的語調預估將比粗略預估的聲音品質好很多,這也就是為何要採用此法的原因。

處理器基本結構

語音編碼專用處理器SCP24V10是一個低消費、容易使用的24bit浮點運算處理器,它可以提供在一個週期內執行平行運算及浮點算數運算在系統中語音處理程式以內建,當系統動作時,根據所給予的不同Function會得到不同的PC值,作為program memory的位址線,讀取指令送到Control Unit中進行解碼,決定指令中的定址模式及讀寫的動作,經由管線衝突檢查後,藉以通知系統到memory或是register中讀取指令運算中所需要的資料,送至ALU中進行運算,再將結果寫入指令中所指定的memory或register中,完成一個指令的運算。圖1為此處理器的參考主架構圖:

1輔助處理器完整架構圖

SCP24V10架構中,資料格式為24bits浮點數。浮點數資料的特點為:快速、運用較為輕鬆自由且可以準確的運算。處理器中也針對浮點運算的部分進行快速運算的處理,提高速度以達到及時處理的效能。指令微碼為固定長度16bits,包含四種定址模式:

l          暫存器定址法: 利用內部一般暫存器來定址

l          直接定址法: 方式是直接由微碼中的立即值作為位置,定址的範圍是256。

l          矩陣定址模式: 也可以作為一般間接定址模式使用(Indirect Addressing)。

l          向量定址模式: 是主要是利用Memory to Memory的方式來完成的,同時由不同的記憶體區塊讀出所要運算的值,運算結束後寫入第三塊記憶體中或暫存器R3。

l          控制模式: 用來控制程式迴圈,與設定迴圈所要跑的次數,迴圈暫存器

 

下面介紹此處理器內部主要的硬體架構單元。設計時將其分成15個部分,其主要功能簡述如下表:

 

                 

SPROC

控制線路,負責所有的控制訊號。

ADD_MOD

定址法解碼器,決定目前的指令定址法並送出正確的讀寫訊號給暫存器與記憶體。

INST_DEC

指令解碼器,將OPCODE解碼並送至運算器ALU與FPU中。

PC_DP

負責產生所需要的Program Counter值,並處理目前工作狀態與功能選擇。

RJC_DP

指標運算單元與指標暫存器,產生出所有需要的指標值,並送入INT_ADD_DP做選擇。

INT_ADD_DP

內部Address Bus控制器,將指標運算單元計算出的指標正確的送給IP內部各位置線路。

REG_MEM

暫存器,4個24 Bit的內部暫存器,再一個時脈內可以完成二讀一寫。

INST_PIPE

管線衝突檢測器,檢測管線中的指令是否有發生如3.2節中所述的Data Hazard。

REG_SEL

根據INST_PIPE所送出的訊號將正確的運算資料送入ALU或FPU中運算

ALU

處理除法中正規化、還原正規化,並處理資料搬移的動作。

FPU_MPY

浮點數的乘法運算單元

FPU_ADD

浮點數的加減法運算單元。

EXT_BUS_DP:

外部匯流排控制器,處理外部匯流排資料與定址線、控制訊號。

INT_BUS_DP

內部匯流排控制器,處理內部Window Table ROM、RAM0、RAM1的匯流排資料與定址線、控制訊號。

TEST_MOD

檢測線路,將內部狀態送至IP外以供檢測之用。

 

此設計所採用的管線式架構是以4個Stage來完成,與一般的微處理器有許多不同的地方。基本上這四級分別為I (Instruction Fetch)、R (Read From Memory)、E (Execution)、W (Write Back),I Stage是從Instruction ROM中讀取指令,R Stage是指令解碼、指標運算與從記憶體或暫存器內讀出所要的值,E Stage為執行運算,W Stage將運算的結果寫入暫存器或寫回記憶體中。圖2為管線的運作狀況圖。採用四級式的架構是為了要在gate count與performance上取得一個平衡,級數增加勢必會增加很多的Latch與控制線路,但也因此會增加運算速度。減少Stage可以減少面積,當相對的運算與處理的時間會加長很多,在長時間的運算下就會顯的非常不利。在不增加級數與線路複雜度的情況下,我們利用Clock的負緣作為內部各級處理的二次觸發,將I、R、W Stage再細分一次。這樣做可以有效的改進處理由於Stage不足所產生的問題,也可以降低IP設計的複雜度。

2 輔助運算器管線運作狀態

為了要能夠做到平行的向量運算,必須一次從記憶體中讀取兩個值,並且由於為處理器內部並沒有很大的暫存器,所以必須立刻再寫回至另一個記憶體內,因此在R與W Stage均會有記憶體讀出與寫入的動作。由於R Stage要負責解碼與計算Program Counter指標的值,並且也要從記憶體中讀出所需要的值。因此利用Clock 負緣作為解碼與RAM、ROM access的分界點。圖3中可以清楚的看出每一個Stage中所做的事情。

3 輔助運算器中單一管線運作內容

SCP24V10中,支線衝突在硬體設計中並不存在,記憶體衝突則是利用軟體程式來解決。在管線運作中,當指令需要用到前一個指令的運算結果時,就會發生資料衝突的情形。例如,當要讀出或要寫入的暫存器的資料尚未準備好,使得指令無法順利取得運算資料,此時暫存器衝突就會發生。由於我們所選擇要實現的演算法無法利用撰寫的技巧來避開衝突,因此做bypass與Feed Forward以避免衝突發生,在處理器中設計了兩個模組來解決這個問題。第一個是檢測模組INST_PIPE,分別對A、B兩個訊號作檢測,分別利用兩個比較器來偵測是否有衝突發生,並且送出Bus訊號給第二個模組REG_SEL來選擇出正確的資料,送入運算單元中。

 

在設計時,如果以陣列處理器的方式完成,可以有極佳的運算速度。但是如果演算法比較複雜則面積會劇烈的增加而不符成本。如以一般的微處理器設計則無可避免的一定會將很多的時間都花費在記憶體的讀取上,而導致很難達到很高的運算效率。為了要解決這個問題,我們發展出一個如圖4所示以Memory to Memory的向量平行運算處理器,由於不是內建向量暫存器有效的減少面積,並且可以由外部讀取資料時就開始做向量運算,從啟動向量運算到第一個運算結果回存只需要5個Clock,一直到最後向量運算結束輸出。有效的應用內部的運算單元,支援的向量長度最高達256,以1996年的Cray T-90為例,其向量長度為128,但是由於其內部有8個向量暫存器與4個存取單元8個浮點數加法與8個乘法,因此其運算能力是非常強大的。由於我們內建的存取單元與浮點乘法加法器均為1個,因此利用演算法上對向量運算的需求,使每一個時脈浮點運算加法與乘法器均能夠在工作狀態,達到最佳的輸出成效。

4 向量運算架構圖

模擬結果與分析

撰寫C語言以驗證演算法的正確性,並且測試所設定的浮點數設定格式是否有精確度不足。表2-1是利用C模擬24 bit浮點數與32bit浮點數分別計算出的LPC數據。經過實際聆聽後並沒有發現音質降低的情況。但如果除法的迴圈逼近次數不足,則會音質變差,更甚會導致輸出參數完全不能使用。經過模擬後發現以24Bit的浮點運算可以達到所要求的精確度,且動態範圍也符合要求。

 

LPC Order

32 bit Floating Point

24 bit Floating Point

1

-1.948923

-1.954345

2

0.923492

0.913543

3

-0.052766

0.017284

4

0.841343

0.730545

5

-1.204289

-1.122589

6

0.476736

0.426231

7

-0.280020

-0.223022

8

0.945711

0.904251

9

-0.968852

-0.966308

10

0.296600

0.303504

1  LPC參數值在不同精確度下之運算結果

因此在語調預估模擬方面,32bit 浮點數計算出的Pitch為79、Measure為96,416,104,24bit所計算出的Pitch亦為79、Measure 為96,417,792。

撰寫完RTL Code後進行模擬,並與C模擬比較,其結果均一致。接下來用合成完的電路作模擬,利用CIC所寫分析軟體的檢查是否有驅動力不足的問題。在驅動力不足處,以手動的方式加入數個Buffer或更改元件以增加驅動力。在Best Case下最高的工作頻率達40MHz,Typical下以33MHz執行,Worst則是25MHz。表2-2為在執行兩種演算法所需的時間。

演算法

所需時脈數

(Clock)

向量運算比例

(CLOCK)

執 行 時 間

25MHz

33MHz

40MHz

LPC

3298

2348( 71%)

131.92us

98.94us

82.45us

Pitch_Fun 1

14346

13698 (95.4%)

573.84us

430.38us

358.65us

Pitch_Fun 2

17424

16680 (95.7%)

696.96us

522.72us

435.60us

Pitch Estimation

31770

30378 (95.6%)

1.2708ms

0.9531ms

0.79425ms

Total

35068

32726(93.3%)

1.40272ms

1.05204ms

0.8767ms

2 運算時間表

 

最後我們做個比較的圖表。圖5為SCP24V10與TI的TMS320CX系列DSP比較,須注意的是TMS320C3x為32(40)bit的浮點運算,而本IP為24bit浮點運算。

5 處理器運算能力比較圖

 

6在向量運算下與TI的TMS320C3x系列比較運算速度,X軸為假定所設計的IP在25MHz時為100%, 相對於各處理器向量運算時的能力。

6 處理器向量運算能力比較圖

利用Timemill作最後的Post-Layout Simulation,在攝氏25度下最快的頻率可以達到28.5MHz,與預估的33MHz少了4.5MHz,約5ns的時間,這是Clock Skew與Net Delay所造成的。在不作Clock Tree的情形下,Clock Skew會高達8ns,而在加入Clock Three後由I/O Pad端至最後的Clock訊號延遲改善為2.5ns。由於在最差的情況下也能有25MHz的表現( 50 MFLOPS ),再加上向量式的架構,亦能比TMS320C30快3.3倍,因此能夠提供極佳的運算效率。功率方面,以Powermill作估計,在28.5MHz時平均電流約220mA功率1100mW,功率消耗並不算小,應此要考慮散熱並加裝散熱片,以確保晶片正常的工作。

 

在應用低位元率語音系統,如2.4kbps,vocoder通常都依靠運算法則,利用直接分析與音波形來得到其中的參數。LPC vocoder應用如圖7所示,在編碼傳輸部分包含:measurement of correlation function、synthesis parameter、pitch and voicing detection and parameter coding;在解碼接收端有:parameter decoding、pitch generator、gain and LPC synthesizer。經由編碼及解碼之後,輸出合成語音波形。在系統中,有內部的資料及位址傳輸埠供內部及外部的記硬體使用。在DSP及輔助處理器間有控制仲裁,控制內部的記憶體和元件的讀寫運作,LPC的read /write、Quantizer/Gain及DSP都連接到控制仲裁單元上。在應用SCP24V10方面,經由DSP的處理控制,可以決定LPC的function動作,應用在系統中不同的語音處理。

7  SCP24V10應用系統圖

晶片照相圖

 

 

 

[回上一頁]