FPGA 音频录音与回放实验

一、实验概述

本实验基于 ALINX AN831 音频扩展模块,结合 FPGA 开发板完成音频录音与回放功能。

AN831是专为 FPGA 平台设计的音频外设扩展模块,依靠 WM8731 音频编解码芯片,完成模拟音频信号和数字 PCM 信号的相互转换。

整个系统实现麦克风采集声音 → 模数转换 → DDR3 存储音频数据 → 读取数据 → 数模转换 → 耳机播放录音完整音频链路,掌握I2C 配置、数字音频右对齐协议、跨时钟域处理、AXI 总线与 DDR3 存储等 FPGA 音频开发核心知识点。

二、AN831 音频模块详解

2.1 模块功能

  1. 音频输入:支持麦克风 MIC IN、线路输入 LINE IN 两种模式,可接收语音或者外部设备输入的模拟音频信号。
  2. 音频输出:具备耳机 HP OUT、线路 LINE OUT 输出接口,可以直接接耳机、音响设备播放录音。
  3. 信号转换:搭载 WM8731 编解码芯片,完成 A/D 模数转换、D/A 数模转换,实现高保真音频信号转换。
  4. 参数配置:使用 I2C 总线修改芯片内部寄存器,支持多种采样率、音频数据格式,适配不同 FPGA 硬件平台。

2.2 硬件接口

信号名称功能说明
VM_I2C_SCLK、VM_I2C_SDATI2C 控制总线,FPGA 配置 WM8731 寄存器,设置采样率、增益、工作模式
VM_DACDATDAC 数据信号,FPGA 向 WM8731 发送待播放数字音频数据
VM_ADCDATADC 数据信号,WM8731 把采集到的音频数字数据发送给 FPGA
VM_BCLK、VM_DACLRC位时钟、声道帧时钟,提供音频串行传输时序同步信号

模块通过 40PIN 连接器插接在 FPGA 开发板扩展口。

2.3 硬件连接步骤

  1. 准备硬件:FPGA 开发板、AN831 音频模块、带麦耳机、USB 下载线。
  2. 将 AN831 模块对准 40PIN 扩展接口缺口,垂直平稳插入,保证引脚接触牢靠。
  3. 外设接线:粉色接口接麦克风输入,绿色接口接耳机输出。
  4. USB 下载线连接电脑与开发板调试口,用于程序下载、供电调试。
  5. 确认硬件识别正常,烧写 FPGA 程序,开展实验。

三、核心芯片 WM8731 音频编解码器

WM8731 是立体声全双工音频 Codec 芯片,可以同时完成音频采集与音频播放。

  1. 采样参数:采样率范围 8kHz~96kHz;本实验选用 48kHz 采样率、16bit 位宽 PCM 数据,兼顾音质和 FPGA 资源消耗。
  2. 数据格式:支持右对齐、I2S、DSP、左对齐;本实验使用右对齐 Right Justified 模式。
  3. 时钟模式:配置为主模式,由 WM8731 输出 BCLK 位时钟、LRC 声道时钟,FPGA 直接接收时钟信号,降低 FPGA 内部时钟设计难度。
  4. 供电特性:支持 3.3V/5V 双电压供电,适配绝大多数 FPGA 开发板;芯片信噪比高、功耗低。

右对齐时序要点:LRC 信号跳变代表声道切换,MSB 最高有效位紧跟 LRC 边沿,在 BCLK 下降沿完成数据采样;BCLK 频率 = 采样率 × 声道数 × 数据位宽。LRC 高电平代表左声道,低电平代表右声道。

四、实验原理与整体工作流程

4.1 实验业务流程

  1. 录音触发:按下按键 KEY2,系统进入录音状态,麦克风采集模拟声音,WM8731 做 A/D 转换输出串行数字音频。
  2. 数据缓存存储:音频串行数据转为并行 PCM,经过 FIFO 缓冲,通过 AXI 总线写入片外 DDR3 内存保存录音数据。DDR3 提供大容量存储空间,保障长时间录音不会丢失数据。
  3. 播放触发:松开 KEY2 按键,停止录音,系统切换到播放状态。
  4. 音频回放:从 DDR3 中读取已经保存的音频数据,经过 FIFO、音频发送模块,串行发送至 WM8731;芯片完成 D/A 数模转换,耳机输出录制的声音。

4.2 通信协议

  1. I2C 总线:控制通道,只负责配置 WM8731 芯片,不传输音频数据流。FPGA 向芯片寄存器写入参数,完成芯片上电初始化,配置增益、采样率、工作模式。
  2. 数字音频串行接口
    • BCLK 位时钟:每一个 BCLK 周期传输 1bit 音频数据;
    • LRC 声道时钟:区分左、右声道;
    • ADCDAT:ADC → FPGA,录音数据流;
    • DACDAT:FPGA → DAC,播放数据流。

9d04dd2423788edffef345cbf67cbdaf
(关注FPGA黑金云课堂进群领取完整资料)

五、软件架构与核心模块解析

整体采用模块化层次化设计,各个模块独立,接口标准化,便于调试与二次开发。

  1. 按键控制模块 audio_key:检测 KEY2 按键电平,捕获按键按下、松开边沿信号;内部状态机拥有 S_IDLE 空闲、S_RECORD 录音、S_PLAY 播放三个状态。输出 record、play 控制信号,控制系统进入录音或者回放模式,是整个系统的控制中枢。

  2. 音频收发模块 audio_rx / audio_tx

    • audio_rx(接收):在 BCLK 上升沿采样 ADCDAT 串行数据,完成串转并,输出并行的 16bit PCM 音频数据,对应录音功能。
    • audio_tx(发送):把并行 PCM 数据做并转串,在 BCLK 下降沿输出 DACDAT 串行数据流,对应播放功能。严格遵循右对齐时序标准。
  3. FIFO 控制模块:使用异步 FIFO IP 核,解决音频模块时钟域与 DDR3 控制器时钟域不一致带来的跨时钟域问题。同时平衡音频低速数据流与 DDR3 高速读写之间速率差异。依靠 FIFO 水位信号触发读写操作,具备溢出、下溢保护,避免音频数据丢失、错乱。

  4. AXI 总线接口模块:将 FIFO 的读写请求转换成 AXI4 总线协议,对接 DDR3 的 MIG 控制器 IP。完成地址分配、突发传输控制、握手应答,实现 FPGA 逻辑对 DDR3 存储器高速读写,把音频数据存入 DDR3,或者从 DDR3 读出音频数据。

六、测试验证、现象与故障分析

6.1 操作步骤

  1. 将编译生成的 bit 比特流文件下载至 FPGA 开发板;确认麦克风、耳机接线正确。
  2. 长按 KEY2 按键开始录音,对着麦克风说话,最长录制时间约 20 秒。
  3. 松开 KEY2 按键,录音结束,自动开始回放,耳机播放录制语音。

6.2 预期实验现象

耳机输出清晰录制音频,没有爆音、杂音、卡顿、断音,录音回放完整。

6.3 常见异常排查

  1. 完全没有声音输出:检查 40PIN 模块插装是否到位、耳机麦克风插孔颜色是否插错,确认程序是否成功下载。
  2. 声音杂音大、失真:检查 WM8731 寄存器的输入输出增益配置;检查 BCLK、LRC 时序相位是否匹配,示波器观测右对齐时序,确认 MSB 与 LRC 边沿对齐关系;麦克风距离过近会造成音量过载失真。
  3. 播放卡顿断音:排查 FIFO 水位阈值、AXI 突发传输配置,确认 DDR3 读写是否出现响应超时。

七、实验总结

本实验完整搭建 FPGA 音频采集存储回放系统。硬件层面熟悉 AN831 音频扩展模块、WM8731 编解码芯片,理解 I2C 配置总线、Right Justified 右对齐数字音频协议;软件层面掌握状态机控制、串并转换、异步 FIFO 跨时钟域处理、AXI 总线操作 DDR3 存储器。

实验打通模拟音频、数字串行音频、FPGA 逻辑、片外存储整个链路,是 FPGA 语音识别、语音回放、音频处理等项目的基础实验。
💡 完整视频讲解可前往 ALINX 视频号进行直播回看

更多细节欢迎关注我们黑金云课堂全年免费直播课,
黑金云课堂九月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!

系列内容定位
Verilog开发硬件描述语言基础、逻辑设计、仿真调试
Vitis开发Zynq软硬件协同、外设驱动、网络协议栈
Linux开发嵌入式Linux系统移植、驱动编写、应用开发
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐