4. 开发环境搭建与工程创建
Agilex 系列 FPGA 属于 Intel(现 Altera)高端产品线,其开发流程与 Cyclone、Arria 系列存在明显差异:器件支持、IP 生成、引脚与时钟约束都依赖 Quartus Prime Pro 版本,标准版(Standard Edition)并不支持 Agilex。因此本节的核心任务是搭建一套可复现的工程骨架,让后续的视频图像处理模块能够稳定地编译、下载与调试。
一、工具链组成与版本选择
一套完整的 Agilex 开发环境由四部分构成,它们之间存在明确的依赖顺序:
- Quartus Prime Pro:负责综合、布局布线、时序分析与比特流生成,是工程的主入口。
- Platform Designer(原 Qsys):用于搭建含 HPS、AXI/AVALON 互联、DMA、视频流水线等子系统,生成可例化的 IP 子系统。
- Agilex 开发板支持包:包含板级器件文件、引脚分配参考、板载时钟与存储器信息,通常以
.qdz或板级 XML 形式提供。 - 器件库与 IP 库:Agilex 器件支持需要单独安装,且必须与 Quartus 版本严格对应。
版本匹配是首要原则。例如 Quartus Prime Pro 23.4 只能搭配同版本的 Agilex 器件支持与 IP 库,混用不同版本会导致 IP 无法生成或编译报错。安装时建议勾选“Agilex 器件支持”与“Stratix 10 / Agilex IP”相关组件,并预留至少 80 GB 磁盘空间。
二、工程创建的关键步骤
新建工程时,器件选择必须精确到具体型号与速度等级。以常见开发板为例,器件可能为 AGFB014R24A2E2V 或 AGIB027R29A1E2V,速度等级、封装、温度等级都会影响时序收敛。工程目录建议采用如下结构,便于版本管理与多人协作:
agilex_video/
├── prj/ # .qpf / .qsf 工程文件
├── rtl/ # 用户 Verilog/SystemVerilog 源码
├── ip/ # Platform Designer 生成的 .ip 与 .qsys
├── constraints/ # .sdc 时序约束、.qsf 引脚约束
├── bsp/ # 开发板支持包与板级文件
└── output_files/ # 编译输出与报告
创建工程后,先在 Assignments → Device 中确认器件,再通过 Assignments → Settings → IP Catalog 检查 IP 搜索路径是否包含开发板 BSP 目录。若 BSP 未正确加载,Platform Designer 中将看不到板载 DDR4、HDMI、视频接口等预定义 IP。
三、Platform Designer 子系统搭建
视频图像处理系统通常需要“数据搬运 + 视频流水线 + 控制”三类组件。在 Platform Designer 中,建议先搭建一个最小可运行子系统:
- 添加 Clock Bridge,将外部参考时钟转换为系统时钟与视频像素时钟。
- 添加 Reset Bridge,统一复位域,避免跨时钟域复位释放不同步。
- 添加 AXI/AVALON-MM 互联,连接 HPS 或 Nios 控制接口与视频 IP。
- 添加 DMA 或 Frame Buffer IP,用于图像帧的读写。
- 添加 Video Pipeline IP(如 Clipper、Scaler、Color Space Converter),构成处理链。
生成子系统时,注意勾选“Generate HDL”并选择与工程一致的仿真模型。生成完成后,Platform Designer 会输出 .qsys、.ip 与 .sopcinfo,其中 .sopcinfo 可用于软件端地址映射。
四、引脚约束与时钟规划
引脚约束直接决定信号能否正确进出器件。Agilex 的 I/O Bank 电压、差分对、收发器通道都有严格规则。建议在 Pin Planner 中先导入 BSP 提供的引脚分配参考,再逐条核对:
- 视频输入/输出接口(如 HDMI、MIPI、SDI)的差分对必须分配到支持相应标准的 Bank。
- DDR4 接口需使用专用 I/O 与硬核控制器,引脚位置由 BSP 固定,不可随意更改。
- 时钟输入应分配到专用时钟引脚(CLKIN),并确认参考时钟频率与 PLL 配置一致。
时钟规划是本节最容易被忽视却影响最大的环节。一个典型的视频系统至少包含:
| 时钟域 | 典型频率 | 用途 | 约束方式 |
|---|---|---|---|
| 系统时钟 | 100 MHz | 控制、寄存器、DMA | create_clock |
| 像素时钟 | 148.5 MHz | 1080p60 视频流 | create_clock + create_generated_clock |
| DDR 参考时钟 | 200 MHz | DDR4 控制器 | 由硬核 IP 自动约束 |
| 收发器参考时钟 | 125 MHz | 高速串行接口 | create_clock + 专用引脚 |
在 .sdc 文件中,至少应写入主时钟定义、生成时钟定义、跨时钟域路径的 set_clock_groups 或 set_false_path。例如:
create_clock -name sys_clk -period 10.000 [get_ports sys_clk]
create_clock -name vid_clk -period 6.734 [get_ports vid_clk]
set_clock_groups -asynchronous -group {sys_clk} -group {vid_clk}
跨时钟域信号必须经过同步器或异步 FIFO,不能仅靠 set_false_path 掩盖问题。时序分析报告中的 Setup/Hold Slack 应全部为正,若出现负 Slack,优先检查时钟约束是否完整、跨时钟域路径是否已正确处理。
五、编译与验证闭环
完成上述配置后,执行全编译(Compilation)。建议按“Analysis & Synthesis → Fitter → Timing Analyzer → Assembler”顺序逐步检查。关键观察点包括:
- Fitter 报告:确认引脚分配无冲突,I/O Bank 电压与标准匹配。
- Timing Analyzer:确认所有时钟域均已约束,无未约束路径。
- Assembler:生成
.sof文件,可通过 Quartus Programmer 下载到开发板。
若编译通过但下载后无视频输出,应优先检查时钟是否锁定(PLL locked 信号)、复位是否释放、DDR 校准是否完成。这些状态通常可通过 SignalTap 或板载 LED 观察。