数字逻辑电路(一、基本概述、数制及其转换)

1、数字逻辑基本概述

    19世纪30年代,美国物理学家约瑟夫·亨利在研究电路控制时利用电磁感应现象发明了继电器。继电器是具有隔离功能的自动开关元件,广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电子设备中,是最重要的控制元件之一。

    因为继电器电路非常大,速度慢。20世纪四十年代-五十年代,电子管与晶体管相继出现,电子管还是太大,而晶体管非常小,而且能进行非常有用的设计,他们具有检波、整流、放大、开关、稳压、信号调制等多种功能。就这么一个小小的晶体管,就让三个人(约翰·巴丁、威廉·肖克利、沃尔特·布拉顿)获得了诺贝尔物理学奖,可见这项发明在物理界占据着举足轻重的地位。

    20世纪90年代后,电子科学和技术取得了飞速的发展,尤其是电子计算机和集成电路的广泛应用,布尔代数在数字逻辑电路的分析和设计中得到了广泛的运用。

1.1、模拟信号和数字信号

    在我们的客观世界中,有两种物理量:连续量(模拟量)和数字量。相应的表示两种物理量的两种信号:模拟信号和数字信号。

1.1.1、模拟量

    如我们物理中经常接触到的电压、电流、压力、速度、流量等信号量,都是模拟量。我们把物理学中度量物体属性或描述物体运动状态及其变化过程的量,如水位、电压等称为物理量。

    模拟量:连续变化的物理量。即变量在一定范围内连续变化的量,简单来说就是在时间上或数值上都是连续的物理量

注:在物理量中大多数为模拟量,模拟量很难准确得到、传递、加工。

1.1.2、数字量

    数字量是物理量的一种,它们的变化在时间上是不连续的,总是发生在一系列“离散”的瞬间,这一类物理量叫做数字量,也就是离散量,指的是分散开来的、不存在中间值的量。

    数字量:非连续变化的物理量。

    注:模拟量的概念与数字量相对应,但是经过量化之后又可以转化为数字量。模拟量是在时间和数量上都是连续的物理量,其表示的信号则为模拟信号模拟量在连续的变化过程中任何一个取值都是一个具体有意义的物理量,如温度,电压,电流等。连续的电压,电流等信号量,经过抽样和量化后就是数字量。

    为什么需要数字量?

    数字相对容易设计、方便存储、操作可编程、数字电路抗干扰能力强,数字系统可以承担起传统的模拟系统在工程技术中所做的每一项工作,并且可能比原来更好。数字系统除了能对信息进行数值的运算加工外,还可以方便的进行各种逻辑加工。

    简单的记忆:模拟量=连续的,数字量=离散的

1.1.3、模拟信号和数字信号

    模拟信号:我们把表示模拟量的信号叫做模拟信号。(在时间和数值上连续的信号)

    数字信号:把在时间和数值上不连续的信号叫数字信号。

数字逻辑电路(一、基本概述、数制及其转换)_第1张图片

1.2、数字逻辑电路概述

1.2.1、模拟电路和数字电路

    模拟电路:把工作在模拟信号下的电子电路叫模拟电路(对模拟信号进行传输、处理)。

    数字电路:用来处理数字信号的电子电路叫数字逻辑电路,简称逻辑电路。即对信号进行传输、计算、变换、寄存、逻辑判断和显示等的电路,通常是高电平与低电平之间的跳变,有电位型[高低]和脉冲型[有无]来表示。

1.2.2、数字逻辑电路特点

1)工作信号是二进制的数字,反映在电路上就是低电平和高电平两种状态(即0和1两个逻辑值)

2)在数字电路中,研究的主要问题是电路的逻辑功能,即输入信号的状态和输出信号的状态之间的关系。

3)电路结构简单、功耗低便于集成。

4)工作速度快、精确度高、功能强、可靠性好。

    为什么工作信号采用二进制?

    通常一个物理量的信号往往具有二值性,因此以开关来实现二值性的逻辑控制是最简单的。

1.2.3、数字电路分类

  • 按集成度分类

1)小规模(SSI,每片数十器件)

2)中规模(MSI,每片数百器件)

3)大规模(LSI,每片数千器件)

4)超大规模(VLSI,每片数目大于1万)

  • 工艺分类

1)双极型(TTL型)

2)单极型(MOS型)

1.2.4、数字电路类型

    按照结构工作原理不同,数字电路可分为组合逻辑电路和时序逻辑电路。

    组合逻辑电路:没有记忆功能,其输出信号只与当时的输入信号有关,而与电路以前的状态无关。

    时序逻辑电路:具有记忆功能,其输出信号不仅和当时的输入信号有关,而且与电路以前的状态有关。时序电路又可分为同步时序电路和异步时序电路。

2、数制及其转换

    我们从小就开始学习数数,从0-9,然后逢十进一,其实这就是十进制。除了十进制外,我们常见的有以下几种:

数字逻辑电路(一、基本概述、数制及其转换)_第2张图片

    进制数越大,所能表现的状态就越多。符号个数越少的话,在物理上就最容易实现。所以呢,用二进制编码表示数值,运算的规则就要简单很多。

2.1、数制相关概念

进位制:表示数值时,仅用一位数往往不够用的,必须用进位计数的方法组成多位数。

基数:进位数的基数,就是在该进位制中的数码个数。R进制包含0、1、...、R-1共R个数字符号,进位的规则就是“逢R进一”。

位权(位的权数):在某一位进位制数中,每一位数码的大小都对应着该位上的数码乘上一个固定的数,这个固定的数就是这一位的权数。权数是一个幂,R进制的位权就是R的整数次幂。

2.2、进制表示法

2.2.1、多项式表示法

    R进制数的多项式表示方法(权展开):

注:N是数值,R是基数

例如:

十进制的12用公式展开:
12 = 1*10^1+2*10^0
十进制的0.358用公式展开:
0.358 = 3*10^-1+5*10^-2+8*^-3
二进制中的1001用公式展开:
9 = 1*2^3+0*2^2+0*2^1+1*2^0

2.2.2、二进制

​    二进制只有0和1两个数码,它的每一位都可以用电子元件来实现,且运算规则简单,相应的运算电路也容易实现。

​    加法规则:例如,0+0 = 0,1+0 = 1, 1+1 = 0 (进位为1)

​    减法规则:例如,0-0 = 0, 0-1 = 1(借位为1),1-1 = 0

​    乘法规则:例如,0x0 = 0 ,0x1 = 0 ,1x1 = 1

​    除法规则:例如,0÷1 = 0 , 1÷1 = 1

使用案例:A(11001)、B(101)分别实现加、减、乘、除

1)加减法运算:

2)乘除法运算

 数字逻辑电路(一、基本概述、数制及其转换)_第3张图片

2.2.3、二进制的转换

1)二级制转换为十进制

只需要将二进制数按权展开即可。

例如:将1011.101转换为十进制

1011.101 = 1*2^3+0*2^2+1*2^1+1*2^0+1*2^-1+0*2^-2+1*2^-3
         = 11.625

2)十进制转换为二进制

将整数部分和小数部分分别进行转换,整数部分采用除2取余法(先得到的为低位,后得到的为高位),小数部分采用乘2取整法(先得到的为高位,后得到的为低位)。

 数字逻辑电路(一、基本概述、数制及其转换)_第4张图片

3)二进制转换为八进制

以二进制小数点为界,整数部分向左,小数部分向右,每3位分成一组,不够3位补零。

例如:将10101101.01转换为八进制

 

2.3、带符号的二进制数的表示

数据的表示形式,主要有两种方法:真值法和机器数(机器码)。

1)真值

带符号的的数,正数的符号用+表示,负数的符号用-表示

2)机器数

将符号数值化,也称机器码,符号位用“0”表示正数,用“1”表示负数,根据数值部分的表示方法不同,常用的机器码分为原码、反码和补码三种形式。

2.3.1、原码

也正是由于计算机内部的数据表示方式只有0和1,所以计算机并不认识+、-(正、负)号,所以必须拿出一位来表示数的正负。这就是原码的来源。

定义:最高位为符号位,数值部分就是该数的绝对值。

1)整数原码

[X]_{} = \begin{cases} X & 0<=X<2^n \\ 2^n-X & -2^n<X<=0 \\ \end{cases}

例如:

数字逻辑电路(一、基本概述、数制及其转换)_第5张图片 注:一般来说,正整数前面加0,负整数前面加1,根据公式推导结果是一致的。

2)小数原码

[X]_{} = \begin{cases} X & 0<=X<1 \\ 1-X & -1<X<=0 \\ \end{cases}

 例如:

数字逻辑电路(一、基本概述、数制及其转换)_第6张图片

细心的你可能会发现,在原码中的零会有“+0” 和 “-0” 之分。

 

3)原码的加减法

数字逻辑电路(一、基本概述、数制及其转换)_第7张图片

    当然,+0和-0的问题,好像不影响我们计算,但是我们发现一个更严重的问题,就是原码在涉及负数运算的时候,不能直接运算。需要先确定符号位,在确定使用加减法,所以原码在做加减法时较为麻烦。甚至(+1)+(-1)都并不为0,那么有没有一种方法能让我们无需在意这个符号位呢?

2.3.2、反码

    自从加上了符号位,给我们的计算带来了一系列的问题,让我们的运算及电路设计变得十分复杂,于是干脆让符号位也参与运算。反码的设计思想就是冲着解决这个问题而出现了。

    定义:用反码表示带符号位二进制数时,符号位与原码相同,即用0表示正数,用1表示负数。正数反码的数值位于原码的数值位相同,负数反码的数值位是真值(或原码)的数值位每位取反。

 1)整数反码

[X]_{} = \begin{cases}X & 0<=X<2^n \\2^{n+1}-1+X & -2^n<X<=0 \\\end{cases}

2)小数反码

[X]_{} = \begin{cases}X & 0<=X<1 \\2-2^{-n}+X & -1<X<=0 \\\end{cases}

例如:

数字逻辑电路(一、基本概述、数制及其转换)_第8张图片

  至于公式如何推导的,这里也没有去详细研究。规则就是,数值位取反。基本对应如下:

原码 反码 真值 原码 反码 真值
0000 0000 +0 1000 1111 -0
0001 0001 +1 1001 1110 -1
0010 0010 +2 1010 1101 -2
0011 0011 +3 1011 1100 -3

3)反码实现加减法

前面使用原码的相反数和正负数计算的结果都没有得到我们想要的结果,现在使用反码来看下:

数字逻辑电路(一、基本概述、数制及其转换)_第9张图片

使用反码相加,无需在意符号位,解决了相反数(也就是减法)运算的问题。

2.3.3、补码

使用反码虽然解决了符号问题。但是并没有解决“+0”和“-0”的问题。两数相减,总会有0的时候,什么时候是“+0”,什么时候是“-0”?虽然,带符号的0没有任何意义,但是有两个编码[0000 0000]和[1000 0000]对应0,这样还是有缺陷。于是出现了补码。

定义:补码就是为了便于CPU减法运算的(其根本原因是,计算机在芯片设计的时候只做了加法器,并没有做减法器:一是成本、二是减法器实现对硬件的开销大)。

在了解补码前我们先了解几个概念。便于我们了解补码的实现思路。

1)模

是指一个计量系统的计数范围。记作mod或M。如时钟的计量范围0-11,模=12。n位的计算机计量范围是0-2^n - 1,模=2^n - 1。

任何有模的系统,均可以化减法为加法。比如:当前时间为上午10点,如何获得早上8点,可以逆时针校准两小时10-2 = 8,也可以再转一圈顺时针校准10小时之后也是8点。也就是说以12为模时,-2的补码就是10。

2)整数补码

[X]_{ } = \begin{cases}X & 0<=X<2^n \\2^{n+1}+X & -2^n<X<=0 \\\end{cases}

3)小数补码

[X]_{ } = \begin{cases}X & 0<=X<1 \\2+X & -1<X<=0 \\\end{cases}

也就是说正数原码的补码就是原码,负数的原码的补码是反码末位+1。所以,0的补码就只有一个,就没有所谓的“+0”和“-0”之分了。

原码 反码 补码 真值 原码 反码 补码 真值
0000 0000 0000 +0 1000 1111 0000 -0
0001 0001 0001 +1 1001 1110 1111 -1
0010 0010 0010 +2 1010 1101 1110 -2
0011 0011 0011 +3 1011 1100 1101 -3

补码解决了0的符号以及两个编码的问题,用【0000 0000】表示0,用【1000 0000】表示-128。

注意-128实际上是使用以前的-0的补码来表示,所以-128并没有原码和反码(-128的补码表示[1000 0000]补,算出来的原码是[0000 0000]原,这是不正确的)。使用补码,不仅仅修复了0的符号以及两个编码的问题,而且还能够多表示一个最低数。这就是为什么8位二进制,使用补码表示的范围为【-128,127】。

总结:正数的三种机器码的形式完全一样,而负数的三种机器码有三种不同的形式。

2.4、几种常见的编码

2.4.1、BCD码

数字系统内部处理采用的是二进制数据,但人们通常习惯使用十进制数据(我们的计算机计算)。为了满足两者的要求,数字系统常采用BCD(Binary Coded Decimal)码。

BCD码定义:就是采用4位二机制代码对应1位十进制数进行编码。

BCD码的编码方案可分为有权码和无权码两种。

数字逻辑电路(一、基本概述、数制及其转换)_第10张图片

​    注:什么是有权,前面我们说过位权的问题,这里的权也是这个意思。

1)8421-BCD码

​    四位二进制的数码的权从左到右分别为8、4、2、1。

2)2421-BCD码

​    四位二进制的数码的权从左到右分别为2、4、2、1。

3)余3码

​    由8421码加0011(3)形成的无权码。

例如:

数字逻辑电路(一、基本概述、数制及其转换)_第11张图片

注:对于2421码和余3码,0和9的编码是取反的一个结果。

例如:258的8421BCD码如何写

 

 

例如:已知一个2421码,计算出其十进制。

(1001)_{2421} = (3)_{10}

那有人会想,负数怎么去表示呢?这样就会用到一些未选用的编码。比如在8421码中,我们可以用1100来表示正号而1101来表示负号。

2.4.2、可靠性编码

有了上面的BCD码,我们就能表示出我们常用的一些十进制数据。但是数据在传输过程中,如果产生了错误呢?为了减少或者发现代码在形成和传输过程中可能发生的错误,就有了我们下面要介绍的一些可靠性编码(奇偶校验码、格雷码)。

1)奇偶校验码

由若干个有效信息(如:一个字节),再加上一个二进制(校验位)组成校验码(即:信息位+校验位,当然也可以反过来,校验位+信息位)。

在了解奇偶校验时,我们先了解下什么是码距。

码距:任何一种编码都有许多码字构成,任意两个码字之间最少变化的二进制数就称为数据校验码的码距。

例如:用4位二进制数,它可以表示出16中状态,就有16个不同的码字(0000、0001...1111)。最小的变化是0000-0001,此时它的码距为1。

奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数。

偶校验:整个校验码(有效信息位和校验位)中“1”的个数为偶数。

假如:我们想要表示性别的类别,如果用一位二进制去表示:男-0,女-1。那传递信息的时候,接收方并不好判断是不是传输错误。所以可以加一位校验码。

如果采用奇校验:那么男,则表示为01(再补上一个1才是奇数个0);女,则表示为10(再补上个0,也是奇数个1),此时合法的数据为{01,10},如果出现{00,11}则是不合法的。

如果采用偶校验:那么男,则表示为00;女,则表示为11,此时合法的数据为{00,11},如果出现{01,10}则是不合法的。

但是,如果采用偶校验时,女11,变成了00,那么也无法校验出错误。奇偶校验,能发现单错(能知道奇数个位出错),无法对错误进行定位。

2)格雷码

特点:任意两个相邻数的格雷码之间只有一位不同,其余的码元都相同。

目的:解决代码生成时发生的错误。

例如:4位2进制的加1计数器

数字逻辑电路(一、基本概述、数制及其转换)_第12张图片

注:工作时加1计数器在0001之后的情况,正确的应该为0010,而不应该为0011等其他情况。

经典的格雷码,其实是由二进制码生成的,通过异或运算完成(最高位不变,其他异或)。

例如:二进制码(10100)它的格雷码为11110

数字逻辑电路(一、基本概述、数制及其转换)_第13张图片

2.4.3、字符编码

    在计算机中除了数值之外,还有一类非常重要的数据,那就是字符,如大小写英文字母(A,B,C,...a,b,c...),数字符号(0,1,2...9)以及一些其他符号(+、?、=、%)。这些符号都是用二进制编码的形式表示,即每一个字符被赋予一个唯一且固定的二进制编码,为了统一,人们定制了编码标准。目前,一般都是采用美国标准交换码,使用七位二进制编码来表示一个符号,故该编码有128(2^7)个符号。

数字逻辑电路(一、基本概述、数制及其转换)_第14张图片

你可能感兴趣的:(计算机基础及网络,原创未经允许不得转载,数字逻辑电路)