项目概述
本项目构建了一套完整的 FPGA 系统,通过 SPI 接口实现对 AS6501 TDC 芯片的控制与数据读取。系统集成了 SPI 主控、控制逻辑、测试序列器、Block RAM 存储、UART 批量传输模块以及 Python 数据分析工具,支持从硬件配置到上位机分析的完整闭环流程。
核心流程为:上电初始化→寄存器配置与回读验证→启动测量→中断驱动连续采集(默认 10000 次)→结果暂存 Block RAM→按键触发 UART 批量上传→Python 解析并计算 Jitter。
核心特性
- 批量测量模式:连续采集 MAX_MEASUREMENTS 次(默认 10000)后自动停止,无需人工干预。
- Block RAM 存储:采用 Vivado Block RAM 推断,存储 48 位×10000 条测量数据,资源占用约 15-20 个 BRAM。
- 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 (低电平有效)
- 复位按键:F20 (低电平有效)
- SPI 接口 (12.5MHz)
- IO 电压:3.3V
SPI 通信参数
- 频率:12.5MHz
- 模式:CPOL=0, CPHA=1 (Mode 1)
- 传输顺序:MSB 先行
- 时序要求:CS 拉高前需预留半个 SCLK 周期时间
- 协议格式:
- 单字节命令:
0x30(Power ON),0x18(Init) - 写配置寄存器:
[0x80 + 地址][数据] - 读结果寄存器:
[0x60 + 地址]←[数据] - 读配置寄存器:
[0x40 + 地址]←[数据]
- 单字节命令:
项目结构
fpga_a7_tdc_jitter_test_solution/
├── rtl/
│ ├── top_module.v
│ ├── spi_master.v
│ ├── spi_controller.v
│ ├── test_sequencer.v
│ ├── result_ram.v
│ ├── uart_result_sender.v
│ ├── uart_tx.v
│ ├── uart_rx.v
│ └── clk_divider.v
├── sim/
│ ├── as6501_model.v
│ ├── tb_top_module.v
│ └── tb_top_module.gtkw
├── constraints/
│ └── fpga_constraints.xdc
├── scripts/
├── plans/
├── guides/
├── parse_tdc_data.py
└── README.md

