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

news2024/12/16 0:30:39

        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.coloradmin.cn/o/2260203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亮相AICon,火山引擎边缘云揭秘边缘AI Agent探索与实践

12月13-14日&#xff0c;AICon 全球人工智能开发与应用大会在北京成功举办。火山引擎边缘智能技术负责人谢皓受邀出席大会&#xff0c;以《AI Agent 在边缘云的探索与实践》为主题&#xff0c;与全球 AI 领域的资深专家&#xff0c;共同深入探讨大模型落地、具身智能、多模态大…

找出1000以内的所有回文数

找出1000以内的所有回文数 方法概述检查回文数的方法伪代码C代码实现代码解析运行结果在计算机科学中,回文数是一种具有对称性质的数,即从左向右读和从右向左读都是相同的。例如,121、1331、12321都是回文数。本文将利用数据结构、C语言和算法的知识来编写一个程序,找出100…

数据保护策略:如何保障重要信息的安全

一、什么是数据安全&#xff1f; 数据安全是保护数字信息免遭盗窃、未经授权的访问和恶意修改的过程。这是一个持续的过程&#xff0c;负责监督信息的收集、存储和传输。 机密性&#xff1a;保护数据免遭未授权方访问。 完整性&#xff1a;保护数据免遭未经授权的修改、损坏…

SpringBoot【八】mybatis-plus条件构造器使用手册!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 经过上一期的mybatis-plus 入门教学&#xff0c;想必大家对它不是非常陌生了吧&#xff0c;这期呢&#xff0c;我主要是围绕以下几点展开&#xff0c;重点给大家介绍 里…

基于springboot+vue的高校校园交友交流平台设计和实现

文章目录 系统功能部分实现截图 前台模块实现管理员模块实现 项目相关文件架构设计 MVC的设计模式基于B/S的架构技术栈 具体功能模块设计系统需求分析 可行性分析 系统测试为什么我&#xff1f; 关于我项目开发案例我自己的网站 源码获取&#xff1a; 系统功能 校园交友平台…

33.攻防世界upload1

进入场景 看看让上传什么类型的文件 传个木马 把txt后缀改为png 在bp里把png改为php 上传成功 用蚁剑连接 在里面找flag 得到

基于Python+Sqlite3实现的搜索和推荐系统

基于Python实现的搜索和推荐系统 一、引言 伴随着科技的不断进步&#xff0c;互联网&#xff0c;万维网的不断发展。我们越来越热爱万维网&#xff0c;也欣赏他的发展方式。20世纪90年代初&#xff0c;万维网还只是一个将文档联系起来的简单网络。如今&#xff0c;他已经成为…

使用idea创建一个JAVA WEB项目

文章目录 1. javaweb项目简介2. 创建2.1 idea新建项目2.2 选择&#xff0c;命名2.3 打开2.4 选择tomcat运行2.5 结果 3. 总结 1. javaweb项目简介 JavaWeb项目是一种基于Java技术的Web应用程序&#xff0c;主要用于开发动态网页和Web服务。这种项目能够构建在Java技术栈之上&a…

【潜意识Java】Java基础教程:从零开始的学习之旅

目录 1. Java 简介 2. Java 程序结构 2.1 包声明&#xff08;Package Declaration&#xff09; 2.2 导入语句&#xff08;Import Statement&#xff09; 2.3 类声明&#xff08;Class Declaration&#xff09; 2.4 main 方法&#xff08;Main Method&#xff09; 3. Jav…

算法题(2):三步问题

审题&#xff1a;需要输出小孩上楼梯的方式的数量&#xff08;需要取模&#xff09; 思路&#xff1a; 如果正面来思考这个问题会无从下手&#xff0c;因为我们的分类太多了&#xff0c;没有办法把大问题缩小。 但是如果反过来思考&#xff0c;小孩最后一步有几种情况&#xff…

Quad Remesher使用教程

为什么要拓扑&#xff1f; 我们知道&#xff0c;模型在三维软件中的表现&#xff0c;是由一系列的面通过不同角度组合而成的。3D模型制作层面上的拓扑&#xff0c;按我的理解来说&#xff0c;就是一个模型的面的结构分布——布线。想表现和制作一个三维模型&#xff0c;有无限…

Android 使用Overlay现实主题切换

最近项目上&#xff0c;想做一个主题切换的功能&#xff0c;整理了一下发布出来&#xff0c;主要使用的是IOverlayManager&#xff0c;大体思路如下&#xff1a; 1、想切换的应用&#xff0c;各自做overlay apk&#xff08;简称皮肤包&#xff09; 2、将overlay apk push 到v…

apk反编译修改教程系列-----超简单修改apk中名称 包名 布局文本以及其中的文字选项 手机设置中apk对应修改演示【三十三】

💝💝💝在反编译apk中,每个初学者可能最感兴趣入门的就是修改包名 去更新以及其中选项文本的修改。这样循序渐进来激发学习的兴趣。了解一些apk中常见的修改方法。对于修改手机rom中的 系统类等等的apk原理都是一样的。这篇是应粉丝需要的修改apk基础教程. 通过博文了解…

02HBuilder工具准备

一、下载网址&#xff1a; HBuilder 使用教程 | 菜鸟教程 DCloud - 数字天堂官网、HBuilderX、HBuilder、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 二、下载 三、解压 四、启动程序

记一个framebuffer显示混乱的低级错误

记一个framebuffer显示混乱的低级错误 由于framebuffer的基础知识不扎实&#xff0c;这个任务上我多卡了两天&#xff0c;差点把我搞死&#xff0c;于此记录为后鉴。 打算用awtk做一个多进程项目&#xff0c;计划把framebuffer的内容通过websocket输出到浏览器上去显示画面, …

C++---入门

C补充了上的不足&#xff0c;使用各方面更加便捷&#xff0c;在C的基础上面向对象进行编译&#xff0c;学过C之后&#xff0c;对学习C的一定的帮助。 命名空间&#xff1a; namesp的定义&#xff1a;定义命名空间&#xff0c;需要使⽤到namespace关键字&#xff0c;后⾯跟命…

boost电路的同步和异步模式 及CCM、DCM模式 介绍

一、同步 异步 1.一般区别 电路结构 异步升压 IC&#xff1a;采用传统的 Boost 电路结构&#xff0c;主要由电感、开关管、二极管和输出电容等组成。同步升压 IC&#xff1a;与异步升压 IC 的 Boost 电路相比&#xff0c;其将二极管替换成了一个同步整流 MOS 管&#xff0c;…

yolov7源码解读1-训练前准备

一、怎么解决图片输入尺度不统一的问题 YOLOv7的矩形训练是指在训练时对输入图片进行尺寸调整&#xff0c;以提高模型处理长宽比差异较大的图片时的性能&#xff0c;同时避免过多的图像变形。具体来说&#xff0c;以下是矩形训练的处理过程&#xff1a; 1. 矩形训练的核心目标…

用梗营销来启动市场

目录 为什么梗营销适合初创公司 有效的梗营销技巧 梗不仅仅是有趣的图片&#xff0c;它们是包裹在幽默中的文化时刻。对于小企业家&#xff08;以及大企业家&#xff09;&#xff0c;梗代表了一种强大且性价比高的市场推广方式。让我们分解一下为什么梗营销有效&#xff0c;以…

职业院校人工智能实验室解决方案

随着人工智能技术的迅猛发展&#xff0c;企事业单位对具备高素质技术应用能力的人才需求愈发迫切&#xff0c;目前人工智能已经逐步从感知理解阶段转变为生成创造阶段&#xff0c;可以为各行各业提供多维的智能化应用服务。2024年的《政府工作报告》中首次提出了“人工智能”行…