开发EDA工具常用的三方开源

server/2024/12/16 20:31:29/

        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

好吧,先列这么多项目,肯定还有不少,后续再补。


http://www.ppmy.cn/server/150719.html

相关文章

前端页面导出word

html-docx-js bug: vite使用html-docx.js会报错&#xff0c;点击下载上方文件替换即可 正文 npm install html-docx-js -S npm install file-saver -S<template><div id"managerReport">word内容......</div> </template><script>&l…

HTTP域RPC

HTTP&#xff08;超文本传输协议&#xff09;和RPC&#xff08;远程过程调用&#xff09;是两种不同的通信协议&#xff0c;它们在网络通信中扮演着重要的角色。以下是HTTP和RPC的区别和关系的表格展示&#xff1a; 特性HTTPRPC定义一种用于传输超文本的应用层协议&#xff0c…

文件上传之黑名单检测

一般情况下&#xff0c;代码文件里会有一个数组或者列表&#xff0c;该数组或者列表里会包含一些非法的字符或者字符串&#xff0c;当数据包中含有符合该列表的字符串时&#xff0c;即认定该数据包是非法的。 ​​ 一.如何判断是否为黑名单检测 黑名单是有限的&#xff0c;可以…

Python 3 和 JSON 数据格式

Python 3 和 JSON 数据格式 Python 3 是一种广泛使用的编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。…

AIGC 013-CoT用思维链挖掘自回归语言模型的潜在能力

AIGC 013-CoT用思维链挖掘自回归语言模型的潜在能力 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 纯自回归式语言模型&#xff0c;本来并不具备优秀推理能力&#xff0c;特别是在数学问题的推理。但是现在的生成模型是能实现一些数学的推理的。研究者认为当模型足够大…

深入理解 XPath:XML 和 HTML 文档的利器

XPath&#xff08;XML Path Language&#xff09;是一种用于在 XML 和 HTML 文档中定位节点的语言。它常用于 XML 解析、Web 数据抓取&#xff08;如 Selenium 或 Scrapy&#xff09;以及配置文件解析。本文将带你深入了解 XPath 的语法、功能及其在实际中的应用。 目录 一、什…

Debezium OracleErrorHandler 分析

Debezium OracleErrorHandler 分析 目录 1. 概述2. 主要功能3. 实现分析4. 使用场景5. 示例6. 最佳实践7. 总结1. 概述 OracleErrorHandler 是 Debezium Oracle 连接器中的错误处理组件,负责处理连接器运行过程中遇到的各种异常情况。它主要用于: 判断错误是否可重试处理数…

revit转gltf,revit转3dtiles,如何将Revit模型转为3DTiles格式并在Cesiumjs中高效可视化

Revit模型导出gltf、glb与3dtiles有多种方式&#xff0c;但一般的商业工具收费普遍较高&#xff1a;Cesiumlab导出3dTile格式数据&#xff0c;Cesiumlab暂时可试用3天&#xff0c;会员版收费每年800&#xff1b;BimAngleEngine导出3dTile格式数据BimAngleEngine暂时可试用30天&…