1.1 集成电路设计基础(IC设计)

集成电路(Integrated Circuit,IC)又称芯片,是现代信息社会的基石,它承载了信息时代的灵魂,是现代技术发展的精华结晶,所有现代的电子设备都必须依赖于芯片才能发挥出完全功效。集成电路现在已经演变为一个完整且独立的设备形态,单个芯片就可以完成一个传统的设备系统功能,达到真正的System on Chip(SoC)。现在任何一部智能手机的处理器芯片的处理能力就远超80年代的大型计算机了,同时,芯片也在朝着各个应用领域和应用场景演进,例如可穿戴式芯片,微机械芯片等。
一个典型的集成电路芯片,集成了大量的功能部件,包括模拟电路、数字电路以及CPU。数字电路主要用于数字信号的处理,模拟电路主要是由电容、电阻、晶体管等组成的,用于模拟信号的处理,主要包括射频电路(RF)、功率放大器(PA与LNA)、锁相环(PLL)、模拟滤波器、电源管理等。
对于单一功能的电路而言,采用纯粹的硬件逻辑设计方案基本能够满足应用需求。但对于通信系统或者移动互联网应用而言,芯片的功能需求时刻变化,应对的客户群体也形形色色,如果采用纯粹的硬件逻辑,必然使应用市场极为狭窄,因此复杂的系统级芯片必须SoC化或者软件化。
SoC化的优点很明显,对于同样的芯片,通过加载不同的应用软件,实现不同的功能定义,实现单一的芯片的通用化,从而达到单片成本最小化。因此在后续的设计中,需要熟悉如何将一个单纯的逻辑电路改造为能够支持各种软件定义的功能器件,实现芯片功能覆盖的软件化。

1.1.1 硬件与软件的优缺点对比

  1. 硬件的优点:
    (1)吞吐率高、全并行化处理,相对于软件可以实现10~100倍的性能提升;
    (2)相对于CPU/DSP设计而言,复杂度较低,整体规划简单;
    (3)软件设计相对于简单,而且代码精简;
  2. 硬件的缺点:
    (1)成本较高,需要额外的硬件资源,芯片面积相对较大,此外还有大量IP使用费用;
    (2)研发时间很长,从概念原型到RTL编写验证至少6个月;
    (3)一次成功率较低,通常需要多次迭代验证才能正常工作;
  3. 软件的优点:
    (1)成本较低,可以随时添加功能,而且不会随着芯片量产而发生变化;
    (2)调试简单,无须考虑时序收敛,功耗控制相对容易;
  4. 软件的缺点:
    (1)相对于硬件实现而言,性能较差;
    (2)算法实现对CPU/DSP的处理速度、存储容量有较高要求;
    (3)由于软件开发的不确定性因素很多,所以芯片上市后,还需要发布大量的补丁版本;

1.1.2 集成电路设计中的分工层次

IC设计通常包含多个方向,包括算法设计、系统架构、数字电路设计(数字前端)、模拟电路设计、版图设计、测试验证、数字后端与DFT(Design For Test)、芯片生产测试设计(DFM设计)、芯片固件与软件设计、电路板与应用原型开发等,只有将这些完整的组合在一起,才能设计出一个完善的、具有一定竞争力、能被市场接受的芯片。下图为芯片分工层次图。

根据不同的方向,对应着不同的工程师,主要可以分为系统架构设计工程师、算法设计工程师、电路设计工程师(数字前端设计工程师和模拟电路设计工程师)、芯片验证工程师、量产测试工程师、固件与软件工程师。

  1. 系统架构设计工程师
    系统架构设计工程师的设计重点是保证IC芯片的整体架构合理,各个基本单元模块功能均衡、不存在设计短板,而且芯片在可控性、可验证性、可测试性以及前后芯片产品的可维护性和延续性上具备卓越的性能。系统架构是整个IC设计中最基础的工作,产品是否满足市场和客户需求、上市时间是否领先竞争对手、功能是否有竞争力、解决方案的成本和芯片良率是否可控,都取决于系统构架。
  2. 算法设计工程师
    算法设计工程师的设计重点是保证IC芯片能够完成特定功能,且设计的算法具备可实施性。算法工程师能够决定芯片的性能和大部分的成本,同时也是系统构架和电路设计的中间桥梁。
  3. 电路设计工程师
    电路设计工程师设计的重点在于将算法精确地用电路实现,同时兼顾功耗、成本和电路可测试性,此外还需要独立设计模块控制电路、各种电路胶粘逻辑、时钟系统、复位系统以及全局控制逻辑。
  4. 测试验证工程师
    测试验证工程的工作重点在于根据设计规范(Spec)和设计需求,对电路进行测试验证,验证工作通常包含白盒测试与黑盒测试,往往需要引入很多的测试方法学(UVM)和测试手段,例如SVA等,此外还需要多个团队对同一款芯片做全方位的验证。
  5. 固件与软件工程师
    固件与软件工程师的工作重点在于配合电路设计工程师将整个IC芯片运行起来,充分挖掘芯片的功能潜力,并提供各种扩展创意。在当前的IC设计领域,固件与软件的开发工作量已经占据整个芯片开发的60%以上,而且还在持续增加,出现这种情况的原因在于单纯的电路逻辑无法应对灵活多变的市场需求,必须通过随时可变的软件进行应对。例如现在的LTE终端芯片,除射频信号处理外,所有的基带(baseband)都是可控和可编程的,而协议处理则基本交给多核CPU或DSP进行。现在很多领先的无线通信芯片设计公司,对软件设计的划分更加详细,包括软件平台(操作系统、设备驱动)、物理层协议软件、MAC协议处理、高层协议栈以及应用软件等。因此,对于芯片设计而言,软件就是整个芯片的灵魂,对于任何一款智能芯片的开发,首先应当想到的是如何灵活配置,并引入适当的软件支持。
    所以,我们不仅仅要会数字IC设计的能力,如果有时间精力那么还需要去掌握系统设计、算法、验证、软件等基础知识。

1.1.3 IC设计流程

IC设计的主要流程可以通过下图来描述:

基于HDL的设计流程,主要包含系统架构设计、软件结构设计和ASIC硬件设计三大部分。在芯片设计时,必须了解整个系统的应用场景,定义出合理的芯片架构,使得软硬件结合达到系统最佳工作状态。此外,需要建立起以IP复用或更大的平台复用为基础的观念,在整个流程中既要以IP复用为基础,又要将当前设计作为下一轮设计的IP和基础平台。基于HDL的设计流程如下:

  1. 系统需求指定
    系统设计主要是从需求确认开始,包含系统基本输入和输出及基本算法需求,以及系统要求的功能、性能、功耗、成本和开发时间等。通常会将用户的需求转换为用于设计的技术文档,并初步确定系统的设计流程。这个阶段是整个芯片项目开发中最重要的阶段,各类设计框架、验证模型均需要此阶段完成。
  2. 高级算法建模与仿真
    设计者将使用高级语言创建整个系统的高级算法模型和仿真模型。有了高级算法模型便可以得到软硬件协同仿真所需的可执行的说明文档,此类文档会随着设计进程的深入而不断地完善和细化。
  3. 软硬件划分过程
    设计者通过软硬件划分来决定哪些功能应该由硬件完成,哪些功能应该由软件来完成。此外,该步骤还涉及软硬件顶层设计与内部基本模块的划分。对于硬件而言,需要确定整体实现框架,包括全局模块设定(时钟、复位、功耗控制等)、主控模块实现方案、数据流(Data Flow)分解方案及接口时序、总线或数据交换接口设计、调试接口以及验证接口。硬件框架确定后,建立各种适合软硬件交互的验证环境。对于软件而言,则是在硬件框架基础上确定软件框架,包括确定HAL(硬件抽象层)、设计驱动与软件平台,底层软件、高层软件、应用软件及测试软件的层次划分以及相互调用接口。此外,软件还需要设计整体的自动测试框架。如果芯片开发者追求高效的软硬件结合,还应当根据敏捷开发的要求,设计以面向测试为中心的软硬件框架。
    软硬件划分以及内部框架的确认是一个需要反复评估、修改直至满足系统需求的过程。
  4. 软硬件同步设计
    由于软硬件的分工已明确,芯片的架构及软件的接口也已定义,接下来便可以进行软硬件的同步设计了。其中硬件设计包括RTL设计和集成、综合、布局布线及最后的流片。软件设计则包括算法优化、应用开发,以及操作系统、接口驱动和应用软件的开发。

1.1.4 IC硬件设计流程

从HDL设计到最终版图实现的设计流程如下图所示,基本上每个步骤都会用到某款EDA工具,这里最核心的设计源头还是硬件设计定义说明、模块设计(RTL代码变换)与IP复用。

  1. 硬件设计定义说明(Hardware Design Specification)
    硬件设计定义说明用于描述芯片总体结构、规格参数、模块划分、使用的总线以及各个模块的详细定义等。
  2. 模块设计与IP复用
    对于需要重新设计的模块进行设计,对于可复用的IP核可根据总线接口标准做一定的修改。
  3. 顶层模块集成
    顶层模块集成是将各个不同的功能模块(包括新设计的与复用的)整合在一起,形成一个完整的设计。设计的重点包括时钟模块、复位模块、功率控制等全局信号和各种顶层IP集成。对于ASIC 而言,还需要考虑IO PAD配置。
  4. 布局前仿真(Pre-layout Simulation)
    布局前仿真也叫RTL级仿真,通常通过HDL仿真器验证电路逻辑功能是否有效。通常在ASIC中采用的是Synopsys的VCS来进行验证。
  5. 逻辑综合(Logic Synthesis)
    逻辑综合主要采用EDA工具把硬件描述语言设计的电路自动转换成特定工艺下的网表,也就是将RTL级的HDL代码通过编译与优化产生符合约束条件的焖鸡网表。这个阶段会输出逻辑综合网表和时序信息,用户可以进行初步的时序仿真,并找出可能存在的逻辑时序问题。
  6. 版图布局规划(Floorplan)
    版图布局规划完成的任务是确定设计中各个模块在版图上的位置,主要包括:
    (1)I/O 规划:确定I/O的位置,定义电源和接地口的位置;
    (2)模块放置:定义各种物理的组、区域或模块,对宏单元进行预放置;
    (3)供电设计:设计整个版图的供电网络,基于电压降(IR Drop)和电迁移进行拓扑优化。
  7. 功耗分析(Power Analysis)
    在版图布局规划后,需要对电源网络进行功耗分析,确定电源引脚的位置和电源线宽度。在完成布局布线后,需要对整个版图的布局进行动态功耗分析和静态功耗分析。除了对版图进行功耗分析以外,还应通过仿真工具快速计算动态功耗,找出主要的功耗模块或单元,并返回到模块设计阶段进行优化。可以常用Spyglass工具。
  8. 单元布局和优化
    单元布局和优化主要定义了每个标准单元的摆放位置并根据摆放的位置进行优化。
  9. 静态时序分析(Static Timing Analysis - STA)
    STA是一种静态验证方法,通过对所提取电路中所有路径上的延迟等信息的分析,计算出信号在时序路径上的延迟,找出违背时序约束的错误,如检查建立时间和保持时间是否满足要求。通常采用Primetime工具。
  10. 形式验证(Formal Verification)
    形式验证也是一种静态验证方法,在整个设计流程中会多次引入形式验证以比较RTL代码之间、门级网表与RTL代码之间,以及门级网表之间在修改之前与修改之后功能的一致性。常用工具有Formality,Conformal以及Spyglass。
  11. 可测试性电路插入(Design for Test - DFT)
    可测试性设计是SOC设计中的重要一步,对于逻辑电路采用扫描链的可测试结构,对于芯片的输入/输出端口采用边界扫描的可测试结构。基本思想是通过插入扫描链,增加电路内部节点的可控性和可观测性,以达到提高测试效率的目的。一般在逻辑综合或者物理综合后进行扫描电路的插入和优化。
  12. 时钟书综合(Clock Tree Synthesis)
    SoC设计方法强调同步电路的设计,构建芯片内部全局或局部平衡的时钟链的过程称为时钟树综合。分布在芯片内部的寄存器和时钟的驱动电路构成了一种树状结构,这种结构称为时钟树,时钟树综合是在布线设计之前进行的。
  13. 布线设计(Routing)
    这一阶段完成所有节点的连接,类似于在电路PCB设计时,将各个元器件的连线在PCB上摆放好。
  14. 寄生参数提取(Parasitic Extraction)
    通过提取版图上内部互连所产生的寄生电阻和电容值,进而得到版图实现后的真实时序信息,这些寄生电路信息将用于进行静态时序分析和后仿真。
  15. 布局后仿真(Post-layout Simulation)
    布局后仿真也叫门级仿真、时序仿真、带反标的仿真,需要利用在布局布线后获得的精确延迟参数和网表进行仿真,验证网表的功能和时序是否正确。布局后仿真一般使用标准延时(Standard Delay Format- SDF)文件来输入延时信息。
  16. ECO修改
    ECO修改是工程修改命令的意思,这一步实际上是正常设计流程的一个例外,当在设计的最后阶段发现个别路径有时序问题或者逻辑错误时,有必要通过ECO对设计的局部进行小范围的修改和重新布线,而不影响芯片其余部分的布局布线。
  17. 物理验证
    物理验证是对版图的设计规则检查(Design Rule Check - DRC)及逻辑图网表和版图网表比较(Layout Vs. Schematic - LVS)。
  18. DRC用以保证制造良率
    LVS用以确认电路版图网表结构是否与原始原理图一致。

【数字IC设计】001. IC设计基础相关推荐

  1. IC设计和IC验证哪个更好?更有前景?

    设计好还是验证好这个问题让很多初入行的ICer困扰纠结,同时也是业内许多工程师热于讨论的话题之一. 总结一下,设计与验证的入行门槛.薪资待遇.岗位容量.发展路线等方面稍有区别,但差距并不算太大. 对于 ...

  2. 数字IC设计流程总结

    IC设计是一个很复杂漫长的过程,笔者以下图进行总结,其中后端总结的很模糊,后续了解学习后再进行补充.笔者会根据自己的理解,一步步的分享自己理解的设计流程.其中难免有问题错误,望同学老师指出,感谢!哔哩 ...

  3. 数字IC设计入门方法与资料大全

    0. 前言 正准备入行数字芯片设计的同志们可以看看以下几篇行业入门介绍的文章,因水平有限,文中难免存在疏漏.错误之处,与最新技术脱节之处必定不少,敬请细心的读者不吝指教.有用的您带走,没用的就当笑话看 ...

  4. 数字ic设计——UART

    UART定义   UART 的全称是通用异步收发器(Universal Asynchronous Receiver/Transmitter),是实现设备之间低速数据通信的标准协议. 是一种通用的串行. ...

  5. 大陆IC设计及工具链分析

    一.大陆IC设计行业分析 1.IC设计行业现状 ①中国IC设计行业市场发展现状 我国的集成电路设计产业虽起步较晚,但凭借着巨大的市场需求.经济的稳定发展和有利的政策环境等众多优势条件,已成为全球集成电 ...

  6. 数字IC设计经典书籍

    1 <Verilog HDL高级数字设计> 中文版和原著.这本书本人以为是讲Verilog方面的最好的一本书,看完此书后,相信大家的code水平会有很大提高.书中例子及其丰富,涵盖了RIS ...

  7. 数字IC设计工程师要具备哪些技能

    数字IC设计工程师要具备哪些技能 本文同步发表于:http://exasic.com/article/index.php?md=talk-01 本篇简单罗列了作为数字IC设计工程师的必备知识和学习建议 ...

  8. 数字IC设计需要学什么?

    看到不少同学在网上提问数字IC设计如何入门,在学习过程中面临着各种各样的问题,比如书本知识艰涩难懂,有知识问题难解决,网络资源少,质量参差不齐.那么数字IC设计到底需要学什么呢? 首先来看看数字IC设 ...

  9. IC公司认可的数字IC_FPGA设计课程

    Our goal: help you making good designs, not just find a job ... 用3天的薪水,掌握40万年薪工作的必备技能. Sky主讲:腾讯课堂金牌讲 ...

  10. 数字IC设计SOC入门进阶

    声明:本系列文章全部来自网络公开资料整理,并在文后附上网页链接.仅用于学习交流. 前言 硕士毕业从事FPGA逻辑开发已N年,对于未来的发展方向.技术提升等充满了困惑.迷茫.此时,恰逢数字IC设计岗位兴 ...

最新文章

  1. Flutter学习之”相对布局“
  2. 计算机开不开机是什么原因是什么原因,电脑开不了机的原因,详细教您电脑开不了机怎么办...
  3. boost::spirit模块实现复杂的日期解析器的测试程序
  4. HihoCoder - 1828 Saving Tang Monk II(bfs+动态规划/bfs+优先队列)
  5. BUUCTF--练习场--Include 1
  6. linux 释放进程res_linux内存查看及释放
  7. Java 打印目录结构
  8. pve 加大local容量_proxmox ve (PVE) 增加 local 目录的大小即扩容
  9. C# Exception 对象的属性
  10. Linux服务器架设笔记-Squid服务器配置
  11. 上海电力学院计算机软件技术大作业,计算机网络应用设计 大作业报告.doc
  12. Autorun 文件结构
  13. node子进程打不开php服务,mongoose,node.js_node启动服务器以后显示正常运行浏览器却打不开。,mongoose,node.js - phpStudy...
  14. php框架运行流程,thinkphp项目执行流程介绍
  15. linux 设置注释颜色,【转】vim注释和光标高亮行列的颜色设置
  16. 《认知盈余:自由时间的力量》读书笔记
  17. python win7 sp1_64位win7需要升级Windows 7 Service Pack 1(sp1)升级包
  18. 东芝2303am维护清零_东芝打印机2303A怎样清零?
  19. 分治——最近点对问题
  20. axure中继器案例

热门文章

  1. 产品配件类目税目分类_商品类别税率一览表
  2. Python调用Matlab教程
  3. php ip地址管理系统,phpIPAM – 免费开源的IP地址管理工具,重量级
  4. 磁盘不见了只剩一个c盘_电脑硬盘分区突然见了就剩个C盘到磁盘管理看也只有C盘...
  5. FocusLab新生大礼包三:Latex安装教程
  6. java的英文文献综述_java英文参考文献.doc
  7. 【Adobe美术基础】字体安装
  8. arduino控制雨滴传感器
  9. Ardino主控板控制雨滴传感器联动LED灯
  10. 实现栈的基本操作(c语言)