如何准备设计以进行硬件加速?
解读
硬件加速(Hardware Acceleration)在国内芯片验证流程里通常指“将可综合的 RTL 或部分验证环境映射到 Palladium、Zebu、HAPS、VU19P 等国产/进口加速平台”,以 MHz 级速度跑长向量、操作系统启动、PCIe 枚举、视频帧级场景等。
面试官问“如何准备设计”,重点不在“平台怎么跑”,而在“RTL 与验证环境能否干净地综合、能否稳定时钟、能否快速定位问题”。
一句话:让设计“像 FPGA 一样可综合、像 ASIC 一样可追踪、像验证平台一样可控制”。
知识点
- 可综合子集:阻塞/非阻塞、initial、wait、#delay、force/release、跨模块层次引用、系统函数、四态不可综合语法。
- 时钟复位策略:同源时钟、门控时钟使能、无毛刺复位、异步复位同步释放、时钟分频器可旁路。
- 存储器替换:SRAM → SRAM-Wrapper → SRAM-FPGA-model → 行为 SRAM;ROM 用 $readmemh 初始化文件。
- 黑盒与白盒:第三方 IP 提供硬核网表或加密 RTL 时,用空壳 wrapper 加 pragma 标记 dont_touch,避免综合工具优化掉接口。
- 端口净化:inout 端口在顶层用 IOBUF 显式拆分,避免工具推断三态;PAD 相关逻辑用宏隔离。
- 约束与 SDC:时钟定义、多周期路径、false path、set_case_analysis、input/output delay,国内流片厂要求 SDC 与 FPGA 约束同源。
- 扫描链与 DFT:加速阶段常旁路扫描,但需保留 muxed-clock 结构,防止功能模式跑飞。
- 低功耗单元:UPF/CPF 中的 isolation、retention、power switch 在综合阶段用仿真模型替代,避免 X 态传播。
- 验证环境裁剪:UVM 的 driver、monitor 用 synthesizable transactor(SVT)替代,scoreboard 留在软件侧,减少 gate count。
- 调试设施:触发器链、LA 探针、信号黑名单、信号分组、波形压缩格式(FSDB → EVCD),国产加速平台要求信号名长度 ≤ 256 字符。
答案
硬件加速前的设计准备分五步:
- 语法净化:用 SpyGlass、VCLP 或国产睿思晶芯 RuleDeck 跑可综合检查,清除 initial、#delay、force、$display 等非综合语句;把跨模块引用改成接口信号。
- 时钟复位重构:
- 统一时钟源,所有衍生时钟用 BUFG/PLL wrapper 包一层,并在 wrapper 内留旁路 mux,保证加速平台可强制同源;
- 复位树使用“异步复位同步释放”电路,并在顶层留 rst_n 输入管脚,方便全局拉齐。
- 存储器替换:
- 与 Memory Compiler 团队确认 SRAM 接口时序,生成行为模型;
- 在顶层用 `ifdef FPGA_EMU 宏隔离,把 SRAM 实例换成 FPGA Block RAM 或平台提供商的 SRAM-FPGA 模型;
- ROM 初始化文件用 $readmemh 路径相对化,确保编译服务器与加速服务器路径一致。
- IP 与 PAD 处理:
- 第三方 PHY、SerDes 等硬核用黑盒 wrapper,仅留信号级接口,避免综合工具优化;
- PAD 逻辑用 `ifdef PAD_OFF 宏整体 disable,防止三态推断;
- 对国产加速卡(如复旦微、京微齐力)需额外提供 IO 标准(LVCMOS18/25)约束文件。
- 调试与可追溯:
- 在 RTL 中插入“探针模块”,对关键总线(AXI、PCIe、DDR)做 32bit 压缩打包,减少波形 dump 量;
- 用 $fsdbDumpvars 的层次开关,结合国产华大九天的 nWave Viewer,提前验证信号名长度、转义字符合规;
- 输出文件清单:filelist.f、时钟约束 sdc、复位序列 rst_vec、探针分组 signal_group.tcl,一并交付给加速平台 AE。
完成以上五步后,跑一轮“FPGA 综合 + 时序报告 + 静态时序分析”,建立时间裕量 ≥ 20 %、保持时间无违例,即可认为设计已准备好进入硬件加速阶段。
拓展思考
- 混合语言场景:若设计含大量 SystemVerilog 断言(SVA),需评估是否用综合属性
synthesize_off屏蔽,还是转成 Formal 平台单独跑;国内部分团队尝试把 SVA 转成可综合的观察器电路,实现“加速 + 在线断言”双模式。 - 多芯片分区:超大规模 SoC 无法单颗 VU19P 容纳,需按子系统(NOC、GPU、AI-Core)分区,通过 CCIX 或 AXI-CHIP2CHIP 互联;分区后需引入“时钟比率适配器”处理跨芯片异步,防止亚稳态在加速平台暴露成偶发死机。
- 功耗向量回注:加速跑出的开关活动(SAIF)要回注给 PT-PX 做功耗 sign-off,但国内 Foundry 提供的 7nm/5nm 库对 SAIF 版本有要求(2.1 vs 2.2),需提前与 CAD 团队对齐脚本。
- 安全与加密:国产加速平台若部署在云端,需对 RTL 做 AES-128 加密,综合工具(Synplify Premier)支持 encrypted RTL flow,但加密后调试可见度下降,需权衡“安全”与“调试效率”。
- 持续集成:在 GitLab-CI 里增加“emu_compile” stage,每晚自动跑综合 + 布局布线 + 静态时序,若时序违例 > 0 则邮件告警,把硬件加速准备纳入 DevOps,减少流片前“last minute 综合不收敛”风险。