OpenLS-DGF:开源逻辑综合数据集生成框架,赋能EDA机器学习研究 1. 项目概述与核心价值在芯片设计的漫长流水线中逻辑综合Logic Synthesis扮演着承上启下的关键角色。它负责将工程师用硬件描述语言如Verilog编写的、描述电路功能的“高级蓝图”翻译并优化成由具体逻辑门如与门、或门组成的“施工图纸”——门级网表。这个过程的优化质量直接决定了最终芯片的面积、速度和功耗。传统上这个过程高度依赖EDA工具内置的启发式算法和工程师的经验是一个反复迭代、耗时费力的“手艺活”。近年来机器学习ML特别是擅长处理图结构数据的图神经网络GNN为这个领域带来了新的曙光。想象一下如果我们能训练一个模型让它像一位经验丰富的电路设计师一样“看懂”电路的结构并预测不同优化策略的效果甚至自动生成更优的电路这无疑将极大提升设计效率。然而这个美好愿景面临一个根本性挑战数据。机器学习模型不是凭空学会技能的它需要大量、高质量、多样化的“习题集”进行训练。在逻辑综合领域现有的数据集要么是商业工具内部的中间文件难以获取和复用要么是针对单一任务如面积预测定制的缺乏通用性。这就好比你想训练一个全能运动员却只给他跑步的训练数据结果他可能跑得很快但完全不会跳高或投掷。OpenLS-DGFOpen Logic Synthesis - Dataset Generation Framework正是为了解决这个“数据荒”问题而生的一个自适应开源数据集生成框架。它的核心目标非常明确为逻辑综合领域的机器学习研究提供一个标准化、多样化且可扩展的“数据工厂”。这个框架的价值不仅在于它一次性生成了包含超过96.6万个布尔电路的海量数据集OpenLS-D-v1更在于其背后一整套可复现、可定制、可适配不同下游任务的数据生成与管理哲学。1.1 框架设计的核心思路从“专用数据集”到“自适应数据源”在深入技术细节之前我们有必要理解OpenLS-DGF设计理念上的根本转变。传统的数据集生成往往是“任务驱动”的我需要做电路延迟预测那我就跑一遍综合流程把电路结构和对应的延迟值记录下来形成一个“电路-延迟”配对的数据集。这个数据集对于延迟预测任务可能是完美的但如果你想用它来做电路结构分类或者评估不同优化序列的优劣就会非常吃力因为数据中缺乏必要的标签或多样性。OpenLS-DGF采用了另一种思路我称之为“流程驱动全景记录”。它不再为某个特定任务生成最终答案而是完整地封装了逻辑综合的标准流程——从布尔表示、逻辑优化到技术映射。在这个过程中它像一个尽职的档案管理员将每一个步骤产生的中间结果不同结构的布尔电路、不同工艺库映射后的网表、对应的时序面积信息都原原本本地保存下来并以两种格式存储人类工程师熟悉的Verilog和机器学习模型友好的GraphML。这种做法的精妙之处在于解耦与复用。数据生成流程How与下游任务需求What被解耦了。框架只负责高质量、标准化地生产“原料”各种中间表示电路及其属性而研究人员可以根据自己的任务分类、预测、排序等像在超市选购食材一样从这个统一的“原料库”OpenLS-D-v1数据集中提取并组合出自己需要的“子数据集”。这种自适应能力使得同一份基础数据能支撑起逻辑综合领域内纷繁复杂的机器学习应用场景极大地提升了数据的利用率和研究效率。2. OpenLS-DGF框架深度解析理解了框架的设计哲学我们再来拆解它的具体实现。OpenLS-DGF不是一个简单的脚本集合而是一个高度工程化、模块化的系统。它的完整工作流如图2所示涵盖了从原始设计输入到最终数据集打包的七个核心步骤。下面我将结合自己处理类似电路数据的经验逐一剖析每个步骤的技术要点与设计考量。2.1 数据生成七步法从RTL到机器学习就绪数据整个流程始于一个用Verilog等语言描述的寄存器传输级RTL设计。框架的目标是将这个“高级描述”转化为一系列可供机器学习模型消费的图数据。第一步通用工艺电路生成这是所有后续处理的起点。输入的设计可能格式不一Verilog, AIG, BLIF为了统一处理框架首先使用开源综合工具Yosys将这些设计全部“翻译”成一种中间表示——通用工艺电路Generic Technology Circuit, GTG。你可以把GTG理解为一个“最大公约数”的电路表示它包含了一组功能完备的基本逻辑单元如表I所示从简单的与门、非门到复杂的AOI21、MUX21等。选择GTG作为起点的好处是它抹平了不同输入源的差异为后续步骤提供了一个稳定、统一的起跑线。同时它保留了RTL设计中一些粗粒度的结构信息这些信息在后期优化中可能具有价值。这里生成的结果会同时保存为Verilog和GraphML文件后者直接就是一张图节点是逻辑门边是连接线为后续的图学习做好了准备。实操心得格式统一的重要性在实际研究中数据格式混乱是浪费时间的头号杀手。OpenLS-DGF第一步就强制进行格式标准化这个设计非常明智。它保证了无论你从哪个基准测试集拿来电路进入流程后都变成了同一种“语言”极大简化了后续工具链的开发和数据处理脚本的编写。我们在内部项目中也曾深受其害后来强制规定所有输入必须先用一个统一前端处理效率提升立竿见影。第二步与-非图生成GTG虽然统一但并非逻辑优化算法最“喜欢”的格式。在逻辑综合领域绝大多数先进的优化算法如重写、重构、替换都是在一种称为“与-非图”And-Inverter Graph, AIG的表示上开发的。AIG极其简单只包含两种节点二输入与门AND2和反相器NOT。这种极简主义使得算法设计和分析变得非常高效。因此框架利用其内置的转换工具将GTG转换为AIG。这是整个流程中一个关键的“归一化”步骤为后续应用丰富的ABC优化命令集铺平了道路。第三步逻辑优化配方生成这是产生数据多样性的核心环节。对于一个给定的AIG应用不同的优化命令序列比如先做平衡再做重写或者先做替换再做重构会产生结构不同但功能等价的电路。这些不同的结构在经过后续的技术映射后会产生面积、时序各不相同的最终网表。OpenLS-DGF在这里模拟了工程师在探索设计空间时的行为它从一个包含常用ABC优化命令如balance,rewrite,refactor,resub等的“命令池”中为每个原始设计随机生成了1000条长度为10的优化序列。技术细节为什么是1000条序列这个数字是权衡了数据覆盖度和生成成本后的结果。理论上可能的序列组合是巨大的。1000条随机序列可以在可接受的时间内为每个设计提供一个足够丰富的“优化策略采样空间”从而捕捉到QoR质量结果的大致分布。这对于训练预测模型或进行排序学习至关重要。在内部测试中我们发现对于大多数中等规模的设计1000个样本已经能够较好地反映其优化空间的特性。四步逻辑“爆破”AIG虽好但并非唯一。不同的布尔表示形式如或-非图OIG、异或-与图XAG、多数表决图MIG等各有其特点在某些特定场景或工艺库下可能映射出更优的结果。逻辑“爆破”步骤就是将上一步得到的每一个AIG通过“覆盖”算法转换到其他五种布尔表示形式OIG, XAG, MIG, PRIMARY, GTG。这个过程有点像用不同的“乐高基础零件套装”去拼搭同一个模型。例如PRIMARY套装包含{NOT, AND2, NAND2, OR2, NOR2, XOR2, XNOR2}这七种基础零件。框架会优先使用面积更大的零件进行覆盖以模拟一种面积优化的倾向。这里有一个技术难点MIG的基元集合是{NOT, MAJ3}它无法直接通过覆盖算法生成基本的与门/非门因此框架采用了一种基于拓扑的节点级转换方法。这一步极大地扩展了数据的维度使得数据集不仅包含同一电路的不同优化版本还包含同一电路的不同布尔表示版本为研究“布尔表示问题”提供了丰富素材。第五步技术映射逻辑优化后的布尔网络无论哪种形式还是技术无关的它只描述了逻辑功能。技术映射则负责将这个功能描述映射到目标工艺库如ASIC的sky130标准单元库或FPGA的LUT6查找表的具体物理单元上。框架使用LSILS工具进行映射同时也支持ABC的映射算法作为对比。这一步产生了最终的、可制造的网表并附带了面积、时序对于ASIC或电路深度对于FPGA等关键物理信息。这些QoR数据正是许多机器学习任务想要预测的目标。第六步静态时序分析对于ASIC网表为了获得精确的时序信息框架调用了开源物理设计工具iEDA中的静态时序分析STA引擎。STA会计算信号在网表中传播的最长路径延迟即关键路径。这个时序信息与面积一起构成了评估一个综合结果好坏的核心指标。所有QoR数据都以JSON格式保存便于程序解析。第七步数据集打包与管理经过前面六步我们已经为每个原始设计生成了海量的中间文件原始设计、GTG、AIG、6种布尔表示各1000个版本、对应的ASIC/FPGA网表、以及每个网表的QoR JSON文件。如果散乱存放管理和使用将是噩梦。OpenLS-DGF引入了电路引擎和一套聪明的打包策略。如图3所示所有文件按设计组织并打包成PyTorch的.pt文件。例如一个设计的所有数据会打包成8个.pt文件raw.pt原始文件、abc.aig.ptABC优化的AIG及相关数据、以及lsils.xxx.ptLSILS生成的其他五种布尔表示数据。这种按需加载的方式非常高效研究者只需要加载与任务相关的.pt文件即可。2.2 核心组件电路引擎——数据与模型的桥梁如果说前六步是“数据生产线”那么电路引擎就是这条生产线的“智能仓储和配送中心”。它是OpenLS-DGF框架的灵魂实现了从原始电路文件到机器学习张量数据的无缝转换。如图4的UML图所示电路引擎的核心是一个Circuit类。这个类封装了一个电路网表的所有关键信息输入输出端口、内部节点列表、节点间的连接关系、每个节点的类型如AND2、AOI21或工艺库中的具体单元名和真值表。更重要的是它提供了一系列操作方法。最核心的操作之一是to_torch_geometric(circuit: Circuit)。这个方法能将一个Circuit对象转换成PyTorch Geometric一个流行的图神经网络库所需的Data对象。如图5所示这个过程保持了节点索引的一致性意味着你在Circuit对象上计算的任何特征如节点的逻辑深度、扇入扇出数都可以毫无损失地传递到GNN的输入图中。这解决了图学习领域一个常见痛点特征工程与模型输入之间的对齐问题。另一个关键操作是load_graphml(path:str) - Circuit。它负责将GraphML格式的电路文件加载到内存中构建成Circuit对象。GraphML是一种标准的图描述格式易于被其他工具解析。框架选择同时保存Verilog和GraphML兼顾了人类可读性和机器可处理性。避坑指南节点索引的映射在图5所示的转换过程中维护节点索引的对应关系至关重要。原始布尔电路文件如Verilog中的节点索引、Circuit类内部管理的索引、以及最终torch_geometric图数据中的节点索引这三者必须建立精确的映射。OpenLS-DGF通过在Circuit类中同时保存原始索引index_ori和内部索引index来实现这一点。在开发自己的电路处理工具时如果忽略这一点很容易导致特征错位让模型学到错误的关联这一点我深有体会。电路引擎的抽象设计带来了巨大的灵活性。研究人员可以轻松地继承Circuit类添加自定义的特征提取函数例如计算每个节点的可控性/可观测性、信号概率等然后利用现有的to_torch_geometric方法快速构建出适用于自己任务的数据集。这种设计模式将数据生成的复杂性封装起来为上层研究提供了简洁而强大的接口。3. OpenLS-D-v1数据集全景与应用实践基于上述框架团队生成了第一个版本的数据集——OpenLS-D-v1。这个数据集是框架能力的集中体现也是我们评估其价值的依据。3.1 数据集构成与多样性分析OpenLS-D-v1包含了从IWLS2005、IWLS2015和OpenCores等经典基准测试中精选的46个组合逻辑设计。这些设计涵盖了从微小的控制单元如ctrl仅112个与门到复杂的IP核如jpeg编码器近12万个与门类型包括算术运算器、控制器、通信协议处理器等确保了数据源的多样性。如表III所示设计的规模差异巨大这有助于训练出对不同电路尺度都具有鲁棒性的模型。为了量化这种多样性论文采用了余弦相似度来分析不同设计在图嵌入空间中的距离。如图6所示通过结合启发式特征如PI/PO数量、门数、深度和基于Graph2Vec的结构嵌入特征计算出的设计间相似度平均在0.44左右且矩阵图显示出了明显的区块差异这表明数据集确实包含了结构特征各异的电路而非同质化设计。整个数据集最终包含了超过96.6万个布尔电路。具体来说每个原始设计产生了1000个优化序列每个序列对应7种布尔表示AIG from ABC, AIG/OIG/XAG/MIG/PRIMARY/GTG from LSILS每种表示又对应ASIC和FPGA两种映射结果。因此每个设计贡献了1000 * 7 * 2 14,000个数据点严格来说是电路网表及其QoR。46个设计总计约64.4万个网表再加上优化前的中间表示总数超过了96.6万。所有数据经过zstandard高效压缩后原始文件大小约410GB在服务器上生成耗时约141个CPU小时。3.2 下游任务验证数据集的“实战演练”一个数据集好不好关键在于它能否支撑起有意义的任务。OpenLS-D-v1论文中展示了四个典型的下游机器学习任务这就像用四场“考试”来全面检验数据集的“教学质量”。任务一电路分类目标给定一个布尔电路如AIG判断它来源于46个原始设计中的哪一个。数据构建从数据中提取所有优化序列产生的AIG电路每个电路以其原始设计ID作为标签。由于同一设计的不同优化版本功能相同但结构不同这要求模型学习到超越具体优化痕迹的、更深层次的设计“指纹”特征。意义这测试了数据集在“示学习”上的能力。成功的分类意味着模型捕捉到了不同电路架构的本质区别这种能力可以迁移到设计溯源、知识产权保护或电路聚类等应用。任务二电路排序目标对于一个给定的原始设计对其对应的1000个不同优化版本的电路根据最终QoR如延迟进行优劣排序。数据构建针对每个设计将其1000个优化版本例如基于GTG表示经ASIC映射后的网表根据其关键路径延迟或面积进行排序形成排序对电路A优于电路B作为训练数据。意义这是一个较新的任务它不要求模型精确预测QoR的绝对值而是学习判断相对优劣。这更贴近实际优化场景——工程师往往不需要知道一个电路延迟的精确纳秒数只需要知道在A和B两个方案中哪个更快。排序学习可以用于构建高效的优化策略推荐系统。任务三质量结果预测目标预测一个给定布尔电路经过技术映射后其网表的关键QoR指标如面积、时序。数据构建输入是技术映射前的布尔电路如PRIMARY图输出是对应的ASIC网表的面积和时序值。这是一个标准的回归问题。意义这是逻辑综合中ML应用最直接的方向。如果能在耗时漫长的技术映射和STA之前快速、准确地预测出QoR就能在庞大的设计空间中快速筛选出有潜力的优化方向实现“先知先觉”极大加速设计探索。任务四概率预测目标预测布尔电路中各个节点具有逻辑“1”值的概率。数据构建通过逻辑模拟为电路中的每个内部节点计算其信号概率作为监督学习的标签。意义信号概率是许多逻辑优化算法如冗余移除、功耗估算的关键输入。准确快速的概率预测模型可以替代耗时的仿真加速综合流程。这个任务考验模型对电路逻辑功能的推理能力。实验结果表明基于OpenLS-D-v1数据集训练的模型在这四个任务上都取得了良好的表现证明了数据集包含的丰富信息足以支撑不同类型、不同目标的学习任务。这种“一数据集多用”的能力正是其自适应性的最佳证明。4. 实操指南如何利用OpenLS-DGF开展研究对于想要利用OpenLS-DGF进行研究的同行这里提供一些具体的操作思路和注意事项。4.1 快速开始数据获取与子集提取所有代码和数据集已在GitHub开源。第一步是克隆仓库并熟悉其结构。数据集很可能以分卷压缩或云盘链接的形式提供下载后需要解压。假设你想进行电路分类研究你不需要下载全部的410GB数据。你可以写一个简单的Python脚本利用框架提供的dataset_manager工具只加载每个设计对应的abc.aig.pt文件。这个文件里已经包含了1000个AIG电路及其对应的设计标签。电路引擎的load_graphml和to_torch_geometric方法可以帮你轻松地将这些电路转换成GNN需要的批处理数据。# 伪代码示例加载单个设计的AIG数据用于分类 import torch from circuit_engine import Circuit, load_graphml, to_torch_geometric # 假设数据集结构为 /openls-d-v1/design_name/abc.aig.pt design_data torch.load(/path/to/openls-d-v1/adder/abc.aig.pt) aig_graphml_paths design_data[aig_graphml_list] # 包含1000个AIG文件路径的列表 labels [design_id] * 1000 # 为该设计生成1000个相同标签 graph_data_list [] for path in aig_graphml_paths: circuit load_graphml(path) graph_data to_torch_geometric(circuit) # 可以在这里为graph_data添加自定义特征如 circuit.calculate_depth() graph_data.y torch.tensor([design_id], dtypetorch.long) # 添加标签 graph_data_list.append(graph_data) # 现在 graph_data_list 包含了1000个图数据样本可用于训练分类模型4.2 自定义特征工程电路引擎的Circuit类是你进行特征工程的游乐场。除了节点类型type和连接关系fanins这些基础特征你可以轻松添加更多对任务有帮助的特征。例如对于QoR预测任务你可以在将Circuit转换为图数据之前为每个节点计算一些图论特征逻辑深度从原始输入到该节点的最长路径长度。扇入/扇出数节点的前驱和后继数量。可观测性/可控性近似值虽然精确计算复杂但可以用基于拓扑的启发式方法估算。节点功能复杂度根据其真值表truth table计算比如支持向量机的输出。这些特征可以作为节点特征graph_data.x的一部分与原始的节点类型编码一起输入GNN。我们的经验是结合了手工特征和GNN学习到的结构特征模型性能通常比纯端到端学习更稳定、收敛更快。4.3 构建新的下游任务OpenLS-D-v1的潜力远不止论文中展示的四个任务。它的自适应特性鼓励创新。以下是一些可能的新方向优化序列推荐将任务二排序扩展为序列生成问题。输入是原始AIG输出是一个优化命令序列如[‘balance’, ‘rewrite’, ‘refactor’]。这可以建模为一个强化学习问题其中状态是当前电路图动作是优化命令奖励是最终QoR的改进程度。数据集提供了大量的初始电路序列最终电路QoR四元组作为训练数据。跨表示迁移学习研究同一个电路在不同布尔表示AIG, MIG, XAG下的QoR是否存在相关性。能否训练一个模型在AIG上预测其在MIG表示下经过映射后的性能这可以探索不同电路表示之间的“语义”关联。设计空间探索加速结合分类和预测模型。首先用分类模型快速识别一个新设计与数据集中哪个已知设计最相似然后直接调用该相似设计下表现最好的若干优化序列进行综合从而跳过大量无效探索实现冷启动优化。4.4 常见问题与排查在实际使用中你可能会遇到以下问题内存不足一次性加载整个设计的所有图数据如1000个大型电路的图可能导致内存溢出。解决方案使用PyTorch的DataLoader配合自定义的数据集类实现按需加载和批处理。只将当前训练批次的数据留在GPU内存中。特征维度不一致不同电路的节点数、边数差异巨大导致无法组成规则的张量进行批处理。解决方案这是图数据的固有特性。务必使用PyTorch Geometric等支持“不规则图批处理”的库。它们会将多个小图打包成一个“大图”并通过batch向量来区分节点属于哪个样本。模型过拟合由于数据来自有限的46个设计模型可能只是记住了这些设计的特征而无法泛化到全新的设计。解决方案在数据划分时务必按“设计”进行划分而不是随机打乱所有电路。例如用40个设计的数据做训练集用6个未见过的设计做测试集。这样才能真正测试模型的泛化能力。此外可以尝试使用图数据增强技术如随机边丢弃、节点特征掩码等。任务定义不清例如在QoR预测任务中输入是技术映射前的布尔电路但该电路的图结构已经包含了优化序列的信息。要确保你的任务定义是合理的避免数据泄露。解决方案仔细审视数据生成流程。对于QoR预测正确的设定是用逻辑优化后、技术映射前的布尔电路如PRIMARY图来预测映射后的QoR。因为技术映射过程是确定的使用相同工艺库和映射算法所以QoR的差异主要来源于入布尔电路的结构差异这正是模型需要学习的映射关系。5. 总结与展望OpenLS-DGF框架及其产出的OpenLS-D-v1数据集为逻辑综合与机器学习的交叉研究领域打下了一块坚实的数据基石。它通过系统化的流程将复杂的芯片设计中间状态转化为结构化的、机器学习友好的图数据并巧妙地通过电路引擎和灵活的打包方式实现了数据的“一次生成多处复用”。从我个人的工程视角来看这个框架最值得称道的三点是流程的完整性与可复现性它完整覆盖了从RTL到GDSII之前的关键步骤并且每个步骤都基于开源工具确保了整个数据生成过程的可复现、可审计。这对于学术研究至关重要。设计的自适应性与灵活性它不是一个大而僵化的“黑箱”数据集而是一个“数据工厂”加“零件仓库”。研究者可以根据任务需要自由提取、组合甚至扩展数据。电路引擎的抽象设计使得集成新的特征提取方法或自定义操作变得非常容易。对现实问题的紧密贴合它生成的数据不是凭空捏造的而是源于真实的综合流程和经典的基准电路。这意味着在上面训练得到的模型有更大的潜力迁移到真实的工业设计场景中。当然作为一个初始版本OpenLS-D-v1也有其局限性和未来的扩展方向。目前数据集全部是组合逻辑电路而实际芯片中大量存在时序逻辑寄存器、状态机。引入时序电路并包含时序路径、时钟域等信息将是下一个重要的挑战。此外当前的数据集主要关注面积和时序功耗也是一个关键指标未来可以集成功耗分析流程来丰富QoR维度。对于正在或计划进入这个领域的研究者和工程师我的建议是不要仅仅把OpenLS-D-v1当作一个静态的数据集来下载和使用。更重要的是理解并利用好OpenLS-DGF这个框架。你可以用它来为自己的特定工艺库生成数据可以添加新的优化算法步骤来扩展数据多样性甚至可以借鉴其电路引擎的设计构建自己领域的数据处理管道。它提供的不仅是一池“鱼”更是一套优秀的“渔具”和“捕鱼方法”。在EDA迈向智能化的道路上这样的开源基础设施其价值会随着社区的使用和贡献而不断放大。