一、前言

  我们都知道芯片,也知道芯片技术在21世纪是最重要的技术之一,但很少有人能知道芯片技术的一些细节,如芯片是如何构造的、为什么它可以运行程序、芯片又是如何被设计制造出来的等等。本文就尝试从最底层的二级管开始,逐一讲讲二极管、mos管、逻辑门电路、集成电路、大规模集成电路是如何逐步构造成我们所熟知的“芯片”。

二、从二极管到逻辑门电路

  二极管

  二极管是大家熟知的基本器件之一,可以说二极管的发明和大规模使用是现代工业腾飞最重要的基础之一。二极管的特性就是电流单向导通,如下图所示,一般情况下电流只能从A到B而不能从B到A,且这种单向导通还有个特点就是施加的电压必须大于某个数值,如硅二极管为0.5V才能导通,且导通后继续增加电压会导致电流大幅增加(相当于电阻下降)。

  在逻辑上可以这样理解:施加在二极管上的电压小于0.5V时它是不通电的(表现为极高的电阻),当电压等于0.5V时二极管突然就导通了(表现为极低的电阻)。所以我们总结一下二极管的特性:

  1、只能单向导通

  2、施加电压低于0.5V时完全不导通

  3、施加电压等于0.5V时突然完全导通

  事实上,科学家们正是利用上述的简单特性构建了庞大复杂的电子世界。

  三极管

  在二极管的基础上,科学家们进一步研究出了三极管。三极管的特点就是增加了一极,不由施加在两端的电压大小决定是否导通,加入了第三极,使用三极间压差来决定是否导通。如下图所示,工作时b、c、e极都施加了一定的电压,这里不探究具体电压差是如何导致c、e间导通的,简单来说就是通过各极间压差实现c、e间先是逐渐导通(表现为压差增大电流增大),而后变为完全导通(表现为压差增大而电流不变)。且这种特性也是挑方向的,只能是c到e的导通而不能是e到c的导通(即施加反向电压再高也不会反向导通)。

  逻辑上我们可以做如下总结:

  1、只能c到e导通(反向施加电压无法反向导通)

  2、压差低于某值A时完全不导通(无电流)

  3、压差高于某值A时逐渐导通(电流随压差增大)

  4、压差高于另一值B时完全导通(电流不随压差变化)

  逻辑门电路

  了解了基本器件后,我们再来说说数学。在数学上我们有三个基本逻辑:与、或、非。

  与(&):0&0=0、1&0=0、0&1=0、1&1=1

  或(|):0|0=0、1|0=1、0|1=1、1|1=1

  非(!):!0=1、!1=0

  科学家们使用二极管、三极管、电阻、电容在电路上实现了上述的三个基本逻辑,具体表现为:

  1)与门:A、B两端同时输入5V则L端输出5V,否则L端输出0V

  

  2)或门:A、B任意一端输入5V则L端输出为5V,A、B端同时为0V时L端输出为0V

  

  3)非们:A端输入5V则L端输出0V,A端输入0V则L端输出5V

  

  这里我们就不探究逻辑门的具体原理了,大家只要知道二极管、三极管的物理特性使得这种逻辑电路运行的非常稳定,以非门为例,当A端输入小于5V时L端输出稳定为5V,当A端等于5V时L端会立即输出为0V(这里忽略了很多电路细节和器件特性)。为便于使用,科学家们使用符号将这三个逻辑门进行了抽象:

  为便于使用,我们将其进一步抽象,如下图所示:

  从数学上来说,所有复杂的逻辑式最终都可以分解为最基本的三个逻辑组合,我们先温习一下高中的代数课:

  那在电路上,是不是就可以使用与、或、非这三个基本的逻辑门电路来分解?

 三、从逻辑运算到电路运算

  以加法为例

  下图是二进制加法的真值表,S是A+B,C是进位。

  科学家们使用逻辑式来总结了这个真值表,从真值表到逻辑式的转化是高中代数的基本内容。

  我们发现,S和C的输出可以由A与B的逻辑运算得到(一个异或门、一个与门)。那么,如果我们使用逻辑电路来实现逻辑运算,是不是就可以用电路来实现加法?

  第一步,我们先用逻辑符号来绘制上述的公式:

  第二步,将逻辑符号转为电路(没找到半加器电路,这个是全加器):

  

  第三步,焊接物理电路

  

  逻辑叠加

  通过加法的例子我们实现了从逻辑到电路的转变,根据这个原理我们可以简单的实现:

  1)减法器

  

  2)乘法器

  

  3)除法器

  

  4)8位加法器

  

  实际上我们发现所有的运算都是逻辑的叠加,逻辑最终可以转化为电路,所以我们可以得出结论:所有的运算最终都可以使用电路实现。

四、从电子电路到集成电路

  庞大的电子计算机

  看了前面的内容,我们知道了所有逻辑运算都可以使用电路实现,那么加法器、减法器、乘法器、除法器都是可以实现的,事实上一开始的“计算机”就是用于做这些加减乘除运算。使用逻辑门的好处显而易见,所有逻辑叠加问题都可以用电路的“叠加”来解决,无论是10位的加法、100位的减法、还是1000位的乘法,理论上来说只要二极管、三极管、电容电阻足够我们都可以实现。但是随着计算需求越来越大,计算器的体积变得越来越大,“耗电”成了一个大问题。下图是第一台通用计算机ENIAC,它可以每秒5000次加法或400次乘法运算,但是它使用了17,468根真空管(电子管)7,200根晶体二极管,1,500 个中转,70,000个电阻器,10,000个电容器,1500个继电器,6000多个开关。抛开成本因素,光耗电量就是一个天文数字。

  MOS管与集成电路

  体积庞大、造价高昂、耗电量成为制约计算机的核心问题所在,如果有办法缩小元器件的体积,体积、造价、耗电的问题都迎刃而解了。在这个需求的基础上集成电路诞生了,它不是使用电路将各种元器件连接起来,而是将各种元器件、线路直接“做”到了硅片上。

  下图是一个典型的PNP三极管示意图,本质上P与N的材质是一样的(硅),只是掺杂了不同的杂质改变了其电特性(二极管、三极管就是这么制造的)。所以有没有办法在一片硅上面按需求“做”出P结、N结,而后用“线路”将各P结和N结连接成电路,只要前期规划做好,数量庞大的三极管、二极管、线路就可以集成到一个硅片上了。

  mos管是金属(metal)、氧化物(oxide)、半导体(semiconductor)场效应晶体管,名字复杂其实本质就是由金属、氧化物、半导体组成的元器件。前面说到要将三极管、二极管、线路集成到硅片上,其中MOS管中的“半导体”就是P结或N结,用来组成三极管或二极管。“金属”就是连接各结的线路,“氧化物”就是各结间用以绝缘的隔离层。简单点说,集成电路就是在硅片上制造了很多的半导体(PN结)、金属(线路)、氧化物(绝缘层),这些半导体、金属、氧化物组成的器件我们称之为MOS管,无数MOS管按逻辑电路进行组合就是所谓的集成电路了。

  集成电路工艺

  现在我们找到了办法将器件缩小,下一步就是如何实现PN结、金属线路、氧化物。下图是一个典型的PNP晶体管剖面示意图

  在工艺上要做成这样需要很多步骤,大概有:

  1)切割:将工厂生产的硅锭切割成片

  2)影印:在硅片上涂一层光阻物质(想象成防护膜),然后按设计要求溶解部分光阻物质(让部分区域露出来)。工艺上是在紫外灯上面加一层有很多孔的遮罩,被紫外灯照射的光阻物质就溶解了,没有照射的地方还有保护。如下图所示,通过影印将部分光阻清除,露出部分硅片。

  3)刻蚀:露出该露的、遮住该遮的部分后,就使用刻蚀技术将没被遮住的区域“蚀”出一个沟,如下图所示。

  4)掺杂:有了沟之后就使用原子轰击这个“沟”使其掺入杂质形成P型衬底

  5)沉积:接着在P型衬底上沉积一层N型硅

  就这样反复影印、刻蚀、掺杂、沉积就得到了我们需要的MOS管。

 五、从集成电路到CPU

  我们将一块晶圆上制作了大量MOS管的叫集成电路,MOS管特别多的叫大规模集成电路,MOS管超级超级多的叫超大规模集成电路,其实就是工艺进步了。一块芯片上集成的电子器件越多、电路越复杂能实现的功能也就越多,所以我们不能只满足于做加减乘除这样简单的运算。但当时的科学家并没有“未来”的视野,他们当时急需的问题不是发明CPU,而是解决数据如何存储的问题。如果数据可以存储在电路里,那就可以实现很多复杂的操作,比如简单的编程。

  D触发器

  为了将数据“锁”在电路里,科学家们使用逻辑门组成了D触发器。其中CP是时钟控制信号(这里将其当做一个控制信号即可),当CP值为1时D输入一个信号则Q输出同样的信号,当CP值不为1时D输入任何信号则Q输出不变,如此就实现了将D信号“锁”在了Q。

  寄存器

  数个D触发器的组合就实现了一个寄存器,如下图所示就是一个4位寄存器,可以存储一个4位的数据,如“0101”:

  根据寄存器的工作内容又细分了:指令寄存器、程序计数器、地址寄存器、通用寄存器等等。

  运算器

  将数个寄存器与前面所说的加、减、乘、除计算电路结合起来就是运算器了,运算器的作用就是对寄存器(一个或多个)中的内容进行算数计算,而后将结果存入寄存器。

  控制器

  上图可以看到,运算器内有数个寄存器,那何时执行计算任务、计算那几个寄存器的数据、最终存储到哪里呢,这些都由控制器来完成。控制器由指令寄存器、指令译码器、程序计数器、堆栈指针、数据指针组成,它从指令寄存器中获取指令而后根据指令从外部存储中获取数据、控制运算器执行运算、获取下一步指令等等。这一且都是通过“时钟控制信号”和复杂的逻辑运算实现的。

  对于时钟控制信号,可以理解为一个节拍器,时钟源向CPU发送有节奏的高低电平信号,让控制器内部逻辑电路被激活,该逻辑电路又根据指令寄存器的内容生成各种控制信号指挥运算器读取数据、执行运算、读取下一步指令、存储计算结果等等。下图就是一个完整的控制器与运算器的示意。

  存储器

  存储器又叫高速缓冲存储器,它的作用就是存储即将交付CPU处理的数据并保存CPU处理的结果。实际上各种控制信号、数据都是放置于存储器中,控制器从这里获取下一步的数据和指令。

  CPU

  存储器、控制器、运算器的结合就是一个基本的CPU了,等等?似乎CPU没有什么特殊的功能啊,那它是如何执行这么多复杂工作的呢?实际上CPU的原理就是这么简单。当我们写好代码后,编译器就将这些代码翻译成CPU可以识别的数据格式,而后按顺序放入存储器中即可,控制器会根据预设的程序按节奏从存储器中获取指令和数据,控制运算器处理这些数据,最终实现代码功能。

六、CPU运作示例

  为便于理解其工作原理,我们做一个简单的示例。比如我们写了一段代码:

    A=1;

    B=2;

    C=A+B;

    输出C到屏幕

  编译器编译时可能会做如下翻译:

    1)将0001放入寄存器A、将0010放入寄存器B

    2)执行寄存器A+寄存器B,结果放入寄存器C

    3)读取屏幕显示器的存储地址,放入寄存器E

    4)根据寄存器E的数据(屏幕显示器地址),将寄存器C的数据(运算结果)写入该存储地址

  至此CPU就实现了一个简单的计算和屏幕显示。当然具体操作过程可能会比这个复杂无数倍。但是CPU的核心功能就是简单的算数运算,以及各种数据的读写。而编译器的工作就是将复杂的代码翻译成简单的算数运算和数据存储、数据移动。

七、总结

  CPU/集成电路/芯片当然不是这篇短文能讲述清楚的,篇幅所限我们主要精力放在了逻辑电路部分,如果想要了解更多关于CPU的知识我建议大家可以看《CPU自制入门》和《自己动手写CPU》这两本书,书上前几章对CPU的介绍还是非常有意思的。

  关注公众号“零基础爱学习”回复“CPU”即可获取书本电子版+原书光盘全部代码。

  

【零基础】一文读懂CPU(从二极管到超大规模集成电路)的更多相关文章

  1. kubernetes基础——一文读懂k8s

    容器 容器与虚拟机对比图(左边为容器.右边为虚拟机)   容器技术是虚拟化技术的一种,以Docker为例,Docker利用Linux的LXC(LinuX Containers)技术.CGroup(Co ...

  2. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  3. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

  4. 一文读懂Java动态代理

    作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...

  5. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

  6. 一文读懂clickhouse集群监控

    更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...

  7. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  8. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  9. [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图

    MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...

随机推荐

  1. POJ2773Happy2006题解--数论好题

    题目链接 https://cn.vjudge.net/problem/POJ-2773 题意: 求第\(k\)个与\(m\)互质的数 分析 因为\(gcd(a,b)=gcd(a+t * b,b)\) ...

  2. nuxt项目打包上线之二

    之前写过一篇nuxt打包上线的文章,请看这里:https://www.cnblogs.com/daisygogogo/p/11218809.html 上一篇文章的部署流程有点不好的地方,就是它适用于只 ...

  3. CSS用户界面样式之cursor/outline/resize

    1. 鼠标样式cursor 检测鼠标指针在对象上移动的鼠标指针采用何种系统预定于的光标形状 常用属性: default 小白 hands小手 /pointer move移动 text文本 2. 轮廓 ...

  4. SuperMap iClient3D for WebGL 9D怎么将s3m图层的纹理变更精细些

    设置S3MTilesLayer.lodRangeScale.默认值是1,设的越小越精细,最小值是0.01.越大越模糊,最大值是100

  5. SpringBoot+MyBatis+Mysql 6.X 版本日期型数据获,时间错乱,jason序列化时间相差8小时问题

    新项目是用的springboot+mybatis+mysql 6.0.6版本的驱动包来搭建的,在使用的过程中遇到以下2个问题 从mysql取的的数据日期时间,与真实的时间往后错乱了14个小时. spr ...

  6. css 之内容溢出滚动,隐藏滚动条(解决火狐浏览隐藏不了滚动条问题)

    解决火狐浏览隐藏不了滚动条问题 1.里层容器的width多17px,外层容器溢出隐藏,能兼容各个浏览器 .outContainer { width:350px; height:300px; overf ...

  7. 程序员和IT员不能错过的网站

    前言本文收录一些值得收藏的开发相关网站. 目录一.搜索引擎二.在线课程三.在线练习四.在线工具箱五.在线编译器六.技术论坛或社区七.音乐放松一下 一.搜索引擎搜索引擎大家最熟悉不过,本没有必要列出,但 ...

  8. idea仿eclipse的export导出功能

    自从开发工具从eclipse切换到idea来之后,才知道什么叫做'真香'.idea强大的扩展功能极大的拓展了他的可用性,最近有个功能就是通过idea的扩展插件搞定的. 事情是这样的,朋友使用eclip ...

  9. java——多线程并发库

    JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性. java.util.current包中提供了对线程优化.管理的各项操作,使得线程的使用变得的心应手.该 ...

  10. CentOS7 - Package does not match intended download 问题解决

    yum 安装软件,有时会出现 Error: Package does not match intended download,这时需要彻底清除已有的下载,然后重新安装即可. $ sudo yum cl ...