1需求与总体设计
1.1目的
掌握CPU组成原理:学生需要了解和掌握一个简单CPU的组成原理,这是设计和构造模型计算机的基础。
构建基本模型计算机:在理解了部件单元电路的基础上,学生需要将这些知识综合运用,进一步组成一台基本的模型计算机。
掌握微程序控制器设计:微程序控制器是计算机控制单元的核心,学生需要通过实践掌握其设计方法。
明确计算机控制原理与过程:通过模型机的设计过程,学生可以更加明确计算机的控制原理和控制过程,这有助于巩固和应用所学的理论知识。
提高设计能力和实践操作技能:实际操作中,学生将学习如何编写微程序和机器语言程序,并在模型计算机上进行调试运行,这有助于提高他们的设计能力和实践操作技能。
为后续学习打下基础:通过这次课程设计,学生将对计算机的工作原理有一个系统的认识,为以后的专业课程学习和从事计算机研制与设计工作打下坚实的基础。
1.2任务
熟悉《计算机组成原理》课程所完成得各个实验;在掌握各实验子部件功能得基础上,设计并实现一台模型计算机。设计模型计算机的整机硬件电路、指令系统,并在模型机上成功运行程序。
1.3使用的设备及软件
使用的设备是Windows11戴尔电脑;使用的软件是8.15版本的Proteus 8 Professional。
1.4系统设计原理及说明
模型计算机系统的设计原理基于冯·诺依曼体系结构、指令集设计、数据通路构建、微程序控制器以及时序控制等核心概念。
其系统设计通常遵循冯·诺依曼计算机体系结构的基本原则,该结构由五大部分组成:控制器、运算器、存储器、输入设备和输出设备。在这个基础上,设计者需要定义合适的数据格式和指令系统,包括但不限于算术逻辑指令、访内指令、转移指令、输入输出指令及停机指令等。数据通路的设计是模型计算机系统中至关重要的一环,它规定了信息在各个部件之间流动的路径,包括通用寄存器、算术逻辑单元(ALU)、指令寄存器和控制存储器等部分。
模型计算机系统设计的说明涉及系统软硬件概念、计算机系统的层次结构、计算机体系结构和组成等方面。
其系统的设计要求学习者不仅要掌握各单元模块的工作原理,还要理解它们如何组合成一个完整系统,并了解程序编译、加载过程以及通过调试手段理解数据流向。设计任务通常是在实验平台上搭建一个模型计算机系统,完成微程序控制器的调试,并用设计的指令系统编写并运行实现基本功能的程序。
2模型机电路设计图
2.1模型机逻辑图
2.2 微程序控制单元电路图、控制信号及设计过程
1、归纳此模型计算机的所有控制信号,并填入表中。
表1 开关数据送总线控制信号
信号名称 | 作 用 | 有效电平 |
/SW-BUS | 数据从开关传到数据总线 | 低电平有效 |
表2 ALU单元控制信号
信号名称 | 作 用 | 有效电平 |
D2CK | DR2寄存器工作脉冲 | 上升沿有效 |
D1CK | DR1寄存器工作脉冲 | 上升沿有效 |
EDR2 | 选通DR2寄存器 | 低电平有效 |
EDR1 | 选通DR1寄存器 | 低电平有效 |
M | 选择逻辑或算术运算 | 高电平为逻辑运算,低电平为算术运算 |
S3 | 74LS181工作方式选择 | 高电平有效 |
S2 | 74LS181工作方式选择 | 高电平有效 |
S1 | 74LS181工作方式选择 | 高电平有效 |
S0 | 74LS181工作方式选择 | 高电平有效 |
CN | 有无进位输入 | 高电平有效 |
ALU-O | 74LS181计算结果输出至总线 | 低电平有效 |
表3 寄存器单元控制信号
信号名称 | 作 用 | 有效电平 |
SA、SB | 选通寄存器 | 低电平有效 |
RR | 数据读出允许 | 低电平有效 |
WR | 数据写入允许 | 低电平有效 |
RCK | 寄存器写入脉冲 | 上升沿有效 |
表4 PC单元控制信号
信号名称 | 作 用 | 有效电平 |
CLR | 将PC内容清零 | 上升沿有效 |
PCK | 锁存程序计数器的值 | 上升沿有效 |
PC+1 | 指示程序计数器递增其内容 | 低电平有效 |
ELP | 控制数据或指令的加载时机 | 低电平有效 |
PC-O | 将PC的当前内容输出 | 低电平有效 |
IR2CK | 同步指令寄存器内部操作 | 上升沿有效 |
EIR2 | 允许IR2在特定条件下接受和存储指令 | 低电平有效 |
IR2-O | IR2向地址总线输出 | 低电平有效 |
表5 存储器单元控制信号
信号名称 | 作 用 | 有效电平 |
RM | 6116的读允信号 | 低电平有效 |
WM | 6116的写允信号 | 低电平有效 |
EMCK | 6116的写入脉冲信号 | 上升沿有效 |
CS | 6116的片选信号 | 低电平有效 |
表6 控制器单元控制信号
信号名称 | 作 用 | 有效电平 |
CLR | 微地址寄存器清零脉冲 | 上升沿有效 |
T2 | 微程序存储器输出工作脉冲 | 上升沿有效 |
T4 | 微地址转移工作脉冲 | 上升沿有效 |
FIR1 | 总线上的数据存入 | 高电平有效 |
IR1CK | 将寄存器中的数据读取 | 上升沿有效 |
2、 将模型计算机微程序控制单元电路层次化设计。
设计步骤:
(1)分析分析每个子电路中与主电路联络的信号,作为输入/输出端口的连线。
① 运算器单元子电路输入/输出端口的连线是:
信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 |
D2CK | D1CK | EDR2 | EDR1 | M | S3 |
信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 |
S2 | S1 | S0 | CN | ALU-O | D[0..7] |
② 寄存器组单元子电路输入/输出端口的连线是:
信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 |
SA | SB | RR | WR | RCK | D[0..7] |
③ 指令计数器部件单元子电路输入/输出端口的连线是:
信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 |
CLR | PCK | PC+1 | ELP | PC-O | IR2CK | EIR2 | IR2-O | PC[0..7] | PCW[0..7] |
④ 存储器单元单元子电路输入/输出端口的连线是:
信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 |
EMCK | WM | RM | CS | D[0..7] | AB[0..7] |
⑤ 控制器单元子电路输入/输出端口的连线是:
信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 | 信号名称 |
FIR1 | IR1CK | CLR | SETWR | SETRD | MB[0..5] | MD[0..25] |
3、微程序控制单元电路图。
2.3 微程序控制单元电路设计的难点及解决办法
难点:将微程序控制单元电路封装没问题,但是在封装的旁边多了个FIR1和IR1CK和不知名的芯片,由于书上模型计算机的整机硬件电路图在超级小的细节上看不清,所以我们无法确定芯片选用哪种。
解决办法:我们通过观察,选用在和书上大致长相一样的芯片,通过测试,确定是74LS273芯片。
测试、调试:
- 我们先封装但是保持按键,用上学期的微指令微代码运行:
- 成功后,加上74LS273芯片和FIR1和IR1CK:
2.4 整机电路图及设计过程
先将各模块组合到一起:
再将输入键都换成线:
3指令系统软件设计
3.1模型机时序分析及时序分配
一条机器指令,由若干条微指令组成。每条微指令执行时间为一个微指令周期。每个微指令周期由四个T状态,T1、T2、T3、T4组成。
- 模型机处于运行状态时,首先,CLR=0。
- 脉冲T2:把微程序存储器中的微指令打入微指令锁存器并且输出微命令。
- 脉冲T3:把当前总线上的数据打入存储器,PC+1。
- 脉冲T4:把当前总线上的数据打入当前微指令所选通的寄存器,并修改微指令地址。
表7 脉冲信号时态分配
信号名称 | 作用 | 有效电平 | T时态分配 |
CLR | PC、微地址清零信号 | 上升沿有效 | 开始运行总清信号 |
T1 | 存数据 | 上升沿有效 | 存到EDR1 |
T2 | 下一条微指令 | 上升沿有效 | 运行微指令 |
T3 | 存数据 | 上升沿有效 | 存到EDR2 |
T4 | 控制写 | 上升沿有效 | 存到R0、R1... |
3.2分析指令的数据信息流向
1.分析单字节指令ADD Ri,Rj;数据信息流
该指令功能为(Ri)+(Rj)-> Ri,需执行如下微操作:
(Ri)--SB,SA,RR,EDR1,T4--> DR1;寄存器Ri内容送ALU锁存器
(Rj)--SB,SA,RR,EDR2,T4--> DR1;寄存器Rj内容送ALU锁存器
(Ri)+(Rj)--CN,M,S3,S2,S1,S0,ALU-O-->DB--SB,SA,WR,T4-->Ri;ALU执行加法,结果经DB最后送入寄存器Ri。
(Ri)+(Rj)--CN,M,S3,S2,S1,S0,ALU-O-->DB--SB,SA,T4-->Ri;寄存器Ri写入信号变为无效。
由此看出,此条机器指令由4个微指令周期组成:
1)寄存器Ri内容送ALU的DR1锁存器。
2)寄存器Rj内容送ALU的DR2锁存器。
3)ALU计算,并将计算结果送寄存器Ri。
4)将寄存器写信号变为无效,WR=1。
2.分析双字节指令MOV Ri,addr;数据信息流
该指令功能为(addr)->Ri,需执行如下微操作:
地址送IR2--SW-BUS,EDR2,T4-->IR2;地址送IR2。
(IR2)--IR2-O-->AB;IR2形成新的地址送地址总线。
(RAM)--RM-->DB--SB,SA,WE,T4-->Ri;从内存读出操作数存入Ri。
(RAM)--RM-->DB--SB,SA,T4-->Ri;寄存器写信号无效。
由此看出,此程序由3个微指令周期组成:
1)地址送IR2。
2)IR2寄存器的内容输出到地址总线上,读内存单元,将取得的值送入累加器Ri。
3)寄存器写信号无效。
3.3设计指令对应的微指令、微代码
表8 微指令格式
指令助记符 | 微地址有效值 | MD25 | MD24 | MD23 | MD22 | MD21 | MD20 | MD19 | MD18 | MD17 | MD16 | MD15 | MD14 | MD13 | MD12 | MD11 | MD10 | MD9 | MD8 | MD7 | MD6 | MD5 | MD4 | MD3 | MD2 | MD1 | MD0 | MB5 | MB4 | MB3 | MB2 | MB1 | MB0 |
SW-BUS | EDR1 | EDR2 | M | S3 | S2 | S1 | S0 | CN | ALU-O | SB | SA | WR | RR | PC+1 | ELP | PC-O | EIR2 | IR2-O | RM | WM | CS | EIR1 | P1 | ||||||||||
0 | 0 | 0 | X | X | X | X | X | X | 0 | X | X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ||||||||||
IN R1,DATA1 | |||||||||||||||||||||||||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ||
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ||
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | ||
IN R2,DATA2 | |||||||||||||||||||||||||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | ||
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | ||
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | ||
ADD R1,R2 | |||||||||||||||||||||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | ||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | ||
1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | ||
OUT R3 | |||||||||||||||||||||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
3.4用设计的指令编制程序
3.5调试过程
IN R1,DATA1:
IN R2,DATA2:
ADD R1,R2:
OUT R3:
3.6结果(应得结果、实际结果)
应得结果:07(学号)加05(组号)等于12(1100)
实际结果:12(1100)
3.7 指令系统设计的难点及解决办法
难点1:刚开始按照书上的时序,代码写的很简短,运行的时候有的情况是对的结果,有的情况又会出错。
解决办法1:老师建议不要把几步写成一步,容易出现矛盾。经过改进,我将代码一步一步写,每一步只改变一个变量,果然成功了。
难点2:在写每一步只写一个更改变量时,出现糅杂及没必要的代码行问题。
解决办法2:老师仔细看了我的代码,为我示范指出两行不需要的代码行后,我依照这个标准删掉了六行不需要的代码行。
4总结
(1)知识掌握:
通过此次课程设计,我们能够熟练掌握计算机的基本组成,如CPU、存储器、输入输出设备等以及掌握简单的指令集设计,理解不同指令的功能和用途。在这个过程中我们学会微程序的编写和调试,理解计算机的控制流程,了解数据通路的设计和优化,以及如何通过时序控制来同步各个部件的工作。
(2)进步:
从理论学习进步到实际操作,通过动手实践深化了我们对计算机工作原理的理解。在设计模型计算机的过程中,我们的问题解决能力和逻辑思维能力得到了提升。通过实际的操作和调试,我们对计算机系统的结构有了更直观的认识。
(3)创新之处:
自主设计指令集,实现自己的模型计算机系统,这有助于激发创新思维。
(4)不足之处:
异或功能,容易出错,是硬件的bug。即输入时没运用到前四位,则输出时前四位为全1。
(5)改进设想:
改变硬件中的r1,r2等连线,可能会解决掉这个异或bug。
------------------------------分割线-------------------------------
补充:本人负责的是微程序单元模块,所以以上主要是微程序单元模块,这里补充其它电路图
1.运算器电路图。
2.通用寄存器电路图。
3.PC程序计数器电路图。
4.存储器电路图。