昨晚在回顾之前所写的问答时,我发现一篇关于“CPU是怎么认识代码”的问题热度很高,很多朋友表示看了我写依旧云里雾里,不得要领。原因在于我主要讲的是编译器的作用和CPU的工作模式,没有涉及到更加底层的知识。大家的疑惑主要集中在一点:我们都清楚CPU只认识0和1,但CPU到底是如何认识0和1的呢?
机器是没有思想的,只会安装规定好的电路工作我们在学习单片机的时候,都会将写好的程序烧录进CPU里。那么各位有没有想过,这个过程为什么要叫“烧录”?
原因就是它是真的在烧:一块芯片的内部是密密麻麻,呈矩阵排列的熔丝。当我们写好程序后,程序经过编译器转换成二进制代码(0或1),再通过烧录器的大量流烧断熔丝,将这些二进制代码写进空白的芯片。程序中的0表示这条熔丝要烧断,1表示这条熔丝不烧,以此方法记录二进制信息。程序烧录好后,芯片就有了逻辑功能。
简单来讲,烧录就是规定好了电路,用户只需给CPU通电就行,它就可以按照事先规定好的电路得出结果。从用户的角度来看,好像是计算机读懂了我们写的程序,但实际上它就是循规蹈矩,这点和我们去开灯关灯没什么区别,只是通断更多,电路状态更加复杂。
下图是一张早期的只读存储器PROM,由于它在烧录后熔丝无法恢复,所以只能用来存储特定的程序,所以也被叫做一次性存储器。
现在这种熔丝设计的存储器基本上被淘汰了,取而代之的是可以反复擦写的EPROM,在结构上是这样的:
我们会发现,EPROM的并没有采用熔丝设计,而是一种像沟壑的东西,这其实是现代数字电路的基础——场效应管。在具体介绍场效应管前,我们先来了解一下计算机的发展和集成电路。
计算机发展史和数字电路从1946年第一台真正意义上的电子计算机ENIAC面世至今,计算机的硬件技术已经发展到了第四代。
- 第一代电子管计算机:逻辑元件采用真空电子管,体积大,可靠性差,成本高昂,为日后计算机的发展奠定了基础;
- 第二代晶体管计算机:逻辑元件采用晶体管,电子线路的结构得以优化改善,大大提高了计算机使用寿命,减小功耗;
- 第三代集成电路数字机:逻辑元件采用中小型规模的集成电路板,速度大幅提高,性能更强,计算机正式迈入图像和文字处理;
- 第四代大规模集成电路:逻辑元件采用大规模和超大规模的集成电路,性能巨幅提升,成本降低,计算机开始走进千家万户,也是当下我们主要使用的计算机类型。
根据功能和结构的不同,集成电路可以分成三种:模拟电路,数字电路,数/模混合电路。由于模拟电路不稳定,且抗干扰能力较差,而数/模混合还不太成熟,目前我们主要使用的集成电路板都是由数字电路搭建的。
所谓数字电路,就是用数学信号完成对数字量进程数值运算和逻辑运算的电路,其基本电学原理,都与模拟电路相同。在理解了什么是数字电路后,我们再来看场效应管。
场效应管简称为MOS,是一类金属-氧化物构成的半导体。蓝色部分是场效应管的主体部分,平时处于是绝缘的,此时源级(Source)和漏级(Drain)的电流不能从中间流过。当栅极(Gate)有电压时,一部分蓝色区域变成导体,源级和漏级就被打通了。
于是我们只要通过是否给栅极电压,就能实现电路导通与否,就好比我们去开关灯一样。需要注意的是,场效应管看上去和模拟电路中的PN结二极管有些类似,都是实现对电流的控制,但两者有着本质的区别:场效应管是电压控制元件,二极管是电流控制元件,MOS不会出现击穿情况,在安全性上要比二极管高得多。
在理解了什么是烧录和MOS的作用后,我们就可以设计电路,来实现算数与逻辑的运算了。
布尔运算,二进制和门电路1845年,英国一位名不见经传的数学家乔治·布尔在礼拜时心血来潮,认为哲学问题可以用数学来表示。他将自己的想法编成书,即《逻辑的数学分析》和《思维规律的研究》,详细阐述了如何将逻辑问题转换成数学公式。
布尔代数中只有两个值:1和0;三种运算:逻辑加、逻辑乘和逻辑非。这里的1和0并不是数字意义上的1和0,而是一个事物的两种矛盾状态。比如一个人,活着就是1,死了就是0。
虽然乔治·布尔的想法很有创新意义,但在当时并不受重视,甚至一度被认为是伪科学。直到乔治·布尔去世多年后,另一位计算机先驱人物,密码学的奠基人香农发现了这份被世人遗忘的宝藏。1938年,香农在《继电器与开关电路的符号分析》中,将布尔代数与开关电路联系起来,凭借该文章,年仅22岁的香农成功取得了麻省理工电气工程硕士学位。
人们可以依靠继电器构成逻辑门电路,从而逻辑上的运算结果:
与门:当两个输入端 A、 B同时为“1”时, 输出端 C 才为“1” , 否则为“0”;
或门:当两个输入端 A、 B 中, 只要至少有一个输入端为“1”时, 输出 端 C 就为“1
非”门:输出状态总和输入状态相反。
从这三种基本的门电路,可以构成与非,异或等其他门电路,它们的符号和结构如下图所示: