CPU的设计规范Word下载.docx
《CPU的设计规范Word下载.docx》由会员分享,可在线阅读,更多相关《CPU的设计规范Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
3)指令执行:
每条指令的执行周期也是唯一的
4.还要设计必要的数据通路和控制逻辑,以便实现这个有限状态机,最终实现这个CPU。
接下来,可以对CPU设计验证。
二、从存贮器中取指令
1.原理:
根据冯·
诺依曼型机的原理(指令在存贮器中按顺序存放),在CPU能执行指令之前,它必须将这条指令从存贮器中取出,CPU通过执行如下的操作序列完成这个任务:
1)选择存贮单元A[5……0]确定
2)对A[5……0]译码、延迟、并向存贮器发一个信号(如READ或R/W’=1),使存贮器将此指令输出到它的输出引脚。
这些引脚与CPU的D[7……0]相连接。
CPU从这些引脚读入数据。
2.具体的操作(以下取指令分为三个状态)
1)要取的指令的地址放在程序计数吕(PC)中。
由于A[5……0]从地址寄存器中接收值,因此第一眇就把PC的内容拷贝到AR中。
这样取指令周期的第一个状态就是(意思是FETCH1为真,把PC的值送到AR,以下同理)
FETCH1:
AR←PC(说明:
这一描述的方法是基于RTL)
2)CPU必须从存贮器中读取指令,为此CPU必须发一个READ信号到存贮器的RD端(对于ROM为OE端)使存贮器将数据发送到D[7……0]上。
同时,CPU读进来,并放到DR中,因为DR是用来访问存贮器的唯一寄存器。
同时实现PC←PC+1,为取下一条指令作准备。
FETCH2:
DR←M,PC←PC+1
3)作为取指令的一部分,CPU还必须完成两个事。
a)DR的高2位拷贝到IR,目的是确定指令的功能。
b)DR的低6位拷贝到AR,目的如下:
i.对于OR和SUB1指令这6位包含了该指令的一个操作数的存贮器地址(因为一个数已经在AC中),将地址拷贝到AR可减少这些指令在执行周期的状态。
ii.对于COM和JERL指令,也不支引起新的问题。
它们不需要再次访存,因为它们恰好不会用到在AR中的值。
一旦它们返回到FETCH1周期,FECTH1将把PC的值装载到AR,从而覆盖无用到的值。
FETCH3:
IR←DR[7,6],AR←DR[5……0]
3.取指令周期的状态图
三、指令译码
本CPU有四条指令,因此有四个不同的执行周期,为此用IR中的值来确定即可。
四、指令执行
方法:
分别对每条指令的执行周期作出详细的状态分析。
1.COM指令(执行周期)
功能是将AC的内容取反,执行周期状态是
COM1:
AC←AC’
2.JREL指令(执行周期)
指令码是01AAAAAA,操作为将PC的地址和地址AAAAAA相加后,再将相加的地址(目标地址)送回PC,而AAAAAA在DR[5……0]中。
JREL1:
PC←PC+DR[5……0]
3.OR指令(执行周期)
M的地址由A[5……0]确定,放在AR中,有两个状态。
OR1:
DR←M
OR2:
AC←AC∨DR
4.SUB1指令(执行周期)
功能为将AC中的数减去M的数再减一送到AC,可等价为AC中的数减到M中的数的反码,其中M的地址由A[5……0]确定,执行周期的状态为
SUB1:
SUB2:
AC←AC+DR’
综上所述可知CPU的完全状态图如下
五、建立所需的数据通路
1.与CPU的每个状态相关联的操作是(共九个状态)
AR←PC
IR←DR[6,7],AR←DR[5……0]
COM1:
AC←AC’
JREL1:
PC←PC+DR[5……0]
OR1:
OR2:
SUB1:
SUB2:
2.建立数据通路的原理和方法
1)存贮器数据通路的原理
1存贮器是通过引脚D[7……0]数据送给CPU
2存贮器的地址确定是通过地址引脚A[5……0]从AR中获得的。
于是CPU与存贮器之间需要A[5……0](地址)和D[7……0](数据)通路
2)CPU内部的数据通路(两种方案)
1直接通路(directpath)
所有需要传送数据的部件之间创建一条直接通路。
当然,可用多路选择器或缓存器为那些有多个数据源的寄存器从多个
输入中选择一个。
本设计可以是AR←DR[5……0]基AR←PC(2选1)
缺点:
仅适用于简单CPU
2总线(BUS,目前常用,为提高CPU速度可取用双总线、三总线)
在CPU的内部创建一条总线,并且在各个部件之间使用总线传递数据
优点:
不但可满足数据传送的需要,还减少数据通路。
对于单总线要分时使用。
3.CPU内部寄存器的控制信号的定义方法
1)原理:
首先把操作重新分组,依据是把修改同一个寄存器的操作分配在同一组。
本设计CPU共9个状态,有5个寄存器的分配情况如下:
AR:
AR←PC;
AR←DR[5……0]
PC:
PC←PC+1;
DR:
IR:
IR←DR[6,7]
AC:
AC←AC’;
AC←AC∨DR;
2)决定每个部件应完成的功能(见图五)
1AR、DR、IR
总是从其他一些部件中装入数据。
若数据已在总线上,则需要做的就是能够执行并装入操作。
(LD端分别由ARLOAD、DRLOAD、IRLOAD信号同步装入)
2PC、AC
能从其他一些部件中装入数据。
还有自增当前值。
所以应创建一个单独的硬件使之能自增当前值。
(见图五中INC有PCINC,其他有PCLOAD、ACLOAD)也可用计数器方法实现PC←PC+1自增操作,可在寄存器内部单独完成,并行装载用来实现其他功能。
4.把每个部件都连接到系统总线上(见图四)
三态缓冲区――原有的寄存器总是把结果输出到系统总线,使CPU内部数据冲突,所以应增加三态缓冲区加以控制。
但AR的输出还应与A[5……0]相连,这是寻址所需。
5.根据实际需要修改图四的设计,并加上适当控制信号名称
1)AR:
仅向存贮器提供数据(地址),没必要将它的输出连接到内部总线上。
(
可删除)。
加上ARLOAD实现从BUS装入数据。
2)AR←PC:
保留三态缓冲器由PCBUS控制同步
3)IR:
不通过内部总线向任何其他部件提供数据(所以
可删除)而IR的输出将直接送到控制器用于确定指令的功能。
4)AC:
本CPU不向其他任何单位提供数据(
可删除)
5)D[7……0]:
不统一,有6位也有2位宽度,各部件所需的数据位不统一,从存贮器读出的数据为8位,而有些部件需要6位(D[5……0])或2位(IR是2位D[7,6]),必须确定哪些寄存器从总线的哪些位上接收和发送数据,应有DRBUS实现同步。
DRLOAD实现LD(载入)
6)AC:
必须能装载AC求反的值、AC+DR’的各、以及AC∨DR的逻辑或的值。
CPU必须包含一个能产生这些结果的ALU(算术逻辑运算器)并由ACLOAD实现装载。
下一步,问题的关键是设计适当的ALU。
六、非常简单ALU的设计
1.ALU数据通路分析
ALU必须能接收AC和DR作为输入,然后把运算结果输出到AC。
2.实现这个目的有两种方法
1)在本CPU中,把AC的导线和ALU的输入输出连接起来,并且利用系统总线把DR和ALU的输入连接起来。
注意:
对于寄存器数据在总线上传送数据是分时进行的,而用计数器来实现PC←PC+1操作,就可以在FETCH2内并行完成,因为自增的计数器不必占用总线时间。
2)非常简单ALU的设计
由于本CPU的ALU仅完成三个功能,+、取反、逻辑或运算。
最简单的方法是创建三个单独的硬件实现每个功能,后用4选1多路开关选择一个作为输出。
(如下图,图六)
图六非常简单的ALU
(S0S1S2=000,即ALUSEL=000,选PC←PC+DR;
S0S1S2=100,即ALUSEL=100,选AC←AC+DR’;
S0S1S2=101,即ALUSEL=101,选AC←AC∨DR;
S0S1S2=110,即ALUSEL=101,选AC←AC’)
七、用硬布线方法设计控制器
以上为CPU完成取指令,译码和执行整个指令集(ISA)所必须的每个操作成为可能。
下一个任务就是设计一个电路来产生控制信号,从而使所有的操作能以正确的顺序执行。
这就是CPU的控制器(CONTROLUNIT,又称控制单元)
设计控制的三种方法
1硬布线控制器(用时序逻辑和组合逻辑来产生控制信号)
2微程序控制器
3硬布线和微程序相结合
本CPU采用硬布线方法。
1.非常简单CPU的控制器
1)组成包含三部分
1计数器:
保存当前状态
2译码器:
接受当前状态并为每个状态生成单独的信号
3逻辑组合:
接受单独的状态信号,为每一个部件生成控制信号以及计数器的控制信号(反馈)
2)一般硬布线控制单元原理图(见下图七)
图七一般硬布线控制器原理图
3)确定计数器的个数
本CPU共有9个状态。
(4条指令,共9个状态)
24=16>9,所以需要一个四位计数器和一个4-16位译码器,译码器中有7个输出没有用到。
2.计数器和译码器的设计原则
·
计数器的输出状态共16个(0000~1111)
译码器的输出最多只有16个,本CPU实际需要用到9个(参考图三,CPU完全状态图)
1)FECTH1状态(公共状态,又称公共操作)
规定计数器的0值,使用计数口器的CLR=1(清0有效)到达这一状态。
这也是因为CPU的任一条指令执行完毕(如无中断请求等),CPU一定转入取指令状态。
2)将顺序状态设定为计数器的连续值,用INC实现。
这样的好处是控制器通过发出计数器的INC信号来到达任一需要的状态。
FETCH2………………1
FETCH3………………2
COM1………………8
JREL1………………9
OR1………………10
OR2………………11
SUB1………………12
SUB2………………14
3)确定每个执行周期中的第一个状态
原则:
科学、合理、不增加硬件资源
分析:
在CPU状态图中任一条指令的执行都是少于或等于2个状态。
即只要执行周期的第一个状态的计数值的间隔至少应为2,可通过映射1IR[1,0]0可达到目的。
根据映射函数1IR[1,0]0确定指令执行周期的入口:
1000(8)…………COM1
1010(10)…………JREL1
1100(12)…………OR1
1110(14)…………SUB1
图八简单CPU的硬布线控制器
4)计数器LD、INC、CLR控制信号的确定
LD(装载)――在每个指令周期的末尾FECTH3状态中发出。
因为准备进入该指令的执行周期的每一个状态,所以必须要装载1IR[1,0]0才能进入指令的正确执行周期。
FETCH3:
IR←DR[7,6],AR←DR[5,0]
INC(自增)――因为在确定第一个状态(由计数器输入端1IR[1,0]0
决定)接着就要确定哪些状态,哪些指令的执行周期需产生INC信号。
CLR(清0或者复位)――每条指令执行结束转入下一条指令的取指令周
期应清0
3.根据译码的输出信号组合后产生CPU中寄存器的有关信号用于控制AR、PC、DR、IR、M、ALU及缓冲器。
1)ARLOAD(装载地址寄存器控制信号)
因为在FETCH1中AR←PC
FETCH3中AR←DR[5……0]
所以ARLOAD=FETCH1+FETCH3(见图九)
2)PCLOAD、PCINC(实现PC←PC+DR[5……0]、PC←PC+1)
PCLOAD=JREL1
PCINC=FETCH2
3)DRLOAD(实现DR←M)
DRLOAD=FETCH2+OR1+SUB1
4)ACLOAD(实现AC←AC’、AC←AC∨DR、AC←AC+DR’)
ACLOAD=COM1+OR2+SUB2
5)IRLOAD
IRLOAD=FETCH3
6)ALUSEL
ALU有二个控制输入信号,一个控制输出信号――ALUSEL=S0S1S2
S0控制ALU的输出,S1、S2控制输入
当S0S1S2=000,即ALUSEL=000,选PC←PC+DR;
S0S1S2=110,即ALUSEL=101,选AC←AC’。
可在令ALUSEL=S0S1S20,这样分别和映射函数相对应
ALUSEL=FETCH1+COM1+JREL1+OR1
7)缓冲器控制信号
许多操作需从内部总线上获取数据。
CPU必须能控制缓冲器以便在合适的时间将正确的数据放在总线上。
为此满足如下逻辑关系
MEMBUS=FETCH2+OR1+SUB1
PCBUS=FETCH1
READ=FETCH2+OR1+SUB1
DRBUS=FETCH3+OR2+SUB2+JREL1
即在FETCH3(IR←DR[6,7],AR←DR[5……0])或
OR2(AC←AC∨DR)或
SUB2(AC←AC+DR’)
JREL1(PC←PC+DR[5……0])时DR的内容必须放在总线上。
控制器中用来产生这些控制信号的部分电路如图九所示。
图九非常简单CPU控制信号的形成
CPU的设计已经完成。
八、设计验证
1.程序段如下所列【存贮单元:
指令】
0:
OR4功能AC←AC∨M[3]
1:
SUB15功能AC←AC+M[5]’
2:
COM功能AC←AC’
3:
JREL6功能PC←PC+M[1]
4:
13H
5:
23H
6:
01H
2.根据CPU的状态图可知各指令状态顺序如下:
OR3:
FETCH1→FETCH2→FETCH3→OR1→OR2
SUB15:
FETCH1→FETCH2→FETCH3→SUB1→SUB2
COM:
FETCH1→FETCH2→FETCH3→COM1
JREL1:
FETCH1→FETCH2→FETCH3→JREL1
3.执行过程跟踪
说明OR3(指令功能是AC←AC∨M[3]):
1在FETCH1状态,把PC=0的现行值送AR,硬布线控制器应发出PCUBS、ARLOAD使能实现AR←PC;
2在FETCH2状态,为实现DR←M[0],PC←PC+1,控制器应发出READ、MEMBUS、DRLOAD、PCINC;
3FETCH3状态,为实现IR←DR[7,6],AR←DR[5……0],控制器应发出DRBUS、IRLOAD、ARLOAD;
4OR1状态,取出另一个操作数DR←M[4](M[4]=13H),控制器应发出READ、MEMBUS、DRLOAD;
5OR2状态,实现AC←AC∨DR,即AC=0∨13H=13H。
控制器应发出ALUSEL=101、ACLOAD至此OR4指令执行完毕,返回准备取出下一条指令的FETCH1状态。
其余指令的执行情况见下表
执行过程跟踪表
Instruction
State
ActiveSignals
OperationsPerformed
NextState
OR4
FETCH1
PCUBS、ARLOAD
AR←0
FETCH2
READ、MEMBUS、DRLOAD、PCINC
DR←04H、PC←1
FETCH3
DRBUS、IRLOAD、ARLOAD
IR←10、AR←04H
OR1
READ、MEMBUS、DRLOAD
DR←13H
OR2
ALUSEL、ACLOAD
AC←0∨13H=13H
SUB15
AR←1
DR←C5H、PC←2
IR←11、AR←05H
DR←23H
SUB2
DBUS、ALUSEL、ACLOAD
AC←13+23H’=EFH
AR←2
DR←00H、PC←3
IR←00、AR←00H
COM1
ALUSEL
AC←AC’=10H
JREL6
AR←3
DR←46H、PC←4
IR←01、AR←06H
JREL1
DRBUS、PCLOAD、ALUSEL
PC←PC+01H=05H