UniRTL: 统一代码与图实现鲁棒 RTL 表示学习¶
会议: ICML 2026
arXiv: 2605.31040
代码: https://github.com/cure-lab/UniRTL
领域: 代码智能 / 硬件设计
关键词: RTL 表示学习, 多模态预训练, CDFG, 性能预测, 代码检索
一句话总结¶
本文提出 UniRTL——通过联合学习 RTL 代码和控制数据流图(CDFG)的多模态统一表示,采用图感知分词器和分层训练策略,在硬件性能预测和代码检索任务上显著超越现有方法。
研究背景与动机¶
领域现状:RTL(寄存器传输级)表示学习是加速硬件设计流程的关键。现有方法要么仅用 RTL 代码(VeriDistill、DeepRTL2)要么仅用图结构(StructRTL)。
现有痛点:单一模态表示表达能力受限。代码隐含语义功能信息但缺乏完整结构依赖;图保留拓扑信息但语义信息稀疏。GraphCodeBERT 虽融合代码和数据流但对齐策略弱(仅变量级)且数据流不完整。
核心矛盾:如何设计真正的细粒度多模态对齐机制,充分利用 CDFG 的完整性和代码的语义互补性。
切入角度:采用 CDFG 而非简化数据流,它保留完整设计信息且可忠实转换回代码;用互相遮蔽建模实现代码-图细粒度对齐;构造图感知分词器让 Transformer 捕捉图结构微妙关系。
核心 idea:分层预训练框架——先预训练图感知分词器 → 文本-代码对齐热身 → 图融合,同时通过互相遮蔽建模在三模态间建立深层对齐。
方法详解¶
整体框架¶
UniRTL 想解决的核心问题是:单看 RTL 代码会丢结构依赖、单看图又语义稀疏,二者必须细粒度融合才能学到鲁棒表示。它的做法是把 Verilog 代码先编译成保留完整设计信息的控制数据流图(CDFG,经 Yosys→RTLIL→AST→CDFG),再用一个统一的 Transformer(CodeBERT 基座)把文本、代码、图三种模态喂进同一表示空间,靠"互相遮蔽"让三者彼此预测、彼此对齐。整个训练分层进行,最后接性能预测或代码检索两类下游任务。数据规模为 132,008 个 RTL 设计,其中 38,888 个成功转成 CDFG。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
A["Verilog 代码 → CDFG 构造<br/>Yosys→RTLIL→AST→CDFG"] --> B["图感知分词器<br/>节点嵌入(type/width/文本)→GIN→轻量 Transformer"]
B --> HT
subgraph HT["分层训练策略:按模态数据丰度排预训练顺序"]
direction TB
C["阶段1:预训练图感知分词器"] --> D["阶段2:文本-代码对齐热身<br/>互相遮蔽建模 20% token,互为监督"]
D --> E["阶段3:图融合<br/>互相遮蔽 20% 节点+token + Laplacian 位置编码"]
end
HT --> F["统一多模态表示<br/>下游:性能预测 / 代码检索"]
关键设计¶
1. 图感知分词器:让 Transformer 读懂 CDFG 的拓扑而非平铺节点
痛点在于 GraphCodeBERT 那种直接把变量节点平铺成序列的做法会丢掉图的结构关系,操作符、控制流这些元素也无从表达。UniRTL 为此设计了一个三步走的分词器:先给每个节点 \(v_i\) 拼一个初始嵌入 \(\mathbf{H}_{i}=\text{one-hot}(\text{type}(v_{i}))\parallel\text{width}(v_{i})\parallel\text{pca}(\phi_{\text{text}}(\text{desc}(v_{i})))\),把节点类型、位宽和文本描述一并编码进去;再用 GIN 沿边聚合捕捉局部依赖 \(\mathbf{L}_{i}^{(k)}=\text{MLP}^{(k)}((1+\epsilon^{(k)})\cdot\mathbf{L}_{i}^{(k-1)}+\sum_{j\in\mathcal{N}(i)}\mathbf{L}_{j}^{(k-1)})\);最后过一层轻量 Transformer 补全全局语境,得到结构感知的节点 token \(\{\mathbf{G}_{i}\}\)。GIN 负责保留拓扑、Transformer 负责全局上下文,二者互补,使得后续主干能像处理文本一样处理图,又不丢图的微妙结构。
2. 互相遮蔽建模:迫使代码与图互为监督信号
GraphCodeBERT 的变量级对齐只是定位变量、CircuitFusion 的粗粒度对比学习又太松,都不足以建立深层语义对应。UniRTL 改用"互相遮蔽"——文本-代码阶段随机遮蔽 20% 的 token,要求模型从互补模态把它们恢复出来;到图融合阶段则同时遮蔽 20% 的节点和 20% 的代码 token,联合预测原始节点类型与 token ID。为了在遮蔽下不丢图拓扑,节点还额外加了用图 Laplacian 特征向量构造的全局位置编码。因为被遮的内容只能靠另一模态补全,模型被逼着学会代码与图之间真正的细粒度对应,而不是各自独立编码。
3. 分层训练策略:按模态数据丰度排预训练顺序
文本-代码对有 132k,而图对只有 38.8k,如果一上来就做图融合,稀缺的图数据会让优化不稳定。UniRTL 因此把训练拆成三段:阶段 1 单独预训练图感知分词器;阶段 2 用全量文本-代码对做对齐热身(5 轮);阶段 3 才引入图做融合(300 轮)。这样既把丰富的文本-代码数据梯度榨干、为主干打好底子,又让图融合在一个已经对齐良好的表示空间上微调,规避了图数据不足带来的梯度震荡。
实验关键数据¶
主实验:性能预测(无 netlist)¶
| 方法 | Area MAE↓ | Area MAPE↓ | Area \(R^2\)↑ | Delay MAE↓ |
|---|---|---|---|---|
| StructRTL | 0.3649 | 0.06 | 0.7463 | 0.5414 |
| GraphCodeBERT | 0.8424 | 0.15 | 0.5207 | 0.6109 |
| CircuitFusion | 0.7762 | 0.14 | 0.6175 | 0.5272 |
| UniRTL | 0.3510 | 0.06 | 0.7682 | 0.3384 |
| UniRTL (w/o code) | 0.3671 | 0.07 | 0.7546 | 0.3584 |
| UniRTL (w/o graph) | 0.8818 | 0.15 | 0.5173 | 0.6375 |
消融实验:代码检索¶
| 模型 | Precision↑ | Recall↑ | F1↑ |
|---|---|---|---|
| DeepRTL2-Llama | 0.557 | 0.608 | 0.572 |
| GraphCodeBERT | 0.616 | 0.675 | 0.634 |
| CircuitFusion | 0.542 | 0.608 | 0.560 |
| UniRTL | 0.650 | 0.692 | 0.662 |
| UniRTL (w/o graph) | 0.630 | 0.683 | 0.644 |
关键发现¶
- 图的关键作用——去除图后(w/o graph)性能大幅下降(F1 从 0.662→0.644),证明 CDFG 完整信息的价值。
- 代码的补充作用——去除代码(w/o code)性能小幅下降(MAE 从 0.3510→0.3671)。
- 对齐策略有效性——相同图感知分词器下,细粒度互相遮蔽对齐远优于变量级对齐和粗对比学习。
亮点与洞察¶
- CDFG 完整性设计:相比 GraphCodeBERT 仅用数据流变量,UniRTL 用 CDFG 保留操作符、控制流等完整元素。
- 图感知分词器创新:通过 GIN+Transformer 组合而非直接平铺节点,有效捕捉图的"拓扑微妙性"。
- 分层与数据实用性:将不同模态的预训练数据丰度纳入设计,文本-代码热身既充分利用数据又为图融合预热。
局限与展望¶
- CDFG 转换限制——38.8k/132k 设计无法转换为 CDFG。
- 语言和规模限制——仅限 Verilog HDL;大规模工业设计的可扩展性未充分验证。
- 改进方向:扩展到 VHDL 等其他 HDL;更大的图对数据集;覆盖更广的 RTL 任务。
相关工作与启发¶
- vs GraphCodeBERT:用完整 CDFG 替代不完整数据流,引入图感知分词器,互相遮蔽而非变量对齐。
- vs CircuitFusion:UniRTL 用统一 Transformer 直接实现代码-图细粒度对齐,且 CDFGs 覆盖完整设计。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 多模态 RTL 表示学习的系统化改进。
- 实验充分度: ⭐⭐⭐⭐⭐ 覆盖 2 大下游任务 + 多个设置 + 完整消融。
- 写作质量: ⭐⭐⭐⭐⭐ 动机清晰、方法阐述严谨。
- 价值: ⭐⭐⭐⭐⭐ 为硬件设计自动化提供通用基础模型,性能预测和代码检索均实现 SOTA。