
处理器芯片的本质是数字电路
0和1的芯片
需要先理解信息在数字电路中是如何表示, 处理和存储的
0和1的含义0和10和1是两个抽象的概念
0和1的表示和晶体管有关
金属-氧化物-半导体场效应晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)
晶体管\(\approx\)生活中的开关



0和1CMOS = Complementary MOS = nMOS + pMOS
最简单的CMOS电路:



CMOS将nMOS和pMOS的开关特性转换成输出电压的高低
1(高电平),
低电压定义为逻辑0(低电平)我们得到了数字电路中信号的两种基本状态!
光有0和1还不够, 还要进行运算
0和1进行各种有意义的转换
1时, n管导通, p管截止, Y点为00时, n管截止, p管导通, Y点为1
这正好是逻辑上的非运算!


10| A | B | P1 | P2 | N1 | N2 | Y |
|---|---|---|---|---|---|---|
| 0 | 0 | 导通 | 导通 | 截止 | 截止 | 1 |
| 0 | 1 | 导通 | 截止 | 截止 | 导通 | 1 |
| 1 | 0 | 截止 | 导通 | 导通 | 截止 | 1 |
| 1 | 1 | 截止 | 截止 | 导通 | 导通 | 0 |
这正好是逻辑上的与非运算!



| A | B | P1 | P2 | N1 | N2 | Y0 | P3 | N3 | Y |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 导通 | 导通 | 截止 | 截止 | 1 | 截止 | 导通 | 0 |
| 0 | 1 | 导通 | 截止 | 截止 | 导通 | 1 | 截止 | 导通 | 0 |
| 1 | 0 | 截止 | 导通 | 导通 | 截止 | 1 | 截止 | 导通 | 0 |
| 1 | 1 | 截止 | 截止 | 导通 | 导通 | 0 | 导通 | 截止 | 1 |

10| A | B | P1 | P2 | N1 | N2 | Y |
|---|---|---|---|---|---|---|
| 0 | 0 | 导通 | 导通 | 截止 | 截止 | 1 |
| 0 | 1 | 导通 | 截止 | 截止 | 导通 | 0 |
| 1 | 0 | 截止 | 导通 | 导通 | 截止 | 0 |
| 1 | 1 | 截止 | 截止 | 导通 | 导通 | 0 |
这正好是逻辑上的或非运算!
或非门的输出连一个非门, 可组成或门


由一对n管和p管并联组成
| C | C′ | A | N | P | B |
|---|---|---|---|---|---|
| 1 | 0 | 0 | 导通 | 截止 | 0 |
| 1 | 0 | 1 | 截止 | 导通 | 1 |
| 0 | 1 | 0 | 截止 | 截止 | 断开 |
| 0 | 1 | 1 | 截止 | 截止 | 断开 |


1时, P和N至少有一者导通, 此时A和B连通0时, P和N均截止, 此时A和B断开异或(XOR)操作的两种理解:
异表示不同, 输入不同结果为1,
否则为0或的基础上, 排除输入均为1的情况
排斥或(eXclusive OR)或也称相容或,
允许输入均为1| A | B | Y | 描述 |
|---|---|---|---|
| 0 | 0 | 0 | ~A & ~B |
| 0 | 1 | 1 | ~A & B |
| 1 | 0 | 1 | A & ~B |
| 1 | 1 | 0 | A & B |
从真值表得到逻辑表达式的步骤:
1,
则取输入信号本身; 若为0, 则取输入信号的非.
对这些信号进行与, 得到该表项的描述1的表项,
对这些表项的描述进行或运算即可
异或操作的逻辑表达式为:
Y = A ^ B = (~A & B) | (A & ~B)

在门电路层面, Y=(~A&B)|(A&~B)

在晶体管层面搭建, 效果更优:
A=1时, P2和N2相当于非门; 传输门截止;
故此时Y=~BA=0时, P2和N2均截止; 传输门导通;
故此时Y=B
1, 不同为0
仅从功能的角度考虑, 门电路的面积可以通过晶体管的数量来近似表示
记#T(x)为门电路x所需的晶体管数, 那么:
若在门电路层面搭建异或门, 则

如果考虑CMOS的电气特性, 那么: 不同位置的晶体管, 其尺寸可能不同
为了更准确地评估面积, 先来讨论电气特性如何影响晶体管的尺寸
在CMOS中, 0和1是对称的 =>
其电气特性也应当对称
1所产生的电流,
应当与输出0所吸收的电流相同
1时电流经过p管所产生的电压降,
应当与输出0时电流经过n管所产生的电压降相同

若不满足对等设计原则, 不同拓扑位置的同一种门电路,
其电气特性可能不同

Y=~X不成立
对等设计原则使得CMOS电路的使用者只需关心电路逻辑,
而不必过多关心电气特性
要满足对等设计原则, 就要在不同拓扑位置采用不同尺寸的晶体管, 来实现电气特性的对称性
最小晶体管模型,
将其面积定义为单位1#T(x),
记其为门电路x中包含的等效最小晶体管的数量
考虑非门中晶体管的电气特性:
#T(not) = 2, 与前文结论相同
考虑与非门中晶体管的电气特性:

为了满足对等设计原则, 应调整n管, 使得每个n管的电阻是原来的一半
在门电路层面搭建

在门电路层面搭建的方案, 面积更优, 但延迟也更大
物理世界并非只有0和1,
需要考虑如何用0和1来表示各种信息
编码(encoding)先考虑如何表示自然数
生活中使用十进制(decimal)计数法, 真值可通过加权求和展开式得到:
\[734 = 10^2\times7+10^1\times3+10^0\times4\]
对于\(n\)位\(b\)进制数\(a_{n-1}a_{n-2}\dots a_1a_0\), 其真值为:
\[\sum_{i=0}^{n-1}a_ib^i=a_{n-1}b^{n-1}+a_{n-2}b^{n-2}+\dots+a_1b^1+a_0\]
其中\(b\)称为基(base), \(b^i\)称为每一位的权(weight)
\[\sum_{i=0}^{n-1}a_ib^i=a_{n-1}b^{n-1}+a_{n-2}b^{n-2}+\dots+a_1b^1+a_0\]
令\(b=2\), 并让\(a_i\)只在0和1中取值,
得到二进制(binary)计数法:
\[\sum_{i=0}^{n-1}a_i2^i=a_{n-1}2^{n-1}+a_{n-2}2^{n-2}+\dots+a_12^1+a_0\]
例如, 二进制数0b101110的真值是
\[2^5\times1+2^4\times0+2^3\times1+2^2\times1+2^1\times1+2^0\times0=46\]
需要求出加权求和展开式中各个二进制位\(a_{n-1}a_{n-2}\dots a_1a_0\)
可以将加权求和展开式改写如下: \[\begin{array}{ll} & \displaystyle \sum_{i=0}^{n-1}a_i2^i \\ &=a_{n-1}2^{n-1}+a_{n-2}2^{n-2}+\dots+a_12^1+a_0 \\ &=(a_{n-1}2^{n-2}+a_{n-2}2^{n-3}+\dots+a_1)\times2+a_0 \\ &=((a_{n-1}2^{n-3}+a_{n-2}2^{n-4}+\dots+a_2)\times2+a_1)\times2+a_0 \\ &=\dots \\ &=(\dots((a_{n-1}\times2+a_{n-2})\times2+a_{n-3})\dots)\times2+a_0 \\ \end{array}\]
发现: 如果将十进制数不断除以2, 这个过程中得到的余数就分别对应\(a_0,a_1,\dots,a_{n-1}\)
\[\sum_{i=0}^{n-1}a_i2^i = (\dots((a_{n-1}\times2+a_{n-2})\times2+a_{n-3})\dots)\times2+a_0\]
对于十进制数46:
2 | 46 -> 0 ^ 低位
+---- |
2 | 23 -> 1 |
+---- |
2 | 11 -> 1 |
+---- |
2 | 5 -> 1 |
+---- |
2 | 2 -> 0 |
+---- |
2 | 1 -> 1 | 高位
+----
0 (商为0, 结束)
将所得余数从高位到低位组合, 得到0b101110,
即为46的二进制表示
\[2^5\times1+2^4\times0+2^3\times1+2^2\times1+2^1\times1+2^0\times0=46\]
二进制能被数字电路(门电路)直接处理, 但很难阅读和记忆
0b1011111011101111
计算机领域还通常采用十六进制(hexadecimal)计数法
0~9以外, 还有a,
b, c, d, e,
f(大写亦可), 数值上分别表示10,
11, 12, 13, 14,
15
例如, 十六进制数0xbeef的加权求和展开式如下: \[16^3\times11+16^2\times14+16^1\times14+16^0\times15=48879\]
数字电路无法直接处理十六进制数
但由于\(16=2^4\), 故能在1位十六进制数和4位二进制数之间快速转换
例如, 对于二进制数0b1011111011101111,
从右到左每4位分成一组(高位不足4位时补0),
直接写出每组对应的十六进制数字:
因此, 该二进制数对应的十六进制数即为0xbeef
和二进制表示的0b1011111011101111相比,
十六进制表示的0xbeef更加简洁紧凑
译码器 = 一种将\(k\)位输入转换成最多\(2^k\)种不同输出的电路
一类常见的译码器是n选1译码器
1(独热码(One-hot))例: 2-4译码器
| \(A_1\) | \(A_0\) | \(|\) | \(Y_3\) | \(Y_2\) | \(Y_1\) | \(Y_0\) |
|---|---|---|---|---|---|---|
| 0 | 0 | \(|\) | 0 | 0 | 0 | 1 |
| 0 | 1 | \(|\) | 0 | 0 | 1 | 0 |
| 1 | 0 | \(|\) | 0 | 1 | 0 | 0 |
| 1 | 1 | \(|\) | 1 | 0 | 0 | 0 |

常用于寻址: 输入地址, 生成相应的有效信号(地址\(\approx\)Excel表中的行号)
按照指定的规则将一种编码的输入转换成另一种编码的输出
1的数量
常见应用: 七段数码管译码器(7-segment decoder)
8字型排列成的输出元件
a
---
f| g |b input output | |
--- abcdefgh ---
e| |c 0100 01100110 |
--- .h
d
可列出真值表, 推导出每个控制信号的逻辑表达式, 得到电路层实现
功能和n选1译码器相反, 用于将独热码转换成相应的二进制数值
例: 4-2编码器
| \(A_3\) | \(A_2\) | \(A_1\) | \(A_0\) | \(|\) | \(Y_1\) | \(Y_0\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | \(|\) | 0 | 0 |
| 0 | 0 | 1 | 0 | \(|\) | 0 | 1 |
| 0 | 1 | 0 | 0 | \(|\) | 1 | 0 |
| 1 | 0 | 0 | 0 | \(|\) | 1 | 1 |
| 其 | 他 | 情 | 况 | \(|\) | 0 | 0 |

1的位置一些运算或模块需要满足一定的前提条件, 才能得到有意义的输出
除数不为0的前提条件
0时, 除法运算的结果是未定义的输入为独热码是编码器正确工作的前提条件
背后的约定:
输入为独热码具体到数字电路层次, 编码器的输出信号要么为0,
要么为1
可支持独热码以外的输入, 但只编码优先级最高的位
0, 则输出最高位的1的位置0, 则输出是未定义的例: 4-2优先编码器
| \(A_3\) | \(A_2\) | \(A_1\) | \(A_0\) | \(|\) | \(Y_1\) | \(Y_0\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | \(|\) | 0 | 0 |
| 0 | 0 | 1 | X | \(|\) | 0 | 1 |
| 0 | 1 | X | X | \(|\) | 1 | 0 |
| 1 | X | X | X | \(|\) | 1 | 1 |
| 0 | 0 | 0 | 0 | \(|\) | X | X |

有更简单的电路方案, 但要用到吸收律, 不方便理解, 此处采用更直观的方案
根据选择端\(S\)选择其中一路数据(\(D_0\)或\(D_1\))
| \(S\) | \(|\) | \(Y\) |
|---|---|---|
| 0 | \(|\) | \(D_0\) |
| 1 | \(|\) | \(D_1\) |
例: 2选1多路选择器


译码器生成的独热码作为数据的选择信号, 只有一路数据可以通过与门
在处理器中, 选择器是使用频率很高的元件

\(S\)只会导通其中一个传输门, 另一个截止, 从而实现数据选择的功能
检查两个输入的每一位是否完全一致
例: 4位比较器

半加器(Half Adder, HA), 输入无进位的加法器
#T(HA) = #T(xor) + #T(and) = 6 + 8 = 14
全加器(Full Adder, FA), 输入有进位的加法器
| \(A\) | \(B\) | \(|\) | \(S\) | \(C\) |
|---|---|---|---|---|
| 0 | 0 | \(|\) | 0 | 0 |
| 0 | 1 | \(|\) | 1 | 0 |
| 1 | 0 | \(|\) | 1 | 0 |
| 1 | 1 | \(|\) | 0 | 1 |
可以用两个半加器组成一个全加器

#T(FA) = 2#T(HA) + #T(or) = 2 * 14 + 8 = 36
将低位FA的进位输出作为高位FA的进位输入

行波进位加法器(Ripple-Carry Adder, RCA)

0和1
0和1的简单运算
0和1表示自然数