0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用FPGA实现AD1836中D/A部分的I2S接口设计

电子设计 作者:电子设计 2018-10-09 10:41 次阅读

I2S总线协议简介

I2S(Inter IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,它既规定了硬件接口规范,也规定了数字音频数据的格式。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中采用Verilog HDL语言输入完成的,系统采用10MHz的有源晶振,通过FPGA内部的锁相环进行二级倍频从而得到12.288MHz的时钟信号,然后通过clkin_12_288M引脚送入分频模块。主要的程序如下:

分频模块

Module freq3_027M(clkin12_288M, clkout3_027M);

input clkin12_288M; //时钟输入引脚

output clkout3_027M; //时钟输出引脚

reg clkout3_027M; //分频计数器

integer cunt;

always@( posedge clkin12_288M) begin

cunt=cunt+1;

if (cunt《=1)

begin clkout3_027M=1‘b0;end

else if((cunt《=3)&&(cunt》=2))

begin clkout3_027M=1’b1;end

else

begin cunt=0;clkout3_027M=1‘b0;end

end

endmodule

D_A接口模块

(1)左右通道切换时钟和数据位时钟

assign LRCLKout = LR_f; //左右通道切换时钟

assign BCLKout =(BCLK_f)?BCLKin:1’b1; //数据位时钟

(2)时钟输出和数据的并串转换

always@( negedge BCLKin) begin

if(start) begin //使能信号为高

cunt=cunt+1;

case (cunt)

1: begin LR_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; //剩余的数据送0

27: datout=0;

28: datout=0;

29: datout=0;

30: datout=0;

31: datout=0;

32: datout=0;

default:datout=1’bz;

endcase

end

软件仿真

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

结束语

本文以FPGA为控制单元,完成了AD1836中D/A部分的I2S接口设计,它在数字音频系统的设计中有一定的参考和实用价值。该设计已经成功运用在某话路特性综合测试系统中,性能良好。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1600

    文章

    21282

    浏览量

    592879
  • 芯片
    +关注

    关注

    446

    文章

    47705

    浏览量

    408875
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1343

    浏览量

    120729
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #STM32 手把手教你学STM32-084 I2S录音简介-1

    I2S
    水管工
    发布于 :2022年10月29日 15:07:15

    #硬声创作季 #STM32 手把手教你学STM32-084 I2S录音简介-2

    I2S
    水管工
    发布于 :2022年10月29日 15:07:40

    #硬声创作季 #STM32 手把手教你学STM32-084 I2S录音简介-3

    I2S
    水管工
    发布于 :2022年10月29日 15:08:07

    FPGA采用I2S与ARM通信

    新人求助,FPGA如何采用I2S与ARM通信?
    发表于 06-13 11:24

    能帮忙分析下这个电路吗?AD1836

    [/td][td]这是561音频电路的,由AD1836出来的差动信号转化位单端输出的电路,我想知道这个电路怎么分析,周围得电阻电容各是什么作用,如何分析,谢谢!
    发表于 11-26 09:26

    AD1836D/A为例介绍I2S接口设计

    ,则将多余的数据位舍弃。 I2S接口硬件设计本设计采用Altera公司的Stratix系列的FPGA,EP1S10672I7来
    发表于 06-20 05:00

    如何利用FPGA完成AD1836D/A部分I2S接口设计?

    本文以FPGA为控制单元,完成了AD1836D/A部分I
    发表于 04-29 06:43

    基于FPGAAD1836I2S接口该如何去设计?

    基于FPGAAD1836I2S接口该如何去设计?
    发表于 05-26 06:45

    I2S 和 PCM 转换问题

    目前有一个需求,需要将音频 PCM接口 转化为 I2S 接口,在阅读资料后,想通过硬件电路,将PCM直接转化 为I2S。PCM 波形 :我想直接对PCM 的四个线路,BCLK , SY
    发表于 10-11 18:28

    AT32 MCU SPI/I2S入门指南

    及对应引脚,具体请参考本文 I2S 全双工章节。AT32 控制器的大部分型号都是 SPI 和 I2S 共用 SPI 接口,根据软件编程配置来选择 SPI 还是
    发表于 10-25 08:26

    STM32的I2S接口能不能和CODEC的I2S接口同时录音、播放?

    想用STM32录播音频,不知道STM32的I2S接口能不能和CODEC的I2S接口,同时录音、播放,就是通过CODEC的AD进来的数据同时发送到CODEC的DA输出。有没有相关的参考
    发表于 10-28 06:30

    基于FPGAAD1836I2S接口设计

    I2S(Inter IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,它既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有三个主要的信号:
    发表于 03-29 11:02 6146次阅读
    基于<b class='flag-5'>FPGA</b>和<b class='flag-5'>AD1836</b>的<b class='flag-5'>I2S</b><b class='flag-5'>接口</b>设计

    AN-620:AD1836和AD1953在带DSP的4进9出模拟系统中的应用

    AN-620:AD1836和AD1953在带DSP的4进9出模拟系统中的应用
    发表于 04-26 12:11 3次下载
    AN-620:<b class='flag-5'>AD1836</b>和AD1953在带DSP的4进9出模拟系统中的应用

    TN:ADSP-21161 SIMD SHARC DSP与AD1836(24位/96 KHz)多通道编解码器的接口

    TN:ADSP-21161 SIMD SHARC DSP与AD1836(24位/96 KHz)多通道编解码器的接口
    发表于 05-19 10:17 0次下载
    TN:ADSP-21161 SIMD SHARC DSP与<b class='flag-5'>AD1836</b>(24位/96 KHz)多通道编解码器的<b class='flag-5'>接口</b>

    AD1836声音Linux漂流器

    AD1836声音Linux漂流器
    发表于 05-23 09:38 5次下载
    <b class='flag-5'>AD1836</b>声音Linux漂流器