基于编码速率600bps的高质量声码器算法的专用处理器设计

An application specific processor for low bit rate speech coding
Abstract: The application specific processor based on the algorithm of 600bps vocoder is presented in this paper. The speech coding algorithm, the hardware architecture , the compiler  and algorithm migration are introduced. Through HW/SW cooperation, memory cost and computation complexity are greatly reduced and verify the vocoder in circuit.
Keywords: vocoder, application specific processor,HW/SW cooperation
摘要:本文给出一种基于编码速率600bps的高质量声码器算法的专用处理器设计。介绍了语音编解码算法原理,专用处理器的体系结构,汇编器的开发和算法的移植。采用软硬件协同设计的方法,大大降低了算法的存储复杂度和运算复杂度,并在电路中验证了声码器地正确性。
关键词:声码器;专用处理器;软硬件协同设计

1 引言
语音传输是目前最主要也是最普遍的通信传输服务。低速率的语音传输能够降低价格、维持品质、并提供保密的功能。由于有限的带宽和使用者的增加,新的语音编码速率已由8Kbps(CELP)[1] 、4.8Kbps(CS-ACELP)[2]和2.4Kbps(MELP)[3]降至1.2Kbps以下。由于编码速率的降低,语音的品质就只能由更复杂的算法来提升,这使得即时实现语音编码相当困难。
本文针对我们实验室自己研究的SELP语音编解码算法,提出一种新的语音编解码专用处理器TR600芯片,针对SELP算法复杂度高、运算量大、码本极大的特点,使用软件和硬件协同设计的方式使处理器的体系结构和指令集最优。处理器体系结构采用最大并行性设计原则,使用三级流水线结构来平衡处理速度和芯片面积,同时拥有五个数据处理用的体系存储器,三层通用寄存器,32/16位精确的定点运算单元;提供具有高度并行处理能力的指令系统。比较传统的基于DSP的语音处理平台[4],具有明显优势。
2  0.6kb/s SELP声码器算法
SELP(Sine Excitation Linear Prediction)声码器算法[5],在线性预测正弦激励模型的基础上,引入了多帧参数联合矢量量化方法,进一步压缩帧间冗余,使语音谱包络信息和余量信号得到较好表示,在600b/s的极低速率下,获得了很好的重建语音质量,可懂度达到90%以上。
算法的编解码结构框图分别如图1和图2所示。输入8kHz采样率的语音信号首先经过预处理去除工频干扰并进行预加重。然后进行线性预测分析,对每帧语音提取预测系数、基音周期和余量信号短时能量等参数。将语音信号分成5个子带,对每一子带进行子带清浊(BPVC)判定。语音信号的谱包络用线性预测系数对应的线谱对LSP参数进行编码传输。解码器端采用多带混合正弦激励,分别通过由清浊音信息调制的带通滤波器合成激励信号,而后进行合成滤波和后滤波产生合成语音。SELP声码器语音帧长为20ms,采样率为8kHz时每帧160个语音样点, 若声码器在0.6 kb/s速率运行则平均每帧只有12bit来量化编码参数,而需要传输的语音参数为:线谱频率(LSF)参数,子带清浊判决参数、基音参数和能量参数。因此采用多帧联合量化编码技术,将相邻的6个语音帧联合起来形成一个超帧,总共有72个比特对超级帧参数进行联合矢量量化。0.6 kb/s声码器量化比特分配如表1所示。
500)this.style.width=500;" border=0>
500)this.style.width=500;" border=0>
因为线谱对(LSP)系数的良好的量化特性,在此0.6 kb/s声码器算法中,将预测系数转化成线谱对系数,然后进行量化。为了高效的量化LSP参数,此0.6 kb/s声码器算法采用P-RS-MSMQ(基于模式的余量分裂多级矩阵量化)算法来量化6帧联合的LSP参数。模式信息来自于带通浊音度参数量化结果,用在LSP参数的矢量量化算法上,提高量化性能。LSP参数量化分四个步骤:均值去除、模式预测、分裂LSP残差矩阵和对LSP残差子矩阵进行多级矩阵量化。
用于模式预测的系数矢量是基于超帧模式的转移,由前一超帧和当前超帧确定。预测的残差矢量就是余量LSP参数矢量。将当前超级帧各子帧的无偏LSP预测残差矢量组成一个6×10的矩阵,由于维数太大,若直接进行矢量量化,码本存储量和搜索计算量都将非常大,为此先将它分裂成两个6×5的子矩阵,然后分别进行三级矩阵量化,两个子矩阵各级量化比特数分别为8,8,8和8,7,7。
3  TR600芯片体系结构
TR600声码器芯片由一个PCM接口(含数据缓冲区)、一个RS232接口(含数据缓冲区)和TR600语音编解码专用处理器核组成。当对语音信号进行编码时,数据送入处理器进行语音分析和参数量化,将编码结果经由RS232端输出到信道上。当对语音信号进行解码时,处理过程与编码过程正好相反,RS232端将信道上的数据接收后送处理器进行参数重建和语音合成,将解码的语音信号,由PCM端输出。
TR600语音编解码专用处理器核是一个32位定点运算处理器,兼容16位定点处理。处理器电路设计中,针对SELP算法中存在大量矢量运算的特点在乘法器中设置了相应的乘累加单元。针对算法中存在大量函数调用的特点,在寄存器堆中设计了多层重叠寄存器窗口,以保护程序调用发生时的现场信息。针对算法中存在大量循环的特点设计了支持嵌套循环的程序控制器。
 为了在20MHz低主频下完成运算量和数据量极大的SELP算法,TR600处理器的设计考虑了最大的并行性。在空间并行方面,运算器中设置了两个ALU单元、两个乘法(含乘累加)单元和38个通用寄存器以满足并行计算;7块存储器的存储器体系、多路数据通路的结构以并行供数的要求。在时间并行方面,设计了三级流水线结构:取指,译码,执行;使每条指令单周期内即可完成。
 针对SELP算法和处理器结构的特点设计了可变长指令字结构的指令系统[6],指令字长度分为16位、32位、48位、64位、128位、192位,256位等7种规格,每种规格又提供多种指令格式,既提供了算法中所用到的基本操作,又满足了程序并行性的需要。同时处理器中执行部件的每个微操作的控制信号线都是可见的,编程人员可以直接用微操作组成自己需要的微指令,用组成的微指令编程;使得编程具有很大的灵活性,可以编出硬件资源利用率极高的程序。
处理器体系结构如图3所示。
500)this.style.width=500;" border=0>
运算部件:由两个ALU单元、两个多功能乘法单元、一个除法/位运算混合单元和一个比较置数单元等5个功能单元构成,各功能单元都接有运算结果寄存器;5个功能单元可以并行工作,以实现并行计算;ALU单元可以单周期内完成78种复杂度不等的算术逻辑运算,乘法单元可以在单周期内完成包括16位乘累加等复杂运算在内的9种32位/16位定点乘法运算。
 寄存器堆:由38个32bit的通用寄存器组成,分为3层,采用寄存器窗口方式实现函数调用;寄存器堆有两个读端口和两个写端口,可同时对4个寄存器进行操作(两读两写);每个寄存器又可以当作两个16bit的寄存器来使用。
 存储器:由5块单端口SRAM和3块FLASH组成;5块2K×16bit的SRAM用于存放中间计算结果和临时数据;3块16K×16bit的FLASH用于存放程序和码本。
 数据寄存器:共7个,由7块存储体的端口寄存器组成,用以暂存从存储器中取出的数据。
 存储器控制部件:由3个地址生成部件、6个地址寄存器、7个存取部件(完成LOAD和STORE功能)和两条存数数据通路组成;可同时实现改写3个地址寄存器,读7块存储体,写任意两块SRAM;数据并行度极高。
 程序控制部件:由一个比较跳转单元(包含无条件跳转)、两个循环控制单元(包括两个循环寄存器)和一个程序调用单元构成;可以实现程序的分支结构、循环结构(包括循环嵌套),以及函数的调用和寄存器堆换层等功能。程序计数器和状态寄存器也在该部件中。
 数据总线:由6条独立的32位数据通路组成,可同时传输6路32位数据;每条数据通路亦可分为两条16位数据线,用以传输16位数据。此6条数据通路主要用于运算部件的各个源操作数的来源选通,部分线路也可用于各功能部件之间的数据通信。
 内部数据通路:用以实现运算部件、通用寄存器堆、数据寄存器组、存储器控制部件、程序控制部件之间的数据通信。
 指令Catch:由一块4K×64bit的SRAM组成,当程序运行时,为了加速程序的执行速度,用以暂存FLASH中的SELP语音编解码程序。该SRAM的访问周期只有处理器主时钟周期(50ns)的四分之一,因此在一个主时钟周期内可以分4次从中读出一条256bit的指令。
 指令寄存器:一个256bit宽的寄存器,用以寄存指令Catch中的指令。
 译码器:对指令进行译码,产生对各执行部件的微操作控制信号以及各执行部件运行时所需的立即数;内含译码结果寄存器,用以暂存译码结果。
 多种操作数寻址方式:隐含寻址、立即寻址、直接寻址、寄存器寻址、寄存器间接寻址。
 优化的指令系统:由简单的指令和较复杂的指令组成,简单指令便可以构成指令系统的完备集。复杂的指令可以充分发挥硬件资源的并行性,使指令系统满足有效性条件。所有指令字长度都是16比特的整数倍,因而具有规整性的特点。另外由于指令译码器易于扩展,即使芯片升级换代也能提供向下兼容的新指令系统,因而该指令系统具有亦满足兼容性的条件。总之该指令系统具有一个完善的指令系统应满足的所有条件(完备、有效、规整、兼容)。
4 汇编器开发和算法移植
针对TR600专用处理器,汇编器的开发是整个软件开发平台中最重要的一部分,它提高了编程和软硬件联合调试的效率。为了缩短开发周期,在电路设计的同时,利用计算机编写和调试SELP编解码程序,使得编解码程序的开发和专用处理器的硬件设计工作得以同步进行。在编译汇编程序时,该汇编器依次进行词法分析、语法分析、并分配专用处理器的各种硬件资源,最终产生专用处理器的机器码。
针对专用处理器的指令和硬件结构,对原来的编解码程序移植到TR600专用芯片上:
1. 对于暂时作数据存储之用的临时变量使用寄存器代替,从而可以节省存取临时变量的时间;
2. 尽量采用专用指令,并适当展开关键循环,充分利用专用处理器的资源提高速度;
3. 编写循环的汇编时,充分考虑流水线,让取数,计算,存数并行起来;
4. 采用软件优化的方法,避免了复杂度较高的除法器电路;
5. 利用条件执行指令代替条件跳转指令;
5  电路验证和算法验证
在电路设计地时候,首先验证了专用处理器内每个独立模块地正确性,然后采用了软硬件联调地方式,先编写多种测试程序,经编译后产生目标代码,在Verilog模拟器上进行模拟,并对结果进行分析,确认了电路设计地正确性。最后采用测试码流对编解码程序和电路进行协同仿真。
测试了一个300k的语音样本,将模拟所得的输出结果和C程序的输出结果进行比较,两者结果完全相同。
6  结论
从算法优化着手,采用软硬件协同设计的思路,依次设计了专用处理器的基本硬件资源、指令系统、体系结构和RTL级电路;同时在指令系统的基础上开发了汇编器等软件工具,成功地在该专用芯片上实现了SELP语音压缩算法,并从电路、实时性等多方面验证了声码器地正确性。
本文作者创新点:本文设计并实现了一种全新的基于SELP语音压缩算法的专用处理器,与现有的通用DSP相比,专用处理器处理能力更强,编程更灵活,为声码器平台的集成提供了很好的支持。

    本文可能所用到的IC型号: ELJRE8N2JF2 KST3904 2SC4181 MCI2525-1BM TFDS6500-TR3 XC61AN3702MR NTHS4101PT1 RB500H