现在的位置: 首页 > 综合 > 正文

计算机SAP-1 设计与实现(1)

2013年04月24日 ⁄ 综合 ⁄ 共 4208字 ⁄ 字号 评论关闭

按照《数字计算机电子学》Digital Computer Electronics)中SAP-1的设计,使用proteus仿真了SAP-1simple as possible)计算机。能完成这个工作,首先要感谢网友杨志雄先生对我的帮助,他帮我解决了很多电路和使用proteus的问题。

一. 系统架构

按冯·诺依曼型结构,计算机由运算器、控制器、存储器、输入设备、输出设备组成。运算器和控制器组合称为中央处理部件或CPU

CPU的基本功能,是执行事先存放在主存储器中的程序。而控制器的任务,是识别、解释和控制(其他所有部件)执行程序中的每一条指令,并使整个系统运行在高度同步协调的状态。运算器的功能是完成算术和逻辑运算。存储器用来存储程序和数据。

为了解决实际问题,需要计算机执行人们为解改问题而编制的程序。为存储和执行程序,要求系统有足够的存储空间和可以接受的执行时间。从解题的角度看,作为系统的一个重要组成部分的存储器,必须在存储容量和存取速度方面达到系统总体设计的要求。理想的存储器,应当是大容量、高速度、低成本。为了发挥各种不同类型存储器的长处,避开其弱点,应把它们合理地组织起来,这就出现了存储系统层次结构的概念。实际计算机系统中的存储器层次结构如下图所示。

 图片

    计算机中为什么要采用总线呢?主要目的是减少传输线总数以简化I/O系统的结构。例如有nk位的部件相互要进行通信,如果不采用总线结构而直接采用传输线互连起来,那么在一般情况下,n个部件必须以所有可能的方式连接,需要的专用通路数目为[n-1*n]/2,而每条通路为k位,则传输线位数总数为[k*n-1*n]/2;若nk很大,则传输线总位数多的惊人。构成总线的位传输线的总数称为总线宽度。采用共享总线结构,nk位部件要相互进行通信,只需要宽度为k为的总线就可以,且与n的大小无关,这就大大节省了传输线成本。

如果计算机采用单总线结构,架构如下图:


图片
单总线结构

SAP-1架构图:

      图片

    SAP-1中,

控制器包括:CONPCIR。存储器包括:MARPROM。运算器包括:累加器A、寄存器BALU。输出包括:输出寄存器OLED显示D。输入需要在计算机运行前,使用开关将数据存储到PROM中。

其中累加器A、寄存器B属于存储系统,完全可以用PROM代替,而使用寄存器是了提高访问速度。MAR(存储器地址寄存器)缓存了PROM的地址,也是为了提高速度。IR用于缓存正在执行或即将执行的指令同样为了提高访问速度。

Ø        PC(程序计数器)

PC寄存器用于存储当前指令在ROM中的地址。在SAP-1中,PC4位计数器,计数范围为0000——1111。当计算机运行之前,PC重置为0000

Ø        IR(指令寄存器)

IR用于存放正在执行或即将执行的指令,将指令的操作码部分传送给CON,操作数部分通过总线传输到MAR

Ø        控制单元(CON

   
SAP-1中,控制器包括。其中CON的功能包括

1.    产生时序脉冲信号CLKCLK将同步计算机中各个部件的运行。

2.    发送清除指令CLR,计算机运行之前,发送CLRPCIR,这样使IR的内容清空,PC重置
0000

3.    根据IR中的操作码,产生一个12位控制信号 CP EP LM ER  LI
EI LA EA  SU EU LB LO
。(取指周期不需要操作码)

这些控制信号定义了各个寄存器在CLK的上升沿到达时的动作。例如,CP=1,代表在CLK上升沿到达时,PC将会加1EP=1LM=1,意味着,PC的内容会加载到MAR中。

Ø        MAR存储器地址寄存器

在访问存储器时,缓存存储单元的地址。在SAP-1中,MAR4位寄存器。

Ø        PROM(可编程只读存储器)

存储器用于存储程序和数据。

SAP-1中,PROM大小是16*8,意思是他有168位的存储单元,因此PROM的存储地址为0000——1111。程序需放在以0000开始的地址空间,数据需放在程序的后面。因为PC计数从0000开始,计算机运行后,首先从PROM0000地址读取数据,所以程序必须存从0000开始存放。

 

Ø        累加器A

累加器A,是一个8位二进制寄存器,专门用来存放操作数或运算结果。在CPU执行某种运算前,两个操作数中的第一个放在累加器A中,运算完成后,累加器A中便可得到运算结果。

Ø        寄存器B

寄存器B也是一个8位二进制寄存器,该寄存器,用来存放加数或减数。

Ø        ALU

ALU用于完成算术运算。在SAP-1中,SU=1时,ALU执行减法操作,A=A-BSU=0时,ALU执行加法操作,A=A+B。为了简化ALU的设计,SAP-1中的数据是补码形式。因此PROMABO中的数据是以补码形式存放的。

Ø        输出寄存器O

当运算结束后,累加器A中存储计算结果。当EA=1LO=1,下一个CLK上升沿到达时,寄存器A的内容通过总线到达输出寄存器O

Ø        LED显示D

D是一排8LED灯构成的,而LED灯连接了输出寄存器OLED将输出寄存器O的内容。当执行OUT指令后,我们将看到二进制补码形式的答案。

Ø        总线(W bus

SAP-1中,总线是8位的。跟总线连接的如果是部件的输出需要使用三态门,如果是部件的输入使用使能端控制是能否输入。


图片
三态门

ENABLE = 0时,相当于DinDout处于断开状态。

图片

ENABLE = 1时,Dout = Din

图片

        例如,寄存器ABCD之间使用总线传输数据,如下图所示。

图片

总线

    其中,ABCD的输出通过三态门与总线相连。LOAD为输入使能端,LOAD=1时,输入端数据存入寄存器。LOAD=0时,不接收输入数据。ENABLE为输出使能端(为三态门使能端),ENABLE=0时,寄存器与总线连接处于断开状态。ENABLE=1时,寄存器与总线处于连接状态,寄存器的输出会输出到总线上。

    在本例中,如果寄存器中存储的数据为

        A = 0011  B = 0110  C = 1001  D = 1100

    如果需要将寄存器C的数据传送到B,只要使EC = 1 LB = 1,这样会使寄存器C的内容传送到总线,同时寄存器B的输入使用端
ENABLE = 1
,会将连接到总线输入端的数据存入寄存器中。当CLK的上升沿到达时,寄存器B=1001

二.指令

指令,是计算机硬件和软件的接口。计算机软件通过编制程序来解决问题。程序为指令序列或被翻译成指令序列。而计算机硬件的功能是执行指令序列。因此计算机硬件设计的最终目的是设计指令,并实现这些指令。

机器指令集像餐馆的菜单。如果顾客想吃饭,拿到餐馆的菜单,写出自己想吃的菜;而厨师按照顾客的菜单做菜。这样顾客就能吃到自己想吃的菜了。顾客吃到想吃的菜是计算机需要实现的功能,首先顾客写出菜单,就是编制程序,餐馆菜单中的每一道菜是一条指令,整个菜单是机器的指令集。而厨师拿到顾客的菜单,看到自己需要做的菜,然后按顺序作出这些菜。厨师就相当于硬件,按顺序执行顾客菜单指令。

SAP-1中,只有五条指令,下面将对五条指令分别介绍。

Ø        LDAload the accumulator

LDA将数据加载到累加器A。格式为,LDA R*(ROM地址)。例如,加载ROMR8的数据。R8中的数据为,
R8 = 1111 0000
。指令为 LDA R8(地址)

Ø        ADD

ADD将数据与累加器A中的数据相加,结果放在A中。

格式:ADD  R*。例如,ADD R9意思是 R9中的数据与A中的数据相加,结果放在A。下面用实际数据来说明,A中的数据为2R9中的数据为3,用二进制的形式表示为,

          
                 A = 0000 0010

                           R9 = 0000 0011

ADD指令的执行过程,首先, R9被加载到 B中,因此B的内容如下,

                           B = 0000 0011

随后,ALU完成了A+B的计算(由于ALU不需要CLK同步),

                           ALU = 0000 0101

然后, ALU内容被加载到累加器A中,

                           A = 0000 0101

这样A中最终存储了运算结果。

Ø        SUB

SUB将累加器A中的数据减去PROM中的某个数据,结果放在A中。

格式:SUB R*

处理过程参考ADD

Ø        OUT

OUT指令将A寄存器中的数据传输到O寄存器中。

格式: OUT

Ø        HLT

HLT代表停机。

格式: HLT

SAP-1的程序末尾必须使用HLT指令,否则计算机会崩溃,因为SAP-1将取出ROM中存储在程序后面的无意义数据进行执行,所以会得到无意义的结果。

 

指令编码表

如果想将上面这些指令在SAP-1中存储,执行,需要将他们用二进制编码。

指令名称

编码

LDA

0000

ADD

0001

SUB

0010

OUT

1110

HLT

1111

 

下面举例说明如何给SAP-1编程,比如计算 16 + 20 + 24 + 28 – 32的值。

可以16存储到R9中,20存储到RA中,24存储到RB中,28存储到RC中,32存储到RD中。其中R*ROM地址,例如R9ROM中编号为1001的地址。

ROM中存储的程序和数据如下:

程序:

R0 = 0000 1001    ( LDA 9(地址) )

R1 = 0001 1010    ( ADD A(地址) )

R2 = 0001 1011    ( ADD B(地址) )

R3 = 0001 1100    ( ADD C(地址) )

R4 = 0010 1101    ( SUB D(地址) )

R5 = 1110 ****     ( OUT )

R6 = 1111 ****     ( HLT )

数据

R9 = 0001 0000     ( 16十进制 )

RA = 0001 0100     ( 20十进制 )

RB = 0001 1000     ( 24十进制 )

RC = 0001 1100     ( 28十进制 )

RD = 0010 0000     ( 32十进制 )


下面的详细设计参见《 SAP-1设计与实现(2)》

抱歉!评论已关闭.