4. 开发环境与工程骨架搭建

Agilex PCIe互连系统的开发起点并不是写RTL,而是把工具链、器件、开发板、IP参数和约束文件这五件事对齐。任何一项错位,都会在编译或上板阶段以难以定位的报错形式暴露出来。本章按实际工程顺序展开:先确定Quartus Prime Pro版本,再匹配器件与开发板,然后用参数化方式生成PCIe IP,写出引脚与时钟约束初稿,最后跑通编译并学会读报错。

4.1 Quartus Prime Pro版本选择

Agilex系列器件只支持Quartus Prime Pro Edition,Standard Edition不支持Agilex。因此第一步是确认版本分支正确。版本选择的核心依据是三条:器件支持、IP版本、以及PCIe Hard IP对应的协议特性。

Agilex的PCIe Hard IP在不同Quartus版本中支持的PCIe规范代际和速率不同。例如较早的Pro版本可能只支持到PCIe Gen4 x16,而较新的版本才开放Gen5。选择时应以Intel官方“Device Support List”和“IP Release Notes”为准,而不是凭经验。一个稳妥的做法是:先确定目标开发板上的器件型号,再反查该器件在哪些Quartus Pro版本中被正式支持,最后在该版本区间内选择较新的稳定版。

版本安装时建议勾选对应器件家族的支持包,避免安装后才发现缺少Agilex器件库。同时注意,Quartus Pro的IP核(尤其是PCIe Hard IP)与版本强绑定,跨版本迁移工程时IP需要重新生成,不能直接复制.qip文件。

4.2 Agilex器件与开发板匹配

器件与开发板的匹配要落到具体型号,而不是只写“Agilex”。以常见的Agilex F系列开发板为例,板上器件可能是AGF014、AGF027等,不同型号的收发器数量、Hard IP位置、可用Bank都不同。匹配时需要确认三件事:

  • 器件型号与开发板原理图一致,包括封装和速度等级;
  • PCIe Hard IP所在的Bank与板上PCIe金手指或M.2接口的物理连接一致;
  • 参考时钟来源(如100MHz差分)与板上晶振或时钟芯片输出一致。

如果器件选错,最典型的报错是引脚分配失败或Hard IP无法布局。因此在创建工程时,器件选择必须精确到完整型号,例如AGF027BB23AE2V这类带封装和速度等级的字符串,而不是只选家族。

4.3 PCIe IP参数化生成

Agilex PCIe Hard IP通过Parameter Editor生成。关键参数包括:PCIe规范版本(Gen3/Gen4/Gen5)、链路宽度(x1/x4/x8/x16)、参考时钟频率、BAR配置、以及是否启用SR-IOV等。这些参数一旦确定,会直接影响后续约束和软件驱动。

生成时建议先明确应用场景:如果是数据采集卡,通常选Gen4 x8、单BAR、64位地址;如果是加速卡,可能需要多BAR和较大BAR空间。参数设置完成后,IP会输出一组文件,包括.ip、.qip、示例顶层和约束模板。其中约束模板是后续引脚和时钟约束的重要参考。

IP生成后不要急于修改示例顶层,先编译一次原始示例,确认工具链和器件匹配无误,再在此基础上裁剪。

4.4 引脚与时钟约束初稿

约束初稿的目标是让工程能通过编译并产生可上板的引脚分配。引脚约束主要来自开发板原理图,包括PCIe参考时钟差分对、复位信号、以及PCIe Hard IP的专用引脚。时钟约束则要覆盖参考时钟频率和Hard IP输出时钟。

一个典型的SDC初稿包含参考时钟定义和派生时钟约束。例如参考时钟为100MHz差分:

create_clock -name refclk -period 10.0 [get_ports {pcie_refclk_p}]
derive_pll_clocks
derive_clock_uncertainty

引脚约束则通过Assignment Editor或QSF文件写入,例如:

set_location_assignment PIN_AB12 -to pcie_refclk_p
set_location_assignment PIN_AB13 -to pcie_refclk_n
set_instance_assignment -name IO_STANDARD "HCSL" -to pcie_refclk_p

初稿阶段不必追求完整时序收敛,但必须保证引脚位置、IO标准、时钟定义三者一致。常见错误是参考时钟IO标准写成LVDS而非HCSL,导致编译通过但上板无链路。

4.5 编译流程与常见报错定位

Quartus Pro的编译流程为Analysis & Synthesis → Fitter → Assembler → Timing Analyzer。PCIe工程中,报错最集中的两个阶段是Fitter和Timing Analyzer。

Fitter阶段常见报错包括:引脚位置冲突、Hard IP无法放置、参考时钟未连接到专用时钟引脚。定位方法是查看Fitter报告中的“Resource Section”和“Pin-Out File”,确认Hard IP实例是否被正确放置。若报错提示“cannot place PCIe Hard IP”,通常是因为器件型号选错或Bank位置与引脚约束矛盾。

Timing Analyzer阶段常见报错是参考时钟未约束或派生时钟未定义,导致时序报告出现大量未约束路径。此时应检查SDC是否覆盖了所有Hard IP输出时钟,必要时用derive_pll_clocks自动派生。

下面这张图把本节的关键对象和它们之间的依赖关系整理成一张工程骨架关系图,便于在搭建时逐项核对。

Agilex PCIe 工程骨架搭建关系图 Quartus Prime Pro 版本分支 / 器件支持 Agilex 器件型号 封装 / 速度等级 / Bank 开发板原理图 PCIe接口 / 时钟源 PCIe Hard IP 参数化生成 引脚约束 QSF 位置 / IO标准 时钟约束 SDC 参考时钟 / 派生时钟 编译与报错定位 Fitter / Timing 核对顺序:版本 → 器件 → 开发板 → IP参数 → 约束 → 编译;任一环节不一致都会在Fitter或Timing阶段暴露

4.6 工程骨架检查清单

在进入RTL开发前,建议用下面这份清单逐项确认,避免把环境问题带入后续调试。

检查项确认内容常见问题
Quartus版本Pro Edition,支持目标Agilex器件误用Standard Edition
器件型号完整型号含封装与速度等级只选家族,Fitter失败
开发板匹配原理图与器件、Bank、时钟源一致参考时钟引脚接错
PCIe IPGen/宽度/BAR与需求一致参数与驱动不匹配
引脚约束位置与IO标准正确IO标准写成LVDS
时钟约束参考时钟与派生时钟已定义未约束导致时序报告异常
编译结果Fitter与Timing无严重报错忽略警告直接上板