Quick Start:用最短路径理解企业筛选逻辑
- [object Object]
前置条件
- 硬件平台:Xilinx Zynq-7020开发板(如ZedBoard或PYNQ-Z2),或等效FPGA开发板。
- 开发工具:Vivado 2020.1及以上版本(含Vitis SDK),串口调试工具(如Putty、Tera Term)。
- 知识储备:了解AXI4-Lite协议基本握手信号(AWVALID/AWREADY、WVALID/WREADY、BVALID/BREADY、ARVALID/ARREADY、RVALID/RREADY),熟悉Verilog语法。
- 时间预估:约4小时(含工程搭建、代码编写、仿真验证、上板测试)。
目标与验收标准
- 功能点:通过AXI4-Lite从PS端(ARM)写寄存器启动采集,读取传感器数据并存入BRAM,PS通过UART打印温度值。
- 性能指标:AXI总线时钟100MHz,单次读取延迟≤10个时钟周期;传感器采样率≥1kHz。
- 资源占用:LUT≤2000,FF≤1500,BRAM≤2个(36Kb),DSP≤0。
- Fmax:综合后时序报告显示WNS≥0,Fmax≥120MHz(以Vivado时序报告为准)。
- 验收方式:上板后串口工具(如Putty)每秒输出一行“Temp=25.3C”,与万用表实测温度偏差≤2°C。
实施步骤
阶段一:工程结构搭建
- [object Object]
阶段二:关键模块设计——AXI4-Lite从机接口
以下代码实现一个简单的AXI4-Lite从机,支持写寄存器和读寄存器。
module axi_lite_slave #(
parameter ADDR_WIDTH = 4
)(
input wire ACLK,
input wire ARESETn,
input wire [ADDR_WIDTH-1:0] AWADDR,
input wire AWVALID,
output reg AWREADY,
input wire [31:0] WDATA,
input wire [3:0] WSTRB,
input wire WVALID,
output reg WREADY,
output reg [1:0] BRESP,
output reg BVALID,
input wire BREADY,
input wire [ADDR_WIDTH-1:0] ARADDR,
input wire ARVALID,
output reg ARREADY,
output reg [31:0] RDATA,
output reg [1:0] RRESP,
output reg RVALID,
input wire RREADY
);
reg [31:0] reg0, reg1; // 寄存器0:控制,寄存器1:数据
// 写地址通道
always @(posedge ACLK or negedge ARESETn) begin
if (!ARESETn) AWREADY <= 1'b0;
else AWREADY <= 1'b1;
end逐行说明
- 第1行:模块声明,名称为axi_lite_slave,带参数ADDR_WIDTH(默认4位地址宽度)。
- 第2行:参数定义结束。
- 第3行:端口列表开始。
- 第4行:输入端口ACLK,全局时钟信号。
- 第5行:输入端口ARESETn,低电平有效的异步复位信号。
- 第6行:输入端口AWADDR,写地址总线,宽度由ADDR_WIDTH决定。
- 第7行:输入端口AWVALID,写地址有效信号。
- 第8行:输出端口AWREADY,从机准备好接收写地址。
- 第9行:输入端口WDATA,写数据总线,32位。
- 第10行:输入端口WSTRB,写数据字节使能,4位。
- 第11行:输入端口WVALID,写数据有效信号。
- 第12行:输出端口WREADY,从机准备好接收写数据。
- 第13行:输出端口BRESP,写响应信号,2位。
- 第14行:输出端口BVALID,写响应有效信号。
- 第15行:输入端口BREADY,主机准备好接收写响应。
- 第16行:输入端口ARADDR,读地址总线。
- 第17行:输入端口ARVALID,读地址有效信号。
- 第18行:输出端口ARREADY,从机准备好接收读地址。
- 第19行:输出端口RDATA,读数据总线,32位。
- 第20行:输出端口RRESP,读响应信号,2位。
- 第21行:输出端口RVALID,读数据有效信号。
- 第22行:输入端口RREADY,主机准备好接收读数据。
- 第23行:端口列表结束。
- 第24行:内部寄存器声明,reg0用于控制,reg1用于数据。
- 第25行:空行。
- 第26行:注释,标识写地址通道逻辑。
- 第27行:always块开始,敏感列表为时钟上升沿或复位下降沿。
- 第28行:复位条件下,AWREADY置为0。
- 第29行:非复位条件下,AWREADY恒为1(表示从机始终准备好接收地址)。
- 第30行:always块结束。
阶段三:仿真验证
编写testbench,模拟PS通过AXI4-Lite写入reg0(启动采集),等待一段时间后读取reg1(温度数据),验证读写时序正确。仿真波形应显示:AWVALID与AWREADY握手成功后,WDATA被写入指定地址;ARVALID与ARREADY握手成功后,RDATA返回正确值。
阶段四:上板测试
将bitstream下载到开发板,打开串口工具(波特率115200,8N1),观察每秒输出的温度值。使用万用表测量板载温度传感器附近温度,对比串口输出,偏差应≤2°C。
验证结果
完成上述步骤后,应得到:
- 仿真通过,无时序违例。
- 上板后串口稳定输出温度值,格式正确。
- 资源占用满足约束(LUT≤2000,FF≤1500,BRAM≤2)。
- Fmax≥120MHz。
排障指南
- 问题1:串口无输出。检查UART引脚映射是否正确(MIO 48/49),确认波特率设置一致。
- 问题2:温度值恒定不变。检查reg0写入是否成功,传感器接口时序是否匹配。
- 问题3:时序违例。降低FCLK_CLK0频率至50MHz,或优化组合逻辑路径。
扩展方向
- 将AXI4-Lite升级为AXI4-Full,实现DMA批量数据传输。
- 增加多个传感器通道,通过寄存器选择通道。
- 添加FIFO缓冲,提高数据吞吐率。
参考资源
- Xilinx UG761: AXI Reference Guide
- Xilinx PG155: AXI GPIO v2.0 Product Guide
- Zynq-7000 Technical Reference Manual (TRM)
附录:完整代码清单
本指南中使用的axi_lite_slave模块完整代码,以及顶层例化代码,可参考Xilinx官方示例或开源仓库(如GitHub上的AXI4-Lite模板)。



