一款CPU是如何设计出来的?

前面一段,我们了解了芯片的制造过程,也就是如何从沙子中提取硅、把硅切成片,在片上通过离子注入实现PN结、实现各种二极管、三极管、CMOS管、从而实现千万门级大规模集成电路的大致流程。接下来,我们继续了解一下,一款CPU是如何设计出来的。集成电路设计一般分为模拟IC设计、数字IC设计以及数模混合等。而数字IC设计,比如设计一款ARM Soc CPU芯片的基本流程如下:

1)设计芯片规格:根据需求,设计出基本的框架、功能、模块划分。有些复杂的芯片可能还需要建模、使用MATLAB等工具进行仿真。

2)HDL代码实现:使用VHDL或Verilog语言将要实现的硬件功能描述出来、通过EDA工具不断仿真、修改,验证直至逻辑功能完全正确。这种仿真我们一般称为前仿,只验证逻辑功能是否正确,不考虑延时。这个阶段也是最重要的阶段,一般会花费大量的时间、验证工程师不断验证芯片功能的正确性。有时候为提高效率,也会使用硬件仿真,通过FPGA平台进行验证。当然,这也是数字IC验证工程师干得活。

3)逻辑综合:仿真验证通过后,再使用专门的EDA工具将HDL代码转换成逻辑门电路。专业术语叫做将HDL代码翻译成门级网表(netlist)。在综合过程中,需要设定一些约束条件,让综合出来的电路在面积、时序等参数上满足要求。这个阶段的仿真一般称为后仿,要考虑延时等因素,跟实际芯片已经很接近了。

网表文件用来描述电路中元器件之间的连接关系。有数字电路基础的同学可能都会知道,任何一个逻辑关系或运算都可以转化为相应的门级电路来实现。而网表就是用来描述这些门级实现电路的连接信息。

还需要注意的一个地方是:门级电路是由不同的晶圆厂,也就是芯片代工厂以工艺库的形式提供的,比如中芯国际、台积电等。如果你设计的芯片要台积电代工制造,工艺要求是28nm,那么你在设计芯片时,台积电会提供给你28nm级的工艺库,你综合后生成的电路参数跟台积电生产芯片使用的工艺参数是一致的。

4)仿真验证:对生成的门级电路进行各种静态时序分析、验证。通过后,整个前端设计就结束了:从RTL代码到生成门级网表电路。

5)后端设计

通过前端设计,我们已经生成了门级网表电路,但这跟实际的芯片电路还有一段距离,我们还需要对其不断完善和优化,进一步设计成物理版图,也就是代工厂做掩膜需要的版图。后端设计包括很多步骤,一般包括:

DFT:designed for test,可测性设计。芯片内部往往会自带测试电路,在设计中插入扫描链。

布局规划:各个IP模块电路的摆放位置、时钟线综合、普通信号线的布线

版图物理验证:设计规则检查、连线宽度、间距是否符合工艺要求、电气规则简则等等。

物理版图验证ok后,会将这个物理版图以GDSII文件格式交给芯片代工厂(foundry),至此,整个芯片设计仿真验证流程结束,我们称为tap-out。

物理版图是由我们设计的电路转化而成的一系列几何图形,如上图,跟PCB版图类似,也分为好多层。物理版图包含集成电路尺寸大小、各层的拓扑关系等。代工厂会根据这些信息来制造掩模、然后使用光刻机,通过这些掩模在晶元的硅片衬底上开凿出掺杂窗口,接着就对硅片进行离子注入,掺杂不同的三价元素和五价元素,生成PN,进而构成各种元器件、电路。再通过刻蚀等工艺,可以在晶圆硅片上生成多层立体的3D电路结构。

好了,到了这里,我们已经把整个芯片设计、制造的大致流程给大家讲解完了,看起来很简单,其实集成电路设计制造的每个环节,都有极高的技术含量,集成电路行业是一个高度专业分工的行业,每个环节都有不同的行业巨头把守,从芯片设计、制造、各种EDA工具、IP核、光刻机、刻蚀机,每个环节都有非常专业的制造商、服务商、EDA工具商,精确严谨地配合,同时也分享着IC设计产业链上的超额利润。

设计一款CPU到底有多难?

网上很多媒体甚至用表格列举了中国芯片的依赖率及自给率,除了消费电子领域的应用处理器AP外,其它很多领域的自给率都是0%。这也从一个角度说明:我们集成电路发展的空间无比巨大、可以想象的空间很广阔。

差距比较大的地方,主要在模拟、射频、AD转换等领域,这些基本上被欧美一些巨头垄断,更悲催的是,很多核心领域现在已经禁止华人从事这方面的工作,可见美国政府对这些高精尖的领域技术保护非常重视。而在一些消费电子领域,由于ARM的IP授权模式,大大降低了SOC的设计门槛,再加上半导体产业成熟严格的分工体系:设计、代工、封装测试一条龙,所以中国最近几年在消费电子领域SOC设计方面发展迅速,涌现出了很多芯片和公司,比如海思、展讯、联芯、全志、瑞芯微等。从手机基带、RF到AP都慢慢缩小了与国际半导体巨头的差距。比如海思的麒麟系列,对标高通的骁龙系列,性能其实已经不相上下。

在ARM构建的生态和商业模式下,SOC芯片设计企业可以跟这些芯片巨头有同台竞争的机会,至少能参与进来:你牛X,可以拿到ARM的指令集授权,做自己的微架构,我没这个实力,搞个低端领域的,搭个积木还是绰绰有余的。嵌入式市场,不像PC X86一统天下,它是分散的、多需求的、难以垄断的。所以这也就给很多做ARM AP芯片的公司很多机会,你做手机、我做平板、智能电视、网络盒子、游戏机、挖矿机,只要找准一个方向,用低成本优势,就可以活下来,再图技术慢慢积累和发展。所以在ARM AP这一块,你会看到有很多公司,以后还会出现很多公司,这方面应该最快能满足芯片的自给,当然,这也给嵌入式开发者提供大量的工作岗位。

在PC和服务器领域,可能就没这么容易突破了。我们知道,在X86领域,是Intel和AMD的天下设计一款X86架构的芯片,到底难不难呢?其实不算难,国内能找出不少公司可以设计出来。那难的是什么呢?是生态和专利授权。Intel在X86领域可以说是一家独大,在它的专利保护下,基本上就封死了你想自己设计X86架构CPU的道路,钱再多也不让你做,不给你专利授权。AMD公司还是美国为了防止垄断,才促使Intel跟其专利交叉授权,达到一个平衡,不过AMD现在貌似也过得不轻松,在CPU这块被Intel压得也是步履维艰。除此之外,还有一家公司,台湾的威盛电子:VIA,就是电脑一开机显示VIA标志的,VIA也有一些X86专利,也获得Intel专利授权,但是做CPU貌似也很艰难,在芯片方面的盈利还不如旗下的酒店业务赚得钱多。其实这也没办法,赢者通吃,后面的可能连汤都喝不到。看网上的新闻好像跟上海国资合股成立兆芯,研究X86 CPU和显卡,国家砸了不少钱,不知道能不能趟出一条路来。

跟兆芯对标的国内芯片公司,有一家比较有名:龙芯。龙芯走的是MIPS路线。MIPS跟ARM、X86一样,也是一种指令集,也是当前世界上还在存活状态的指令集,跟ARM、X86可以说是三足鼎力吧。据说,龙芯当年500万拿到MIPS指令集的永久授权,然后自己不断添加、完善指令集,形成了自己的指令集。龙芯的优势是MIPS有了一定的生态市场,可以不必从零开始搭建自己的生态,有利于自己CPU的推广。最新研发的微架构GS464E根据网上的相关资料,已经超越Intel的i3架构,跟i5稍有差距,但同时已经超越了同时期的Intel Atom、VIA Nano、ARM Cortex-A57等低功耗架构。

这里得给大家普及一下什么是指令集和微架构。指令集,大家学过汇编语言的可能都知道一些汇编指令,这些汇编指令其实就是指令集的助记符,我们设计一个CPU架构,肯定要设计一系列指令,这些指令集可以看做是一个标准,我们在设计CPU硬件电路时就是根据这些指令集,去设计一些指令译码(译码电路)、执行电路,执行我们的指令集(根据指令集去设计相关电路例如0010表示将数据存放到寄存器A中就需要设计在指令寄存器中有0010指令时寄存器A打开可以存数据其他寄存器处于“关闭”状态)。那这个根据指令集设计的CPU硬件电路就是微架构。不同的CPU架构,指令集是不一样的,这就导致了,不同的CPU架构,需要的编译环境、开发环境是不一样的。比如ARM架构,我们需要开发一个编译器,将我们的C语言程序翻译成ARM的指令集,然后才能在ARM架构的CPU上运行。而对于X86平台,我们需要开发另外一个编译器,将C语言程序翻译成X86指令,然后才能在X86平台上运行。为什么在X86平台上不能运行ARM指令呢?很简单,因为CPU硬件电路在设计时是根据X86指令集设计的,只支持X86指令的运行,不支持ARM指令,无法运行。

由此,我们可以看到,不同的指令集,不同的CPU架构,就需要不同的编译器和开发环境,由此也就形成了不同的软件生态。对于很多芯片设计者来说,开发一个指令集并不难,现在国外甚至已经有开源的了,大家到Linux内核源码的arch目录下面可以看看,有太多的架构了。根据这些指令集设计一个微架构,设计出一个CPU也不难。难的是什么呢?难的是你要构建出跟你的CPU配套的一系列生态,比如编译器,你要自己开发,大量的应用软件你也要自己开发,否则谁会用你的CPU呢?这天大的工作量根本不是一个公司或团队能完成的,需要一个产业链的完美配合。所以,我们可以看到,就算你研发出了自己的CPU,要想推广起来,构建自己的生态,非常困难。推广困难就难以盈利,难以盈利就很难继续迭代下一代的产品,由此形成负反馈,如果没有背后资金或者国家支持,真的很难坚持下去。比如以前在学校曾参与过一个项目:设计一款基于某种自主架构的SOC。那这个项目需要多少人配合呢?芯片设计这方面的人不说,光软件方面就需要不少:编译器工具需要自己开发,这个工作量就忒巨大,芯片流片成功后,Linux内核、android系统需要自己移植,各种库,比如C库也需要自己移植,包括上面的应该程序、Java虚拟机等等,工作量巨大。后期系统软件,从驱动层、中间层到应用层,还需要不断针对这种架构进行优化。就算优化完美,没有大问题,还要推广,如果没有很多日常的应用加持,构建生态也很难。赚不到钱,性价比不划算,别人跟着一起构建生态的欲望也就不大。

综上,我们可以看到,设计一个CPU,从技术上讲并不难。但从商业或者说生态上想成功就很难:别人已经构建好的生态红利,会通过专利壁垒不让你进;而你从零开始构建全新的生态,没有了这种先发优势,很难很难。折中之策就是你想办法兼容这个生态。比如android手机,现在绝大多数APP都是基于ARM平台,Intel想推广自己的atom平台,那就需要大量的APP可以运行到自己的atom平台上,这就需要它自己的X86平台去兼容这些app。包括前几年,Intel这么牛逼的行业巨头也肯放下高贵的身姿跟深圳的一些白牌、山寨厂商打成一片,主要原因就是,Intel对ARM构建的生态也是无从下手,深挖洞、广积粮、树技术壁垒、单打独干已不适应行业玩法,也想自己构建这个生态,市场效果如何,还有待时间检验。

设计一款CPU,除了后续推广、生态构建比较艰难外,在设计过程中,其实很多核心IP、技术模块、EDA开发环境也需要外援,比如设计一款手机芯片,CPU需要向ARM公司授权,各种控制器IP如果自己研发不了,也需要购买,这些研发IP的公司一般分布在北美、欧洲、以色列等国家,而中国、台湾和韩国的主要厂家主要基于ARM架构和各种IP搭建应用处理器SOC,所以搞嵌入式的往往会看到,很多处理器都是东亚国家、美国设计,但是其实那些背后卖IP的公司倒赚了不少,因为很多做SOC设计的购买IP授权其实要交很多钱,它们只是赚了一些“组装费”。这还不算,在设计CPU的过程中,各种仿真设计、包括前端、后端设计、前仿后仿、都需要EDA开发环境支持,都需要花钱购买,或者花钱买培训。以前工作过的一家公司,貌似什么后端设计还是后端仿真的一款EDA软件,使用的是欧洲一家公司开发的,光软件版权费不说,他们过来培训,一个小时就是3000欧元,吃饭时间也要算在内,就这么刁,没办法。就此一家,不买拉倒。由此可以看到,芯片行业我们现在还相当于富士康阶段,赚取一个“加工费”而已,后面的道路,再加上各大芯片巨头的技术壁垒和封锁,任重而道远。

与此同时,半导体行业也是一个忒烧钱的行业,不像搞互联网,一台电脑一根网线,就可以开干。芯片行业处处都需要钱、各种仪器、设备、EDA软件、流片、封装测试都需要大把的钱,而且流片风险很大,很多芯片前几次流片还不一定成功,需要不断修改bug,不断完善。而流一次片就需要几百万,所以对于很多小公司来说,如果没有足够的资金支持,前几次流片不成功的话,基本上就黄了。所以,这也是为什么除了国家大基金,很多民间资本不愿意进入的原因:投资周期长、风险大。不如投资互联网、金融P2P,共享单车,搞搞外卖:风险小、收益快、容易割韭菜、容易收割各种智商税。然而,对于一个国家来说,如果人人都想短平快,搞金融,玩庞氏资本游戏,不肯投入时间、精力和资本去从事基础领域的研究,那未来会有更多的地方被卡脖子,就像中兴一样,一剑封喉。
————————————————
版权声明:本文为CSDN博主「宅学部落-王利涛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaixuebuluo/article/details/80132733

cpu设计过程的更多相关文章

  1. 串行CPU设计

    一.概述 串行CPU工作流程 串行CPU的时序流程如下图所示:取指.译码.执行.回写. 其中,取指.回写是与存储器打交道:而译码与执行则是CPU内部自个儿的操作. 我们究竟想要CPU干什么?     ...

  2. 单周期cpu设计代码解读

    目录 写在前面 单周期cpu设计代码讲解 概念回顾 Verilog代码讲解 写在前面 欢迎转载,转载请说明出处. 单周期cpu设计代码讲解 概念回顾 一.电子计算机的部件 分为:中央处理器(cpu). ...

  3. 物联网网关开发:基于MQTT消息总线的设计过程(上)

    道哥的第 021 篇原创 目录 一.前言 二.网关的作用 2.1 指令转发 2.2 外网通信 2.3 协议转换 2.4 设备管理 2.5 边沿计算(自动化控制) 三.网关内部进程之间的通信 3.1 网 ...

  4. 几本不错的CPU设计以及VLSI的书籍

    1. Microprocessor Design Principales and Practrices with VHDL  特点:电路与VHDL一一对应,比较清楚,而且还用MAX+plus进行仿真 ...

  5. 从涂鸦到发布——理解API的设计过程(转)

    英文原文:From Doodles to Delivery: An API Design Process 要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你 ...

  6. OO设计原则 -- OO设计的原则及设计过程的全面总结

    这部分增加一点自己的感想,OO设计原则下面讲述的很清晰;看完之后有点感想如果我们在实际开发当中能够把这些原则熟烂于心的话那我们的代码质量和个人能力会有很显著的提神.根据自己的实际经验看很多开发者在开发 ...

  7. 单周期CPU设计的理论基础

    写在前面:本博客内容为本人老师原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法UR ...

  8. CMDB经验分享之 – 剖析CMDB的设计过程

    作为IT管理的核心,CMDB逐渐成为系统管理项目实施的热点.在很多的案例中,由于忽视了CMDB的因素,ITIL的深入应用受到了极大的挑战.同时,由于CMDB是IT管理信息的集中,CMDB也是一个重要的 ...

  9. verilog实现的16位CPU设计

    verilog实现的16位CPU设计 整体电路图 CPU状态图 idle代表没有工作,exec代表在工作 实验设计思路 五级流水线,增加硬件消耗换取时间的做法. 具体每一部分写什么将由代码部分指明. ...

随机推荐

  1. 怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结

    转至:https://blog.csdn.net/erlian1992/article/details/47342189 最近一直在看全国计算机三级网络技术这本书,看到第二章的时候,不免会遇到计算机中 ...

  2. linux模拟cpu占用100%脚本

    转至:https://www.cnblogs.com/opma/p/11607434.html 脚本如下: #! /bin/sh # filename killcpu.sh if [ $# -ne 1 ...

  3. Java课程设计---安装解压版mysyql

    1.解压 将mysql-5.7.13-winx64.rar解压到C盘根目录.(将原有data文件夹清空,注意是清空,不是删除data文件夹) 2. 配置环境变量MYSQL_HOME (参照java打开 ...

  4. omnet++:官方文档翻译总结(三)

    翻译总结自:Turning it Into a Real Network - OMNeT++ Technical Articles 接官方文档翻译总结(二),本节主要是真实网络的搭建 Part 4 - ...

  5. Pandas:loc iloc ix用法

    参考:Pandas中关于 loc \ iloc \ ix 用法的理解 相同点 使用形式都是 df.xxx[ para1 , para2 ] #xxx表示loc iloc ix#df表示一个DataFr ...

  6. 超强视频超分AI算法,从此只看高清视频

    最近发现一个特别强的视频超分算法----BasicVSR,在真实世界数据集中,实现了前所未有的视觉重建效果,最近它还拿下了超分比赛NTIRE 2021三冠一亚的优异成绩,登上了CVPR 2022. 视 ...

  7. Wordpress Calendar Event Multi View < 1.4.01 反射型xss漏洞(CVE-2021-24498)

    简介 WordPress是Wordpress基金会的一套使用PHP语言开发的博客平台.该平台支持在PHP和MySQL的服务器上架设个人博客网站.WordPress 插件是WordPress开源的一个应 ...

  8. 面试题 正则表达式 验证邮箱 Pattern.matches

    故事背景 今天面试遇到这道题,对正则表达式还是有些懵,面试完回家复盘实现一下.这里使用到了 Pattern 这个类来校验正则表达式. 正则表示式分析: ^([a-z0-9A-Z]+[-|\\.]?)+ ...

  9. 《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)

    1.简介 今天主要是讲解和分享:TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用dependsOnMethods,testNG会自动根据@Test方法名称 ...

  10. 一比一还原axios源码(五)—— 拦截器

    上一篇,我们扩展了Axios,构建了一个Axios类,然后通过这个Axios工厂类,创建真正的axios实例.那么今天,我们来实现下Axios的拦截器也就是interceptors.我们来简单看下Ax ...