快捷搜索:  汽车  科技

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)2、I2S的基本架构 1.3、数字输入/输出接口 lPHILIPS 公司是I2S的发明者 1)、A/D和D/A转换器 2)、数字信号处理器(DSP) 3)、数字滤波器

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(1)

FPGA Xilinx或altera平台

一、I2S 接口介绍

1.1、l2S 是 Inter-IC Sound bus 的简称

1.2、l2S 总线接口是立体声音频信号和系统之间传递的接口,主要应用于:

1)、A/D和D/A转换器

2)、数字信号处理器(DSP)

3)、数字滤波器

1.3、数字输入/输出接口 lPHILIPS 公司是I2S的发明者

2、I2S的基本架构

在I2S传输协议中,其数据信号、时钟信号以及控制信号是分开传输的。

2.1、使用三条传输线:

1)、SD串行数据线

2)、WS 左右声道选择线

3)、SCK 同步时钟信号线

2.2、基本的传输时序如图

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(2)

4)、当系统字长比数据发送端字长长的时候,数据传输的时候就会出现截取现象,即如果数据接收端接收的数据位比它规定的字长长的话,那么规定字长最低位(LSB)以后的所有位将会被忽略。

5)、另一方面,如果接收的字长比它规定的字长短的话,那么空余出来的位将会以0填补。

6)、通过这种方式可以使音频信号的最有效位得到传输从而保证正确的听觉效果。

3、I2S的几种工作模式

从数据的接收和发送的角度来说,它可以分为数据接收端(Transmitter)和数据发送端(Receiver)。从时钟信号和声道选择信号的产生的角度来说,它又可以分为主机(Master)和从机(Slaver)。

3.1、I2S就存在以下三种不同的模式,其中产生时钟信号和声道选择信号的是主机

3.1.1、数据传输端产生SCK,WS信号,为主机,从而数据接收端成为从机,如图所示

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(3)

3.1.2、数据接收端产生SCK,WS信号,为主机,从而数据传输端成为从机,如图所示:

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(4)

3.1.3、当有多个数据接收端和多个数据传输端的时候,很难确定谁作为主机,因此就出现了另一种模式,即一个控制器专门负责产生时钟和声道选择信号,如图所示:

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(5)

二、I2S IP Core 的设计

1、在此次设计中,把整个设计分成3个模块

1)、控制模块

2)、数据发送模块

3)、数据接收模块

数据发送和接收模块都工作于从模式,分别可以独立工作,通过控制模块的控制处于不同的状态。

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(6)

2、控制模块的设计

2.1、控制部分主要是通过TX_RX_SEL和MA_SL_SEL信号来决定是自己产生 SCK和WS,还是接收总线上的SCK和WS。外部时钟信号(CLK)、复位信号(RESET)用来控制整个系统所处状态和实现系统复位。

2.2、从外部引入的系统时钟信号(CLK)由晶振产生,本设计中使用的晶振频率是18.432MHz,故系统时钟频率为18.432MHz

2.3、主模式中,系统时钟经过分频处理后,生成I2S的内部传输时钟SCK和声道选择信号WS。 n本次设计中使用的声音的采样频率为48kHz 则声道选择信号WS的频率必须也为48kHz。由于传输左右2个声道的数据为16 bit,故SCK的频率为:48kHz×16×2=1.536MHz。

如果需要传输20 bit、24 bit或32 bit的左右声道的数据,可以提高SCK的频率,由上式可以计算出需要的SCK的频率。

根据WS、SCK与系统时钟频率的关系,可以得出由系统时钟频率产生WS和SCK的分频系数。

3、控制模块中双向端口的设计

3.1、在控制模块中SCK、WS、SD信号都是输入输出双向端口,根据外部信号TX_RX_SEL 、MA_SL_SEL信号的控制,决定端口的输入输出方向。如图所示:

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(7)

3.2、当TX_SD向外发送数据时,TX_RX_SEL为高电平,输出缓冲打开,去驱动外部的SD,而另一端则关闭输入缓冲,令缓冲输入到内部RX_SD上的电平为高阻态。

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(8)

3.3、当RX_SD接收外部数据时,TX_RX_SEL为低电平,输入缓冲打开,接收外部SD的数据,另一端则关闭输出缓冲,令输出到外部SD上的电平为高阻态。

3.4、通过上面的设计,就可以保证在某一时刻只有一端在驱动总线,而不会造成数据冲突。

4、数据发送模块的设计

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(9)

4.1、各信号的时序关系:

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(10)

4.2、为了配合与控制模块的连接,控制模块中使用了使能信号(TX_EN和RX_EN) 对数据发送和数据接收模块使能。 上图中的WS、SCK、SD信号的引入都经过一个三态门,通过TX_EN控制其与控制模块的连接或断开。

其Verilog代码片断为:

assign WS = TX_EN ? TX_RX_WS:1'bz;

assign SCK = TX_EN ? TX_RX_SCK:1'bz;

assign TX_SD = TX_EN ? SD:1'bz;

5、数据接收模块的设计

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(11)

5.1、WSP信号的产生方式与发送模块一样。计数模块的计数值在本设计中为模16,当计数达到16时,EN信号变成低电平,使计数器停止计数,同时也使串并转换模块停止接收数据。WS、SCK、SD信号的进入同样需要经过RX_EN信号的使能来决定与控制模块的连接或断开。

6、各个模块的整合

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(12)

三、测试、仿真

首先必须编写测试平台,使用2个I2S结构组成一个收发平台,配置其中一个处于主模式发送状态,配置另一个出去从模式接收状态。对发送部分输入数据,监视接收部分接收到的数据,对比发送和接收的数据,验证设计是否正确。

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(13)

fpga用于综合设计的寄存器(嵌入式FPGA的I2S接口)(14)

对于有硬件平台的可以进行硬件验证,本文在此省略。

猜您喜欢: