ASIC design of the Synthetic voice chip 摘要:针对传统的语音集成电路结构比较简单,实用功能相对单一,而且传统语音集成芯片是通过内部的振荡电路,再外接一些分立元件,才能输出不同的音频脉冲信号。本文提出的是以单晶片CMOS语音合成IC,其成本低,功能实用;该语音信号是以LOGPCM编码方式存入集成IC的ROM中,根据语音的长度和语音资料写入相应的ROM中[1];输出部分采用的是合成输出,即利用脉冲宽度调制技术(PWM),将LOGPCM编码的数字语音信号转化为PWM波直接来驱动喇叭发声。 关键字:LOGPCM编码;ROM;PWM Abstract: To traditional voice integrated circuit structure being simpler, the utility function is relatively single, and the integrated chip of traditional pronunciation connect some outer discrete cell by internal vibration circuit, so it can export(output) different audio frequency pulse signals. We are studying the single chip of CMOS voice synthesis IC in this text, the cost is very inexpensive and the function is practical; the voice signals are wrote in the integrated ROM of IC by LOGPCM code, the different voice signals and the length of voice should be wrote in different ROM; the output is synthesize and exporting, in other words, it is a pulse width to modulate the technology (PWM), in order to drive the loudspeaker directly and sound, it can turn the digital speech signal that LOGPCM encodes into PWM wave. Keywords: LOGPCM code; ROM; PWM 引言 近年来语音集成电路获得了迅速的发展,其应用范围越来越广,在自动售货机、ATM柜员机,内部直通电话机以及玩具等方面应用了大量的语音合成芯片。该芯片内部采用脉宽调制,将数字信号正确的还原成模拟信号,从而使得电路的输出端不需要外接D/A转换;同时使芯片能够以纯数字电路的形式实现,因此可以很方便地把语音合成电路做成专用集成电路(ASIC),这样可以提高电路的抗干扰能力,增加该系统工作的稳定性,同时也降低了生产的成本和简化了板级电路的复杂度。 1、语音合成芯片的结构 该语音合成芯片首先是将语音资料以LOGPCM编码的方式存入ROM中,语音总长为35秒,将其分割成4个语音段,2个触发键,可以根据不同的需求来确定该芯片的触发方式,每一个语音段可指定不同的播放速度,也可设定“语音组跳跃功能”将现在的语音段(S1)播放完后,接着播放指定的语音段,并可以进一步设定这个指定的语音组是否需要无限的循环播放。同样两个触发键可选择为输入或者输出端,音频输出为PWM1和PWM2 两个输出端,可直接驱动喇叭;频率振荡器有两种选择:外部可调电阻式频率振荡器和内部频率振荡器。该芯片的总体设计框图如图1所示。 2、语音合成芯片工作原理 本语音合成芯片有两个控制信号端:IO1和IO2,共有四段语音内容,根据设计的要求IO2的优先级别高于IO1,通过不同的输入来播放不同语音段的语音信号,而且两个控制信号IO1和IO2的触发方式都采用边缘触发,语音无重触发(后段盖前段)之功能,而且每触发一次输出一段语音内容,循环有序输出各段语音。芯片工作后,IO2开始触发则播放第一段语音(S1),如果IO2为高电平时,此时的IO1触发无效;当IO2为低电平时,IO1触发则播放最后一段语音(S4),假如IO2继续触发,将依次循环输出各段语音。 3.语音合成芯片设计 3.1 时序产生电路 这部分电路是给整个语音合成芯片提供时钟信号,该语音合成芯片只包括一个时钟,就是播放的速度。在芯片中的以LOGPCM编码方式所存储的语音信息是8位,采用PWM的方法进行调制,就需要至少28倍PWM数据读取频率来进行调制,使得PWM信号输出的占空比能实现256级的变化。语音信号是以8KHz为采样频率,因此要以8K×256=2M的时钟频率来进行调制,从而实现芯片的正常播放。在ASIC设计中,为了达到2MHz的时钟频率,采用环行振荡器,该电路3个CMOS反向器,1个电容和一个片外电阻,调节片外的电阻可以产生不同频率的振荡信号,因此可以通过改变外部的电阻值来实现不同的播放速度。同时在芯片的内部可用二分频电路串联来实现28分频。 3.2 输入信号控制模块电路 输入信号控制模块中的输入信号IO1和IO2对ROM地址进行前端控制,用来确定播放的语音段,该芯片设计的ROM有16根地址,8根数据线,将语音分割成四段,每段语音可占据4000H个地址单元,第一段语音存储的地址范围从0~3FFFH,第二段语音存储的地址范围从4000H~7FFFH,第三段语音存储的地址范围从8000H~BFFFH,第四段语音存储的地址范围从C000H~FFFFH。在该电路设计中,为了避免一些状态的误动作,故将输入信号IO2、IO1进行两级寄存,首先检测IO2的上升沿,当IO2的上升沿来了后,将signal输出端口先输出“00”信号(signal输出端就是下级模块:地址输出模块的信号控制输入端);为了使得每检测到一次IO2的上升沿,就让一个2位计数器加1,IO2经过寄存器后,再一次检测上升沿,将signal输出“01”信号。然后启动地址输出模块,当IO1上升沿来后,首先是判断IO2是否是低电平,只有IO2在低电平的状态,IO1才能动作,工作方式和IO2一样;否则IO1无效。电路原理图如图2所示。 3.3 ROM地址输出模块 ROM地址输出模块是用来接收上级输入信号控制模块的控制信号,根据不同的控制信号,输出不同的地址信号来读取ROM中的数据,ROM有16根地址线,因此在ROM地址输出模块中设计了16位的加法计数器,首先设计一个2位的加法计数器,再由两个2位的加法计数器构成一个四位的加法计数器,然后由3个四位的加法计数器构成一个12位的加法计数器,最后由12位的加法计数器和一个2位的加法计数器构成14位的加法计数器,14位加法计数器刚好能从0计数到3FFFH,也就是第一段语音存储的地址范围,其他各段的语音存储的开始地址相当于3FFFH的相应倍数加1,因此采用倍乘方法,其计算方法是:DOUT=C+MUL×(D+1),其中DOUT表示输出的ROM地址;C表示14位的加法计数器;MUL表示要播放的该语音段号减1;D是常数3FFFH。电路原理图如图3所示。 3.4 脉冲宽度调制(PWM)模块 该模块是将存储在ROM中的数据进行解码,将解码的音频信号直接由喇叭进行输出,其方法就是:用连续变化的调制信号各瞬时值对脉冲载波的持续时间进行调制。实际上就是把数字信号转化成模拟信号,从而使声音还原[2]。已调脉冲信号的宽度随调制信号的瞬时值大小而变化,当脉冲幅度不变时,调制的信号变化完全由脉冲的宽度来表示,在信号的传输中,要使信号的幅度失真干扰得到解决,可以用限幅的方法加以消除。由于语音信号的采样频率是8KHz,为了使得输出信号的占空比为256级的变化,则用8位的计数器来实现0到256的计数,让输出信号为“1”的时间维持相应数据大小的长度。而数据的读入是在系统调制时钟(2MHz)的下降沿来临时开始动作,且当8位计数器为“0”时开始读入数据。因为此时正是前一个PWM调制完成,而下一个调制周期还没开始的时隙,只有在这个时隙开始读入数据才能不影响PWM调制[3]。最后是将读入的数据和当前8位计数器的计数值进行比较,假如计数值小于当前读入的数据值,则端口1(PWM1)输出高电平“1”,否则输出低电平“0”,这样让输出信号的占空比根据输入LOGPCM数据的大小而发生变化,从而实现语音输出功能。电路原理图如图4所示。