当前课程知识点:智能车制作:嵌入式系统 >  第二章 绪论 >  2.2 从晶体管到CPU >  Video

返回《智能车制作:嵌入式系统》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《智能车制作:嵌入式系统》慕课在线视频列表

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

第三章 MCU基础

-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

第四章 MCU外设与开发

-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

第五章 MCU与嵌入式系统设计

-5 智能车视角的嵌入式设计

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。