基于FPGA和AD1836的I2S接口设计-设计应用_第1页
基于FPGA和AD1836的I2S接口设计-设计应用_第2页
基于FPGA和AD1836的I2S接口设计-设计应用_第3页
基于FPGA和AD1836的I2S接口设计-设计应用_第4页
基于FPGA和AD1836的I2S接口设计-设计应用_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑基于FPGA和AD1836的I2S接口设计-设计应用I2S总线协议简介

I2S(InterICSoundBus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,它既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有三个主要的信号:

(1)串行时钟BCLK,也叫位时钟,即对应于数字音频的每一位数据,BCLK都有一个脉冲。BCLK的频率=2×采样率×采样位数。

(2)帧时钟LRCLK,用于切换左右声道的数据。LRCLK为“1”表示正在传输的是右声道的数据,为“0”则表示正在传输的是左声道的数据。LRCLK的频率等于采样频率。

(3)串行数据SDATA,就是用二进制补码表示的音频数据。

有时为了使系统能够更好的同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟,是采样频率的256倍或384倍。典型的I2S接口时序如图1所示,对于系统而言,产生BCLK和LRCLK信号的信号端是主设备。I2S的数据线用于串行数据,当LRCLK变化(也就是左右通道的数据切换),在第二个BLCK处数据开始,按照高位在先低位在后的顺序进行传输。数据在BCLK的下降沿改变,在BCLK的上升沿进行数据的采样。因此,在BCLK的上升沿处数据必须是稳定的,接收端和发送端处理的有效数据的位数可以不同:如果接收端可处理的有效数据的位数多于发送端,将不足的数据位用0补足;反之,则将多余的数据位舍弃。

I2S接口硬件设计

本设计采用Altera公司的Stratix系列的FPGA,EP1S10672I7来实现AD1836中D/A的I2S接口设计。该芯片内核电压为1.5V,I/O电压为3.3V,符合AD1836数字接口输入输出电平要求,其中D/A部分的I2S接口硬件设计原理图如图1所示。

本设计中,将AD1836采样时钟设置为48kHz,采样位数为24位。从AD1836数据手册可知,其系统时钟(MCLK)为12.288MHz,左右通道数据切换时钟(LRCLK)等于采样时钟(48kHz),数据位时钟(DBCLK)为64×左右通道数据切换时钟(3.072MHz)。所以串行数据线上传输的是24位的有效数据,其余数据位时钟周期对应的数据线上的数据为0,串行数据线DSDATA1、DSDATA2、DSDATA3分别对应于三路的立体D/A,所有的时钟线和数据线均经过下拉电阻后与FPGA的I/O相连。

基于FPGA的实现

逻辑模块设计

FPGA内部逻辑模块主要包括分频模块和D_A接口模块,如图2所示。其中分频模块将AD1836的系统时钟12.288MHz分频为3.072MHz(即位时钟BCLK);start信号为模块使能信号,为高时,D_A接口模块将从DATIN引脚输入的24位并行数据转换为串行数据,从Datout引脚输出;当左右通道时钟切换时,输入的24位并行数据也相应改变,同时从LRclk引脚输出48kHz的左右通道数据切换时钟,从Bclk引脚输出3.072MHz的位时钟信号。LRclk和Bclk都是在AD1836的系统时钟(MCLK)的基础上分频得到的,从而保证了整个系统的同步性。

软件设计

所有软件的设计是在QuartusⅡ6.0中采用VerilogHDL语言输入完成的,系统采用10MHz的有源晶振,通过FPGA内部的锁相环进行二级倍频从而得到12.288MHz的时钟信号,然后通过clkin_12_288M引脚送入分频模块。主要的程序如下:

分频模块

Modulefreq3_027M(clkin12_288M,clkout3_027M);inputclkin12_288M;//时钟输入引脚outputclkout3_027M;//时钟输出引脚regclkout3_027M;//分频计数器integercunt;always@(posedgeclkin12_288M)begincunt=cunt+1;if(cunt=1)beginclkout3_027M=1'b0;endelseif((cunt=3)(cunt=2))beginclkout3_027M=1'b1;endelsebegincunt=0;clkout3_027M=1'b0;endendendmodule

D_A接口模块

(1)左右通道切换时钟和数据位时钟assignLRCLKout=LR_f;//左右通道切换时钟assignBCLKout=(BCLK_f)?BCLKin:1'b1;//数据位时钟(2)时钟输出和数据的并串转换always@(negedgeBCLKin)beginif(start)begin//使能信号为高cunt=cunt+1;case(cunt)1:beginLR_f=~LR_f;//左右通道时钟BCLK_f=1'b1;end//送出位数据时钟2:datout=DDSdatin[23];//送出位3:datout=DDSdatin[22];//送出次高位4:datout=DDSdatin[21];5:datout=DDSdatin[20];6:datout=DDSdatin[19];7:datout=DDSdatin[18];8:datout=DDSdatin[17];9:datout=DDSdatin[16];10:datout=DDSdatin[15];11:datout=DDSdatin[14];12:datout=DDSdatin[13];13:datout=DDSdatin[12];14:datout=DDSdatin[11];15:datout=DDSdatin[10];16:datout=DDSdatin[9];17:datout=DDSdatin[8];18:datout=DDSdatin[7];19:datout=DDSdatin[6];20:datout=DDSdatin[5];21:datout=DDSdatin[4];22:datout=DDSdatin[3];23:datout=DDSdatin[2];24:datout=DDSdatin[1];25:datout=DDSdatin[0];//数据已经发送完毕26:datout=0;//剩余的数据送027:datout=0;28:datout=0;29:datout=0;30:datout=0;31:datout=0;32:datout=0;default:datout=1'bz;endcaseend软件仿真

模块的仿真也是在软件QuartusⅡ6.0中实现的,仿真波形如图3所示。为了便于仿真,在24位的并行数据输入口输入十六进制的常数AB15F7H,此时送入左右通道的数据是相同的。从仿真波形中可以看出,当start信号高有效后,位数据时钟和左右通道数据切换时钟送出,将并行的24位数据AB15F7H从数据线上串行送出,在多余的位数据时钟处数据线上的数据为0,仿真结果与I2S接口时序图相符合。

结束语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论