2. Quartus工程建立与优化基线

在开始任何资源与功耗优化之前,必须先建立一个“可复现、可对比”的工程基线。所谓基线,是指在固定器件、固定 Quartus 版本、固定约束与固定编译策略下,工程所呈现的资源占用(ALM、寄存器、Block Memory、DSP)与功耗估算(总功耗、动态功耗、静态功耗)的初始数值。后续所有优化动作,都必须与这份基线做同口径对比,否则“优化了多少”无从判断。本节围绕工程创建、器件选型、综合与布局布线流程、基线报告生成四个环节展开,并给出可直接照做的操作与判读方法。

一、工程创建:把“可复现”写进工程结构

推荐使用 Quartus Prime 的 New Project Wizard 建立工程,并在创建阶段就确定目录结构。一个便于对比的工程目录通常包含:rtl/(源码)、constraints/(SDC 与引脚约束)、ip/(IP 生成文件)、scripts/(Tcl 脚本)、output_files/(编译产物)。工程名与顶层实体名保持一致,避免后续脚本引用混乱。

创建时需明确三项:顶层实体名、目标器件、EDA 工具链设置。若工程由脚本生成,可用如下 Tcl 片段固定工程参数,保证每次重建结果一致:

project_new top_baseline -overwrite
set_global_assignment -name FAMILY "Cyclone IV E"
set_global_assignment -name DEVICE EP4CE10F17C8
set_global_assignment -name TOP_LEVEL_ENTITY top_baseline
set_global_assignment -name VERILOG_FILE rtl/top_baseline.v
set_global_assignment -name SDC_FILE constraints/top_baseline.sdc
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
project_close

注意:-overwrite 会覆盖同名工程,适合在版本控制中反复重建;若需保留历史基线,应改为不同工程名或不同输出目录。

二、器件选型:先定“资源与功耗的量级”

器件选型直接决定基线的量级。以 Cyclone IV E 系列为例,EP4CE6、EP4CE10、EP4CE15 的逻辑单元(LE)数量分别约为 6K、10K、15K,Block Memory 与 DSP 资源也不同。选型时应先估算设计需求,再留出 20%~30% 余量,避免“刚好塞满”导致布局布线失败或时序恶化。

选型判断可参考以下经验:若设计以组合逻辑与控制为主,LE 是主要瓶颈;若含大量查找表、FIFO、缓存,则 Block Memory 更关键;若含乘法、滤波、矩阵运算,DSP 数量决定能否映射。器件选型一旦确定,后续所有资源与功耗数据都以此为基准,不应在优化中途随意更换器件,否则基线失去可比性。

三、综合与布局布线:固定编译策略

Quartus 的编译流程为 Analysis & Synthesis → Fitter(布局布线)→ Assembler → Timing Analysis → Power Analysis。要得到稳定基线,需固定以下设置:

  • 综合优化目标:Balanced 或 Area,二者资源结果不同,基线中必须记录所用选项。
  • Fitter 努力级别:Standard Fit 与 Auto Fit 的布局结果不同,建议基线统一使用 Standard Fit。
  • 时序约束:SDC 中至少给出主时钟周期,例如 create_clock -name clk -period 20.000 [get_ports clk],对应 50 MHz。
  • 引脚约束:固定引脚位置,避免每次编译引脚随机分配导致 I/O 功耗波动。

编译完成后,在 Compilation Report 中依次查看 Fitter → Resource Section 与 Power Analyzer → Summary,即可得到资源与功耗基线。若使用脚本,可用 quartus_map、quartus_fit、quartus_sta、quartus_pow 分步执行,便于在每一步后提取数据。

Quartus 工程基线建立流程与数据出口 ① 工程创建 顶层实体 / 目录结构 Tcl 固定工程参数 版本控制可重建 ② 器件选型 LE / Block Mem / DSP 预留 20%~30% 余量 确定资源量级 ③ 综合与布局布线 Synthesis → Fitter 固定优化目标与努力级别 SDC 时钟 + 引脚约束 ④ 基线报告 资源占用 功耗估算 时序余量 基线数据出口(Compilation Report 关键页) Fitter Resource ALM / 寄存器 Block Mem / DSP Power Analyzer Total / Dynamic Static / I/O Timing Analyzer Setup / Hold Slack Fmax 基线记录表 版本 / 器件 / 策略 数值 + 日期 基线对比原则:同器件、同版本、同约束、同编译策略 优化前记录 → 优化后重编译 → 逐项对比 ALM / 寄存器 / Block Mem / DSP / 总功耗 / 时序余量 任一条件变化,必须重新建立基线,否则差值不可信

四、生成资源与功耗基线报告

编译完成后,资源基线主要看 Fitter 报告中的 Total logic elements、Total registers、Total memory bits、Embedded Multiplier 9-bit elements 等条目。功耗基线则看 Power Analyzer Summary 中的 Total Thermal Power、Dynamic Thermal Power、Static Thermal Power。若未提供 VCD/SAIF 激励文件,Power Analyzer 会基于默认翻转率估算,此时应记录“估算模式”,并在后续优化中保持同一模式,避免因激励不同造成假差异。

建议将基线数据整理为一张可填写的记录表,示例如下(数值为示例,非实测):

项目示例值记录说明
器件EP4CE10F17C8固定不变
Quartus 版本Prime 20.1 Lite固定不变
综合优化目标Balanced固定不变
Fitter 努力级别Standard Fit固定不变
主时钟约束50 MHz(20 ns)SDC 固定
ALM / 寄存器1 240 / 1 860示例值
Block Memory18 432 bits示例值
DSP4 个 9-bit示例值
总功耗86.4 mW示例估算值
动态 / 静态功耗52.1 / 34.3 mW示例估算值
Setup Slack+2.35 ns示例值
基线报告应连同工程 Tcl 脚本、SDC 文件、编译日志一起归档。下次优化时,先复现基线,再改动单一变量(例如只改综合目标或只改时钟约束),这样才能把资源与功耗变化归因到具体动作上。
常见误区:在未固定引脚与时钟约束的情况下直接比较两次编译结果;或使用不同 Quartus 版本对比功耗。这两种做法都会引入额外变量,使基线失去参考价值。