论文部分内容阅读
摘要:为了提高嵌入式系统对于语音信号处理的速度及稳定性,提出了一种由CPLD芯片来完成串行协议和并行协议之间的协议转换系统,给出了硬件框图,并详细介绍了verilog代码,分模块介绍了CPLD的功能结构。并对于设计过程中的问题给出了合理的解决方案。
关键词:CPLD;Verilo;串行协议
中图分类号:TP336文献标识码:A 文章编号:1009-3044(2007)17-31318-02
1 引言
随着计算机技术、电子技术和通信技术的迅猛发展,音频处理技术也在众多领域得到广泛应用。如通信领域中的手机、IP电话,消费类电子产品中的MP3和CD播放器以及控制领域中的语音识别、声控系统等。在数字化的音频处理过程中,A/D,D/A芯片与MCU之间的数据传输是一个非常重要的过程。其中SPI,I2C以及I2S等串行协议与并行数据之间的转换是数据传输的核心内容。
由于并非所有SoC芯片都集成有这些协议的硬件实现,因此一般的解决方法就只有靠软件程序来抓取GPIO口的信号并进行协议转换的工作。但是这种传统的解决方案还是存在一些问题,音频信号的采集一般要求8KHz以上的采样率,因此软件系统需要频繁调用协议转换的模块,在CPU频率较低的情况下会极大地影响软件系统的运行。在需要与多片CODEC芯片通信的情况下,软件转换就很难实现了。
本系统采用两片TLV320AIC23作为CODEC芯片。并使用Altera MaxII EPM240建立了一个协议转换系统,来进行串并转换。由于使用硬件方法实现了SPI,I2S与SDRAM并行总线之间的协议转换,使得串并转换工作从MCU上独立开来,减小了软件系统的压力。并且由于是硬件方法,响应速度及稳定性也有了保证。
2 简介
2.1 I2S总线
I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:
(1)串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率≥2×采样频率×采样位数
(2)帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
(3)串行数据SDATA,就是用二进制补码表示的音频数据。
2.2 SPI总线
SPI ( Serial Peripheral Interface) 总线系统是一种同步串行外设接口,允许MCU 与各种外围设备以串行方式进行通信、数据交换。外围设备包括FLASHRAM、A/ D 转换器、网络控制器、MCU 等。SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口,一般使用4 条线:串行时钟线(SCK) 、主机输入/ 从机输出数据线MISO、主机输出/ 从机输入数据线MOSI 和低电平有效的从机选择线SS (有的SPI 接口芯片带有中断信号线INT 或INT 、有的SPI 接口芯片没有主机输出/ 从机输入数据线MOSI)
3 系统实现
3.1 硬件描述
如图1所示EPM240通过SPI总线写AIC23的控制寄存器,而数据通过I2S总线传输。由于不需要单独控制每一片AIC23,因此SPI总线可以只用一路,这样做可以减少EPM240中寄存器的使用量。而每一片AIC23所采样的音频数据都是独立的,所以每一片AIC23的I2S总线都要单独转换。
图1 硬件电路结构框图
TLV320AIC23B
TLV320AIC23(简称AIC23)是TI公司的一款高性能立体声音频编解码器Codec芯片。其内部集成的模数转换器(ADCs)和数模转换器(DACs)采用了带有过采样数字插补滤波的多位Sigma-Delta技术。数据传输字长为16、20、24、32位,支持采样频率范围8kHz至96kHz。
本系统采用SPI作为控制协议,I2S作为数据传输协议。采样频率8KHz,数据长度16位。
MAX II EPM240
MAX II器件系列是一种非易失性、即用性可编程逻辑系列,它采用了一种突破性的新型CPLD架构。这种新型架构的成本是原先MAX 器件的一半,功耗是其十分之一,密度是其四倍,性能却是其两倍。
MAX II器件为把一种总线协议转换为另一种总线协议提供了成本最低的解决方案。这些应用包括电平搬移(即从3.3V输入至1.8V输出),总线转换应用(如将专用系统转换为业界标准系统),多占总线桥接,串并/并串总线转换和加密。
在本系统中AIC23芯片起到语音数据的模数和数模转换作用。AIC23将四路语音信号转换成数字信号之后通过I2S协议将数据送入EPM240。
通过EPM240的串并协议转换分别将两块芯片的串行数据转换成MCU能够读取的SDRAM并行数据。
数据在MCU中处理之后,再通过EPM240转换成I2S协议的数据,送入到AIC23。AIC23将数据进行数模转换之后成为语音信号送到语音通路上。以上就是本系统进行语音采集及处理的流程。
3.2 Verilog代码介绍
如图2所示,CPLD内部一共分成六个模块。而Verilog代码共分三个部分。
图2 FPGA系统模块框图
3.2.1 Top部分
此模块主要实现SDRAM总线协议和中断控制。
在Top块中一共定义了8个寄存器:
1)SPI_EN:SPI使能寄存器。
2)I2S_EN:I2S使能寄存器。
3)INT_READ:中断寄存器。
4)SPI_DATA:SPI数据寄存器。
5)I2S_WRITE_REG1:第一片AIC23的I2S数据写寄存器。
6)I2S_WRITE_REG2:第二片AIC23的I2S数据写寄存器。
7)I2S_READ_REG1:第一片AIC23的I2S数据读寄存器。
8)I2S_READ_REG2:第二片AIC23的I2S数据读寄存器。
由于AIC23的控制寄存器只写不读,因此SPI总线只需要实现单方向的传输,我们使用一个16位的寄存器就能够达到目的。
I2S的读寄存器对应于AIC23到MCU的数据,I2S的写寄存器对应于MCU到AIC23的数据。
在我们的设计中,读中断寄存器的作用主要有两个:
1)清中断,在送出中断信号后读这个寄存器就能够将中断信号复位,避免再次触发MCU的中断。
2)返回I2S的LRCK:读这个寄存器的返回值就是当前I2S的LRC信号的值。这样就能够标识当前I2S读寄存器中是具体左右哪个声道的数据。
3.2.2 SPI模块
此模块完成SPI协议的串并转换。其中包括时钟模块和SPI协议解析模块。
由于AIC23写控制寄存器对于系统实时性的要求并不高,并且只需写不需读,因此SPI的控制相当简单:SPI_EN置1时状态机动作,将SPI_DATA中的16位数据转化为串行数据。转化结束后将SPI_EN置0。
在系统刚上电的时候AIC23是不工作的,需要经过SPI模块的配置之后才会产生时钟,因此SPI的时钟信号要由时钟模块来产生。时钟模块将12.288MHz的系统时钟8分频之后做为SPI的时钟来配置AIC23的寄存器。因此,SPI的时钟比较慢,
为了保证传输的准确性,在两次写SPI_DATA之间需要有一个较长时间的延时,这就需要在MCU软件实现的时候注意。
以下即为MCU写AIC23控制寄存器的C代码。
void set(short reg, short value)
{
unsigned short i;
disable_spi();
NOP(1000);
//reg寄存器地址,value将要写入的值
//将地址和值合成一个16位的数据
i = (( reg << 8 ) & 0xfe00) | value;
WRITE_I2S_REG1(i);
NOP(1000);
enable_spi();
NOP(100000);
}
3.2.3 I2S模块
此模块实现音频数据的串并转换。
相对而言,I2S的状态机要比SPI模块复杂很多。除了移位寄存器之外,还需要产生中断,并且要实现双向的数据转换。
因此I2S模块分为两个部分:
1)移位寄存器:将I2S写寄存器当中的内容转换成串行数据,并输出到I2S总线上。将I2S总线上的串行数据转换成并行数据,并保存到I2S的读寄存器中。
2)中断产生模块:每次转换完16位数据后,产生中断,将中断线置低,并且往INT_READ寄存器中写入LRCK线的数据。
4 结语
该设计已经应用于实际系统,经过长时间运行,系统运行稳定、性能良好。该方案不仅降低了硬件成本,也使得设计更方便灵活。是一种语音处理系统方面的可行方案。
参考文献:
[1]张雄伟,等. 现在语音处理技术及应用[M]. 北京:机械工业出版社,2003.
[2]刘建清 主编,刘建清,刘汉文,高广海,等. 从零开始:CPLD和Vferilog HDL编程技术[M]. 北京:国防工业出版社,2006.
[3]Bob Zeidman. 基于FPGA & CPLD的数字IC设计方法[M]. 赵宏图译. 北京:北京航空航天大学出版社,2004.
[4]杜春雷. ARM体系结构与编程[M]. 北京:清华大学出版社,2003.
1 引言
随着计算机技术、电子技术和通信技术的迅猛发展,音频处理技术也在众多领域得到广泛应用。如通信领域中的手机、IP电话,消费类电子产品中的MP3和CD播放器以及控制领域中的语音识别、声控系统等。在数字化的音频处理过程中,A/D,D/A芯片与MCU之间的数据传输是一个非常重要的过程。其中SPI,I2C以及I2S等串行协议与并行数据之间的转换是数据传输的核心内容。
由于并非所有SoC芯片都集成有这些协议的硬件实现,因此一般的解决方法就只有靠软件程序来抓取GPIO口的信号并进行协议转换的工作。但是这种传统的解决方案还是存在一些问题,音频信号的采集一般要求8KHz以上的采样率,因此软件系统需要频繁调用协议转换的模块,在CPU频率较低的情况下会极大地影响软件系统的运行。在需要与多片CODEC芯片通信的情况下,软件转换就很难实现了。
本系统采用两片TLV320AIC23作为CODEC芯片。并使用Altera MaxII EPM240建立了一个协议转换系统,来进行串并转换。由于使用硬件方法实现了SPI,I2S与SDRAM并行总线之间的协议转换,使得串并转换工作从MCU上独立开来,减小了软件系统的压力。并且由于是硬件方法,响应速度及稳定性也有了保证。
2 简介
2.1 I2S总线
I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:
(1)串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率≥2×采样频率×采样位数
(2)帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
(3)串行数据SDATA,就是用二进制补码表示的音频数据。
2.2 SPI总线
SPI ( Serial Peripheral Interface) 总线系统是一种同步串行外设接口,允许MCU 与各种外围设备以串行方式进行通信、数据交换。外围设备包括FLASHRAM、A/ D 转换器、网络控制器、MCU 等。SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口,一般使用4 条线:串行时钟线(SCK) 、主机输入/ 从机输出数据线MISO、主机输出/ 从机输入数据线MOSI 和低电平有效的从机选择线SS (有的SPI 接口芯片带有中断信号线INT 或INT 、有的SPI 接口芯片没有主机输出/ 从机输入数据线MOSI)
3 系统实现
3.1 硬件描述
如图1所示EPM240通过SPI总线写AIC23的控制寄存器,而数据通过I2S总线传输。由于不需要单独控制每一片AIC23,因此SPI总线可以只用一路,这样做可以减少EPM240中寄存器的使用量。而每一片AIC23所采样的音频数据都是独立的,所以每一片AIC23的I2S总线都要单独转换。
图1 硬件电路结构框图
TLV320AIC23B
TLV320AIC23(简称AIC23)是TI公司的一款高性能立体声音频编解码器Codec芯片。其内部集成的模数转换器(ADCs)和数模转换器(DACs)采用了带有过采样数字插补滤波的多位Sigma-Delta技术。数据传输字长为16、20、24、32位,支持采样频率范围8kHz至96kHz。
本系统采用SPI作为控制协议,I2S作为数据传输协议。采样频率8KHz,数据长度16位。
MAX II EPM240
MAX II器件系列是一种非易失性、即用性可编程逻辑系列,它采用了一种突破性的新型CPLD架构。这种新型架构的成本是原先MAX 器件的一半,功耗是其十分之一,密度是其四倍,性能却是其两倍。
MAX II器件为把一种总线协议转换为另一种总线协议提供了成本最低的解决方案。这些应用包括电平搬移(即从3.3V输入至1.8V输出),总线转换应用(如将专用系统转换为业界标准系统),多占总线桥接,串并/并串总线转换和加密。
在本系统中AIC23芯片起到语音数据的模数和数模转换作用。AIC23将四路语音信号转换成数字信号之后通过I2S协议将数据送入EPM240。
通过EPM240的串并协议转换分别将两块芯片的串行数据转换成MCU能够读取的SDRAM并行数据。
数据在MCU中处理之后,再通过EPM240转换成I2S协议的数据,送入到AIC23。AIC23将数据进行数模转换之后成为语音信号送到语音通路上。以上就是本系统进行语音采集及处理的流程。
3.2 Verilog代码介绍
如图2所示,CPLD内部一共分成六个模块。而Verilog代码共分三个部分。
图2 FPGA系统模块框图
3.2.1 Top部分
此模块主要实现SDRAM总线协议和中断控制。
在Top块中一共定义了8个寄存器:
1)SPI_EN:SPI使能寄存器。
2)I2S_EN:I2S使能寄存器。
3)INT_READ:中断寄存器。
4)SPI_DATA:SPI数据寄存器。
5)I2S_WRITE_REG1:第一片AIC23的I2S数据写寄存器。
6)I2S_WRITE_REG2:第二片AIC23的I2S数据写寄存器。
7)I2S_READ_REG1:第一片AIC23的I2S数据读寄存器。
8)I2S_READ_REG2:第二片AIC23的I2S数据读寄存器。
由于AIC23的控制寄存器只写不读,因此SPI总线只需要实现单方向的传输,我们使用一个16位的寄存器就能够达到目的。
I2S的读寄存器对应于AIC23到MCU的数据,I2S的写寄存器对应于MCU到AIC23的数据。
在我们的设计中,读中断寄存器的作用主要有两个:
1)清中断,在送出中断信号后读这个寄存器就能够将中断信号复位,避免再次触发MCU的中断。
2)返回I2S的LRCK:读这个寄存器的返回值就是当前I2S的LRC信号的值。这样就能够标识当前I2S读寄存器中是具体左右哪个声道的数据。
3.2.2 SPI模块
此模块完成SPI协议的串并转换。其中包括时钟模块和SPI协议解析模块。
由于AIC23写控制寄存器对于系统实时性的要求并不高,并且只需写不需读,因此SPI的控制相当简单:SPI_EN置1时状态机动作,将SPI_DATA中的16位数据转化为串行数据。转化结束后将SPI_EN置0。
在系统刚上电的时候AIC23是不工作的,需要经过SPI模块的配置之后才会产生时钟,因此SPI的时钟信号要由时钟模块来产生。时钟模块将12.288MHz的系统时钟8分频之后做为SPI的时钟来配置AIC23的寄存器。因此,SPI的时钟比较慢,
为了保证传输的准确性,在两次写SPI_DATA之间需要有一个较长时间的延时,这就需要在MCU软件实现的时候注意。
以下即为MCU写AIC23控制寄存器的C代码。
void set(short reg, short value)
{
unsigned short i;
disable_spi();
NOP(1000);
//reg寄存器地址,value将要写入的值
//将地址和值合成一个16位的数据
i = (( reg << 8 ) & 0xfe00) | value;
WRITE_I2S_REG1(i);
NOP(1000);
enable_spi();
NOP(100000);
}
3.2.3 I2S模块
此模块实现音频数据的串并转换。
相对而言,I2S的状态机要比SPI模块复杂很多。除了移位寄存器之外,还需要产生中断,并且要实现双向的数据转换。
因此I2S模块分为两个部分:
1)移位寄存器:将I2S写寄存器当中的内容转换成串行数据,并输出到I2S总线上。将I2S总线上的串行数据转换成并行数据,并保存到I2S的读寄存器中。
2)中断产生模块:每次转换完16位数据后,产生中断,将中断线置低,并且往INT_READ寄存器中写入LRCK线的数据。
4 结语
该设计已经应用于实际系统,经过长时间运行,系统运行稳定、性能良好。该方案不仅降低了硬件成本,也使得设计更方便灵活。是一种语音处理系统方面的可行方案。
参考文献:
[1]张雄伟,等. 现在语音处理技术及应用[M]. 北京:机械工业出版社,2003.
[2]刘建清 主编,刘建清,刘汉文,高广海,等. 从零开始:CPLD和Vferilog HDL编程技术[M]. 北京:国防工业出版社,2006.
[3]Bob Zeidman. 基于FPGA & CPLD的数字IC设计方法[M]. 赵宏图译. 北京:北京航空航天大学出版社,2004.
[4]杜春雷. ARM体系结构与编程[M]. 北京:清华大学出版社,2003.
关键词:CPLD;Verilo;串行协议
中图分类号:TP336文献标识码:A 文章编号:1009-3044(2007)17-31318-02
1 引言
随着计算机技术、电子技术和通信技术的迅猛发展,音频处理技术也在众多领域得到广泛应用。如通信领域中的手机、IP电话,消费类电子产品中的MP3和CD播放器以及控制领域中的语音识别、声控系统等。在数字化的音频处理过程中,A/D,D/A芯片与MCU之间的数据传输是一个非常重要的过程。其中SPI,I2C以及I2S等串行协议与并行数据之间的转换是数据传输的核心内容。
由于并非所有SoC芯片都集成有这些协议的硬件实现,因此一般的解决方法就只有靠软件程序来抓取GPIO口的信号并进行协议转换的工作。但是这种传统的解决方案还是存在一些问题,音频信号的采集一般要求8KHz以上的采样率,因此软件系统需要频繁调用协议转换的模块,在CPU频率较低的情况下会极大地影响软件系统的运行。在需要与多片CODEC芯片通信的情况下,软件转换就很难实现了。
本系统采用两片TLV320AIC23作为CODEC芯片。并使用Altera MaxII EPM240建立了一个协议转换系统,来进行串并转换。由于使用硬件方法实现了SPI,I2S与SDRAM并行总线之间的协议转换,使得串并转换工作从MCU上独立开来,减小了软件系统的压力。并且由于是硬件方法,响应速度及稳定性也有了保证。
2 简介
2.1 I2S总线
I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:
(1)串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率≥2×采样频率×采样位数
(2)帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
(3)串行数据SDATA,就是用二进制补码表示的音频数据。
2.2 SPI总线
SPI ( Serial Peripheral Interface) 总线系统是一种同步串行外设接口,允许MCU 与各种外围设备以串行方式进行通信、数据交换。外围设备包括FLASHRAM、A/ D 转换器、网络控制器、MCU 等。SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口,一般使用4 条线:串行时钟线(SCK) 、主机输入/ 从机输出数据线MISO、主机输出/ 从机输入数据线MOSI 和低电平有效的从机选择线SS (有的SPI 接口芯片带有中断信号线INT 或INT 、有的SPI 接口芯片没有主机输出/ 从机输入数据线MOSI)
3 系统实现
3.1 硬件描述
如图1所示EPM240通过SPI总线写AIC23的控制寄存器,而数据通过I2S总线传输。由于不需要单独控制每一片AIC23,因此SPI总线可以只用一路,这样做可以减少EPM240中寄存器的使用量。而每一片AIC23所采样的音频数据都是独立的,所以每一片AIC23的I2S总线都要单独转换。
图1 硬件电路结构框图
TLV320AIC23B
TLV320AIC23(简称AIC23)是TI公司的一款高性能立体声音频编解码器Codec芯片。其内部集成的模数转换器(ADCs)和数模转换器(DACs)采用了带有过采样数字插补滤波的多位Sigma-Delta技术。数据传输字长为16、20、24、32位,支持采样频率范围8kHz至96kHz。
本系统采用SPI作为控制协议,I2S作为数据传输协议。采样频率8KHz,数据长度16位。
MAX II EPM240
MAX II器件系列是一种非易失性、即用性可编程逻辑系列,它采用了一种突破性的新型CPLD架构。这种新型架构的成本是原先MAX 器件的一半,功耗是其十分之一,密度是其四倍,性能却是其两倍。
MAX II器件为把一种总线协议转换为另一种总线协议提供了成本最低的解决方案。这些应用包括电平搬移(即从3.3V输入至1.8V输出),总线转换应用(如将专用系统转换为业界标准系统),多占总线桥接,串并/并串总线转换和加密。
在本系统中AIC23芯片起到语音数据的模数和数模转换作用。AIC23将四路语音信号转换成数字信号之后通过I2S协议将数据送入EPM240。
通过EPM240的串并协议转换分别将两块芯片的串行数据转换成MCU能够读取的SDRAM并行数据。
数据在MCU中处理之后,再通过EPM240转换成I2S协议的数据,送入到AIC23。AIC23将数据进行数模转换之后成为语音信号送到语音通路上。以上就是本系统进行语音采集及处理的流程。
3.2 Verilog代码介绍
如图2所示,CPLD内部一共分成六个模块。而Verilog代码共分三个部分。
图2 FPGA系统模块框图
3.2.1 Top部分
此模块主要实现SDRAM总线协议和中断控制。
在Top块中一共定义了8个寄存器:
1)SPI_EN:SPI使能寄存器。
2)I2S_EN:I2S使能寄存器。
3)INT_READ:中断寄存器。
4)SPI_DATA:SPI数据寄存器。
5)I2S_WRITE_REG1:第一片AIC23的I2S数据写寄存器。
6)I2S_WRITE_REG2:第二片AIC23的I2S数据写寄存器。
7)I2S_READ_REG1:第一片AIC23的I2S数据读寄存器。
8)I2S_READ_REG2:第二片AIC23的I2S数据读寄存器。
由于AIC23的控制寄存器只写不读,因此SPI总线只需要实现单方向的传输,我们使用一个16位的寄存器就能够达到目的。
I2S的读寄存器对应于AIC23到MCU的数据,I2S的写寄存器对应于MCU到AIC23的数据。
在我们的设计中,读中断寄存器的作用主要有两个:
1)清中断,在送出中断信号后读这个寄存器就能够将中断信号复位,避免再次触发MCU的中断。
2)返回I2S的LRCK:读这个寄存器的返回值就是当前I2S的LRC信号的值。这样就能够标识当前I2S读寄存器中是具体左右哪个声道的数据。
3.2.2 SPI模块
此模块完成SPI协议的串并转换。其中包括时钟模块和SPI协议解析模块。
由于AIC23写控制寄存器对于系统实时性的要求并不高,并且只需写不需读,因此SPI的控制相当简单:SPI_EN置1时状态机动作,将SPI_DATA中的16位数据转化为串行数据。转化结束后将SPI_EN置0。
在系统刚上电的时候AIC23是不工作的,需要经过SPI模块的配置之后才会产生时钟,因此SPI的时钟信号要由时钟模块来产生。时钟模块将12.288MHz的系统时钟8分频之后做为SPI的时钟来配置AIC23的寄存器。因此,SPI的时钟比较慢,
为了保证传输的准确性,在两次写SPI_DATA之间需要有一个较长时间的延时,这就需要在MCU软件实现的时候注意。
以下即为MCU写AIC23控制寄存器的C代码。
void set(short reg, short value)
{
unsigned short i;
disable_spi();
NOP(1000);
//reg寄存器地址,value将要写入的值
//将地址和值合成一个16位的数据
i = (( reg << 8 ) & 0xfe00) | value;
WRITE_I2S_REG1(i);
NOP(1000);
enable_spi();
NOP(100000);
}
3.2.3 I2S模块
此模块实现音频数据的串并转换。
相对而言,I2S的状态机要比SPI模块复杂很多。除了移位寄存器之外,还需要产生中断,并且要实现双向的数据转换。
因此I2S模块分为两个部分:
1)移位寄存器:将I2S写寄存器当中的内容转换成串行数据,并输出到I2S总线上。将I2S总线上的串行数据转换成并行数据,并保存到I2S的读寄存器中。
2)中断产生模块:每次转换完16位数据后,产生中断,将中断线置低,并且往INT_READ寄存器中写入LRCK线的数据。
4 结语
该设计已经应用于实际系统,经过长时间运行,系统运行稳定、性能良好。该方案不仅降低了硬件成本,也使得设计更方便灵活。是一种语音处理系统方面的可行方案。
参考文献:
[1]张雄伟,等. 现在语音处理技术及应用[M]. 北京:机械工业出版社,2003.
[2]刘建清 主编,刘建清,刘汉文,高广海,等. 从零开始:CPLD和Vferilog HDL编程技术[M]. 北京:国防工业出版社,2006.
[3]Bob Zeidman. 基于FPGA & CPLD的数字IC设计方法[M]. 赵宏图译. 北京:北京航空航天大学出版社,2004.
[4]杜春雷. ARM体系结构与编程[M]. 北京:清华大学出版社,2003.
1 引言
随着计算机技术、电子技术和通信技术的迅猛发展,音频处理技术也在众多领域得到广泛应用。如通信领域中的手机、IP电话,消费类电子产品中的MP3和CD播放器以及控制领域中的语音识别、声控系统等。在数字化的音频处理过程中,A/D,D/A芯片与MCU之间的数据传输是一个非常重要的过程。其中SPI,I2C以及I2S等串行协议与并行数据之间的转换是数据传输的核心内容。
由于并非所有SoC芯片都集成有这些协议的硬件实现,因此一般的解决方法就只有靠软件程序来抓取GPIO口的信号并进行协议转换的工作。但是这种传统的解决方案还是存在一些问题,音频信号的采集一般要求8KHz以上的采样率,因此软件系统需要频繁调用协议转换的模块,在CPU频率较低的情况下会极大地影响软件系统的运行。在需要与多片CODEC芯片通信的情况下,软件转换就很难实现了。
本系统采用两片TLV320AIC23作为CODEC芯片。并使用Altera MaxII EPM240建立了一个协议转换系统,来进行串并转换。由于使用硬件方法实现了SPI,I2S与SDRAM并行总线之间的协议转换,使得串并转换工作从MCU上独立开来,减小了软件系统的压力。并且由于是硬件方法,响应速度及稳定性也有了保证。
2 简介
2.1 I2S总线
I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:
(1)串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率≥2×采样频率×采样位数
(2)帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
(3)串行数据SDATA,就是用二进制补码表示的音频数据。
2.2 SPI总线
SPI ( Serial Peripheral Interface) 总线系统是一种同步串行外设接口,允许MCU 与各种外围设备以串行方式进行通信、数据交换。外围设备包括FLASHRAM、A/ D 转换器、网络控制器、MCU 等。SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口,一般使用4 条线:串行时钟线(SCK) 、主机输入/ 从机输出数据线MISO、主机输出/ 从机输入数据线MOSI 和低电平有效的从机选择线SS (有的SPI 接口芯片带有中断信号线INT 或INT 、有的SPI 接口芯片没有主机输出/ 从机输入数据线MOSI)
3 系统实现
3.1 硬件描述
如图1所示EPM240通过SPI总线写AIC23的控制寄存器,而数据通过I2S总线传输。由于不需要单独控制每一片AIC23,因此SPI总线可以只用一路,这样做可以减少EPM240中寄存器的使用量。而每一片AIC23所采样的音频数据都是独立的,所以每一片AIC23的I2S总线都要单独转换。
图1 硬件电路结构框图
TLV320AIC23B
TLV320AIC23(简称AIC23)是TI公司的一款高性能立体声音频编解码器Codec芯片。其内部集成的模数转换器(ADCs)和数模转换器(DACs)采用了带有过采样数字插补滤波的多位Sigma-Delta技术。数据传输字长为16、20、24、32位,支持采样频率范围8kHz至96kHz。
本系统采用SPI作为控制协议,I2S作为数据传输协议。采样频率8KHz,数据长度16位。
MAX II EPM240
MAX II器件系列是一种非易失性、即用性可编程逻辑系列,它采用了一种突破性的新型CPLD架构。这种新型架构的成本是原先MAX 器件的一半,功耗是其十分之一,密度是其四倍,性能却是其两倍。
MAX II器件为把一种总线协议转换为另一种总线协议提供了成本最低的解决方案。这些应用包括电平搬移(即从3.3V输入至1.8V输出),总线转换应用(如将专用系统转换为业界标准系统),多占总线桥接,串并/并串总线转换和加密。
在本系统中AIC23芯片起到语音数据的模数和数模转换作用。AIC23将四路语音信号转换成数字信号之后通过I2S协议将数据送入EPM240。
通过EPM240的串并协议转换分别将两块芯片的串行数据转换成MCU能够读取的SDRAM并行数据。
数据在MCU中处理之后,再通过EPM240转换成I2S协议的数据,送入到AIC23。AIC23将数据进行数模转换之后成为语音信号送到语音通路上。以上就是本系统进行语音采集及处理的流程。
3.2 Verilog代码介绍
如图2所示,CPLD内部一共分成六个模块。而Verilog代码共分三个部分。
图2 FPGA系统模块框图
3.2.1 Top部分
此模块主要实现SDRAM总线协议和中断控制。
在Top块中一共定义了8个寄存器:
1)SPI_EN:SPI使能寄存器。
2)I2S_EN:I2S使能寄存器。
3)INT_READ:中断寄存器。
4)SPI_DATA:SPI数据寄存器。
5)I2S_WRITE_REG1:第一片AIC23的I2S数据写寄存器。
6)I2S_WRITE_REG2:第二片AIC23的I2S数据写寄存器。
7)I2S_READ_REG1:第一片AIC23的I2S数据读寄存器。
8)I2S_READ_REG2:第二片AIC23的I2S数据读寄存器。
由于AIC23的控制寄存器只写不读,因此SPI总线只需要实现单方向的传输,我们使用一个16位的寄存器就能够达到目的。
I2S的读寄存器对应于AIC23到MCU的数据,I2S的写寄存器对应于MCU到AIC23的数据。
在我们的设计中,读中断寄存器的作用主要有两个:
1)清中断,在送出中断信号后读这个寄存器就能够将中断信号复位,避免再次触发MCU的中断。
2)返回I2S的LRCK:读这个寄存器的返回值就是当前I2S的LRC信号的值。这样就能够标识当前I2S读寄存器中是具体左右哪个声道的数据。
3.2.2 SPI模块
此模块完成SPI协议的串并转换。其中包括时钟模块和SPI协议解析模块。
由于AIC23写控制寄存器对于系统实时性的要求并不高,并且只需写不需读,因此SPI的控制相当简单:SPI_EN置1时状态机动作,将SPI_DATA中的16位数据转化为串行数据。转化结束后将SPI_EN置0。
在系统刚上电的时候AIC23是不工作的,需要经过SPI模块的配置之后才会产生时钟,因此SPI的时钟信号要由时钟模块来产生。时钟模块将12.288MHz的系统时钟8分频之后做为SPI的时钟来配置AIC23的寄存器。因此,SPI的时钟比较慢,
为了保证传输的准确性,在两次写SPI_DATA之间需要有一个较长时间的延时,这就需要在MCU软件实现的时候注意。
以下即为MCU写AIC23控制寄存器的C代码。
void set(short reg, short value)
{
unsigned short i;
disable_spi();
NOP(1000);
//reg寄存器地址,value将要写入的值
//将地址和值合成一个16位的数据
i = (( reg << 8 ) & 0xfe00) | value;
WRITE_I2S_REG1(i);
NOP(1000);
enable_spi();
NOP(100000);
}
3.2.3 I2S模块
此模块实现音频数据的串并转换。
相对而言,I2S的状态机要比SPI模块复杂很多。除了移位寄存器之外,还需要产生中断,并且要实现双向的数据转换。
因此I2S模块分为两个部分:
1)移位寄存器:将I2S写寄存器当中的内容转换成串行数据,并输出到I2S总线上。将I2S总线上的串行数据转换成并行数据,并保存到I2S的读寄存器中。
2)中断产生模块:每次转换完16位数据后,产生中断,将中断线置低,并且往INT_READ寄存器中写入LRCK线的数据。
4 结语
该设计已经应用于实际系统,经过长时间运行,系统运行稳定、性能良好。该方案不仅降低了硬件成本,也使得设计更方便灵活。是一种语音处理系统方面的可行方案。
参考文献:
[1]张雄伟,等. 现在语音处理技术及应用[M]. 北京:机械工业出版社,2003.
[2]刘建清 主编,刘建清,刘汉文,高广海,等. 从零开始:CPLD和Vferilog HDL编程技术[M]. 北京:国防工业出版社,2006.
[3]Bob Zeidman. 基于FPGA & CPLD的数字IC设计方法[M]. 赵宏图译. 北京:北京航空航天大学出版社,2004.
[4]杜春雷. ARM体系结构与编程[M]. 北京:清华大学出版社,2003.