我将从可能相关的最低级别开始(我可以从更低的级别开始,但是它们可能根本无关紧要),从原子,电气,晶体管,逻辑门,集成电路(芯片/ CPU)开始),然后在Assembly上完成(假设您熟悉较高级别的知识)。
在一开始的时候
原子
原子是由电子,质子和中子组成的结构(它们本身由基本粒子组成)。电子和计算机中原子中最有趣的部分是电子,因为电子是可移动的(即电子可以相对容易地移动,而不像质子和中子更难移动)并且它们可以自由浮动而不被固定在内部一个原子。
通常,每个原子都有相等数量的质子和电子,我们称其为“中性”状态。碰巧,原子有可能失去或获得额外的电子。称处于这种不平衡状态的原子分别是“带正电”的原子(质子比电子多)和“带负电”的原子(电子比质子多)。
电子是不可破坏的和不可破坏的(在量子力学中不是这样,但这与我们的目的无关);因此,如果一个原子失去电子,附近的一些其他原子必须接收多余的电子,或者电子必须释放为自由浮动的电子,相反,由于电子是不可构造的,因此要获得额外的电子,一个原子必须将其从附近的原子上吸除。或来自自由浮动电子。电子的力学是这样的,如果在带正电的原子附近有一个带负电的原子,那么一些电子将迁移,直到两个原子都具有相同的电荷。
电力
电流只是电子从具有大量负电荷原子的区域到具有大量正电荷原子的区域的流动。某些化学反应会导致一种情况,我们有一个带有许多带负电荷的原子的节点(称为“阳极”),而另一个节点带有许多带正电荷的原子(称为“阴极”)。如果我们用一根导线连接两个带相反电荷的节点,则大量的电子将从阳极流向阴极,这种流动就是我们所说的“电流”。
并非所有的导线都能同样容易地传输电子,电子在“导电”材料中的流动比在“电阻”材料中的流动容易得多。“导电”材料的电阻低(例如,电缆中的铜线),“电阻”材料的电阻高(例如,橡胶电缆绝缘)。一些有趣的材料称为半导体(例如硅),因为它们可以轻松改变其电阻,在某些情况下半导体可能充当导体,而在其他情况下可能变成电阻器。
电流总是倾向于流经电阻最小的材料,因此,如果阴极和阳极用两条线连接,一根具有很高的电阻,而另一根具有非常低的电阻,则大部分电子将流过低电阻电缆,并且几乎没有一个流过高电阻材料。
中世纪
开关和晶体管
开关/触发器就像普通的电灯开关一样,可以在两根电线之间放置一个开关以切断和/或恢复电流。晶体管的工作原理与电灯开关完全相同,不同之处在于晶体管不是物理连接和断开电线,而是通过根据基节点中是否有电来改变其电阻来连接/断开电流,正如您可能已经猜到的那样。 /知道,晶体管是由半导体制成的,因为我们可以将半导体更改为电阻器或导体以连接或断开电流。
NPN双极结晶体管(BJT)是一种常见的晶体管,具有三个节点:“基极”,“集电极”和“发射极”。在NPN BJT中,只有当“基本”节点被充电时,电流才可以从“发射器”节点流到“收集器”节点。当基极不带电时,实际上没有电子可以流过,而当基极带电时,电子可以在发射极和集电极之间流动。
晶体管的行为
(我强烈建议你通过阅读这个,然后再继续,因为它可以解释比我更好的互动图形)
假设我们在其基极和集电极处将一个晶体管连接到电源,然后在其集电极附近连接输出电缆(请参见http://www.spsu.edu/cs/faculty/bbrown/web_lectures中的图3)/晶体管/)。
当我们既不向基地也不向集热器供电时,由于没有电可谈论,所以根本没有电流流动:
B C | E O
0 0 | 0 0
当我们给集电极而不是基极加电时,由于基极变成了高电阻材料,所以电流无法流到发射极,所以电会逸出到输出线:
B C | E O
0 1 | 0 1
当我们给底座而不是集电极加电时,由于集电极和发射极之间没有电荷差,所以电流也不会流动:
B C | E O
1 0 | 0 0
当我们同时在基极和集电极上施加电流时,会使电流流过晶体管,但是由于晶体管现在的电阻小于输出导线的电阻,因此几乎没有电流流过输出导线:
B C | E O
1 1 | 1 O
逻辑门
当我们将一个晶体管(E1)的发射极连接到另一个晶体管(C2)的集电极,然后在第一个晶体管(O)的基极附近连接输出时(请参见http://www.spsu.edu中的图4)/ cs / faculty / bbrown / web_lectures / transistors /),那么会发生一些有趣的事情。假设我们总是向第一个晶体管(C1)的集电极通电,因此我们只使用晶体管(B1,B2)的基节点:
B1 B2 C1 E1/C2 | E2 O
----------------------+----------
0 0 1 0 | 0 1
0 1 1 0 | 0 1
1 0 1 0 | 0 1
1 1 1 1 | 1 0
让我们总结一下表格,以便我们仅看到B1,B2和O:
B1 B2 | O
---------+-----
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 0
瞧,如果您熟悉布尔逻辑和/或逻辑门,您应该注意到这正是NAND门。而且,如果您熟悉布尔逻辑和/或逻辑门,您可能还知道NAND(以及NOR)在功能上是完整的,即仅使用NAND,则可以构造所有其他逻辑门以及其他内容表。换句话说,您可以仅使用NAND门来设计整个计算机芯片。
实际上,大多数CPU都是(或过去是?)仅使用NAND设计的,因为它比NAND,NOR,AND,OR等组合的制造成本更低。
从NAND派生其他布尔运算符
我不会描述如何制作所有布尔运算符,只有NOT和AND门,您可以在其他地方找到其余的。
给定一个NAND运算符,那么我们可以构造一个NOT门:
Given one input B
O = NAND(B, B)
Output O
给定一个NAND和NOT运算符,那么我们可以构造一个AND门:
Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O
我们可以用类似的方式构造其他逻辑门。由于“与非”门功能齐全,因此也可以构造具有2个以上输入和1个以上输出的逻辑门,在此我将不讨论如何构造这样的逻辑门。
启蒙时代
从布尔门构建图灵机
CPU只是图灵机的一个更复杂的版本。CPU寄存器是Turing Machine的内部状态,RAM是Turing Machine的磁带。
图灵机(CPU)可以做三件事:
- 从磁带读取0或1(从RAM读取存储单元)
- 更改其内部状态(更改其寄存器)
- 向左或向右移动(从RAM读取多个位置)
- 将0或1写入磁带(将存储单元写入RAM)
为了达到我们的目的,我们正在使用组合逻辑来构建Wolfram的2状态3符号图灵机(现代CPU将使用微代码,但是它们比我们的目的要复杂得多)。
Wolfram(2,3)图灵机的状态表如下:
A B
0 P1,R,B P2,L,A
1 P2,L,A P2,R,B
2 P1,L,A P0,R,A
我们要将上面的状态表重新编码为真值表:
Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)
R 0 1
I1,I2
(0,0) (0,1),1,1 (1,0),0,0
(0,1) (1,0),0,0 (1,0),1,1
(1,0) (0,1),0,0 (0,0),1,0
The truth table for the state table above:
I1 I2 R(t) | O1 O2 M R(t+1)
-------------+--------------------
0 0 0 | 0 1 1 1
0 0 1 | 1 0 0 0
0 1 0 | 1 0 0 0
0 1 1 | 1 0 1 1
1 0 0 | 0 1 0 0
1 0 1 | 0 0 1 0
我并不是真的要构造这样的逻辑门(我不确定如何在SE中绘制它,它可能会很大),但是由于我们知道NAND门在功能上是完整的,所以我们有一种方法找到一系列将实现此真值表的与非门。
Turing Machine的一个重要属性是可以使用仅具有固定状态表的Turing Machine来模拟存储程序计算机。因此,任何通用图灵机都可以从磁带(RAM)中读取其程序,而不必将其指令硬编码到内部状态表中。换句话说,我们的(2,3)Turing Machine可以从I1,I2引脚(作为软件)读取其指令,而无需在逻辑门实现中(作为硬件)进行硬编码。
微码
由于现代CPU的复杂性不断提高,仅使用组合逻辑来设计整个CPU变得越来越困难。现代CPU通常被设计为微码指令的解释器。微代码是嵌入在CPU中的一个小程序,CPU用来解释实际的机器代码。该微代码解释器本身通常使用组合逻辑进行设计。
寄存器,缓存和RAM
我们忘记了上面的东西。我们如何记住某事?我们如何实现磁带和RAM?答案是在称为电容器的电子组件中。电容器就像可充电电池,如果电容器被充电,它将保留多余的电子,并且还可以将电子返回到电路中。
要写入电容器,我们用电子填充电容器(写入1)或排空电容器中的所有电子,直到其为空(写入0)。要读取电容器的值,我们尝试对其放电。如果在尝试放电时没有电流流过,则表明电容器为空(读为0),但是如果我们检测到电流,则必须对电容器充电(读为1)。您可能会注意到,读取电容器会耗尽其电子存储,现代RAM具有定期对电容器充电的电路,因此只要有电,它们就可以保留其内存。
CPU中使用了多种类型的电容器,CPU寄存器和更高级别的CPU高速缓存是使用实际上是由晶体管构建的非常高速的“电容器”制成的(因此几乎没有“滞后”来读取/写入)。它们),称为静态RAM(SRAM);主存储器RAM使用较低的功率制成,但使用的电容器较慢且便宜得多,这些电容器称为动态RAM(DRAM)。
时钟
CPU的一个非常重要的组成部分是时钟。时钟是定期“滴答”以同步处理的组件。时钟通常包含具有众所周知且相对恒定的振荡周期的石英或其他材料,并且时钟电路会维持并测量该振荡以维持其时间感。
CPU操作在时钟滴答之间进行,读/写在滴答之间进行,以确保所有组件在中间状态下同步移动且不会相互踩踏。在我们的(2,3)图灵机中,时钟滴答之间的电流通过逻辑门计算出输入的输出(I1,I2,R(t));然后在时钟滴答声中,磁带写入器将O1,O2写入磁带,电机将根据M的值移动,并且内部寄存器从R(t + 1)的值写入,然后,磁带读取器将读取当前磁带并将电荷放入I1,I2,并且内部寄存器被重新读回到R(t)。
与外围设备交谈
请注意(2,3)图灵机如何与其电动机连接。这是CPU如何与任意硬件接口的非常简化的视图。任意硬件都可以侦听或写入用于输入/输出的特定电线。在(2,3)图灵机的情况下,它与电动机的接口只是一条单线,指示电动机顺时针或逆时针旋转。
在该机器上没有说的是,电动机必须具有另一个与机器内部的“时钟”同步运行的“时钟”,才能知道何时开始和停止运转,因此这是同步数据传输的一个示例。另一种常用的替代方法是,异步传输使用另一条线(称为中断线)在CPU和异步设备之间传递同步点。
数字时代
机器代码和汇编
汇编语言是机器代码的人类可读助记符。在最简单的情况下,汇编代码和机器代码之间是一对一的映射;尽管在现代汇编语言中,某些指令可能会映射到多个操作码。
程式语言
我们都熟悉这不是吗?
ew,终于完成了,我在短短4个小时内就输入了所有这些内容,因此我确定某个地方有一个错误(我主要是程序员,而不是电气工程师或物理学家,因此可能有些地方公然错误)。请如果发现错误,请立即提出@yell或自行修复(如果您有代表)或创建补充答案。