3. Quartus DDR IP核体系与生成流程

在Quartus Prime中,DDR接口设计几乎不会从零手写RTL,而是以IP核为起点。Intel FPGA的DDR IP统一收纳在IP Catalog的Memory Interfaces and Controllers分类下,按协议族分为DDR3、DDR4、LPDDR4(以及DDR2、LPDDR3、QDR等)多个条目。理解这些IP核的分类逻辑、参数配置界面、接口信号和生成文件结构,是后续校准工程能够顺利推进的前提——因为校准脚本、引脚约束、时序报告都直接依赖IP生成时确定的参数与端口命名。

一、IP核分类与选型依据

IP Catalog中的DDR条目并非按“速率”简单排列,而是按协议 + 控制器/PHY组合方式组织。常见三类:

  • DDR3 SDRAM Controller with UniPHY / ALTMEMPHY:面向Cyclone V、Arria V、Stratix V等器件,UniPHY是主流选择,支持硬核或软核控制器。
  • DDR4 SDRAM Controller with UniPHY:面向Arria 10、Stratix 10等,Arria 10起PHY部分大量硬核化,I/O PLL与SERDES集成度更高。
  • LPDDR4 Controller with UniPHY:面向低功耗场景,Arria 10/Stratix 10支持,接口电压1.1V,采用双通道(Channel)结构。

选型时先确认三件事:器件系列是否支持该协议、目标数据速率是否落在PHY支持范围内、封装/引脚是否满足DDR专用I/O Bank的分配要求。例如Arria 10的DDR4硬核PHY最高可到2666 Mbps,而Cyclone V的DDR3软核PHY通常限制在1066~1600 Mbps区间。选错IP条目,后续参数界面里根本找不到对应速率档位。

二、参数配置界面的关键页签

双击IP条目进入Parameter Editor,界面通常分为Memory Settings、Controller Settings、PHY Settings、Board Settings、Example Design等页签。真正影响校准的是以下几组参数:

  • Memory Settings:Memory vendor、Memory device speed grade、Data width、Row/Column/Bank地址位宽、CAS latency。这些必须与板上颗粒手册一致,否则校准阶段读写窗口会整体偏移。
  • Controller Settings:Controller type(Hard/Soft)、Efficiency、Reorder buffer深度、是否使能ECC。硬核控制器延迟低但灵活性差,软核可调但占用逻辑资源。
  • PHY Settings:Memory clock frequency、PLL reference clock frequency、Rate(Full/Half)、DQS group数量。这里决定PLL分频比和DQS/DQ的组映射关系。
  • Board Settings:Board skew、Package skew、是否启用Board Deskew。这些值直接进入PHY的延迟补偿计算,是校准能否收敛的关键输入。
参数界面中凡是标注“Affects Fitter”或“Affects Timing”的选项,改动后必须重新全编译,不能只跑增量。DDR IP的引脚分配和PHY约束在生成时即固化,增量编译容易遗漏约束更新。

三、接口信号说明

生成的IP顶层端口可分为四组:时钟与复位(pll_ref_clk、global_reset_n、soft_reset_n)、控制器用户接口(avl_ready、avl_burstbegin、avl_addr、avl_wdata、avl_rdata等Avalon-MM信号)、PHY与外部颗粒接口(mem_dq、mem_dqs、mem_addr、mem_ba、mem_cs_n、mem_cke、mem_odt等)、状态与校准接口(local_cal_success、local_cal_fail、afi_clk、afi_reset_n)。其中afi_*是PHY与控制器之间的内部接口,用户一般只关心Avalon-MM侧和校准状态位。

需要特别注意的是local_cal_success与local_cal_fail:前者拉高表示PHY内部校准(DQS centering、读写leveling)完成,后者表示失败。在校准工程中,这两个信号通常接到LED或SignalTap,作为判断DDR是否可用的第一手依据。

Quartus DDR IP 生成流程与文件结构 IP Catalog 分类 DDR3 UniPHY DDR4 UniPHY LPDDR4 UniPHY 按协议 + 器件系列筛选 Parameter Editor Memory Settings(颗粒参数) Controller Settings(硬/软核) PHY Settings(频率/位宽) Board Settings(skew/deskew) 生成文件结构 ddr3_top.v / .qip(顶层与IP清单) ddr3_phy.v / ddr3_controller.v ddr3_p0_pin_assignments.tcl ddr3_p0.sdc(时序约束) example_design/(参考工程) IP 顶层接口信号分组 时钟与复位 pll_ref_clk global_reset_n soft_reset_n afi_clk / afi_reset_n Avalon-MM 用户接口 avl_ready / avl_burstbegin avl_addr / avl_wdata avl_rdata / avl_rdata_valid 读写命令与数据通道 PHY 外部颗粒接口 mem_dq / mem_dqs mem_addr / mem_ba mem_cs_n / mem_cke mem_odt / mem_clk 校准状态接口 local_cal_success local_cal_fail cal_busy 接LED / SignalTap 观察

四、生成文件结构与后续使用

点击Generate后,Quartus会在指定目录下输出一组文件。以DDR3 UniPHY为例,典型结构如下:

ddr3_top/
├── ddr3_top.v              // 顶层例化,含PLL与PHY
├── ddr3_top.qip            // IP清单,加入工程
├── ddr3_phy.v              // PHY层RTL
├── ddr3_controller.v       // 控制器RTL
├── ddr3_p0_pin_assignments.tcl  // 引脚分配脚本
├── ddr3_p0.sdc             // 时序约束
├── ddr3_p0_report_timing.tcl
└── example_design/         // 参考工程与测试激励

其中ddr3_p0_pin_assignments.tcl必须在全编译前通过source命令导入,否则Fitter无法把mem_*信号分配到DDR专用Bank;ddr3_p0.sdc则定义了PHY内部时钟与外部颗粒的时序关系,校准阶段读取的时序余量就来自这里。example_design中的参考工程可以直接编译下载,用于验证IP本身是否配置正确——建议在接入自研逻辑前先跑通example design,确认local_cal_success能稳定拉高。

生成文件中的引脚分配脚本与具体器件封装绑定。若中途更换器件型号或封装,必须重新生成IP,不能手动改tcl中的引脚编号,否则PHY的DQS组映射会与硬件不一致,校准必然失败。

五、从IP生成到校准的衔接点

IP生成完成后,工程进入“可编译但未校准”状态。此时需要关注三个衔接点:第一,确认afi_clk频率与用户逻辑时钟匹配,Avalon-MM接口的读写时序以afi_clk为基准;第二,把local_cal_success接入复位释放逻辑,校准未完成前不要向DDR发起读写;第三,保存生成时的参数配置(.qsys或.ip文件),后续调整Board skew或PLL参考时钟时,需要回到Parameter Editor重新生成,而不是直接改RTL。

理解IP核的分类、参数页签、信号分组和文件结构,本质上是为校准建立“可追溯的起点”。校准中遇到的读写窗口偏移、DQS捕获失败、校准超时等问题,往往可以回溯到生成阶段的某个参数设置。把生成流程走扎实,后续的SignalTap观测和时序收敛才有明确的参照系。