将控制字寄存器的输出与每条控制线连接,就可以确定下一个clk=1时,计算器的下一个状态。
2.3.5 程序自动执行的结构设计
手动参与的计算器如同算盘一样,实在是太慢。解决的办法是将程序事先编写好,然后放在存储器当中,让机器自己来取。时钟要换成石英钟,这样就可以充分发挥电信号的快速优势。为了将放在存储器中的程序指令逐条取出来,变成机器控制字,需要有专门的寄存器放置取出的指令。这个临时放置指令的寄存器,一般就称为指令寄存器IR。为了能够自动地一一取出存储器中的指令执行,要有专门指示存储器中指令地址的计数器,这个计数器叫程序计数器PC。这样考虑的结果要将计算器设计成图 2 15的简单计算机。
图 2 15 简单总线结构计算机
这个计算机由于增加了一些控制线,这使原来的加减运算计算器的7位控制字扩展成了15位:
CpLpEpLmMeIOLiEiEnLaEaEuSuLbLo
其中Cp是程序计数器PC加一控制线。由于输入缓冲寄存器IN的数据装入功能不是由控制器CON进行管理的,所以输入寄存器的输入控制线Ln不包含在这个计算机的控制字当中。此结构引出了寄存器A值为零的标志线ZF和A值为负的标志线NF。它们是条件跳转指令是否发生跳转的信号线。
这个计算机的RAM的存储单元8位,共有16个。因而存放地址的寄存器只要4位。指令寄存器是8位的,高4位是指令编码,低4位是存储器地址。其指令系统可以如表 2 2那样设计。
表 2 2 指令代码设计
功 能 助记符 操作码
将数据装入当前存储单元 LOD 0000
将存储单元R的内容送到累加器A LDA R 0001
将存储单元R的内容与累加器A相加,结果送累加器A ADD R 0010
将累加器A与存储单元R的内容相减,结果送累加器A SUB R 0011
将累加器A的内容送到存储单元R STR R 0100
跳到R单元取指令 JMP R 0101
如果累加器A的值是0则跳到R单元取指令 JZ R 0110
如果累加器A的值为负则跳到R单元取指令 JN R 0111
将存储单元R的内容输出 OUT R 1000
读入数据并送到存储单元R IN R 1001
停机 STP 1111
为了实现指令的功能,设计中要对指令完成动作全程进行分析,做好真值表,并根据真值表获得逻辑函数。例如ADD的指令全程分析如下:
(1)将程序计数器PC的值送到地址寄存器MAR;
(2)将EROM输出的内容送到指令寄存器IR;
(3)PC 加1;
(4)IR的低4位送到MAR;
(5)EROM输出的内容送到数据寄存器B;
(6)A+B的结果送到累加器A。
根据分析列出真值表如表 2 3所示。
表 2 3 ADD全程分析真值表
机器动作 拍 ZF NF Cp Lp Ep Lm Me IO Li Ei En La Ea Eu Su Lb Lo
PC→MAR 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
RAM→IR 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0
PC+1 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
IR→MAR 3 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0
RAM→B 4 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
A+B→A 5 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0
将所有指令全程分析都列入真值表中,就能够得到每条控制线随指令线和节拍线变化的情况。根据逻辑表达式抽象的方法,就可以一一得到每条控制线的函数。
指令分析的方法取决于指令格式,这里的指令格式简单,高4位是指令代码,低4位是存储器地址。因为指令寄存器接收的指令是这种格式的,因而在指令全程分析中才会有“IR的低4位送到MAR”。
写到这里,我想作为计算机核心设计的入门介绍,应该暂时告一个段落了。大家可以将这个简单总线结构的8位计算机,理解成16位、32位或64位等,还可以将存储器分为程序存储器和数据存储器,指令格式还可以复杂一些,从而使单一指令能够完成稍复杂一些的功能等。有关计算机如何实现程序自动执行的一般设计原理和方法,请见本人所著《计算机原理教程》和《计算机原理综合课程设计》两本书,在此就不赘述。
在接下来我们将进入高层一些的讨论。在此之前,我对于计算机核心设计需要特别强调几点。
(1) 计算机核心是一个统一指挥的“同步传输”结构;
(2) 程序计数器、指令寄存器、控制逻辑,节拍器等,都是为了能够让程序指令自动执行而设置的;
(3) 程序执行的基本方式是“服务式”,即由运算器和控制器等组成的处理器是服务元素,程序是服务对象,处理器通过对存储器中的程序进行“服务”来完成各种任务;
(4) 总线上的数据是互斥放置的,因而必须分时间节拍使用;
(5) 计算机的所有动作必须“先后有序”,同时工作的部分必须“互不相关”;
(6) 用硬件设计语言进行设计会有“简单易行”的效果,因为在硬件设计语言中许多重要的计算机功能部件,都用事先定义好的“符号”替代了,在编译综合阶段,这些“符号”要转化成特定的逻辑电路,而这些逻辑电路都是一种“确定”的结构,如果这个结构的功能不能满足设计要求,就必须回到原理图电路设计的基本设计方法上来考虑问题。
接下来会给大家一个简单的非透明的4级流水线设计实例。
--- 待续 ---
https://blog.sciencenet.cn/blog-340399-286773.html
上一篇:
CMP的根本出路下一篇:
CPU设计我要让更多的人掌握它(续7)