Quick Start
- 在Vivado 2024.2中创建新工程,选择xc7z020clg484-1(Zynq-7020)作为目标器件。
- 添加AXI4-Stream Data FIFO IP核(配置为512深度,异步时钟),以及自定义音频处理RTL模块。
- 编写顶层模块,将AXI4-Stream接口连接至FIFO与处理模块,确保tvalid/tready握手正确。
- 添加Xilinx Vivado Simulator仿真源文件,编写testbench产生24位立体声L/R交替音频样本。
- 运行行为仿真,观察tdata波形是否按L/R通道顺序输出,tvalid与tready握手无气泡。
- 综合并实现工程,检查时序报告(WNS≥0),生成比特流。
- 下载至Zynq开发板,通过ILA抓取AXI4-Stream接口实时数据,验证音频流处理延迟≤10个时钟周期。
- 使用逻辑分析仪或板载DAC输出,对比输入与处理后音频信号,确认无毛刺或数据错位。
前置条件
| 项目 | 推荐值 | 说明 | 替代方案 |
|---|---|---|---|
| 器件/板卡 | Xilinx Zynq-7020 (xc7z020clg484-1) | 集成ARM Cortex-A9与FPGA,便于音频DMA传输 | Artix-7 + 外部MCU |
| EDA版本 | Vivado 2024.2 | 支持AXI4-Stream IP核与综合优化 | Vivado 2023.x / 2025.x(需验证IP兼容性) |
| 仿真器 | Vivado Simulator (xsim) | 内置于Vivado,无需额外安装 | ModelSim / Questa / Verilator |
| 时钟/复位 | 主时钟100MHz,异步复位低有效 | AXI4-Stream接口需同步时钟域处理 | 50MHz或200MHz(需调整时序约束) |
| 接口依赖 | AXI4-Stream Data FIFO (v11.2) | 提供跨时钟域缓冲与握手逻辑 | 自定义FIFO + 状态机 |
| 约束文件 | XDC约束(时钟周期10ns,输入输出延迟) | 确保时序收敛,避免亚稳态 | SDC格式(Vivado自动转换) |
目标与验收标准
- 功能点:AXI4-Stream接口能够连续接收24位立体声音频样本(L/R交替),经过增益调整或滤波后,以相同格式输出,无数据丢失或错位。
- 性能指标:处理延迟≤10个时钟周期(从输入tvalid有效到输出tvalid有效),吞吐率≥1样本/时钟(即100M样本/秒@100MHz)。
- 资源/Fmax:使用LUT≤800,FF≤600,BRAM≤2个(36Kb),Fmax≥150MHz(示例配置,以实际综合报告为准)。
- 关键波形/日志:仿真波形显示tdata在tvalid与tready同时为高时更新;ILA捕获数据无气泡(tvalid连续为高)。
实施步骤
工程结构创建
- 创建Vivado工程,添加以下源文件:
top_audio_stream.v(顶层模块)
audio_gain.v(增益处理模块)
tb_audio_stream.v(testbench) - IP目录中添加AXI4-Stream Data FIFO,配置为:异步时钟,写深度512,数据宽度24位。
- 约束文件audio_stream.xdc,定义主时钟周期10ns,输入延迟2ns,输出延迟2ns。
关键模块:audio_gain.v
module audio_gain #(
parameter DATA_WIDTH = 24
)(
input wire clk,
input wire rst_n,
// AXI4-Stream slave (input)
input wire s_axis_tvalid,
output wire s_axis_tready,
input wire [DATA_WIDTH-1:0] s_axis_tdata,
input wire s_axis_tlast,
// AXI4-Stream master (output)
output reg m_axis_tvalid,
input wire m_axis_tready,
output reg [DATA_WIDTH-1:0] m_axis_tdata,
output reg m_axis_tlast
);
// Internal registers
reg [DATA_WIDTH-1:0] data_reg;
reg valid_reg;
reg last_reg;
// Control logic
assign s_axis_tready = m_axis_tready || ~valid_reg;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
valid_reg <= 1'b0;
last_reg <= 1'b0;
data_reg <= {DATA_WIDTH{1'b0}};
end else begin
if (s_axis_tvalid && s_axis_tready) begin
data_reg <= s_axis_tdata;
last_reg <= s_axis_tlast;
valid_reg <= 1'b1;
end else if (m_axis_tready) begin
valid_reg <= 1'b0;
end
end
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
m_axis_tvalid <= 1'b0;
m_axis_tdata <= {DATA_WIDTH{1'b0}};
m_axis_tlast <= 1'b0;
end else begin
m_axis_tvalid <= valid_reg;
m_axis_tdata <= data_reg;
m_axis_tlast <= last_reg;
end
end
endmodule逐行说明
- 第1行:模块定义开始,声明参数DATA_WIDTH,默认24位。
- 第2行:端口列表开始。
- 第3行:时钟输入clk。
- 第4行:异步复位输入rst_n,低有效。
- 第5行:注释,标识AXI4-Stream从接口(输入)。
- 第6行:从接口tvalid输入,表示主设备数据有效。
- 第7行:从接口tready输出,表示本模块准备好接收数据。
- 第8行:从接口tdata输入,数据宽度由DATA_WIDTH决定。
- 第9行:从接口tlast输入,表示最后一个数据。
- 第10行:注释,标识AXI4-Stream主接口(输出)。
- 第11行:主接口tvalid输出,表示本模块输出数据有效。
- 第12行:主接口tready输入,表示下游设备准备好接收。
- 第13行:主接口tdata输出。
- 第14行:主接口tlast输出。
- 第15行:端口列表结束。
- 第17行:注释,内部寄存器声明开始。
- 第18行:data_reg寄存器,用于暂存输入数据。
- 第19行:valid_reg寄存器,用于暂存有效标志。
- 第20行:last_reg寄存器,用于暂存帧结束标志。
- 第22行:注释,控制逻辑开始。
- 第23行:s_axis_tready赋值:当下游就绪或本模块无有效数据时,准备接收新数据。避免反压死锁。
- 第25行:时序逻辑块,时钟上升沿或复位下降沿触发。
- 第26行:复位条件判断。
- 第27-29行:复位时清零valid_reg、last_reg、data_reg。
- 第30行:非复位情况。
- 第31行:如果输入有效且本模块准备好,则捕获数据。
- 第32-34行:将输入数据、tlast存入内部寄存器,并置位valid_reg。
- 第35-36行:如果下游就绪且本模块有数据,则清除valid_reg(数据已传递)。
- 第38行:时序逻辑块结束。
- 第40行:第二个时序逻辑块,用于输出寄存器。
- 第41行:复位条件。
- 第42-44行:复位时清零输出信号。
- 第45行:非复位情况。
- 第46-48行:将内部寄存器的值赋给输出端口。
- 第50行:模块结束。
验证结果
仿真波形应显示:当s_axis_tvalid和s_axis_tready同时为高时,s_axis_tdata被捕获;随后m_axis_tvalid拉高,m_axis_tdata输出与输入一致(或经增益处理)。ILA捕获的实时数据流中,tvalid应连续为高(无气泡),且tdata按L/R交替顺序输出。处理延迟(从输入tvalid有效到输出tvalid有效)应≤10个时钟周期。
排障指南
- 握手失败:检查s_axis_tready逻辑,确保不会在无数据时拉低导致死锁。
- 数据错位:验证L/R通道顺序,确认testbench中tdata按左声道、右声道交替生成。
- 时序违例:检查XDC约束,确保输入输出延迟设置合理,或降低时钟频率。
- FIFO溢出:增加FIFO深度或降低输入速率,确保读写指针不碰撞。
扩展建议
- 添加多级增益或FIR滤波器模块,通过AXI4-Stream级联实现复杂音频处理链。
- 集成AXI DMA,将音频数据从PS DDR传输至PL处理,再回传,实现低延迟音频流。
- 使用AXI4-Stream Switch IP核实现多通道音频路由。
参考
- Xilinx PG085: AXI4-Stream Infrastructure IP Suite v11.2
- Xilinx UG949: Vivado Design Suite User Guide: Methodology
- ARM AMBA 4 AXI4-Stream Protocol Specification
附录
完整工程源码及约束文件可参考Xilinx官方例程“AXI4-Stream Data FIFO Example Design”。




