-
前言
计算机组成原理课程设第一部分使用logisim软件设计一个模型机器,包括但不限于CPU,主存,实现至少4条指令,在其上编织并执行一个程序(最好是循环程序)。
-
题目
logisim设计相应的课程设计逻辑电路。
1. 课程设计基本完成作业
具体电路功能为
(1)有清晰是时序逻辑。
(2)有完整的微操作发生器(四条基本指令:ADD LDA JMP STP)。
(3)数据传递正确,并能运行出结果,结果存在ACC(累加器)中。
2. 课程设计选做作业
具体电路功能为
(1)有清晰是时序逻辑。
(2)有完整的微操作发生器(八条基本指令、建议可以实现一个循环程序段)。
(3)数据传递正确,并能运行出结果,结果存在ACC(累加器)中。
-
设计方案
- 设计指令集
- 为每个指令设计微操作
- 做微操作时间表
- 根据时间表制作微操作发生器Microoperation signal generator(我简称为MOG)
- 制作CPU和存储器等部件
- 调试执行
-
具体实施
-
设计指令集
该指令集设计为8位的指令字长,高四位为OP,低四位为地址码或者立即数。
我首先设计并完成了8条指令:LDA(取数) ADD STA(存数) SHL SHR NOT JMP STP(停止)
为了实现循环又添加了4条指令:CMP INC LDI(取数至ID寄存器) JE
如下图所示
需要注意的是在相关文档中,提到在数据寻址时,高位自动补1010,在跳转指令寻址时高位自动补0001
比如:0000 0001 识别为LDA [1010 0001]; 1100 0001 识别为JMP [0001 0001] 如下图所示
故而需要在寻址时设计一个 根据指令不同 自动补齐高位的电路。(在下面的指令寄存器电路模块有所体现)。
-
为每个指令设计微操作
在此举几个例子:
· ADD
EF:
T0: PC->MAR; 1->R
T1: M[MAR]->MDR; PC+1->PC
T2: MDR->IR
T3:
EX:
T0: Ad(IR)->MAR; 1->R
T1: M[MAR]->MDR
T2: MDR->X
T3: X+ACC->ACC
· LDA
EF:
T0: PC->MAR; 1->R
T1: M[MAR]->MDR; PC+1->PC
T2: MDR->IR
T3:
EX:
T0: Ad(IR)->MAR; 1->R
T1: M[MAR]->MDR
T2: MDR->ACC
T3:
FE是取指令周期,EX是执行周期。这里不考虑间址周期。
-
微操作时间表
周期 |
时钟 |
微操作(本文件中hex(op)码) |
LDA(0) |
CMP(1) |
ADD(2) |
INC(3) |
STA(4) |
LDI(5) |
SHL(6) |
SHR(8) |
NOT(a) |
JMP(c) |
STP(e) |
JE(f) |
FE |
T0 |
PC->MAR |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
1->R |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
||
T1 |