LM4550 ac’97 音频编解码器
这是一个硬件驱动示例,用于连接美国国家半导体LM4550 ac97音频编解码器与运行在100 MHz的FPGA。通过调整内部计数器或实例化板载PLL以获得100 MHz时钟,该设计可适配其他时钟频率。开发ac’97控制器时使用了Spartan 6 FPGA,但任何FPGA均可使用,只需考虑信号时序与主系统时钟的关系。LM4550 ac’97编解码器数据手册如下:
LM4550.pdf (611.3 KB)
输入 / 输出
控制器输入包括FPGA主振荡器、低电平有效复位、串行数据输入线、来自ac’97芯片的12.288 MHz位时钟、3位源选择器(滑动开关)和5位音量控制(滑动开关)。控制器输出包括同步信号、串行数据输出以及用于初始化ac97的低电平有效复位信号。有两个内部信号用于同步主ac’97控制器与命令状态机。其中一个信号每20微秒脉冲一次,另一个用于标签阶段的错误检查。关于串行帧输入/输出的详细信息,请参阅LM4550数据手册。
VHDL 层次结构
控制器包含两个主要部分:用于生成信号并将18位并行数据转换为串行数据的ac97接口模块,以及以轮询方式配置ac97寄存器的命令控制器状态机。可通过添加用户总线信号输入来修改状态机,这些信号路由到对应不同寄存器值的各个状态,实现编解码器的实时配置。ac97硬件驱动的两部分通过单周期脉冲就绪信号同步。顶层结构仅将控制器的并行输出在时钟边沿时回馈至控制器的并行输入。这使得ac97实现从输入到输出的直通传输。顶层文件中的这一过程可替换为用户组件的端口映射,以执行各种信号处理任务。VHDL系统层次结构如图1所示的RTL图。
图 1 - AC’97 直通电路 RTL 框图
Xilinx ISIM 波形
下方红色箭头显示ac97串行输出流中的寄存器地址和命令数据。左右声道的数据字可在寄存器及命令数据之后的串行输出中查看。底部的两个信号——ready和latching_cmd——用于同步层次结构底层中的两个组件。当向用户组件传输18位并行数据总线时,ready信号也应作为采样就绪信号使用。
图 2 – AC’97 ISim 测试输出
开发
该设计已通过Digilent开发板Xilinx Spartan-6 Atlys在硬件上验证。
VHD 文件
附带的.vhd文件可直接粘贴至新项目或现有项目中。信号需通过.ucf文件或Plan Ahead式引脚分配工具进行配置。
ac97_VHD_Files.zip (5.8 KB)

