3.2 计算机系统
3.2.1 计算机系统的类型
计算机系统可以按不同的方法来分类。图3-2给出了一个按用户和用途的分类。下面我们对一些典型的系统做更详细的介绍。
1.工作站和大型机
工作站和大型机主要面向通用应用领域,具备强大的数据运算与图形、图像处理能力,是为满足工程设计、科学研究、模拟仿真等专业领域而设计开发的高性能计算机。工作站和大型机也广泛用作服务器为远程终端用户提供服务。
2.个人电脑
个人电脑就是我们日常使用的台式机和笔记本,相信大家都已经很熟悉了。
3.嵌入式系统
嵌入式系统是一种专用的计算机系统,常常作为装置或者设备的一部分。事实上,绝大部分带有数字接口的设备,如手表、微波炉、录像机、车灯,都使用嵌入式系统。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的、预先定义好的程序和任务,也可以通过一个开发平台对嵌入式系统重新编程。本书中用于教学的Intel和EV3机器人也属于嵌入式系统。我们将通过VIPLE对Intel和EV3机器人进行编程。
3.2.2 计算机系统的组成
一个计算机系统主要有五大部件组成,如图3-3所示。所有部件通过总线连接。
- ALU(算术/逻辑单元):执行算术和逻辑操作,通常包括加法、减法、与(AND)、或(OR)、非(NOT)运算。ALU使用多路选择器来选择不同的运算。算术/逻辑单元还需要一组寄存器的支持,以便更高效地执行运算。
- 控制器:对指令进行译码,从而产生控制信号来告诉ALU、内存和I/O设备需要做什么。
- 存储器(内存):存储指令和数据。
- 输入设备:把输入的数据写入内存。
- 输出设备:从内存中读取数据。
图3-4给出了一个简单的ALU设计。它能够执行算术和逻辑操作,包括与、或、加和减等操作。该ALU会用到以下部件:非门、与门、或门、全加器、2-1多路选择器和4-1多路选择器。在本章的实验中,我们将用VIPLE实现这一ALU设计。
一个2-1多路选择器有一条控制输入线(0或1值)和两条数据输入线。当控制输入线的值为0,连到0端口的输入线将被选中,与输出线接通。当控制输入线的值为1,连到1端口的输入线将被选中,与输出线接通。图3-4的2-1多路选择器用于选择加法运算和减法运算。减法实际是通过加负数来实现的。
一个4-1多路选择器有两条控制输入线(00,01,10或11值)和4条数据输入线。当控制输入线的值为00,连到0端口的输入线将被选中,与输出线接通。当控制输入线的值为01(1),连到1端口的输入线将被选中,与输出线接通。当控制输入线的值为10(2),连到2端口的输入线将被选中,与输出线接通。当控制输入线的值为11(3),连到3端口的输入线将被选中,与输出线接通。在图3-4的设计中,4-1多路选择器用于选择与、或、加减运算,端口3未用。
1.冯·诺依曼机
1948年冯·诺依曼提出程序存储的计算机概念,也叫作冯·诺依曼机或存储程序式计算机。这种计算机具有以下两个特点:
1)指令和数据都以二进制数的形式表示。
2)从内存中读取指令,并且一条接一条的顺序执行。
冯·诺依曼机的优点在于结构简单,便于控制。经过了70多年的发展,计算机经历了若干的变迁,但是计算机的基本结构没有太大的变化,基本延续了冯·诺依曼当时的设计思想。
让我们进一步考虑如何在ALU中实现逻辑的加法(全加器)设计。首先,回顾一下如何进行十进制加法。从右到左相加两个数。考虑到可能的进位运算,事实上我们是在每位上添加三个数字,如下所示:
计算机只能处理二进制数。二进制加法也是类似的,一个数位只能用0或1表示。任何一个大于1的数将需要多个数位来表示。下面是二进制加法的示例:
一个典型的计算机含有32位的二进制数。它的全加器由32个1位的全加器构成,如
图3-5所示,其中,每一位全加器需要三个输入:a、b和carryIn,并生成两个输出:carryOut和sum。
在实验任务中,我们将采用基于组件和面向服务的设计方法来开发和仿真一个全加器。基于组件和面向服务的设计方法包括下列步骤。
将每个基本构件块(与、或、非)设计成一个组件(VIPLE活动)。这些基本构件块可以基于真值表直接建立。一个真值表表达了输入和输出之间的映射关系。在本节中,我们将进行以下设计:
- 组件设计;
- 把组件封装成VIPLE服务;
- 利用已有的组件/服务构建1位全加器;
- 创建测试环境来测试全加器。
在接下来的实验中,我们将设计更多的组件:2-1(2选1)多路选择器和4-1(4选1)多路选择器,并将它们封装成服务。然后,利用可用的组件/服务构建1位ALU。
例如,图3-6为根据异或门的真值表(数学模型)设计的VIPLE活动。
2.仿真异或门的VIPLE代码
问题: 什么是真值表?
如果一个门电路有10个输入,那么它的真值表中有多少种输入组合?10?100?1000?1024?
真值表是通过一种有效的方式来计算命题表达式的命题值,这种方式也被称为决策过程。一个命题表达式可以是一个基本公式(一个命题常数、命题变量,或是命题函数),或是通过逻辑运算符所表示的基本公式,例如,与(∧)、或(∨)、非(?)。Fx∧Gx就是一个命题表达式。
经典逻辑的真值表局限于布尔逻辑系统中,在该系统中,只存在两个逻辑(数字)值,真和假,通常分别写作F和T,或是1和0。真值表通过列出所有的输入组合而得到相应输出结果来表示数字部件。图3-7为与门、或门、非门、异或门及其真值表。
基于这些门电路,我们可以用真值表构建其他逻辑组件。对于1位全加器来说,它对3个输入a、b和carryIn求和。生成两个输出:a、b和carryOut。图3-8表示该全加器的输入和输出及它们的真值表。
根据真值表,通过手动使用卡诺图,或自动使用计算机辅助设计(CAD)软件都可以进行逻辑设计。图3-9给出了基于给定真值表的全加器的逻辑设计。
在该实验中,我们将使用VIPLE来仿真门电路和1位全加器。
3.1位算术逻辑单元的逻辑设计
对于一个输入较多的大型电路来说,直接应用真值表可能太复杂。例如,图3-10所示的线路图(1位算术逻辑单元)有6个输入和2个输出。
如果直接使用真值表,会有26 = 64个输入组合,即真值表有64行输入值。在VIPLE的第一个If活动中将测试64个条件,且每个条件有5组比较,如下所示:
若采用这一设计方案,VIPLE框图会很复杂。因此,我们将使用基于组件的和面向服务的方法来处理上述复杂的组件,也就是说,我们将遵循逻辑设计并充分利用已经创建好的组件(服务)。这一设计和实现,将在下一章中讨论。