当前课程知识点:智能车制作:嵌入式系统 > 第二章 绪论 > 2.2 从晶体管到CPU > Video
各位同学大家好
欢迎大家回到我们
ARM控制器嵌入式系统的MOOC课堂
我是清华大学曾鸣老师
那么我们继续再进行
第二章的学习
也就是Introduction这个部分
我们进入了第二个单元
在第一个单元里
我们回顾了计算机的历史
或者叫计算的历史
以及计算机的本质
图灵机的概念
还有数 字符 数字 模拟
这样一些特别特别基础的概念
那么今天我们在第二节
进入一个更加好玩的部分
来看看从晶体管到CPU
那么我们会说
我们在计算机的世界里
无论是从图灵机
还是从我们已知的
计算机数字领域的发展
我们都会想办法
把不同的值数字化
再把不同的数字
乃至人类的字符信息
最终都变成0和1的序列
放在一个类似于图灵机的概念
或者在现代的CPU上
加以运行和处理
那么如何从0和1
到一个真正的computer
或者从一个晶体管
如何到一个CPU
我们这个小节
来试着拉一拉
也同时帮没有数字电路基础的同学
顺一下基础知识
那么人类都容易想到的一件事情
或者让在座的同学
自己去设计一个
计算系统的时候
我们非常容易想到的
就是用一个电压来代表0或者1
这在我们前面提到了
那么在实地的实现当中的时候
我们人类往往会
选择一个电压段
用上面的一段高电压
代表比方说逻辑1
这比较符合逻辑对吧
用低电压代表逻辑0
那么在中间
我们会控出一个电压区段
既不为1也不为0
这样避免一个电压值
压在边界的时候
出现0和1的错误
这一段我们认为是无效的
那么随着计算机行业的发展
我们出现了很多很多种标准
来定义0或者1
而不是大家想象中
只有一种标准
比如说低压差分的信号
比如说我们以后
学到串行通讯用负电压代表1
正电压代表0
这都是有的
那么在我们所使用的MCU
嵌入式这个行业
我们最长接触到的电平标准
就是TTL的电平和CMOS的电平
我们之后会讲
那么如果我们有了
电压的高或者低
如何把它变成逻辑呢
我给大家举一个
大家非常容易想到的例子
就是图上这个器件
我不知道大家
对这个器件有什么感觉
我自己当一个学生的时候
这是我最喜欢的器件之一
它就是电磁继电器
非常好玩
可以直接买到
如果你把那皮拆开
你会发现里头是一个
亮亮的黄色的
这个漆包线绕的
一个金属小线圈
那么学高中物理
大家也学过它
然后后面学电学
也经常学到它
甚至是高考题也会出现
电磁继电器有个线圈
有电流通过这个磁
然后就啪的一下
把底下一个这个金属极吸上来
一吸合就带动一个
开关闭合或者断开
所以它是通过
线圈上有电流
或者没有电流
来控制一个开关
开或者闭合
那么这就是电磁继电器
用一个电路
控制另外一个电路的开关
那么我们有了高低电压
来代表逻辑0或者1
我们来看两个特别简单的电路
首先是这个
这个电路你会发现
两个电磁继电器
各自接这个地
有一个从电源拉过来的线
依次绕过他们
然后两个继电器
各有一个控制输入端
可以接一个比如说电压
假设说我们有一定的电流限流
最后拉出一个输出端
我们假想这个输出端接了个灯
有高电压灯就亮
没有高电压灯就灭
那么我们以灯亮代表逻辑1
灯灭代表逻辑0
那么我想问
这两个电磁继电器
它在输入端
给高电压和低电压的组合
哪些会导致灯亮
哪些会导致灯灭呢
很多同学说这太简单了
只有两个电磁继电器嘛
从电路上来讲是个串联关系
两个都给高电压
让开关都闭合这个灯就亮了
也就是说1 1得1对吧
任何一个给的低电压
这个串联电路不导通
这个灯就亮不了
所以1 0得0
0 1得0
0 0也得0
那我要问
1 1得1
0 1得0
1 0得0
0 0得0这是什么
这是个与门对吧
我们用两个继电器
其实可以实现一个
简单的与运算
给两个高电压给两个逻辑1
得到一个逻辑1
那反过来再看这张图
这张图大家就会觉得
那以刚才经验我一看了就很简单
这两个电磁继电器是并联关系
任何一个导通
后面如果接灯的话
灯就会亮
所以1 0得1
0 1得1
0 0得0
1 1还得1
这是什么
这是或门
所以我们会发现
我们定义了
高电压 低电压代表逻辑0或者1的时候
我们用继电器
其实就可以实现
简单的与或门的电路
那么这样一种
基本的概念就是
有开关我们就能
实现逻辑
是不是比刚才光知道一个电压
能代表逻辑0或者逻辑1
往前进了一步呢
那么实际上
我们当代的计算机系统
更多的是用晶体管
组成超大规模集成电路来实现的
所以在由晶体管构成的
集成电路的领域里头
就像我们刚才所说
产生很多电压标准
那么最常见的
在我们这个芯片行业里头
比如CMOS的电平标准
我们现在用了芯片
那么大家约定芯片的供电电压
可以是3伏到8伏
实际上发展到今天
我们有1.8伏 1.2伏 0.9伏
更低的这种Low power的器件
那么总是约定这个电压的
供电压的0到0.3倍
作为逻辑0的电压范围
0.7倍到1倍
作为逻辑1的电压范围
那么笼统的记
就是在一个电压范围里头
低电压代表逻辑0
高电压代表逻辑1
那么更早一点的TTL电平
用晶体管的这些器件
那么它可能会选择供电就是5伏
而且要求供电电压
不是像刚才是波动的
是5伏正负5%
约定0到0.7伏是逻辑0
2.4伏到5伏是逻辑1等等等等
我们还能找到很多
anyway我们总能找到一个标准
是我们当前所使用的器件所搭的电路
大家在自行设计电路的时候要讨论
你所使用的器件
这些数字器件之间
电平标准是否一致
而放在我们这门课的范畴
我们只要记住
0和1是电压就行了
那么在当代的晶体管电路里头
我们往往会使用
器件工作在开关状态
来构成我们的数字器件
或者逻辑门
那么不去探讨
模拟电路里头
这些器件什么工作点
是开关状态
他的电流电压是多少
我们简单的抽象出来
在这门课的范畴理解
我们比如说
N型的晶体管
或者N型的场效应管
我们给高电压的时候
集电极和射极(音)
或者是叫做源极和漏极是导通状态
那么我们在给低电压的时候
它对应的这两个极是断开状态
我们把晶体管抽象为
一个一个的开关
分别由1导通或者由0导通
用这个小圈来表示
这是在我们电子学里头常用的知识
那么即使大家
没有数字和模拟电路的知识
我们把所有的
晶体管的细节丢在一边
把它当作开关我们开始往下走
我们首先看这张图
那么我们发现这张图
跟我们看到这个
继电器构成的电路有点像
但又不完全一样
它分别由一个P型的晶体管
和一个N型的晶体管构成
那么我们把晶体管抛开
就是一个低电压导通的开关
和一个高电压导通开关构成
那么如果我们把A
给到每一个值
和对应B能够得到输出值
写在一张表格里
就像这样一张表
我们一般在行业里
叫truth table也就是真值表
当我们不清楚电路功能的时候
大家不要慌
你就静下心来
把你自己看到的
每一种输入值写在表里
老老实实的推算出输出值
你就知道了一个电路
最基本的逻辑功能
这是一个常见办法
那么这个电路
我们会发现
它上下两个开关
起的是互补的一个作用
所以我给A给1给高电压
B就会输出低电压
因为向下导通
如果给A给低电压
B就会输出高电压
因为向上导通
那么我们给1得0
给0得1
如果写成逻辑表达式
就会发现是B等于A拔对吧
但如果用C语言来写呢
就会发现是
B等于!A
注意感叹号这里用不一定严谨
因为感叹号是逻辑取反
更严谨的说
如果B和A是一个比特
我们可能写成
B等于~A更严谨
那么我们再画成
国际通用的器件符号
就是一个非门
一个三角前面
加一个取反的圈
来表达一个信号的传递
那如果我们
再看一张更复杂的图
比如说由四个管子构成
大家会发现
这个时候有AB两个输入
接着四个不同的晶体管
或者我们这个时候看成
高电压导通
或者低电压导通的开关
有圈的就是低电压导通
没圈的就是高电压导通
这时我们仍然不慌
把AB两个输入
和C的输入画在一个真值表里
把0 1分别写出来
这个时候我们静下心来
跟这个继电器电路很像
输入有两个01值
一共排列组合就四种情况
0 0 0 1
1 0 1 1
那么我们
一个一个写0 0的时候
这四个开关里头
哪几个导通
我们会发现
C是向上导通的
它会得到逻辑1
然后0 1 1 0也是类似的情况
它是一个或或者叫并联的关系
都得到逻辑1
而1 1的时候得到逻辑0
那么有很多同学说
这个表看起来有点奇怪啊
0 0得1
0 1得1
1 0得1
1 1得0
这是一个什么逻辑门啊
我们想一想啊
它写成逻辑表达式
实际上是这个式子
就是C等于A
与上B整体再取反
所以它是一个与非门
那么C语言里头
我们会把它写成
C等于A与B取反
这样一个表达形式
那么与非门表达出来
其实是我们在逻辑符号里头
这样一个符号
一个胖胖半圆形的一个与门
加上个圈表示取反
这个时候大家会说
为什么是与非门呢
老师我要一个与门怎么办
然后很简单
把这个与非和门后面再串一个
我们刚才的非门不就行了嘛
与非再取非不就还原成与门了嘛
所以我们会发现
在晶体管的领域里头
与门有可能不是最简单的
它可能需要六个晶体管
与非门再加非门才是
多说一句话
我们今天都用手机
手机都有非常大容量的存储器
我不知道大家
有没有关注过科技新闻
说手机嵌入式系统
能够有大容量存储器
是因为逐渐的NAND-FLASH发展的工艺
越来越强大
大家都把它读成NAND
那个NAND是什么
就是那个存储器的
基本单元是这样的
与非门作为基础来实现的
好 我们接着往下走
同样的
不再讲这么细了
还是四个晶体管我们搭起来
我们把它的真值表
像这样写出来
大家会发现它是什么呢
它是一个或非门
或非门如果学过数字电路的同学
就会更加的不怵
说或非门就是一个
像小雨伞或者小裙子一样
倒下来的一个月牙形
是或 加个小圈取反
就是或非门
然后还有这样一张图
说我们如果把
两个晶体管倒下来放
一个输入端加一个
我们叫控制端能起到什么效果呢
就是控制端为高电平的时候
可以让输入端的信号
顺利的通过这个门送给输出端
当控制端为低电平的时候
输入端不管是高还是低
因为这个晶体管是截断的状态
所以输出端都是
属于我们叫做高阻的状态
它既不是0 也不是1
有点像我们图灵机里头
那个纸袋子上空白的
既不写0也不写1的状态对不对
注意我提到了图灵机
我们开始有点对应
那么这种门我们称为三态门
把它表现成一个传递的门
上面有个控制符号
由这个控制符号为0 为1
决定它是否通或者断
好 我们现在开始
把晶体管和开关扔到一边
大家注意我们这门课
晶体管只出现这一次
后面就进入嵌入式实践
我们更多在逻辑上加以理解
就像我们讲过的
与非门加上非门得到与门
或非门加上非门得到非门
那么它的真值表
它的逻辑表达式
都是可以这么写出来的
就说老师这个很简单
这个数字逻辑
特别我们有的同学学过数字电路了
非常清楚
我们再来复杂一点
我们把两个非门
两个与门
一个或门放在一起
大家再来分析这个电路怎么分析
这时候如果我们静下心来
我们这门课不是数字电路
但是会拉着大家
做一些逻辑上的讨论
我们把里头一些关键节点
标上字符也写到我们真值表里
我们有AB两个输入
中间会产生D和E
这两个中间节点的值
然后我把这些值
也老老实实的分步骤
在真值表里写出来
最后得到C输出的值
然后我们一步步的推
当A是0 B是0的时候
非门会由0得1
与门一个脚是0 一个脚是1
那输出就是0
然后两个0合在一起还是0
我们会发现
从A和B的输入
和C的输出对应的话是
0 0得0
0 1得1
1 0得1
1 1还得0
这个逻辑门
我们好像没见过对吧
但是总结它规律是什么呢
就是A和B两个输入一样的时候
输出就是0
A和B两个输入长的不一样的时候
它输出就是1
这是两个闹别扭的输入引脚
所以我们把它叫做异或门
从逻辑门的符号上来讲
是一个或门前面
加一个半圆形的杠
这是一个特殊的
逻辑运算单元
或者一个特殊的逻辑门单元异或
大家记住这个概念
那么从现在起
晶体管已经全都没了对吧
我们接下再来拿门来摆电路
我们把两个输入端一分二
接在两个逻辑门上
一个接在异或门上
一个接在与门上
然后我们把它这个电路的两个输入
两个输出写在一个真值表里头
这个时候大家会看到什么
X和Y两个输入
仍然四种组合
0 0 0 1 1 0 1 1
这都熟了对吧
因为与门和异或门
我们记住它的功能了
所以与门只有11得1
其他都得0
异或门只有10和01得到1
其他都得0
把这些值写到一起的时候
我不知道大家能反映出来
这个电路是什么功能啊
如果你看到它只是一串0或者1
说明你还要静下心来再看一看
你会发现它是
0 0等于0 0
0 1等于0 1
1 0等于0 1
1 1等于1 0
如果我把X和Y当成
两个1比特的二进制数
而把C和S组合起来当成
两比特二进制数的时候
你会发现这个电路
是不是做了个加法呀
0加0等于0
0加1等于0 1
1加0等于0 1
1加1等于1 0
这是个加法器
但是我们会往往
把它叫做半加器
为什么是半加器呢
因为它不能进位
所以我们如果
把两个半加器
像这样级联起来
把富余的一个引脚再甩出来
我们会得到
3比特二进制数的输入XY和Z
然后同时还是得到两比特的输出
那么这样一个
两个半加器组合起来的加法电路
我们把它真值表写出来
这个时候我就不再带着大家
一个步骤一个步骤分析了
是不是0加0加0等于0 0
那么1加0加1等于1 0
但是再往下
1加1加1
三个1相加它能得到1 1
所以它能实现
三个1比特二进制数
最终得到十进制的3
二进制的11这样一个结果
如果我们把这些逻辑门的符号
再扔到一边
把这个电路进一步抽象成一个方块
如这张图所示
X和Y加上过来的一个Z
求和得到一个值和一个十位值
这个时候
我们称它为一个
全加器Full adder
它有什么好处呢
如果我把它很多个串在一起呢
我给它的XY
每个比特输入一个不同的值
然后求和
假设我有A和B
两个4位的二进制数
比如说1 0 0 1和1 1 0 0这两个数
把它们个位对个位
十位对十位这样对起来
每一个A和B
A1 B1 A2 B2 A3 B3
放在这四个全加器的输入引脚上
是不是每一个
加得的个位数当前位就输出了
十位就进位到下一个
作为Z跟上一位相加
四个数联合相加
我会得到一个4位的
二进制的求和值
S S3 S2 S1 S0
组合成的4位二进制数
其实我还可以得到一位
就是这个加法有没有溢出
有没有超过4位数的范围
这就产生了一个4比特的加法电路
大家这个时候
回过头来想一想会发现什么
我们不是在弄继电器嘛
不是在通晶体管开关嘛
不是在弄与或门嘛
怎么就突然做起加法来了
这就是从逻辑到加法运算
那有同学说加法能做
能做减法嘛
这个问题在这儿不讲了
因为大家学过C语言
所有的减法
就是等于加上一个负数
而负数直接表征为一个二进制的补码
所以加法本身就是减法
那么门电路还能做什么呢
我们可以看这样一个电路
这是一个非常非常常见的电路
我们称为译码电路
我们说0或A3到A0这四个二进制数
组成一个4比特的二进制数
它们的值为多少的时候输出是1
我们说
因为这个非门和与门的逻辑关系决定了
必须给1 0 0 1才能使S为1
这样一种电路就是说
能够选种一个特定二进制数
产生一个控制信号
它在什么时候有用呢
我们后面讲计算机的时候
你会发现我们经常会碰到一个问题是
根据一个地址值
把一个单元
把图灵机里头一个纸格子里头
那一个0或者1选出来
是不是它能实现一个门牌号码
一个地址到一个控制单位元
那这个控制单元怎么接呢
我多讲一句
假设那个值是存在一个存储器里头
有个高电压 低电压
接一个我们这节课
最开始讲过的什么
三态门
然后用这个产生的S值
做这个三态门的控制端
选择让这个数据
能不能流出来对不对
还有一个例子
比方说2—4译码器
我们有两个比特的数
它排列组合有四种情况
0 0 0 1 1 0 1 1
如何用这两个比特的数的排列组合
依次选中四个不同的信号
或者依次产生四个控制输出端
依次只有一个为0
是不是我完成了一个反向的编码
把两个数的0 0 1
最终产生四个
相互独立的控制信号
那么后面如果接三态门
是不是我可以
控制四路数据的流出流入方向啊
这在我们真正实现计算机体系的时候
这些数据流量的控制电路
也是可以通过逻辑门来加以实现的
记住我们刚才讲到加法
讲到运算 讲到逻辑
讲到数据的流向
那么到目前为止
讲了所有这些电路
我们已经把晶体管彻底丢在了一边
抽象出的是真值表的功能
更重要的是这一系列电路
如果大家学过数字逻辑
学过数字电路的课程
很清楚它是叫做组合逻辑电路
它的输出值总是只
取决于当前的输入值
一有输入很快就有输出
那么这就是组合逻辑
那么我们回忆一下图灵机
我们发现图灵机
其实还有一些很奇怪的功能
它能做各种各样的运算
它能转那个纸格子
那个纸格子上要能存储0或者1
所以我们只有组合逻辑显然是不够的
所以作为这门课
给大家拉一拉基础知识的时候
我们还会进入一个
时序逻辑的领域
时序逻辑的特征
就是我们一个由逻辑门构成的电路
它的输出值
不是只取决于当前输入的值的范围
还取决于上一个状态的输出值
或者换一句话说
在时序逻辑电路里头
我不是单向的电压信号的向后传递输出
而是会出现了一些反馈
比如现在这个电路
这个电路在数字逻辑里头
我们叫做D锁存器
那么它由一个非门
四个与门构成
我们大家觉得最trick
或者最围的一件事情
是它的输入端
拉到后面到输出端的时候
出现了一个交叉
Q的输出拉回来
拉到了Q反的与门输入端
Q反的输出拉到了
Q的与门的输入端
那么这种电路的分析
我们首先不要慌
静下心来看
大家会发现
这个E和F两个节点前面是两个与门
这两个与门的属性
决定了它的输入端主要有个零
它的输出就已经锁死了
不取反的时候是1
取反的时候是0
所以换言之
我们的C这一个极
如果接的是0的时候
你会发现D的输入值
根本起不了作用
无法向后传递
换言之输出端Q和Q反是什么值
不会发生变化
那么如果C是1
我们日后可以把它称为CLK的时候
会发现什么呢
我们会发现D如果输入一个0
Q和Q反如何变
这个时候呢
因为有了反馈的存在
我建议大家的思路是
先假定Q是一个值
然后呢
看这个输出值是什么
再假定Q是另外一个值分析电路的功能
看它是否自洽
这样我们能够把
这样带有反馈的时序电路的功能
比较清晰的逻辑写出来
比如说C是1
那么我们第一级的
两个与门的输入这两个引脚就是1了
这两个与门输出主要取决于D
因为D是0
所以上面这个与门
01肯定得0
取反得到1
而如果我们
假定Q当前输出值是0
它反馈到Q反这一边
就会是在有一个与门的输入端是0
所以无论F那个节点是什么
我们Q反的那个输出节点
一定是有0输入的与门
得到0取反得到1
那Q反一定是1
也就是与Q相反
这个值再反馈到Q输入端
那个与门也就E节点下面的那个引脚
跟E的输出一与大家会发现很自洽
会得到Q的输出就是0
那么这意味着什么呢
这是一个自洽的结果
这个值会在这儿锁住
同时我们D为0这个值
会导致Q一定为0
Q反一定为1
那么大家想想这意味着什么
意味着几件事
第一当C为0的时候
我们的D的输入值无法反馈到Q和Q反上
当C为1的时候我们D的输入值
会以自己的值体现在Q
会以自己相反的值体现在Q反
也就这个值传进去了
如果我们这个时候把C再归为0断开呢
你会发现这个0和1
由于这个反馈的存在
就保存在了Q这个引脚
Q反这个引脚上不会消失
那大家想想这个电路
有个什么重要的功能
它不仅是个时序逻辑
它的值取决于输入
也取决于上一次的值
而且如果在C为0的情况下
我们是不是
成功的存住了一个0和一个1啊
所以它是最简单的存储单元
那么我们之前讲过存储的时候
隐隐约约提过
说在世界上第一台计算机ABC Atanasoff的电脑里头
用了很多好多电容
电容上存个电压值不丢就是1
丢了就是0
在数字逻辑电路领域
这是我们接触的第一类
可以存储1比特数的逻辑电路
那么大家会说把它进一步抽象
就像刚才一样抽象成一个方块
我们有四个引脚
这个C的引脚我们现在暂时写成CLK
为什么待会再说
D是我们输入值Δ
那么当C为0的时候
D的值没有作用
Q和Q反的值不丢是存储
当C为1的时候Q和Q反的值被刷新成了D的新值
这是这个电路D锁存器的功能
那如果脑袋灵活同学会说
老师我能不能也把D锁存器向这样串进来
他想干嘛呢
他会说我把时钟信号01来回给
就是C变成CLK了
每当C为0的时候
值不变
每个锁存器的值就不变
每为1的时候
输入值给到第一个锁存器
第一个锁存器的输出值
给到第二个锁存器
那这个数不就往后移了一个比特嘛
想的非常好
我们且不想这个电路对不对
我们现在想这个电路
如果能这么工作
它是什么
大家会发现
它很像图灵机说的转这个纸格子
把这个数据一格一格往前移对不对
所以它是个shift
是个移位计算器(音)。
还有一件事
可能很多同学第一时间响应不到
我们的计算机是工作在二进制的时候
二进制系统
我们做移位操作它的本质是什么
一个数8
写成二进制0100
又移一个比特变成0010得到几
得到4
再右移一个比特得到0001
0010得到几
得到2
8 4 2是依次右移是除法除以2
左移2变4 4变8
左移是乘法
所以如果每个电路
能实现这样一个移位运算
把数据存在里头
我们通过跟组合逻辑不一样的
有限个时序的操作
是不是可以实现乘除法运算
那么十进制的数
别的数我们都可以转换为二进制的乘除法
所以这是一个乘除法单元
大家会说这个时基电路很神奇啊
它既是存储
又是移位转纸格子
又是乘除法
这就是一切的本质
那么我回过头来说
这个电路工作不工作呢
我负责任告诉大家它不工作的
因为我们这是一个锁存器
当你给了个逻辑0的时候
每个门级电路在纳秒量级的延迟下
输入信号会一直打穿它沉积到输出信号数去
所有的门都会刷成同一个值
无法实现按节奏的移位
那么在这门课程里
不是数字电路课我就不展开讲了
那么实际上人类非常聪明
想到了用两个D锁存器组合起来使用
构成一个新的器件叫做D触发器
它只在低电平和高电平的时候
分别有前后两个锁存器单个导通
比如低电平的时候前面导通
高电平的时候后面导通
这样实现了一个节拍节奏
最终它的效果是什么呢
就是它变成了一个如这个时序图所示的
只在每个电平信号C信号跳变
由低变高 由高变低那一瞬间这个边缘
发生作用的边缘触发的存储
或者触发电子学器件
那么这种边缘触发的D触发器级联组合起来
能实现刚才我们想实现的功能
不会出现信号一直传递下去
但是在这节课的范畴里我就不展开讲了
有兴趣的同学可以补一补数字逻辑知识
那么归总起来
我们讲的什么
我们会发现
我们从晶体管
从电磁继电器出发
发现组合组合搭一搭
就能实现与门 非门
与门 非门搭一搭能够做加减法
能够做数据的选通
然后他们如果引入反馈变成时序逻辑
能够做转纸格子能够做乘除法
那么一个CPU是什么呢
我们来讲讲一个概念CPU
假设我们在概念上有这样一个电路
我们现在抛开所有的实现上细节的问题
这从概念上认为它能不能实现
我们一点点看
我们有两个4比特的二进制数
A和B
每个都是4根0或者1
B0 B1 B2 B3 A0 A1 A2 A3
把它拆开了
就是各有4个0或者1的线对吧
我们把它切到后面电路单元上
我们可能有个控制位
然后我们有4个控制的0或者1线
S0 S1 S2 S3
每个都是1比特
也就是一个控制引脚
一个控制引线0或者1
所以S0 S1 S2 S3
每个都是0或者1
把它们也接到这些电路上
我们有若干个电路单元
两个4位的二进制数做加减法
我们会不会做
我们会做
刚才电路已经实现了
两个4位二进制数
我们做与或运算会不会做
这是最简单的
0和1互相接与门或门
两个4位的二进制数
我们做左移我们做右移
也是可以实现的对不对
所以 这两个4位二进制数
进入这四个电路单元
会产生根据我们需要不同的运算结果
当然我们也可以使用S0 S1
去让他们在运算当中略有差异
这是可以的
我们有三态门
可以改变它的逻辑功能对吧
这四个结果出来了以后
进一个刚才讲到的多路开关
我们有两比特
S2和S3两个二进制的0或者1
记不记得我们刚才讲过的2-4译码器
能够选择四种控制信号
把输入的这四个结果其中的某一个
往后送送出去
是不是可以实现了这个多路开关
所以我们是不是
给两个二进制数可以做各种运算
通过多路开关可以选择
其中一种运算的结果往后送
大家想想这个东西
这个电路我们是可以实现的
然后我们估摸一下它的量级
需要多少个晶体管呢
我这里带着大家做一个估算
一个逻辑门大概要四到六个晶体管
刚才一个运算器
每个都要用四到六个逻辑门
那加起来就是几十个晶体管
然后每一个运算单元
又要若干个这样的运算电路
可能再加一个量级
就是几百个晶体管
然后假设我们考虑不周
估计这个晶体管
在几百到几千这个量级是可以实现的
所以我们如果不做
一个真正的芯片设计
放在这门课的范畴里
我们至少承认这件事情可以实现
撑死就是几百几千个晶体管
让一个同学耐心的设计
一个月不够 一年
他总能设计出来对吧
那么这个电路是什么
我要告诉大家它就是一个概念CPU
如果我们把这张电路的功能
和它的图列成一张真值表我们再来看
我们会发现
这个电路它的运算部分已经定死了
它的选通部分也定死了
它的功能是由
两个4比特二进制数逮进去
S3 S2 S1 S0的排列组合
前面两位决定是用的加法类运算
与或类运算
左移类运算还是右移类运算
我们很容易在电路里通过后两个比特
S1 S0控制加法是A和B相加
还是A和B相减
是干脆不加了把A送出去
还是把A递减一个1送出去
是不是可以完成
加法类的不同的运算效果
最后送到我们的输出值上
那么我们会发现这个电路的本质
或者它的真值表是什么
是通过S3 S2 S1 S0
这四个二进制数的组合
来实现一个定好的16种不同的功能
那它是什么呢
我要告诉大家它就是一个概念CPU
我们看到0000 0001 0010 0011
这些控制线的排列组合就是这个概念
四比特CPU的16条指令
那么两个四比特的数
就是我们的两个运算数
这就是一个概念上的
四比特位宽的CPU的原形
那么我们所使用的计算机里头所谓的机器码
所谓的那个
打纸袋子计算机的程序
其实就是交替给
这些0000 0001的指令
和我们运算数让他去算
所谓的编程
就是让这些指令和给的数
形成一个有序的有目的的流程
完成一个计算任务
而我们右边看到的
用ADD来代表0001
用SUB代表0010
这些东西人类更容易读
更容易记
我们称为助记符
用助记符一一对应的来表征我们的这些指令
instructions
这些助记符就是汇编语言
用助记符把人类要的逻辑
依次写出来就是编程
是不是计算机的本质
好像发现离我们没有那么遥远
那程序的本质是什么
程序的本质就是指令的有序集合
完成一个dedicated特定的任务
这就是编程的本质
那么再回到图灵机
图灵机告诉我们什么
图灵机只是一个1比特的计算机的原形
每次读一个0或者1
根据自己约定好的那个映射关系
由当前值和状态值
决定要把它改0或者改1
这事大家想想放到4比特
是不是就是
我们在这样一个原形CPU上
这16条指令所干的事
所以图灵说一个可计算问题
一定能够拆解为
有限个计算步骤的集合
通过所谓的编程加以实现
这就是可计算问题
所以发展到今天
我们会发现计算机仍然没有脱离图灵的范畴
那么好了
我们今天通过一个短短的课
从晶体管0或者1
一直到了计算机的构架
我们虽然不会设计CPU
但是我们大大小小觉得不怵CPU了
它是怎么运行的
再回过头来看看早期的计算机这张图
一个长长的纸袋子
打满了0和1的纸格往里喂
现在学会计算机的同学
我们会感觉到它是指令和数据的集合
送给它按照一个
约定成俗的状态机
指令集去进行运算
实现我们的目标
这就是计算机的本质
所以我们得到了一个Conceptual CPU
那么这节课的范畴呢
到这儿就讲完了
我们如何理解一个真正的
嵌入式系统一个微控制器的内部结构
将在第三章给大家作为微控制器入门来讲
接下来的两节课我会脱离这个概念
再来给大家讲一讲
计算机的发展历史和沿革
这节课就到这儿
谢谢大家
-1.1 课程概览
--Video
-1.2 进入嵌入式系统的世界
--Video
-1.3 如何学好嵌入式系统
--Video
-2.1 计算机的基本概念、发展历史
--Video
-2.2 从晶体管到CPU
--Video
-2.3 概念CPU、微控制器MCU和嵌入式系统
--Video
-2.4 八卦计算机史
--Video
-2.5 不同领域、不同系列的嵌入式系统
--Video
-2.6 ARM历史与MKL25Z128 MCU
--Video
-3.1 CPU的基本结构和运行机制
--Video
-3.2.1 堆栈的概念
--Video
-3.2.2 堆栈的概念-头脑体操
--Video
-3.3.1 ARM的体系结构
--Video
-3.3.2 ARM的体系结构-头脑体操
--Video
-3.4 中断的概念和机制
--Video
-3.5 中断子程的概念和编程
--Video
-3.6 复位、时钟、存储器和总线
--Video
-3.7 小结:MCU的总体结构和程序运行机制
--Video
-4.1 第一种外设:IO
--Video
-4.2 IO外设的编程实操-点亮LED
--Video
-4.3 IO外设的进阶知识
--Video
-4.4 嵌入式开发的基本概念与工具链
--Video
-4.5 嵌入式开发的进阶知识
--Video
-4.6 嵌入式开发中的C语言(上)
--Video
-4.7 嵌入式开发中的C语言(下)
--Video
-E0.1 实验零 开发板的初步认识与工具链的安装
--Video
-E0.2 实验零 体验一个例程的编译与下载
--Video
-E0.3 实验零 编写第一个程序:点亮核心板LED
--Video
-E1 实验一 点灯秘籍
--Video
-5 智能车视角的嵌入式设计
--Video