数字逻辑设计02 微处理器设计

数字逻辑设计02 微处理器设计

一、基于ALU(算数逻辑单元)的连续加法器设计
  • 当计数器收到时钟信号后,将0000h输入给RAM,RAM将存储在0000h位置的数据RAM输入到8位加法器的A输入端。由于有先序清零操作(清零的开关没放上去),则加法器B输入端位00h,求和得加法器输出端S为27h,所以8位锁存器输出为27h。由于RAM的W写入端并没有为高电平,所以不允许写入,8位锁存器的输出则只能走右边路径到达加法器的B输入端。由于锁存器的保持作用,则该型号能一直保持在B输入端,直至下一个A端输入到达并在加法器上要求执行求和操作。

  • 当下个时钟信号到达后,计数器输出0001h,RAM将0001h位置的数据A2h输出到加法器的A输入端,并且执行求和操作,得到的结果C9h同样的沿右边路径回到B端口并保持。

  • 当计数器输出0002h时,RAM将0002h位置的数据18h输出到加法器的A输入端,并且执行求和操作,得到的结果E1h同样的沿右边路径回到B端口并保持。

  • 当计数器输出0003h时,人为将RAM的W写入端置1,RAM将0003h位置的数据改写为8位锁存器在前一种状态的输出E1h。

  • 此时完成一次连加运算,对锁存器进行手动清零并执行下一次连加运算

二、代码RAM 与数据RAM 在分立内存中 完全同位置情况 的指令连加系统设计

由上述例子可以看出,进行连加操作的时候,首先要把一个字节从存储器传输到累加器中,这个过程称为加载(Load),再要把一个字节从存储器中加(Add)到累加器中。第三个操作是把累加器运算结果保存(Store)回数据RAM中,另外还需要让累加器停下(Halt)的操作。有可能我们后面还需要减法(Subtract)。

如果让数据RAM与代码RAM同位,那么就像下面这样:

那么数据RAM代码RAM就可以这样设计,用同一个计数器来触发地址。

为了执行Load指令,数据RAM阵列的输出有时应该直接作为8位锁存器的输入。所以此时应该设置一个二选一选择器来实现这种功能。

具体实现如下:

加入减法操作所需的反相器后如下:

三、进位加法和借位减法
  • 进行8位加法时,使用的是常规的Add指令。加法器的进位输入是0。当进行高位字节数相加时,要使用新的Add with Carry指令在这种情况下,要用进位锁存器(假设在上图中加上这样一个锁存器)的输出作为加法器的进位输入。

  • 先进行低位运算,再进行高位运算。

四、扩展寻址模式,操作+地址RAM(代码RAM)与 数据RAM 在分立内存中 不同位置情况 的控制系统设计
  • 扩展寻址模式:除了停止指令(Halt指令)之外,需要3个字节,第一个字节记录操作内容,第2,3个字节记录操作对象的地址。

下面为代码RAM

下面为本操作的数据RAM中内容

控制系统部分如下设计(其他部分同前):

  • 从存储器中取出指令的过程称为 取指令取指令

  • 每条指令需要的时间为三个时钟周期

  • 上图中使用了两个RAM阵列,一个用来存放指令码,另一个用来存放操作数据

但是同样是RAM,所以操作码和操作数可以用同一个RAM控制:

五、操作+地址RAM(代码RAM)与 数据RAM 在共用内存中 不同位置情况 的控制系统设计

为了实现这一设计,必须要使用2-1选择器,分清此时需要从RAM中取出的是代码还是数据。

此时共用的RAM中的存储信息是:

六、置数法 实现 跳转指令(Jump)

解决内存不连续问题和指令码不等长问题(Halt和其他的不等长),需要跳转指令Jump

通常情况下,自动加法器以顺序方式对RAM阵列寻址,Jump指令改变了机器的寻址方式。

五、利用 Jump 指令实现乘法器

共用RAM的数据部分 预置信息:

第一次循环:相当于实现 00 00 h+00 A7 h=00 A7 h=00 A7 h * 1

  • 将1002h-1003h的部分看作从001Ch变小到0000h的计数装置,也就是让以上部分运行001Ch次即可实现00A7h*001Ch

  • 执行完以上指令,需要让001C减一,由于停止(Halt)操作码恰好为FFh,把任何一个数加上它,相当于把这个数减一。(FFh一数两用,表示停止或者表示-1)

  • 执行完以上指令,需要让001C减一的同时,让代码执行位置跳转(Jump)回开头的0000h:

  • 但是需要考虑的是,当001C减到0000h时,就停止程序。而不再跳转

  • 所以此处我们需要考虑的是条件跳转中的 零跳转(Jump If Zero)

零跳转的机器码写法(衔接上图)

零跳转的硬件实现:零锁存器

  • 当执行到第28次循环的时候,1004h和1005h地址保存的16位数等于A7h和1Ch的乘积。1003h地址保存的值为1,此时他和FFh相加的值为0,因此0标志位被置位。Jump If Zero指令不会在跳转到0000h地址,相反,下一条执行的指令即Halt指令

除了零跳转之外,还有其他条件跳转方式如下:

八、汇编语言基础

操作指令 目标操作数,源操作数

朴素的直接写地址的汇编语言:

标号性质的汇编语言

九、结语
  • 能否控制重复操作或者循环操作是计算机与计算器的区别。

  • 在处理器中,8位反相器和8位加法器构成了算数逻辑单元(ALU,Arithmetic Logic Unit)

  • 16位计数器可以称为程序计数器(PC Program Counter)