项目概述
本项目实现了一个完整的 FPGA 系统,用于通过 SPI 接口控制和读取 AS6501 TDC 芯片。系统架构包含 SPI 主控模块、控制逻辑、测试序列器、Block RAM 结果存储、UART 批量传输模块以及 Python 数据分析工具,支持从配置到分析的完整闭环流程:
上电命令 → 配置寄存器写入/回读验证 → Init 命令启动测量 → 中断驱动的连续测量(默认 10000 次)→ 结果存入 Block RAM → 按键触发 UART 批量传输到上位机 → Python 解析数据并计算 Jitter。
核心特性
- 批量测量模式:连续采集 MAX_MEASUREMENTS 次(默认 10000)后自动停止。
- Block RAM 存储:48 位×10000 条测量数据,利用 Vivado Block RAM 推断优化资源。
- UART 批量传输:BTN[1] 按键触发,波特率 115200,采用 8 字节数据包格式。
- 电平触发中断:支持 AS6501 中断始终为低电平的模式,简化读取逻辑。
- Python Jitter 分析:解析 UART 数据流,计算时钟周期/TIE,生成包含 6 个子图的综合分析报告。
硬件平台
- FPGA 芯片:XC7A35T-2FGG484I (Artix-7 系列)
- 时钟频率:50MHz (引脚 Y18)
- 接口定义:
- SPI 接口 (12.5MHz 时钟)
- SCLK: E16, MOSI: D14, MISO: E13, CS: F13
- AS6501 信号
- INT_N: C13 (低电平有效)
- REFCLK: A13 (输出 10MHz)
- UART 接口 (115200 baud, 8N1)
- TX: G16, RX: G15
- IO 扩展
- 4 个 LED: F19, E21, D20, C20 (共阳极,低电平点亮)
- 4 个按键:M13, K14, K13, L13 (低电平有效)
- 1 个复位按键:F20 (低电平有效)
- SPI 接口 (12.5MHz 时钟)
- BRAM 预估:约 15-20 / 50 Block RAMs (用于 10000×48 位结果存储)
SPI 通信参数
- 频率:12.5MHz
- 模式:CPOL=0, CPHA=1 (Mode 1)
- 数据传输:MSB 先行
- 时序要求:CS 拉高前,需距离最后一个 SCLK 下降沿半个周期的时间
- AS6501 协议格式:
- 单字节命令:
0x30= Power ON,0x18= Init - 写配置寄存器:
[0x80 + 地址][数据](2 字节) - 读结果寄存器:
[0x60 + 地址]←[数据](1 字节发送,1 字节接收) - 读配置寄存器:
[0x40 + 地址]←[数据](1 字节发送,1 字节接收)
- 单字节命令:

