代码下载
I2S 播放设计代码
顶层文件:i2s_playback.vhd (5.4 KB)
I2S收发器(必须同时包含在项目中): i2s_transceiver.vhd (7.5 KB)
完整示例项目
Digilent Basys 3开发套件的归档设计: i2s_playback.xpr.zip (999.8 KB)
本设计假设PmodI2S2模块已插入开发套件的JA接口。
特性
- 适用于Digilent I2S Pmod(PmodI2S2)的音频播放系统VHDL源代码
- 演示通过Pmod实现I2S收发器接口进行音频收发
概述
详细说明了一个VHDL设计,该设计负责与Digilent的I2S Pmod接口以创建音频播放系统,使用户能快速在FPGA上使用该Pmod模块。图1展示了I2S Pmod模块。图2描述了系统框图。I2S播放设计从I2S Pmod的ADC输入I2S格式的数字音频数据,然后将这些音频数据传输至I2S Pmod的DAC。该组件使用Vivado 2017.2设计。
图 1. Digilent I2S Pmod模块
图 2. 系统框图
工作原理
图3是I2S播放设计内部架构的框图。它包含一个I2S收发器组件和一个锁相环(PLL)。
图 3. I2S播放内部架构
I2S 收发器
图示I2S收发器是遵循I2S总线规范的VHDL组件,负责I2S信号的接收与发送。完整设计文档可在此查阅。I2S播放设计对I2S收发器组件进行如下配置。
I2S Pmod采用Cirrus Logic CS5343多比特音频模数转换器和Cirrus Logic CS4344立体声数模转换器,I2S收发器组件直接与其对接。由于ADC和DAC均支持24位数据分辨率,通过将泛型参数d_width 设为24,将I2S收发器配置为24位数据宽度。
本I2S播放设计采用常见的44.1kHz采样频率。根据CS5343数据手册(290.7KB)第4.1.1节图2所示,宜采用SCLK/LRCK比值为64,MCLK/LRCK比值为256。因此将I2S收发器的泛型参数sclk_ws_ratio 设为64。(注:LRCK即左右声道时钟,与ws即字选择信号为同义词)由于MCLK/SCLK = (MCLK/LRCK)/(SCLK/LRCK) = 256/64 = 4,故将泛型参数mclk_sclk_ratio 设为4。
由此可得字选择信号(即左右声道时钟)频率为44.1kHz,串行时钟频率为44.1kHz64=2.82MHz,主时钟频率为2.82MHz4=11.29MHz。CS4344数据手册(1001.0KB)第4.1节表1验证了该选择,其中列出当LRCK为44.1kHz时,11.29MHz是主时钟的常用频率。
如图3所示,通过将接收数据回传至I2S收发器组件的发送端口,实现I2S播放设计的回放功能。
锁相环
I2S收发器组件需主时钟驱动,由此产生I2S接口所需的串行时钟和字选择信号。该主时钟由FPGA的锁相环生成。
如前所述,本设计所需主时钟频率为11.29MHz。
提供的归档设计使用Artix-7 FPGA的锁相环,从Basys 3开发板的100MHz输入时钟产生11.29MHz时钟。若使用其他开发板,用户需修改设计以生成或提供此时钟。
端口描述
表1描述I2S播放设计的端口定义。
表 1. 端口描述
连接
该Pmod模块采用12针连接器。表2提供了该连接器的引脚定义。需将I2S回放设计的端口分配至FPGA引脚,这些引脚按所列方式路由至该连接器。
表 2. I2S Pmod引脚定义及与I2S回放设计端口的连接
复位
reset_n 输入端口必须保持逻辑高电平,I2S回放系统才能运行。该端口低电平信号将异步复位整个系统。复位期间,内部I2S收发器组件会将sclk 、ws 和 sd_tx 端口保持低电平。当前正在进行的任何传输都将中断。当前正在进行的任何接收都将中止。所有内部数据缓冲区均被清空。复位释放后,I2S收发器将重新开始运行,回放随之恢复。
结论
本I2S回放设计是可编程逻辑设计范例,用于连接Digilent的I2S Pmod模块。它处理与I2S Pmod的所有通信,从Pmod的ADC输入数字音频,并通过Pmod的DAC回放该音频。




