CaptDam's Blog

Top of page

Microprocessor-327

大学课程80-327笔记:根据讲义总结出来的一份笔记,并根据自己的理解与经验加上了一些注解。

简介:大学课程80-327笔记:根据讲义总结出来的一份笔记,并根据自己的理解与经验加上了一些注解。

修改:2018-12-07 18:27:33

发布:2018-11-16 16:11:26

🌍zh

施工中

此页面正在施工中,页面内容随时可能发生更改。

Microprocessors-327

电子-327 微处理器(微机原理)

说明

免责申明

首先需要在这里注明一下,作为作者,我也不过是一名普通大学生(在我写下这句话时,我不过是刚完成了这门课)。这不是学术论文,我不是什么名字罗列在IEEE著名杂志上的学者,我也不能保证我这里发表的内容的准确性;我只不过是在课后将自己的笔记放在这里,作为方便后来人的一份额外资料。

如果你和我拥有同一个教授(Mr.R),这份资料大概可以帮助你理解一些上课没搞清楚的东西,或是准备考试。但是,正如我之前所说,我们不能够保证这份资料的准确性,使用这一份资料造成的任何不良影响,没我的事。使用者自行承担风险

这一份资料使用CC BY-NC-SA协议发表。

关于格式

在这一份资料中:

这是一个知识点。

这里是我自己的注解

关于课程

关于这一门课程本身

80-327 Microprocessors是一门设置于大三下的数字电路课,DLD1与DLD2是这一门课程的前置课,因为你需要DLD课程所学习的知识(逻辑门,二进制,bus总线等)作为基础。

个人感觉,这一门课相对于前面两门课,要难一些,但是程度不大。这一门课没有让人头疼的K-map化简,也没有让人混沌邪恶的flip-flop;但是,这门课需要你理解简单CPU的原理,需要编写汇编代码,并且需要理解汇编代码和CPU如何协同工作。

这门课结束后的收获是什么呢?个人感觉:卧槽,原来电脑是这么工作的呀,我感觉我能自己造一台那种一开机就报错的

顺便之前学C时没有搞懂的pointer,现在搞懂了。

虽然这份资料是针对于这一门课程编写的,但是也推荐给各位爱好者。

顺便,教授用的教科书似乎有中文版。但是我们似乎从来没有使用过教科书......

关于lab与project

lab时编写汇编代码。平台:68HC11,extended mode。建议在lab前先编写好asm文件,lab上调试,不然时间不够。

project是使用一个叫做logisim的软件制作CPU(数电模拟)。强烈建议提前完成,我花十个小时弄完,不过有的同学是debug了一整周还没弄出来。

关于教授与考试

这个教授是座大山。电子系三座大山,一个他,一个搞控制系统的,还有一个教数学的(这里我就不直接说出来了),如果运气好,大三下甚至可以来个三方会诊(没错,这就是我们这一届的遭遇)。

这位教授应该是我见过的最随意的教授:风骚的小辫子+穿个拖鞋就来上课(对比对面商科楼里西装革履的教授,这画风......捂脸)。

但是也是一个考试很骚的教授:三个小时的考试30+道大题,涵盖各个方面知识点,包括他上课随口一提的。考试时间很紧迫,几乎没有思考的时间,如果你需要花费时间思考,那多半这场考试你做不完了。不过不要紧,最后有curve,挂科太多系主任会curve。

第一章 Digital System

Digital System 数字系统

现在几乎什么电器都是数字系统:电脑,手机,电视。

现在物联网时代,什么东西都在往数字系统走。

Digital Computer 数字计算机

数字计算机有这些特征:

Program 使用程序:程序是一连串的指令。有的系统上,用户可以编辑程序或数据

General purpose 通用功能:并不是每一个数字系统都有自己特制的CPU,CPU是通用的,使用程序赋予数字系统独特的功能。

Discrete 非连续:非连续采样。回想起来被Signal and System支配的恐惧了吗?没事,这学期还有Analog Communication,下学期还有DSP。

数字系统的构成:
- Memory 记忆体:储存程序,输出/输入/中间数据。
- CPU:执行数字与逻辑计算
- I/O:Input/Output,通过Input输入程序与数据,通过Output输出结果。

数字计算机做什么:

Arithmetic/logic computation 数字与逻辑计算

通过编程,根据内部与外部条件做决定。

内部条件:内存;外部条件:输入

可编程:使用程序赋予通用的数字系统独特的功能。

低价。

Program 程序:

电脑不会犯错(硬件性错误很少见了),但是程序员会犯错。

Garbage in, garbage out.

非常好的数学能力。

电脑一点也不聪明,只是快而已。大力出奇迹。

高级语言会使用(浪费)更多的资源。

高级语言使用compiler编译为binary文件
汇编使用assembler翻译为instruction。

低带宽(低bit)更快跟便宜。

Binary number system 二进制表示法

前面的都是废话,这里才是正文

这里只是复习,所以就不写太详细了

小数

假设一个十进制数:12.25

12 = 8 + 4 + 0 + 0; 0.25 = 0/2 + 1/4

12.5 = 0b1100.01

再假设一个十进制数:0.1

0 = 0; 0.1 = 0/2 + 0/4 + 0/8 + 1/16 + 1/32 + 0/64 + ...

0.1 = 0b0.000110...

二进制无法精确地表示某些小数

signed int 带正负的数

使用MSB作为符号,0为正,1为负。

要获得某个数的负值(也叫做2's complement):取反后加一。

假设该数为3:

3 = 0011

NOT 3 = 1100

NOT 3 + 1 = 1101 = -3

对于一个N bits的数,unsigned number取值范围为0 ~ (2^N)-1,signed number取值范围为-2^(N-1) ~ 2^(N-1)-1

我个人比较喜欢使用下表作为参考,在考试和做project时,我会先画出这个表再开始工作。

BCD Binary Coded Decimal

使用二进制来表示十进制数。

假设一个十进制数:129

百位:1 = 0b0001; 十位:2 = 0b0010; 个位:9 = 0b1001

129 = BCD 0b 0001 0010 1001 = BCD 0x129

对于BCD,nibble(半字节/半byte)不可能出现A-F。

使用BCD的好处是,其输出跟方便使用人体工程学设备,只要将每个nibble通过解码后输出给7-seg LED就可以直接显示出来。

第二章 数字电路

这一章还在复习

电平

电平使用高低,high/low,1/0区别。

对于一个5V系统,3~5V表示高电平(high/1);0~2V表示低电平(low/0)。

对于一个3V系统,2~3V表示高电平(high/1);0~1V表示低电平(low/0)。

注意,高低电平之间有一个区间既不属于高电平,也不属于低电平。如果给一个刚好处于这个区间的电压,该设备可能会读高,也可能会读低。

下图是德州仪器的NAND门电路芯片的电气参数,可以看见高低电平的输出电压都是有MIN/MAX区间的:

一般来说,(假设发出信号的设备为Master,接受信号的设备为Slave,都是5V系统):
当Master发出高电平信号时:因为内阻,Master引脚测得输出信号可能是4.5V。在因为沿路电阻与电磁干扰,Slave实际接收到4V。因为4V在3V~5V区间,所以Slave能够成功识别衰减的信号。
Master发出低电平信号时:因为漏电,Master引脚测得输出信号可能是0.5V。在因为沿路电阻与电磁干扰,Slave实际接收到1V。因为1V在0V~2V区间,所以Slave能够成功识别衰减的信号。
假设两台设备之间距离延长,外界电磁干扰加强,Master发出高,但是实际Slave可能接收到2.8V,那么Slave将有可能设别到一个低电平信号。这也是为什么电子设备通信有环境与距离要求。如果需要远距离通信,可以使用抗电磁干扰信号线,或是使用长距离传输协议(如RS232),或是添加buffer。

门电路

基础逻辑门

逻辑电路时使用模拟电路晶体管搭建的。其中Buffer和NOT gate(也叫inverter)由2个晶体管组成;NAND gate与NOR gate使用4个晶体管组成;AND gate与OR gate分别由NAND gate与NORgate 串联NOT gate组成,也就是说,AND gate与OR gate由六个晶体管组成;XOR gate与NXOR gate由12个晶体管组成。目前的工艺情况下,NAND gate会比NOR gate更快。所以说,在设计电路时尽量使用更少晶体管与更快响应速度的方案。

更复杂逻辑门/逻辑电路,都是由这几个基础门组合而成的。

目前主流的工艺技术是CMOS技术,即同时使用PMOS与NMOS。CMOS因为需要在一张芯片里集成两种材料,对工艺有更高要求(不过技术也在进步,工艺成本已经降下来了)。相比于只使用一种MOS的技术,CMOS更省电(因为单种MOS的门是工作在短路情况下的_(: _| <)__)。

三态门

三态门(Three state gate)类似于Buffer,但是有一个控制脚。当控制脚为高时,输出等于输入;当控制脚为低时,输出为高阻抗,High-Z。

High-Z,高阻抗,等同于开路。如果一个逻辑电路的输入是High-Z,那么其读取到的信号可能是高,也可能是低。可以这么理解为,因为是开路,但是该线路上有多少电子并不明确。
一般来说,我们将一堆线路连接到一条总线上,只有一条线路会输出高/低信号,其他线路都维持高阻抗。这样,总线将会被使能线路拉高/拉低,而其他线路因为是高阻抗所以不会对总线造成干扰。

编码/解码

编码器Encoder/解码器Decoder一般用于One-hot或One-cold到BCD,binary或其他格式信号的转化。一般叫法为n-to-m decoder/encoder或n*m decoder/encoder,n是输入的宽度,m是输出的宽度。比如将3-bit binary转化为8-bit One-cold的74LS138就叫做3-to-8 decoder。

举一个例子,电梯用户面板上由0-9共10个楼成按钮,电梯控制器接受4-bit binary输入:那么就是用户10-bit --> 10*4 encoder --> 电梯控制器。电梯控制器输出4-bit binary信号,电梯控制面板有10个LED指示灯指示当前楼层,每个LED分别表示一个楼层号:那么就是,电梯控制器 4-bit --> 4-to-10 decoder --> LED显示面板。