[ARM微控制器与嵌入式系统] 从晶体管到CPU

从晶体管到CPU

利用电压副值来代表0和1

利用高电压代表逻辑1,低电压代表逻辑0,中间空出一定的区域,既不为逻辑1,也不为逻辑0,避免电压在边界附近时出现逻辑判断的错误。

高平的定义标准

在嵌入式系统中,最常接触到的电平标准是TTL电平CMOS电平
如果有了电压的高和低,如何将其转换成逻辑的0和1?
例子:
[ARM微控制器与嵌入式系统] 从晶体管到CPU
上图中的继电器,电流通过吸合,右侧电路导通。
[ARM微控制器与嵌入式系统] 从晶体管到CPU
上图是两个电磁继电器构成的电路,我们假设output端连接了一个灯,有高电压灯就亮了,没有高电压灯就灭了,即用灯亮为逻辑1,灯灭为逻辑0。
上图的电路,如果inputA和inputB都为高电压,则灯亮,输出逻辑1,其他情况输出逻辑0。

上图实际上就是一个与门电路

再举一个或门电路,如下图:
[ARM微控制器与嵌入式系统] 从晶体管到CPU

CMOS电平

VDD = 3~8V
0 = 0~0.3VDD
1 = 0.7~1VDD

TTL电平

VCC = 5V ± 5%
0 = 0~0.7V
1 = 2.4~5V

[ARM微控制器与嵌入式系统] 从晶体管到CPU
非门:
[ARM微控制器与嵌入式系统] 从晶体管到CPU
与非门:
[ARM微控制器与嵌入式系统] 从晶体管到CPU

与门: 可以由与非门串一个非门组成

或非门
[ARM微控制器与嵌入式系统] 从晶体管到CPU

三态门
[ARM微控制器与嵌入式系统] 从晶体管到CPU

进一步

异或门:
[ARM微控制器与嵌入式系统] 从晶体管到CPU

加法的实现:(半加器
[ARM微控制器与嵌入式系统] 从晶体管到CPU
为什么是半加器?
因为没有考虑进位

思考:如果将两个半加器放到一起,然后对高位(即与门的输出)取或。
[ARM微控制器与嵌入式系统] 从晶体管到CPU
[ARM微控制器与嵌入式系统] 从晶体管到CPU
这样输出就成了X、Y、Z相加的结果(高位是C,低位是S)。

抽象一下:

[ARM微控制器与嵌入式系统] 从晶体管到CPU
这就是一个全加器

[ARM微控制器与嵌入式系统] 从晶体管到CPU
C是进上去的,所以作为下一步中的Z参与计算,计算得到的S为该位的输出,C进到高位,这样就构成了一个4个bit的二进制加法器,同时,C4的输出还可以作为检验加法的结果是否溢出。如果C4==1,就说明溢出了

上面是加法的电路,减法如何实现?
C语言中,负数表示为二进制的补码,因此,两个数做减法实际上是加上其二进制的补码

地址译码
[ARM微控制器与嵌入式系统] 从晶体管到CPU
只有当输入A0、A1、A2、A3分别为1,0,0,1时,输出S才能等于1,

有什么用?
利用S的结果进行信号的选择,控制等。

具体怎么实现?

如上图,如果我们要得到地址为0x1001地址对应的数据,则可以在上图的输出S后面接一个三态门,用S作为控制量,即可实现该地址对应的数据读取。

2-4译码器

[ARM微控制器与嵌入式系统] 从晶体管到CPU

利用A、B两路的数据,得到4路不同的输出,如果后面接三态门的话,就可以两个输入对4路的数据访问与控制。

学51单片机时,涉及到流水灯效果时,用到了38译码器,原理应该是一样的

组合逻辑是依赖于输入,有输入的情况下就会有输出

时序逻辑电路

时序逻辑电路的输出不仅取决于输入,还取决于上一个状态的输出值。

举个例子:

D锁存器

[ARM微控制器与嵌入式系统] 从晶体管到CPU
分析一下上图:
当输入C为0的时候,后面的两个与门输出肯定是0,D的输入值根本不起作用。

当输入C为1的时候,先假定q是一个值,进行分析,最终得到上图中的真值表

锁存器是基本的时序电路之一,也是最简单的存储单元,可以用来存储数据。

[ARM微控制器与嵌入式系统] 从晶体管到CPU

[ARM微控制器与嵌入式系统] 从晶体管到CPU

概念CPU

[ARM微控制器与嵌入式系统] 从晶体管到CPU

假设概念上有一个上述的CPU
**两个4bit的二进制数,<数据线> **
**4个1bit的控制线S0、S1、S2、S3 **

图中的4个运算单元可以执行多种运算,具体采用哪种运算,可以通过S0、S1进行指定,具体的实现可以通过三态门做控制,然后接各种运算。

上面的学习已经实现了:
两个4bit的二进制数做加减法 <全加器>
两个4bit的二进制数与、或
两个4bit的二进制数左移、右移 <D触发器级联>

多路开关
通过S2、S3的编码来指定输出哪一个单元的运算结果, 具体的实现是通过上面提到的2-4译码器,把4个结果中的某一个送出去。
[ARM微控制器与嵌入式系统] 从晶体管到CPU

指令集

如果我们把上面的电路与其功能变成一个真值表,如下:
[ARM微控制器与嵌入式系统] 从晶体管到CPU
可以看出,一旦电路设计完成,其运算部分就确定了,其功能由S3、S2、S1、S0的排列组合决定。
S0和S1是确定执行什么样的运算,S2、S3是挑出来正确的结果做输出。

这就是一个概念上的4bit位的CPU原型。

汇编语言中,用SUB代表0 0 1 0等

程序的本质就是指令的有序集合