2. 开发环境与工程骨架搭建
高速采集与实时处理工程能否顺利推进,很大程度上取决于第一天的环境是否干净、骨架是否可综合、时钟与复位是否规划清楚。本节围绕 Quartus Prime Pro、Platform Designer、Agilex 开发板选型、时钟与复位规划,以及可综合采集处理工程模板的建立,给出一条可直接落地的路径。所有器件型号、引脚、频率与参数均为教学示例,实际使用时须以所选开发板原理图和器件手册为准。
一、工具链与版本对齐
Agilex 系列(含 Agilex 7 F/I/M 系列)必须使用 Quartus Prime Pro 版本,Standard 版本不支持该器件族。建议统一使用同一大版本,例如 Quartus Prime Pro 24.x,并同步安装对应版本的 Agilex 器件支持包、ModelSim/Questa Intel FPGA 版以及 Platform Designer。版本不一致是后续 IP 升级、编译报错和时序收敛异常的高频原因。
安装完成后,先做一次最小验证:新建工程,器件选择与开发板一致的型号(示例:AGFB014R24A2E2V,Agilex 7 F 系列,R24 封装,速度等级 2,E 后缀为工程样品标识),编译一个空顶层,确认 Assembler 与 Timing Analyzer 可正常跑通。这一步能提前暴露许可证、器件库缺失等问题。
二、开发板选型要点
选板不是看主频高低,而是看与采集链路匹配的硬资源。建议按以下维度核对:
- 高速收发器:确认 GT 通道数量、支持速率与参考时钟来源。若采集前端为 JESD204B/C ADC,需核对收发器是否支持所需 lane 速率与 Subclass 模式。
- 外部存储:DDR4/DDR5 或 HBM 的位宽与带宽,决定能否缓存连续采样数据。示例:2 通道 1 GSPS、14 bit,原始数据率约 28 Gbps,需 DDR4 至少 64 bit@2400 Mbps 才能留出余量。
- 时钟资源:板载晶振频率、可编程时钟芯片(如 Si5341)输出路数、是否支持收发器专用参考时钟。
- 扩展接口:FMC/FMC+、HSMC 或高速排针,用于接采集子卡。
- 调试接口:JTAG、UART、以及可用于 Signal Tap 的预留引脚。
三、时钟与复位规划
时钟规划的核心是“分域、定源、留余量”。建议把时钟分为四类:
- 收发器参考时钟:由专用时钟引脚或板上时钟芯片提供,示例 156.25 MHz,抖动要求最严,不可与逻辑时钟混用。
- 采集数据时钟:由 ADC 随路时钟或收发器恢复时钟产生,用于驱动采集数据通路。
- 处理时钟:驱动 DSP/算法逻辑,示例 250 MHz,需评估时序余量。
- 系统管理时钟:50 MHz 或 100 MHz,用于配置、状态机、UART 等慢速逻辑。
复位规划要与时钟域一一对应。推荐使用“上电复位 + 锁相环锁定指示 + 软复位”三级结构:PLL 未锁定前保持复位有效,锁定后释放;软复位由控制寄存器触发,用于运行中重新初始化采集通路。跨时钟域复位释放必须做同步处理,避免亚稳态。
四、可综合采集处理工程模板
工程模板的目标是“打开即编译、编译即可综合、综合后有时序报告”。建议目录结构如下:
agilex_acq_template/
├── prj/ # Quartus 工程文件
├── rtl/
│ ├── top.sv # 顶层,仅做例化与引脚
│ ├── clk_rst/ # 时钟与复位生成
│ ├── acq/ # 采集通路
│ ├── proc/ # 实时处理
│ └── mgmt/ # 配置与状态
├── ip/ # Platform Designer 生成
├── sdc/ # 时序约束
├── tb/ # 仿真
└── scripts/ # 编译与约束脚本
顶层只保留例化与引脚分配,所有功能下沉到子模块。时钟与复位模块输出统一的 clk/rst_n 组,供各域使用。采集通路建议采用 valid/ready 握手,处理通路采用 valid 流式接口,管理通路采用寄存器读写接口。这样后续替换 ADC 或算法时,接口不变,改动局部化。
Platform Designer 用于搭建互联骨架:把采集 DMA、片上 RAM、寄存器文件、JTAG Avalon Master 等挂到 Avalon-MM 总线上,生成系统后导出到 Quartus 工程。注意在 Platform Designer 中为每个时钟域单独分配时钟,并检查地址映射是否冲突。
五、时序约束与首次编译
SDC 文件至少包含:主时钟定义、生成时钟定义、输入输出延迟、跨时钟域 false path 或 set_max_delay。示例:
create_clock -name sys_clk -period 20.000 [get_ports clk_50m]
create_clock -name tx_clk -period 6.400 [get_ports refclk_156m]
derive_pll_clocks
derive_clock_uncertainty
set_false_path -from [get_clocks sys_clk] -to [get_clocks tx_clk]
首次编译后重点看三份报告:Compilation Report 中的 Fitter 资源占用、Timing Analyzer 的 Setup/Hold 摘要、以及 Clock 部分的时钟树。若出现未约束时钟或跨域路径未处理,先补约束再谈优化。
六、工程模板检查清单
| 检查项 | 合格标准 | 常见问题 |
|---|---|---|
| 器件型号 | 与开发板一致,Pro 版本支持 | 误选 Standard 器件库 |
| 时钟约束 | 所有时钟均有 create_clock 或 derive | 遗漏收发器参考时钟 |
| 复位同步 | 跨域复位释放有同步器 | 异步释放导致亚稳态 |
| 接口协议 | 采集/处理/管理接口固定 | 接口随算法改动而变 |
| Platform Designer | 地址无冲突,时钟域独立 | 多时钟域共用同一时钟 |
| 首次编译 | 无未约束时钟,时序报告可读 | 忽略跨域路径告警 |