EDA软件是制造芯片重要工具,是现在举国的大难题。这个工具难在哪里,几句话说不清,但它确实也有一些非常通用的功能,这些功能依赖一些成熟的轮子,这些轮子,就是三方的开源项目,下面列举一些常用的开源项目,供大家参考。
首先,我们假定EDA工具使用C++开发技术栈。按用途把用到的开源项目分为以下几类。
- 通用C++框架:boost
- 数据格式:jsoncpp,protobuf,pugixml,spdlog,tabulate,zlib,QXlsx
- GUI 工具:Scintilla,Cairo,fmt
- 并行编程:QtPromise,oneTBB,taskflow
- 安全/加密:openSSL
- 算法/机器学习:LEMON,eigen,TreeLite,flute,cholmod,minisat,z3,opencv
- 解释器:tcl,chaiScript,Verible
- 其它工具:breakpad
通用C++框架
boost
https://github.com/boostorg/boost boost org 社区
【介绍】
这个大家都知道吧,不用过多介绍,实际上后期的C++标准,大都来源于boost社区的这个项目。如果你不想升级到C++最新版本,直接引用boost是最佳选择。
【使用】
BSL-1.0 license 知名的C++开发库,随便用。
GUI界面
对于GUI,一般会采用QT这种跨平台的UI框架,QT我们就不再介绍了。但除了QT,还会用到一些其它特殊的UI处理组件。
Scintilla
Scintilla and SciTE
Neil Hodgson <neilh@scintilla.org> 个人为主,社区维护
【介绍】
提供代码编辑器组件,完成多种编辑器的渲染,从 1999.3 开始,一共发布了超200个版本,社区活跃,支持度超好。对于EDA工具的 Verilog,SystemVerilog,Tcl,VHDL 支持度都很好。
【使用】
HPND(Historical Permission Notice and Disclaimer) License,很友好。可以任意修改,嵌入代码后商用发布,无需开源自已的代码。
Cairo
cairographics.org Carl Worth 个人
【介绍】
跨平台支持:Cairo 是一个跨平台的绘图库,可以在多种操作系统上使用,包括 Windows、Linux、macOS 等。多种绘图表面支持:Cairo 支持多种不同的绘图表面,包括屏幕显示、图像文件、PDF、SVG 等,以满足不同的输出需求。强大的绘图功能:Cairo 提供了丰富的绘图功能,包括直线、曲线、多边形、文本、渐变、阴影等。可以使用这些功能来创建各种复杂的图形和图像效果,很好的将place的放置过程用图像表现出来。简单易用的 API:Cairo 提供了简单易用c++的 API 接口,使得开发者可以快速上手并进行绘图操作。它的设计目标是简洁、直观,同时提供了丰富的功能选项和配置项,以满足不同的需求。
我理解这更多是一种使用的习惯,有一些人会习惯于使用Cario。它是以前非常流行的2D图形渲染。
【使用】
COPYING-LGPL-2.1 可闭源使用,但活跃度一般,可能有点过时了。
fmt
https://github.com/fmtlib/fmt
Victor Zverovich 个人
【介绍】
C++ 格式化输出工具,知名,活跃的开源库(类似强化的 format工具)
【使用】
MIT License,放开了用。
并行编程
QtPromise
https://github.com/simonbrunel/qtpromise
Simon Brunel 个人,社区
【介绍】
很方便在QT的GUI中进行异步运行,很好地支持了GUI中的异步执行模型。优秀的QT开源项目,被广泛使用。比如:我们要为IDE提供flow多任务管理,综合/实现过程的后台任务管理等……
【使用】
MIT License 非常友好的License.
oneTBB
GitHub - uxlfoundation/oneTBB: oneAPI Threading Building Blocks (oneTBB)
Intel 公司
【介绍】
oneTBB是intel发布的一个开源C++模板库,对并行编程提供了适当抽象,提供了并行task和常用并行容器,非常适合做并行化程序。注意:这里更多处理多核。
【使用】
Apache license。大公司背书,稳定项目。是否采用,个人习惯吧。但这个功有是挺强大的。
taskflow
https://github.com/taskflow/taskflow/tree/master
Dr. Tsung-Wei Huang 个人
【介绍】
并行,任务调度。注意,这里处理的是异构计算,和多核有所不同。
【使用】
MIT license。
安全加密
openSSL:
https://github.com/openssl/openssl
Hyunsu Cho, Mu Li 个人
【介绍】
OpenSSL 是一款功能强大的商业级全功能开源工具包,用于传输层安全 (TLS) 协议(以前称为安全套接字层 (SSL) 协议)。该协议的实现基于全功能通用加密库,也可单独使用。主要用途还是在加密方面。对于EDA工具,必须要帮助客户提供安全的加密手段,保证开发者的源码安全的传递。包括位流的加密,源码Ip的加密等。
【使用】
Apache License v2.0,稳定版本。可商用。
算法&AI:
minisat:
https://github.com/agurfinkel/minisat
个人:Niklas Een, Niklas Sorensson
【介绍】
SAT求解器(SAT Solver)是解决 布尔可满足性问题(Boolean Satisfiability Problem, 简称 SAT) 的一种算法工具。SAT 是计算机科学领域中最基本和最重要的决策问题之一,其主要目标是判断一个布尔公式是否可以通过某种变量赋值使其为“真”。
先 判定是否可为真,如果可行,就找出相应的变量值 。
-
逻辑综合: 在逻辑综合过程中,SAT 求解器用于优化和表示电路结构,确保设计的正确性和效率。
-
形式化验证: 通过模型检测和等价性验证,SAT 求解器帮助验证电路是否满足特定属性或两个电路是否等价。
-
电路测试: 在生成测试向量以覆盖潜在的缺陷模型时,SAT 求解器用于确定输入向量,确保电路的可靠性。
minisat是高性能的SAT求解器。
对于一些构建好的布尔表达式,可以求解变量,比如:拥塞路径,需要求解其中变量和constraint。
【稳定性/活跃度】
功能非常稳定,在2010年更新了 2.2.0版本后,就基本没有变化过了。但它确实是计算机科学和工程领域被广泛使用。
【使用方法】
https://github.com/agurfinkel/minisat/blob/master/LICENSE
通过动态库引用,可闭源商用,可修改本版本,但需要保留版权说明,许可说明,免责声明。
Z3:
GitHub - Z3Prover/z3: The Z3 Theorem Prover
【用途】
Z3 是一个由 微软研究院 开发的高效开源 SMT(Satisfiability Modulo Theories)求解器,广泛应用于自动化推理、形式化验证、软件工程、硬件验证等领域。它不仅可以解决传统的 SAT(布尔可满足性) 问题,还可以处理更加复杂的 SMT 问题,即包含多种理论的约束,如整数、实数、数组、位向量等。
SMT:(Satisfiability Modulo Theories)求解器扩展了SAT,可以处理带有整数,实数,数组等类型的约束。
【稳定性和活跃度】
这个活跃度挺高的,最新的版本是:2024.10.11 发布的 v4.13.3 版本。
【使用】
MIT的License,https://github.com/Z3Prover/z3/blob/master/LICENSE.txt
可闭源商用,需要保留版权说明,许可说明,免责声明。
TreeLite:
Treelite — Treelite 4.5.0-dev documentation
Hyunsu Cho, Mu Li 个人
【介绍】
TreeLite 是一个用于决策树和随机森林的高性能、轻量级的 C++ 库。它的设计旨在提供快速的决策树训练和预测能力,同时具有较低的内存占用和计算资源消耗。它同时支持lightGBM、XGBoost和sklearn所训练的决策树模型。配合 XGBoost的标准解法,业内通用。在Placement中可能会有AI估算,会使用到XGBoost。一般用在预测算法上,算是ML算法。
【使用】
Apache License v2.0,可安全的商用。版本相对稳定。
LEMON:
LEMON
Egerváry Research Group on Combinatorial Optimization (EGRES) 组织
【介绍】
图算法,这在EDA的 Place & Route中会使用到,
【使用】
BSL-1.0 license,注意,它只有头文件,无需单独的编译。
eigen
libeigen / eigen · GitLab
eigen.tuxfamily.org 组织
【介绍】
线性代数的模块库,矩阵,向量等运算。
【使用】
BSL-1.0 license,稳定,注意,只有头文件。
flute
FLUTE
Dr. Chris C. N. Chu 朱振宁博士
【介绍】
布线估算。快速且准确,FLUTE是一种非常快速准确的rectilinear Steiner minimal tree(RSMT) 构造。提供一个由用户定义的参数,其可以控制准确性和运行时间的权衡。 对于不超过9层的网络来说,FLUTE是最佳的,速度极快。可以在几分钟内,面对具有数百万个引脚的网络生成准确的 RSMT 。最适用于网络为大多数net的度数为 30 或更低。
【使用】
ATTRIBUTION ASSURANCE LICENSE (adapted from the original BSD license)
可商用发布。
cholmod
https://github.com/DrTimothyAldenDavis/SuiteSparse/tree/dev/CHOLMOD
DrTimothyAldenDavis 个人
【介绍】
稀疏矩阵运算包。用于Placement
【使用】
SuiteSparse_config: 从源码的注释头可见开源协议是 SPDX-License-Identifier: BSD-3-clause 这是非常宽松的协永远爱,不需要开源商业软件中的代码。其余适用LGPL模块具有独立性(All CHOLMOD modules are licensed separately),可以通过动态库链接方式使用,不需要开源商业软件的代码。
opencv:
OpenCV - Open Computer Vision Library
Alexander Alekhin opencv 组织
【介绍】
计算机视觉和机器学习软件库。
【使用】
Apache-2.0 license 可商用。知名应用,用就是了。
格式:
tabulate:
https://github.com/p-ranav/tabulate
【用途】
用来在Report模块中输出表格,可以输出 纯文本的表格,Markdown,HTML多种格式。有时候为了兼容性,会输出纯文本表格。
【活跃度】
版本的活跃度一般,功能较稳定。
【使用】
MIT的许可,很宽松。
jsoncpp:
GitHub - open-source-parsers/jsoncpp: A C++ library for interacting with JSON.
Christopher Dunn 个人
【用途】
json的解析器。不用多说。
【使用】
MIT license, or public domain,很稳定的开源项目
protobuf
https://github.com/protocolbuffers/protobuf
Joshua Haberman 组织
【介绍】
高效的数据传输/交换格式,google研发。对于C++,标配必然是 protobuf
【使用】
3-clause BSD License 可商用,最高效的数据传输格式。
pugixml
https://github.com/zeux/pugixml
Arseny Kapoulkine 个人
【介绍】
xml parser。
【使用】
MIT License
spdlog
GitHub - gabime/spdlog: Fast C++ logging library.
Gabi Melman 个人
【介绍】
日志生成工具,很好的处理多线程,文件自动截断等……
【使用】
MIT License
工具:
breakpad:
https://github.com/google/breakpad
【介绍】
Google 公司开发。
Breakpad 是一个开源项目,旨在为应用程序提供 崩溃报告 功能,特别是在 C++ 和 C 语言环境下。它用于捕获崩溃时的堆栈跟踪(stack trace),并将信息转化为易于分析的格式。这对于调试和错误报告至关重要,尤其是在生产环境中出现崩溃的情况下。通过使用 Breakpad,开发人员能够收集详细的崩溃信息,从而加速错误的定位和修复过程。
除了捕获常见的崩溃信息,Breakpad 还能够捕捉 C++ 异常 和 SIGSEGV 等信号引起的崩溃,确保捕获到尽可能多的崩溃信息。这个C++程序非常重要的调试手段。
这是对于C++程序比较重要的工具,特别是对于性能要求较高的程序。
目前win下没有崩溃异常。另外linux下崩溃需要系统开启支持,但是linux下产生的dmp文件比较大,耗时也比较久。
它是一个高效快速小巧的崩溃捕获,从而帮助我们发现程序崩溃问题,提高程序健壮性
【活跃度】
功能较稳定,活跃度不高。
【使用】
https://github.com/google/breakpad/blob/master/LICENSE
可以以源代码方式引用,且可以修改。
正常使用,我们会采用静态链接的方式。
程序启动时,需要有初始化,这对于程序有点影响,当发生崩溃时,需要堆栈跟踪生成和符号化,但这时已经崩溃,你可以认为对程序正常运行无影响。
QXlsx:
https://github.com/QtExcel/QXlsx
【介绍】
QXlsx 是一个用于在 C++ 应用程序中操作 Excel 文件的开源库,它提供了一个方便的接口来读取、写入和修改 Excel 文件,特别是 XLSX 格式(Office Open XML 格式)。该库是基于 Qt 框架开发的,利用了 Qt 的强大功能,能够跨平台运行(支持 Windows、Linux 和 macOS)。QXlsx 是一个轻量级的库,适用于需要在 C++ 中处理 Excel 文件的开发者。
确实存在需要导出为Excel的情况,非常常见。
【使用】
QXlsx/LICENSE at master · QtExcel/QXlsx · GitHub
MIT 的license,非常宽松,随便用。
解释器
ChaiScript:
【介绍】
是一个为 C++ 设计的开源嵌入式脚本语言,它允许你在 C++ 程序中集成脚本语言,从而能够轻松地动态执行 C++ 程序逻辑。与其他嵌入式脚本语言(如 Lua、Python、JavaScript 等)相比,ChaiScript 的最大特点是其完全用 C++ 编写,直接为 C++ 提供脚本支持,从而能更好地与 C++ 环境结合,提供更高的执行性能和灵活性。
Verible:
https://github.com/chipsalliance/verible
CHIPS Alliance<https://chipsalliance.org/>
【介绍】
Verilog & System Verilog语言服务器,用于实现语法检查、Format、符号parser等。
开源特点:常用的Verilog & System Verilog语言服务器。
【使用】
Apache License
tcl:
GitHub - tcltk/tcl: The Tcl Core. (Mirror of core.tcl-lang.org)
Donal Fellows 个人
【介绍】
tcl引擎核心和API
好吧,先列这么多项目,肯定还有不少,后续再补。