jjzjj

什么是EDA?常见的EDA工具有哪些?

IC修真院 2023-04-25 原文

大家都知道,芯片设计难度非常大,要把上千亿颗晶体管集成在面积不到指甲盖大小的芯片上。其实能实现这样目标所以靠的是电子设计自动化(Electronics Design Automation)工具,也就是我们所称的EDA工具。

什么是EDA?

EDA是电子设计自动化(Electronics Design Automation)的缩写,在半导体行业中,属于上游产业块-设计的一个子行业。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VerilogHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA 被行业内称为“芯片之母”,是芯片 IC 设计中不可或缺的重要部分,属于芯片制造的上游产业,涵盖集成电路设计、布线、验证和仿真等所有流程。

EDA工具发展

DEA工具的好坏,对于芯片的性能功耗和面积有决定性的影响。同样一段代码,不同的工具会做出截然不同的芯片,EDA的发展也不是一成而就的,而是经历了四个主要的阶段,分别是计算机辅助设计,计算机辅助工程,传统EDA, AI加持的EDA。

在上世纪70年代的中期,人们就开始使用计算机来辅助芯片的晶体管版图设计,PCB电路板的布局布线,设计规则检查等等这些相对简单的工作。到80年代卡菲尔米德和林康维发表了《超大规模集成电路系统导论》,提出来使用编程语言来进行芯片设计的的思想,这个也称为了EDA发展的重要标志。

在1986年和1987年,Verilog, VHDL这两种硬件描述语言诞生,几乎在同一时间,Aart de Geus博士发明了自动逻辑综合技术,来取代手动的设计工程,并且在1986年联合创立了Synopsys新思科技,这也标志着EDA工具开始走向了商业化。

从90年代到21世纪初期,在摩尔定律的指引下,晶体管的密度越来越高,设计流程也越来越复杂,EDA工具称为了芯片设计的必选项,也促进了EDA工具的进步,前面说的综合仿真,布局布线技术等都在这个时期得到了飞速的发展,这些EDA工具也缩短了研发周期,提升了设计效率,从而反过来去促进了芯片产业的技术革新,形成了正向反馈的螺旋式上升。

常见EDA工具有哪些?

EDA工具软件可大致可分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。

目前进入我国并具有广泛影响的EDA软件是系统设计辅助类软件和可编程芯片辅助设计软件:Protel、AlTIum Designer、、OrCAD、PCAD、LSIIogic、MicroSim、ISE、modelsim、Matlab等等。

这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同时还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。

EDA的重要性

目前,集成电路产业链主要包括上游支撑层、中游制造层及下游应用层等:

(1)产业链上游为支撑层,主要包括技术服务商、软件供应商、材料及设备供应商等。其中,技术服务商针对集成电路设计、生产、测试、封装及技术研发等环节提供各类模块化/专业化技术服务;软件供应商主要从事设计工具开发、销售和服务;材料及设备供应商提供集成电路设计和制造全过程所需的硅片、光刻胶、掩模版等原材料,以及硅片制造、晶圆制造、封测等专用设备。

(2)产业链中游为制造层,主要包括集成电路设计、生产、封装和测试企业。其中,集成电路设计企业通过对集成电路系统、逻辑、电路和性能的研究设计,最终转化为物理设计版图;集成电路生产企业负责晶圆生产,利用设计版图制作光掩模版,并以多次光刻的方法将电路图形呈现于晶圆上,最终在晶圆表面/内部形成立体电路;集成电路封装企业主要将加工完成的晶圆,进行切割、封塑和包装,以保护管芯并最终形成芯片产品;集成电路测试企业主要对芯片的可靠性、稳定性等进行检测。

(3)产业链下游包括各应用领域的系统厂商或制造商。该等企业最终将各类芯片成品集成于自身产品(如工业产品、消费电子产品、计算机相关产品、通信及周边产品)中并投入市场。EDA 属于集成电路产业链上游支撑层中的软件工具类,是整个集成电路产业的核心环节之一。目前,EDA 工具软件已广泛运用于产业链中游的设计、生产、封装、测试等环节。

需要学习资料的同学,可以私信留下正确的联系方式,老师会主动联系你发送学习资料!

有关什么是EDA?常见的EDA工具有哪些?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  6. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  7. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  8. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  9. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  10. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

随机推荐