FPGA驱动WM8731音频收发全网最细讲解 提供2套工程源码和技术支持

1、前言

本文用FPGA驱动WM8731音频芯片,实现音频相关的应用,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字音频应用领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

本设计提供两套vivado工程;
1:FPGA驱动WM8731实现音频环回工程;
2:FPGA驱动WM8731实现音频录音工程;

2、WM8731音频解读

WM8731音频解读我之前已经写过两篇文章,请前往参考;
链接1:https://blog.csdn.net/qq_41667729/article/details/120753491
链接2:https://blog.csdn.net/qq_41667729/article/details/120953453

3、vivado工程1介绍

设计框图如下:
在这里插入图片描述
FPGA作为i2s主机,WM8731作为i2s从机,这样设计的好处在于保证了时序的同步,即采集时钟和发送时钟都是同一个时钟,且这个时钟由FPGA提供,这样就不存在数据时钟不同源甚至不同步的问题,对数据采集而言具有高度科学性。。。
将i2c配置模块、音频接收模块、音频发送模块例化为一个顶层,代码如下:

module wm8731_i2s_slave(
	input  clk_100m  ,	//输入参考时钟   
	input  rst_n     ,	//低电平复位     
	input  i_adc_data,	//输入音频ADC串行数据   
	output o_av_bclk ,	//输出i2c音频时钟       
	output o_adc_rlc ,	//输出ADC左右声道信号       
	output o_dac_rlc ,	//输出DAC左右声道信号  	   
	output o_dac_data,	//输出音频DAC串行数据	
	output o_aud_scl ,	//i2c配置
	inout  o_aud_sda 	//i2c配置
    );
	      
wire p_bclk;           
wire n_bclk;		      
wire [31:0] o_rx_data;

//i2s时序生成模块,这里是i2s主机模块,WM8731作为从机;
//SYS_CLK参数配置系统参考时钟;
//SAMPLE_RATE参数配置i2s采样率,这里设置为48K;
//SAMPLE_DEEP参数配置采样深度,这里设置为32位;
i2s_slave_time #(
	.SYS_CLK     (100_000_000),
	.SAMPLE_RATE (48_000     ),
	.SAMPLE_DEEP (32         )
)
u_i2s_slave_time(
	.clk_100m         (clk_100m         ),
	.rst_n            (rst_n            ),
	.o_av_bclk        (o_av_bclk        ),
	.o_adc_rlc        (o_adc_rlc        ),
	.o_dac_rlc 	      (o_dac_rlc 	    ),
	.p_bclk           (p_bclk           ),
	.n_bclk		      (n_bclk		    )             	
    );

//音频接收模块,将串行ADC数据转为32位的并行ADC数据
//SAMPLE_DEEP可配置采样深度
i2s_slave_rx #(
	.SAMPLE_DEEP(32)
)
u_i2s_slave_rx(
	.clk_100m         (clk_100m         ),
	.rst_n            (rst_n            ),
	.i_adc_rlc        (o_adc_rlc        ),
	.i_adc_data 	  (i_adc_data		),
	.i_p_bclk         (p_bclk           ),
	.i_n_bclk         (n_bclk		    ),	
	.o_rx_data        (o_rx_data        ), 	   	       
	.o_rx_done        (                 )                             	
    );

//音频发送模块,将32位并行DAC数据转为串行ADC数据
//SAMPLE_DEEP可配置采样深度
i2s_slave_tx #(
	.SAMPLE_DEEP(32)
)
u_i2s_slave_tx(
	.clk_100m         (clk_100m         ),
	.rst_n            (rst_n            ),
	.i_dac_rlc        (o_dac_rlc 		),
	.i_adc_data 	  (o_rx_data 		),
	.i_p_bclk         (p_bclk           ),
	.i_n_bclk         (n_bclk		    ),	
	.o_dac_data       (o_dac_data       ), 	   	       
	.o_tx_done        (					),
	.p_rlc_edge       (                 )                                     	
    );

//WM8731 i2c配置模块
wm8731_config wm8731_config(
    .clk     (clk_100m         ),                  // 时钟信号
    .rst_n   (rst_n            ),                  // 复位信号   
	.i2c_ack (                 ),                  // I2C应答标志 0:应答 1:未应答
    .aud_scl (o_aud_scl        ),                  // wm8731的SCL时钟
    .aud_sda (o_aud_sda        )                   // wm8731的SDA信号
);
endmodule

基于此,设计了FPGA驱动WM8731实现音频环回工程;
工程架构如下:
在这里插入图片描述
开发板FPGA型号:xc7k410tffg676-2;
输入:麦克风,即ADC输入;
输出:耳机,即DAC输出;
应用:WM8731的音频回环测试;

工程源码架构如下:
在这里插入图片描述
FPGA资源消耗如下:
在这里插入图片描述

4、vivado工程2介绍

设计框图如下:
在这里插入图片描述
开发板FPGA型号:xc7k410tffg676-2;
输入:麦克风,即ADC输入;
输出:耳机,即DAC输出;
应用:WM8731的音频录音测试;

工程Block Design架构如下:
在这里插入图片描述
工程源码架构如下:
在这里插入图片描述

5、上板调试验证

由于板子不方便带回家录视频,所以演示就不给出了,请谅解。。。

6、资料获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
网盘资料如下:
在这里插入图片描述
FPGA驱动WM8731实现音频环回工程源码获取链接:https://download.csdn.net/download/qq_41667729/87781868
FPGA驱动WM8731实现音频录音工程源码获取链接:https://download.csdn.net/download/qq_41667729/87781869

猜你喜欢

转载自blog.csdn.net/qq_41667729/article/details/130668537
今日推荐