首先要开始这个话题要先说一下半导体。啥叫半导体?
半导体其实就是介于导体和绝缘体中间的一种东西,比如二极管。
电流可以从A端流向C端,但反过来则不行。你可以把它理解成一种防止电流逆流的东西。
当C端10V,A端0V,二极管可以视为断开。
当C端0V,A端10V,二极管可以视为导线,结果就是A端的电流源源不断的流向C端,导致最后的结果就是A端=C端=10V
等等,不是说好的C端0V,A端10V么?咋就变成结果是A端=C端=10V了?
你可以把这个理解成初始状态,当最后稳定下来之后就会变成A端=C端=10V。
每次都这么画实在太麻烦了,我们简化一下
我们就有了一个4位加法器,可以计算4位数的加法也就是15+15,已经达到了幼儿园中班水平,是不是特别给力?做完加法器我们再做个乘法器吧,当然乘任意10进制数是有点麻烦的,我们先做个乘2的吧。乘2就很简单了,对于一个2进制数数我们在后面加个0就算是乘2了比如:
5=101(2)10=1010(2)所以我们只要把输入都往前移动一位,再在最低位上补个零就算是乘2了。具体逻辑电路图我就不画,你们知道咋回事就行了。那乘3呢?简单,先位移一次(乘2)再加一次。乘5呢?先位移两次(乘4)再加一次。所以一般简单的CPU是没有乘法的,而乘法则是通过位移和加算的组合来通过软件来实现的。这说的有点远了,我们还是继续做CPU吧。现在假设你有8位加法器了,也有一个位移1位的模块了。串起来你就能算了!
(A+B)X2激动人心,已经差不多到了准小学生水平。那我要是想算呢?
AX2+B简单,你把加法器模块和位移模块的接线改一下就行了,改成输入A先过位移模块,再进加法器就可以了。啥????你说啥???你的意思是我改个程序还得重新接线?所以你以为呢?编程就是把线来回插啊。




0100,数据读入寄存器0001,数据与寄存器相加,结果保存到寄存器0010,寄存器数据向左位移一位(乘2)为什么这么设计呢,刚才也说了,我们可以为每个模块设计一个激活针脚。然后我们可以分别用指令输入的第二第三第四个针脚连接寄存器,加法器和位移器的激活针脚。这样我们输入0100这个指令的时候,寄存器输入被激活,其他模块都是0没有激活,数据就存入寄存器了。同理,如果我们输入0001这个指令,则加法器开始工作,我们就可以执行相加这个操作了。这里就可以简单回答这个问题的第一个小问题了:那cpu 是为什么能看懂这些二级制的数呢?为什么CPU能看懂,因为CPU里面的线就是这么接的呗。你输入一个二进制数,就像开关一样激活CPU里面若干个指定的模块以及改变这些模块的连同方式,最终得出结果。几个可能会被问道的问题Q:CPU里面可能有成千上万个小模块,一个32位/64位的指令能控制那么多吗?A:我们举例子的CPU里面只有3个模块,就直接接了。真正的CPU里会有一个解码器(decoder),把指令翻译成需要的形式。Q:你举例子的简单CPU,如果我输入指令0011会怎么样?A:当然是同时激活了加法器和位移器从而产生不可预料的后果,简单的说因为你使用了没有设计的指令,所以后果自负呗。(在真正的CPU上这么干大概率就是崩溃呗,当然肯定会有各种保护性的设计,死也就死当前进程)细心的小伙伴可能发现一个问题:你设计的指令
【0001,数据与寄存器相加,结果保存到寄存器】这个一步做不出来吧?毕竟还有一个回写的过程,实际上确实是这样。我们设计的简易CPU执行一个指令差不多得三步,读取指令,执行指令,写寄存器。经典的RISC设计则是分5步:读取指令(IF),解码指令(ID),执行指令(EX),内存操作(MEM),写寄存器(WB)。我们平常用的x86的CPU有的指令可能要分将近20个步骤。你可以理解有这么一个开关,我们啪的按一下,CPU就走一步,你按的越快CPU就走的越快。咦?听说你有个想法?少年,你这个想法很危险啊,姑且不说你有没有麒麟臂,能不能按那么快(现代的CPU也就2GHz多,大概也就一秒按个20亿下左右吧)就算你能按那么快,虽然速度是上去了,但功耗会大大增加,发热上升稳定性下降。江湖上确实有这种玩法,名曰超频,不过新手不推荐你尝试哈。那CPU怎么知道自己走到哪一步了呢?前面不是介绍了FF么,这个不光可以用来存中间数据,也可以用来存中间状态,也就是走到哪了。具体的设计涉及到FSM(finite-state machine),也就是有限状态机理论,以及怎么用FF实装。这个也是很重要的一块,考试必考哈,只不过跟题目关系不大,这里就不展开讲了。我们再继续刚才的讲,现在我们有3个指令了。我们来试试算个(1+4)X2+3吧。
0100 0001 ;寄存器存入10001 0100 ;寄存器的数字加40010 0000 ;乘20001 0011 ;再加三太棒了,靠这台计算机我们应该可以打败所有的幼儿园小朋友,称霸大班了。而且现在我们用的是4位的,如果换成8位的CPU完全可以吊打低年级小学生了!实际上用程序控制CPU是个挺高级的想法,再此之前计算机(器)的CPU都是单独设计的。1969年一家日本公司BUSICOM想搞程控的计算器,而负责设计CPU的美国公司也觉得每次都重新设计CPU是个挺傻X的事,于是双方一拍即合,于1970年推出一种划时代的产品,世界上第一款微处理器4004。这个架构改变了世界,那家负责设计CPU的美国公司也一步一步成为了业界巨头。哦对了,它叫Intel,对,就是噔噔噔噔的那个。我们把刚才的程序整理一下,
01000001000101000010000000010011你来把它输入CPU,我去准备一下去幼儿园大班踢馆的工作。神马?等我们输完了人家小朋友掰手指都能算出来了??
没办法机器语言就是这么反人类。哦,忘记说了,这种只有01组成的语言被称之为机器语言(机器码),是CPU唯一可以理解的语言。不过你把机器语言让人读,绝对一秒变典韦,这谁也受不了。
失效分析交流
赵工
010-82825511-728
13488683602
zhaojh@kw.beijing.gov.cn
投稿/推广/合作/入群/赞助 请加微信13488683602备注关键词