给出结论:       数字芯片设计包括:数字前端和数字后端,具体划分:数字前端、数字验证、DFT(Design For Test)和数字后端。       数字IC设计和FPGA开发的关系:数字IC设计前端(和你具体的是数字IC前端的设计部分,也就是芯片功能代码编写部分)和可以理解为FPGA开发;同时还有一些嵌入式FPGA开发工程师,专门用FPGA实现某一场景的功能,也是一种职业。       其实很多人都会有疑问,我们做FPGA开发到底和数字芯片设计有什么关系,或者说两者有什么区别,最近我做了一些调研,因为我个人打算做数字IC前端设计,所以后端的内容可能讲的会浅一些,OK!大概分以下几方面为大家阐述:           FPGA和数字ASIC的区别          做FPGA开发转ASIC需要补充哪些学习内容          做数字IC工程师需要具备哪些技能          文章比较长,同时不能把内容讲的很全面,不过看完本文会对数字IC设计有所了解,对进一步学习会很有帮助。              一:FPGA和数字ASIC的区别        先上一张图,然后展开讲解:                      层面                FPGA)                ASIC                        时钟设计                推荐同步时钟设计;全局时钟驱动                异步时钟设计;全局门控时钟树驱动                        布线方式                布线较为局限                布线很灵活                        功耗                较高                较低                        设计频率                相对较低                相对较高                        设计周期                短                长                        开发成本                低                高                        产品价格                高                低                        灵活性                易于修改,可重复编程                不可修改,不能重复编程                        应用                适合于不断演进的标准                       高速、复杂、低功耗设计                                   时钟设计              首先同步几个概念:       同步时钟:当两个时钟间的相位是固定关系的,则可以称这两个时钟为同步时钟(synchronous clock)。一般同源,如同一个MMCM or PLL产生的两个时钟可以称为同步时钟,因此可以将主时钟和与之对应的衍生时钟约束成同一个时钟组。简单理解就是假如一个时钟1G,一个时钟是2G,2G/1G = 2(整数),为同步时钟。       异步时钟:无法判定两个时钟间相位时,则可以称这两个时钟为异步时钟(asynchronous clocks)。通常情况下设计中不同的主时钟一定是异步时钟,因此可以将这两个主时钟及其衍生时钟约束成不同的时钟组。简单理解就是假如一个时钟1G,一个时钟是1.5G,1.5G/1G != 整数,为异步时钟。       时钟树:由许多缓冲单元(buffer cell)平衡搭建的网状结构,有一个源点,一般是时钟输入端(clock input port),也有可能是design内部某一个单元输出脚(cell output pin),然后就是由一级一级的缓冲单元搭建而成,具体的多少级,根据你的设置以及所使用的单元而定,目的就是使所用终点的clock skew(一般最关心这个)、insertion delay以及transition了,满足设计要求。       门控时钟:在数据无效时,将寄存器时钟关闭的技术,能够有效降低功耗,是低功耗设计的重要方法之一。门控时钟是一个逻辑模块,在寄存器的输入数据无效时,将寄存器的输入时钟置为0,而此时寄存器值保持不变,此时没有时钟翻转,避免了动态功耗。       看完这几个概念之后,可能对FPGA和ASIC时钟设计有一定的概念了。              (1)FPGA时钟管理        在FPGA设计中采用全局时钟(同步时钟)资源驱动设计的主时钟,目的达到最低的时钟抖动和延迟。FPGA 全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小,如下图所示。为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加。         FPGA的时钟包括三种,附一张A7的FPGA时钟图:                1)全局时钟        FPGA的全局时钟是从晶振分出来的,最原始的频率。其他需要的各种频率都是在这个基础上利用PLL或者其他分频手段得到的,上面的图BUFG是全局时钟缓冲器,可用作时钟使能电路,以使能或禁用跨越多个时钟区域的时钟。              2)区域时钟        上图中的BUFR为区域缓冲器,驱动同一时钟区域中的所有时钟目的地,并可编程输入时钟频率。              3)IO时钟        IO时钟缓冲器(BUFIO)驱动I/O时钟,提供对同一I/O bank中所有时序I/O资源的访问,上图中没有标出。              这里不详细介绍FPGA时钟管理,下面的文章讲的还不错。       Xilinx 7系列FPGA架构之时钟资源(一)         (2)ASIC的是时钟设计          上图的STM32F4的时钟,搞过嵌入式的都知道,我们在配置时钟时需要对时钟的使能,不然肯定是不可以用的,在这里我们可以理解为STM32采用门控时钟驱动。              总结:        FPGA推荐采用同步时钟设计,但是有时避免不了跨时钟域操作,下面的FPGA跨时钟域的说明       FPGA基础知识19(FPGA异步时钟设计中的同步策略 异步时钟 打两拍 握手机制)               其实两者最大的区别是:       (1)FPGA时钟树已经给定,我们只需要配置,而ASIC需要后端设计人员设计时钟树。       (2)FPGA未采用门控时钟设计,而ASIC一般为门控时钟驱动。              2. 布线方式       (1)FPGA的布局布线        FPGA是由许多的逻辑单元构成的,逻辑单元包括门、查找表、和触发器。它们的位值已经固定,使用FPGA厂商提供的软件工具,根据所选芯片的型号将综合输出的网表适配到具体FPGA器件上,这个过程就叫做布局布线。所谓布局(Place),指将逻辑网表中的硬件原语或者底层单元合理地适配到FPGA内部的固有硬件结构上,布局的优劣对设计的最终结果(在速度和面积两个方面)影响很大。所谓布线(Route),是指根据布局的拓扑结构,利用FPGA内部的各种连线资源,合理正确连接各个元件的过程。FPGA的结构相对复杂,为了获得更好的实现结果,特别是保证能够满足设计的时序条件,一般采用时序驱动的引擎进行布局布线,所以对于不同的设计输入,特别是不同的时序约束,获得的布局布线结果一般有较大的差异。              (2)ASIC的布局布线          上图可以看到,ASIC的布局布线较为复杂,需要按照设计规则,灵活布线。              3. 功耗       之所以FPGA功耗比ASIC高,与FPGA内部结构有关,FPGA基于占用大量硅面积的、每个单元六个晶体管的静态存储器(SRAM)的查寻表(LUT)和配置元件技术的FPGA,其功耗要比对等的ASIC大得多。查找表结构含义可以理解为使用查找表结构来实现一部分功能,会有资源的浪费。ASIC可以使用低功耗技术,像门控时钟、DVFS(SOC级别技术)等技术降低功耗。              4. 设计频率       实现同样的功能,做成ASIC的频率至少高于FPGA实现的2~3倍,这里简单说明ASIC的频率为什么会比ASIC的设计频率高:       FPGA内部是门、查找表、触发器,每个硬件单元的位值固定,为了实现我们的功能,进行搭积木的操作,这就会出现以下问题:       (1)布局方面(器件导致的延迟),FPGA无法改变每个硬件资源的位置,增加了布线的长度,ASIC相对比较灵活,可以根据需求摆放逻辑单元的位置。       (2)布线方面(走线延迟),FPGA由于逻辑单元的位置增加布线长度,还有本身的LUT结构,也会增大信号传输的时延。       详细可以参考:       为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz?               5. 设计周期       这里给出两张图        FPGA开发流程                大概可以看出,ASIC开发周期要比FPGA长很多,主要的时间差还差在ASIC设计中验证和后端。              6. 开发成本       ASIC比FPGA开发成本高主要有以下几点原因:       (1)ASIC开发周期比FPGA开发周期长,会投入更多的人力资源。       (2)ASIC流片费用很贵,Cost=Masks+N×Wafers,即:价格 = 掩膜+N×硅片,掩膜的费用较高。              7. 产品价格       上面阐述实现同样功能,FPGA相对于ASIC有大量的资源冗余,或者说FPGA结构更为复杂,导致相同的产品做成FPGA的价格要高于ASIC。       注:虽然流片成本高,Cost=Masks+N×Wafers,主要还是在Masks,如果量产上亿颗,每个硅片的价格显然会下降。              8. 灵活性       FPGA(Field Programmable Gate Array)       ASIC(Application Specific Integrated Circuit)              9. 应用       (1)因为FPGA具有灵活性,所以用到适合于不断演进的标准中,或者是用量比较小的场景。       (2)因为ASIC的性能比FPGA强,所以适用于高速、复杂、低功耗设计。              二:做FPGA开发转ASIC需要补充哪些学习内容        首先先同步几个概念:       亚稳态和跨时钟域的概念:       亚稳态与跨时钟域66 赞同 · 8 评论文章        建立时间:时钟沿到来之前数据所要保持稳定的时间。       保持时间:时钟沿到来之后数据所要保持稳定的时间。       DVFS:DVFS 即动态电压频率调整,动态技术则是根据芯片所运行的应用程序对计算能力的不同需要,动态调节芯片的运行频率和电压(对于同一芯片,频率越高,需要的电压也越高),从而达到节能的目的。       STA:静态时序分析,对建立时间和保持时间的分析。           数字IC流程讲解           在这里大概再总结以下数字IC设计,根据下图进行讲解:         (1)系统需求说明        做市场调研,确定数字IC的功能、性能指标、完成设计的基本算法。              (2)高级算法建模与仿真        这部分一般指定数字IC功能的行业人员来做,如做数字信号处理芯片、基带芯片、雷达的芯片,使用matlab对一些算法进行仿真;做数字图像处理的芯片,使用C/C++仿真图像/时频的算法仿真,这两部分一般由通信的专业或计算机专业的人来做。              (3)软硬件的划分和任务的分配        哪些部分用软件来做,哪些部分用硬件来做;软件在操作系统来跑的代码,硬件方面是硬件逻辑电路(底层的晶体管电路)实现。完成这一部分后,分成两路,一路人做软件,一路人做硬件。根据第二步的高级算法建模与仿真,软件做相应的模块,硬件做相应的模块,编写Verilog代码。              (4)软硬件接口的定义        这里可以理解为硬件实现的部分通过什么方式和CPU进行数据交互,常见的硬件接口:IDE(Integrated DriveElectronics,电子集成驱动器)、SCSI(SmallComputerSystemInterface,小型计算机系统接口)、USB、RS232/485、VGA、HDMI、PCIe等。接口选取或定义根据性能指标(吞吐量)或数据传输的类型(串行/并行)。              (5)进一步的精确分析,编写出芯片的spec(说明书)。        有了spec,就可以进行数字芯片设计了。              下面主要介绍数字IC前端、验证、DFT和后端的设计,流程下图所示(每个公司设计流程主要是在验证和STA方面有差异,越大的公司分工越细,验证和STA操作越多):         (1)RTL设计。编写VHDL、Verilog或System Verilog硬件描述语言对寄存器之间的传输进行描述。       (2)功能仿真,编写test bench,对照spec进行电路功能进行验证。       (3)逻辑综合、DFT。逻辑综合将RTL代码生成门级电路——逻辑网表(和我们做PCB设计类似,逻辑网表相当于原理图,上面通过网络标号将各个部件连接,这里会编写约束文件{FPGA开发中的xdc文件类似}进行逻辑综合);DFT:在进行电路的前端设计时,就预先规划、设计出如何在样片中进行电路的测试方案和办法,并通过逻辑综合过程完成芯片内部专用测试结构的插入,一遍在芯片形成后能按照预先制定的方案进行相应的电路功能测试的一种设计方法。也就是进行可测性设计,就是在原有的电路中插入专门测试的电路(插入电路)。       (4)形式验证。对设计过程中不同阶段的输出结果进行逻辑功能一致性的对比,根据电路的结构,判断两个设计在逻辑功能上是否对等。下面这篇文章将形式验证讲的很清楚:       你不可不知的验证方法31 赞同 · 0 评论文章        (5)STA。通过EDA工具,提取电路中所以路径的延迟信息进行分析,计算出信号在路径上的延时,检查时序是否满足设定的时序约束要求。       (6)版图物理规划。通过对EDA工具进行输入标准单元库、标准I/O库、综合后的网表、各种约束文件等,规划好让EDA工具完成各模块的位置摆放、电源网络的设定、I/O信号出口位置、同时确定面积、封装、工艺、噪声、负载能力等参数。       (7)功耗分析。确定电源引脚的位置和电源线的宽度是否满足要求。对整个版图进功耗分析,即要进行动态功耗分析跟静态功耗分析,找出主要的功耗单元或者模块,以供优化。       (8)单元布局与优化。根据floor-plan中的布局规划,摆放网表中调用的所以标准单元,EDA工具自动对时序约束、布线面积、布线拥堵等综合考虑标准单元的摆放,从而依靠EDA工具完成电路的布局设计跟优化(Floor Plan主要目的是要确定design的形状大小,出Pin的位置已经所有macro的摆放)。       (9)时钟树综合(clock tree synthesis,CTS)。EDA工具按照约束,插入buffer,使时钟的源头(时钟根节点)到达各个需要时钟驱动的器件(各叶子节点,如触发器)的时间基本一致的过程。       (10)自动布线。完成模块、节点的相互连线。       (11)STA。这一次的STA比较重要,结果也是最准确的,作用与上述相同。       (12)DRC(设计规则检查)。检查连线间距,连线宽度等是否满足工艺要求。       (13)LVS(版图电路图一致性检查)。检查芯片的功能是否和设计预期一致,同时分析性能是否满足需求。       总结:       (1)可以看出整个芯片设计的流程战线拉得很长,每一部分在公司中都会有对应的职业,Verilog代码编写只占一小部分,对于ASIC设计过程中编写的Verilog根据前面的建模仿真和后端的需求来编写。       (2)在项目启动,做好spec后,此时验证、DFT、后端同时进行,设计方面开始根据spec编写Verilog;验证根据spec搭建UVM验证;DFT工程师也会搭建一系列测试框架;后端编写一系列的脚本文件。       (3)像STA,逻辑综合,前端和后端都需要掌握。              2. 做FPGA开发转数字ASIC补充学习内容       1)ASIC时序更为复杂(时序优化问题,STA或DFT):性能评估和性能优化的各种优化手段,以及针对建立时间和保持时间的计算和优化。       2)功耗:ASIC存在各种优化功耗手段(系统级、架构级、代码级、综合、布局布线、版图等),门控时钟,门控电压,DVFS等。       3)FPGA推荐同步时钟,ASIC异步时钟(全局异步、局部同步)设计(时钟树的设计);重点是多时钟域的亚稳态处理。              3. 建议参考文献:       (1)Bhasker J, Chadha R. Static timing analysis for nanometer designs: A practical approach[M]. Springer Science & Business Media, 2009. 做STA分析的经典书籍(前端设计和后端设计都需要掌握,非常重要)       (2)这本书主要讲DC(Design compiler,synopsys公司的综合工具),synopsys公司一家独大!!                       (3)数字VLSI芯片设计 使用cadence和synopsys cad工具,介绍如何使用Cadence和Synopsys公司的CAD工具来实际设计数字VLSI芯片。(Very Large Scale Integration,超大规模集成电路)                       (4)数字IC设计:方法、技巧与实践,本书内容主要是数字芯片前端设计,不涉及模拟或是混合电路的芯片设计,而前端是指在进行物理设计(布局布线)之前的内容。                       (5)数字集成电路物理设计(做数字IC后端的经典书籍)         参考书籍下载地址:       数字IC设计参考文献,共5.rar-电信文档类资源-CSDN下载               三:做数字IC工程实需要具备你哪些技能            前端设计(数字芯片设计工程师)          紫光展锐:         总结主要工作:       (1)读文档和写文档。两个文档分别叫Function spec和Design spec。所有工程师都需要写很多文档,依照文档去做设计。读文档主要包含很多各种各样的协议,比如USB协议,SD卡协议等,文档占了前端设计工程师很大的工作量。       (2)编写代码。主要用到的语言是Verilog,有时候也会用到C语言和C++。写出的代码叫RTL,有经验的工程师写出的代码风格都比较好,因为代码最终都要变成电路,他们更加了解每句话最终变成电路是什么样的,这是比较核心的技能。如果是做SOC的工程师,那么对CPU也需要了解。       (3)Debug。非常重要的一个环节,对于前端设计工程师来说,大约20%的时间用来写代码,80%的时间用来debug,且前端设计工程师的debug会贯穿整个流程。       (4)support。因为最初的源头代码是前端写的,所以前端往往需要从前跟到后,甚至到最后FPGA的上板测试,原型验证流程、点亮都需要进行支持。              2. 数字验证         (1)读文档和写文档。两个文档分别称:Verification spec、Test plan。       (2)编程搭建验证平台:通常是用Systemverilog/UVM,如果做SOC,则用到C或C++。验证工程师也需要学习很多脚本语言,如Perl、Makefile、python等。       (3)Debug。创建测试用例,跑仿真。       (4)support。同样验证工程师也需要提供一些技术支持。       数字前端设计工程师和数字验证工程师的核心能力:        (1)学习各种标准/文档的能力。       (2)编程能力。       (3)Debug能力。              3. DFT(做DFT没有明确的划分)       (1)EDA工具使用。将DFT技术,常见的如Scan,Mbist,Boundary Scan技术,实现到设计中。       (2)编程。产生测试向量并验证测试向量,编程其实相对较少,基本是在原来的模板上去修改,对编程技能要求没有那么高,能做基本编程即可。根据实际情况,有些公司DFT也分为DFT Design和DFT Verification两个岗位。       (3)协助后端工程师完成test模式的时序收敛。       (4)协助测试工程师进行机台测试,debug failure,提高芯片良率,后期的ATE测试,也是DFT工程师经常要做的工作。              4. 数字后端         (1)逻辑综合。把写的代码综合成网表,当然,逻辑综合后面还有一些小流程,包括形式验证。       (2)自动布局布线。将把网表转化为版图。       (3)静态时序分析(STA)。数字后端非常核心的一个环节,怎样做好STA,怎样修掉timing至关重要。       (4)物理验证:最终变成版图之后,还需要做一些物理验证,主要是做一些DR,CR,LBS。       (5)功耗分析:对功耗做预估,后续对芯片做酵母分析的时候需要用到这些值       综上,后端设计工程师要做的事情是非常多的,但每家公司对后端的要求都不同,有些大公司里,上面5个步骤,每个步骤都有专门的人做,小点的公司可能就要多做几个步骤,甚至全部都要做,有的小公司可能不会去做功耗分析。       后端设计工程师需要掌握的东西会比较多,但是不要求每一项都很精通。              核心技能要求:        (1)EDA工具使用:需要掌握Innovus/Encounter,ICC/ICC2,DC等等多种工具。       (2)脚本语言:TCL、Perl、Python等。       (3)分析报告。       (4)修错误。       以上是本人最近调研的总结,欢迎大家一起交流讨论,有问题请指正。       刚开始学习数字IC设计时,应经常完善verilog和sv语法体系!       附上新手刷题网站:       HDLBitshdlbits.01xz.net/wiki/Main_Page               日常巩固和入职前刷题网站:       知乎 - 安全中心www.nowcoder.com/exam/oj?tab=Verilog%E7%AF%87               比较好的入门和基础书籍推荐:       verilog入门书籍(这本书挺薄的,讲的也比较基础):                               清华现货B2】数字电路与逻辑设计 第2版第二版 张俊涛                                        芯片验证书籍推荐:                           芯片验证漫游指南 从系统理论到UVM的验证全视界+syste                                            以上阐述的内容有问题可以评论或私信我,欢迎交流~, 本文原发于数字IC设计流程以及FPGA开发和数字芯片设计关系 - 知乎 (zhihu.com)     
点赞 22
评论 2
全部评论

相关推荐

05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务