中国航空计算技术研究所 陕西西安 710119
【文章摘要】
语音告警模块能够在出现故障或紧急情况时用语音指明具体的原因,使操作人员能够及时地做出正确操作。本文提出了用FPGA 代替DSP 及桥芯片,进行音频解码芯片与主机的接口设计,对该语音告警模块的设计思想和实现方法作了简述。
【关键词】
TLV320AIC23 ;嵌入式;FPGA ;语音告警
0 引言
在某些应用场景中,当出现紧急情况或者系统故障时,需要及时发出相应的警告以提醒操作人员迅速做出反应,这样可有效避免操作失误或重大损失。语音告警是一种比较直观、快速、有效的提醒方式,因此就提出了语音告警的研制需求。为适应机载设备高性能、高可靠性和高度一体化的要求,同时兼顾小型化、低成本等原因,本文提出了一种使用FPGA 替代PCI 桥芯片和DSP 的设计方法及实现。
1 系统方案概述
图1 给出了语音告警的原理框图, 主要包括语音信号处理、D/A 转换及信号放大等功能组成。处理器将需要播放的语音指令发送给语音处理电路,后者调取相应的数字音频文件并进行D/A 转换。转换后的模拟音频信号经放大器放大后输送至耳机或扬声器,完成一次语音的播放。
1.1 语音芯片的选择
DVSI 公司的AMBE2000 是一款实现了语音压缩、解压缩软件算法的芯片, ADI 公司的AD73311 是一款16 位语音A/D 和D/A 转换芯片。这两者的共同特点是配置灵活、采用全双工接口,配合使用能够在多种调制方式、在多种数据速率(2.0kbps 至9.6kbps)下可获得优良的语音质量。
TI 公司的TLV320AIC23B 是一款支持I2C、SPI 或标准DSP McBSP 接口的立体声编解码芯片,内置16-Bit 分辨率的ADC/DAC,其采样率支持8 ~ 96kHz, 且软件可调。
对于AMBE2000+AD73311 方案,由于其外围电路较复杂,且语音文件在经过芯片的MBE 算法压缩后再进行D/A 转换并输出,在压缩过程中语音源文件数据受采样率所限会部分丢失,声音回放的质量不高。
对于TLV320AIC23B 方案,由于该芯片支持标准的I2C 接口,且采样率可达到用户语音源文件32kHz 的要求,外围电路较为简单。
因此综合考虑选取TLV320AIC23B 作为语音告警模块的语音处理芯片。
1.2 处理器方案选择
数字信号处理器DSP 具有较高的数据处理能力,工作频率高,并且与TLV320AIC23 的控制和数据传输接口可以直接匹配使用,无需外围总线转换电路。
可编程逻辑器件FPGA 具有很高的灵活性,可根据用户需求对端口及硬件逻辑进行自定义,且并行处理能力很强,可同时对不同类型的总线进行控制。
从扩展性、设计灵活性、空间尺寸及成本等方面考虑,使用FPGA 是比较理想的选择。因为FPGA 接收到的音频数据可立即传送给TLV320AIC23 而无需缓冲,电路比较简洁。同时FPGA 也可自定义时序信号以配合PCI 总线逻辑及TLV320AIC23 芯片的规定逻辑,调试起来也极为方便。
由于FPGA 与TLV320AIC23 之间没有现成可用的接口,因此两者之间的接口设计是方案实现过程中的重点和难点。
2 设计实现
本设计中语音告警模块作为PCI 总线上的一个从设备,在接收到主处理机的播放指令后,FPGA 会将需要播放的语音文件从FLASH 中读出,通过音频解码芯片转换成模拟信号,经由放大电路后输出至耳机。图2 是本设计的系统功能框图。
2.1 TLV320AIC23 的配置
本设计中,FPGA 通过I2C 控制接口对TLV320AIC23 的寄存器进行设置,因此将MODE 引脚接至GND。TLV320AIC23 具有地址为0000000~0001111 的11 个可编程寄存器,可实现对音量、采样率、功耗及复位等功能的控制,继而改变芯片的工作状态。本设计中设置音频输出增益为0dB、音频文件采样率为32kHz、音频文件位宽为16-bit。
TLV320AIC23 的数据通信接口与FPGA 的接口采用I2S 模式。数据通信接口包括时钟信号BCLK、数据信号DIN 和DOUT,同步信号LRCIN 和LROUT。本设计使用从模式,BCLK 由FPGA 分频产生,作为TLV320AIC23 的输入时钟。语音串行数据由FPGA 通过DIN、语音帧同步信号由FPGA 通过LRCIN 送入TLV320AIC23。
TLV320AIC23 与FPGA 的接口原理图如图3 所示。
2.2 TLV320AIC23 的控制接口时序
TLV320AIC23 的控制接口采用I2C 模式,该模式工作时只需两线:时钟信号SCLK 和数据信号SDIN。I2C 的时序如图4 所示。
每一个有效的控制字由16 位组成:7 位控制地址B[15:9] 和9 位控制数据B[8:0],按照高位在前的顺序传输。
图1 系统原理框图
图2 系统功能框图042 当SCLK 为高电平时,如果SDIN 为下降沿则开始一个控制字传输周期。最先传输的为7 位寄存器地址“0011011”,随后1 位为R/W,写“1”。这8 位数据即告之TLV320AIC23 其为从设备,接收从FPGA 发来的控制字。在这8 位数据传输完毕后即SCLK 到达第9 个时钟时,SDIN 被拉低,用以确认该8 位数据已经传输完成。接着SCLK 又从第1 个时钟开始计数,将B[15:8] 和B[7:0] 分两次传输至TLV320AIC23。当SCLK 为高电平时,如果SDIN 为上升沿则结束一个控制字的传输周期。
2.3 TLV320AIC23 的数据通信接口时序
TLV320AIC23 的数据通信接口采用I2S 模式,LRCIN 为音频DAC 的帧同步信号,与FPGA 产生的帧同步信号AUDIO_CLK 相连,该帧同步信号是一个周期为1/32K 的帧信号。音频数据在LRCIN 的下降沿开始传送,先传送左声道的音频数据,接着传送右声道的音频数据,传送数据字长由“0000111”寄存器的IWL 位确定,本设计IWL 位设置为“00”。I2S 的时序如图5 所示。
由于TLV320AIC23 工作在从模式下,因此数据传输时钟BCLK 由FPGA 产生并提供给TLV320AIC23。BCLK 结合采样率寄存器的设置,决定了TLV320AIC23 的内部时钟和采样率。
2.4 FPGA 的硬件逻辑实现
语音告警模块与主处理机之间采用32 位、33MHz 的PCI 总线接口,在本设计中使用FPGA 替代桥芯片作为模块与主处理机之间的通信接口。FPGA 中PCI 总线的硬件逻辑使用了成熟的IP 核,该IP 核由Verilog-HDL 语言编写,可以灵活的移植到不同型号的FPGA 芯片中,且调试起来比较方便。TLV320AIC23 与IP 核之间使用粘合逻辑进行无缝连接,包括地址译码、时序控制及音频FLASH 读写控制等功能。FPGA 的硬件逻辑原理框图如图6 所示。
2.5 软件设计
语音告警模块配置有驱动软件,作为API 与主处理机的操作系统共同对告警模块进行操作。驱动软件主要有:
1)void initVoice( ) :用于初始化语音告警模块;
2)void SendVoiceNo (int id, int times) :开始播放告警语句,其中id 为第n 条语句,times 为播放次数;
3)void StopVoice( ) :停止正在播放的告警语句。
图3 TLV320AIC23B 与FPGA 的接口原理图
图4 TLV320AIC23 I2C 控制接口时序图
图5 TLV320AIC23 I2S 数据通信接口时序图
》 转053 页
图6 FPGA 的硬件逻辑框图043
当SCLK 为高电平时,如果SDIN 为下降沿则开始一个控制字传输周期。最先传输的为7 位寄存器地址“0011011”,随后1 位为R/W,写“1”。这8 位数据即告之TLV320AIC23 其为从设备,接收从FPGA 发来的控制字。在这8 位数据传输完毕后即SCLK 到达第9 个时钟时,SDIN 被拉低,用以确认该8 位数据已经传输完成。接着SCLK 又从第1 个时钟开始计数,将B[15:8] 和B[7:0] 分两次传输至TLV320AIC23。当SCLK 为高电平时,如果SDIN 为上升沿则结束一个控制字的传输周期。
2.3 TLV320AIC23 的数据通信接口时序
TLV320AIC23 的数据通信接口采用I2S 模式,LRCIN 为音频DAC 的帧同步信号,与FPGA 产生的帧同步信号AUDIO_CLK 相连,该帧同步信号是一个周期为1/32K 的帧信号。音频数据在LRCIN 的下降沿开始传送,先传送左声道的音频数据,接着传送右声道的音频数据,传送数据字长由“0000111”寄存器的IWL 位确定,本设计IWL 位设置为“00”。I2S 的时序如图5 所示。
由于TLV320AIC23 工作在从模式下,因此数据传输时钟BCLK 由FPGA 产生并提供给TLV320AIC23。BCLK 结合采样率寄存器的设置,决定了TLV320AIC23 的内部时钟和采样率。
2.4 FPGA 的硬件逻辑实现
语音告警模块与主处理机之间采用32 位、33MHz 的PCI 总线接口,在本设计中使用FPGA 替代桥芯片作为模块与主处理机之间的通信接口。FPGA 中PCI 总线的硬件逻辑使用了成熟的IP 核,该IP 核由Verilog-HDL 语言编写,可以灵活的移植到不同型号的FPGA 芯片中,且调试起来比较方便。TLV320AIC23 与IP 核之间使用粘合逻辑进行无缝连接,包括地址译码、时序控制及音频FLASH 读写控制等功能。FPGA 的硬件逻辑原理框图如图6 所示。
2.5 软件设计
语音告警模块配置有驱动软件,作为API 与主处理机的操作系统共同对告警模块进行操作。驱动软件主要有:
1)void initVoice( ) :用于初始化语音告警模块;
2)void SendVoiceNo (int id, int times) :开始播放告警语句,其中id 为第n 条语句,times 为播放次数;
3)void StopVoice( ) :停止正在播放的告警语句。
图3 TLV320AIC23B 与FPGA 的接口原理图
图4 TLV320AIC23 I2C 控制接口时序图
图5 TLV320AIC23 I2S 数据通信接口时序图
》 转053 页
图6 FPGA 的硬件逻辑框图043