计算机组成原理CPU设计.docx
《计算机组成原理CPU设计.docx》由会员分享,可在线阅读,更多相关《计算机组成原理CPU设计.docx(19页珍藏版)》请在冰豆网上搜索。
计算机组成原理CPU设计
1CPU的用途
字长:
8位D[7…0]
寻址范围:
64byte,2的6次方=64,A[5…0]
2确定ISA(包括程序员可访问的寄存器)
1)程序员可访问的寄存器AC—8位累加器
CPU的指令集(共4条)
指令
操作码
操作
COM
00XXXXXX
AC←AC’(取反)
JREL
01XXXXXX
PC←PC+00AAAAAA
OR
10XXXXXX
AC←AC∨M[00AAAAAA]
SUB1
11AAAAAA
AC←AC-M[00AAAAAA]-1
2)其他寄存器
AR
地址寄存器
6位
由A[5…0]向存贮提供地址
PC
程序计数器
6位
指向下一条指令的地址
DR
数据寄存器
8位
通过D[7…0]从存贮器接收指令和数据
IR
指令寄存器
2位
存放从存贮器中取回的指令的操作码部分
3CPU设计状态图
为了确定CPU的状态图,对每条指令作以下分析
1)从存贮器中取指令(所有指令均相同)
原理:
在CPU能执行指令之前,它必须从存贮器中取出,CPU通过执行如下的操作序列完成这个任务
A)选择存贮单元由A[5…0]确定
B)对工A[5…0]译码,延迟,并向存贮器发一个信号使存贮器将此指令输出到它的输出引脚。
这些引脚与CPU的D[7…0]相连。
CPU从这些引脚读入数据。
具体操作:
(分为三个状态)
A)要取的指令的地址存放在程序计数器(PC)中。
第一步就是把PC的内容拷贝到AR中。
FETCH1:
AR←PC
B)CPU必须从存贮器中读取指令,为此CPU必须发一个READ信号到器的RD(RD-RAM,相对于OE-ROM)端上使存贮器将数据发送到D[7…0]上,存入CPU的DR寄存器中。
同时实现PC←PC+1,为取下一条指令作准备。
FETCH2:
DR←M,PC←PC+1
C)作为取指令的一部分,CPU还必须完成两件事。
1DR的高2位拷贝到IR,目的是确定指令的功能
2DR的低6位拷贝到AR,目的:
a.对于ORT和SUB1指令这6位包含了指令的一个操作数的存贮器地址(一个数已经在AC)
b.对于COM和JREL,它们不需要再次访问存贮器,一旦它们返回到FETCH1周期,FETCH1将把PC的值装到AR,覆盖无用的值。
FETCH3:
IR←DR[7,6],AR←DR[5…0]
取指令周期的状态图
2)指令译码(每条指令的操作码都是唯一的)
本CPU有四条指令,因此有四个不同的执行同期,为此用IR中的值来确定即可。
3)指令执行(每条指令的执行周期都是一样的)
每条指令的执行周期的状态分析:
1.COM指令
功能是对AC的内容取反,执行周期的状态是
COM1:
AC←AC’
2.JREL指令
代码为01AAAAAA,即转移的相对地址由AAAAAA确定,而AAAAAA在DR[5…0]中,所以有
JREL1:
PC←PC+DR[5…0]
3.OR指令
为了执行指令,必须完成两件事情
OR1:
DR←M;从存贮器取出一个操作数送到数据寄存器
OR2:
AC←AC∨DR;与AC相或,并把结果存回AC中
4.SUB1指令
为了执行指令,必须完成两件事情
SUB11:
DR←M;从存贮器取出一个操作数送到数据寄存器
SUB12:
AC<-AC+DR';对DR取反,等于-DR-1
综上所述可知CPU的完全状态图如下
4设计必要的数据通路和控制逻辑,以便实现这个有限状态机,最终实现这个CPU。
状态图以及寄存器的传输说明了实现本CPU所须完成工作(方法和步骤如下)
1)与CPU的每个状态相关联的操作(共九个状态)
FETCH1:
AR←PC
FETCH2:
DR←M,PC←PC+1
FETCH3:
IR←DR[7,6],AR←DR[5…0]
COM1:
AC←AC’
JREL1:
PC←PC+DR[5…0]
OR1:
DR←M;
OR2:
AC←AC∨DR;
SUB11:
DR←M;
SUB12:
AC<-AC+DR'
2)建立数据通路的原理和方法
A.存贮器是通过引脚D[7…0]将数据送给CPU。
B.存贮器的地址是通过地址引脚A[5…0]从AR中获得的。
于是CPU与存贮器之间要A[5…0](地址)和D[7…0](数据)通路,如下图
3)总线类型的确定方法
原理:
首先把操作数重新分组,依据是指导修改同一个寄存器的操作分配在同一组。
AR:
AR←PC,AR←DR[5…0]
PC:
PC←PC+DR[5…0],PC←PC+1
DR:
DR←M,
IR:
IR←DR[7,6],
AC:
AC<-AC+DR',AC←AC∨DR,AC←AC’
决定每个部件应完成的功能
a>AR,DR,IR,AC
总是从其他一些部件中装入数据。
若数据已在总线上,则需要做的是能够执行并装入操作。
(LD端口分别是ARLOAD,DRLOAD,IRLOAD,ACLOAD信号同步装入)
b>PC
能从其他一些部件中装入数据,还有相应的自增(INC)当前值,所以应创建一个单独的硬件使之能自增。
(端口有PCINC,PCLOAD)
4)把每个部件都连接到系统总线上
三态缓冲区——原有的寄存器部是把结果输出到系统总线,使CPU内部数据冲突,所以应增加三态缓冲区加以控制,但AR的输出还应与A[5…0]相接,这是寻址所需。
5)根据实际需要修改上图的设计,并加上适当控制信号名称
1.AR:
仅向存贮器提供地址,没有必要将它的输出连接到内部总线上,加上ARLOAD实现从BUS装入数据。
2.AR←PC:
保留三态缓冲器由PCBUS控制同步
3.IR:
不通过内部总线向任何其他部件提供数据,而IR的输出将直接送到控制器用于确定指令的功能
4.AC:
本CPU不向其他任何单位提供数据
5.DR[7…0]:
不统一,有6位也有2位宽度,必须确定哪些寄存器从总线的哪些位上接收和发送数据。
应有DRBUS实现同步。
DRLOAD实现LD
6.AC:
必须能装载AC+DR'的和,以及AC∨DR与AC’的逻辑与结果。
CPU必须包含一个能产生这些结果的ALU,并由ACLOAD实现装入。
7.PC:
必须能装载PC+DR[5…0]的和。
CPU必须包含一个能产生这些结果的ALU并由PCLOAD实现载入,而PCINC实现PC←PC+1
ALU的设计
1)ALU1(与PC相连)的设计
数据通路的分析:
功ALU1必须接收PC和DR作为输入,然后把运算结果输出到PC
实现PC←PC+DR[5…0]
在本CPU中,把PC的导线和ALU的输入输出相连起来,并且利用系统总线把DR和ALU的输入连接起来。
用计数器来实现PC←PC+1操作,就可以在FETCH2内完成,因为计数器不必占用总线的时间。
2)ALU2(与AC相连)的设计
在本ALU的设计中AC和ALU的输入输出连接,并且利用系统总线把DR和ALU和输入相连起来。
([ALUS1,ALUS2]=[0,0],选AC←AC’,
[ALUS1,ALUS2]=[0,1],选AC←AC∨DR,
[ALUS1,ALUS2]=[1,0],选AC<-AC+DR',)
用硬布线的方法设计控制器
组成:
计数器:
保存当前状态
共有9个状态(四条指令,共有9个状态)所以需要一个四——16位译码器,译码器中有7个状态没用到。
译码器:
接收当前状态并为每个状态生成单独的信号
逻辑组合:
接受单独的状态信号,为每一部件生成控制信号以及计数器的控制信号
原理图:
计数器与译码器的设计:
1.FETCH1状态:
规定计数器的0值,使用计数器的CLR=1到达这一状态。
(指令执行完毕后,转入的取址状态。
)
2.将顺序状态设定为计数器的连续值,用INC实现。
3利用IR映射1[IR]0来确定指令的执行
如下表
IR
计数值
状态
00
1000
COM1
01
1010
JREL1
10
1100
OR1
11
1110
SUB1
指令的执行
FETCH1――――――――――――――――0
FETCH2――――――――――――――――1
FETCH3――――――――――――――――2
COM1:
――――――――――――――――8
JREL1:
――――――――――――――――10
OR1:
――――――――――――――――12
OR2:
――――――――――――――――13
SUB11:
――――――――――――――――14
SUB12:
――――――――――――――――15
计数器控制信号的确定
LD:
在取址周期的FETCH3状态中发出,进入执行周期的第一个状态(装载1IR[]0进入指令的正确执行周期)FETCH3:
IR←DR[7,6],AR←DR[5…0]
INC:
CLR:
如上图所示
根据译码器的输出信号组合后产生CPU中寄存器的有关信号
1 ARLOAD(装载地址寄存器的控制信号)
FETCH1:
AR←PC
FETCH3:
AR←DR[5…0]
2PCLOADPCINC
PCLOAD=JREL1:
PC←PC+DR[5…0]
PCINC=FETCH2:
PC←PC+1
3DRLOAD(实现DR←M)
FETCH2+OR1+SUB11
4ACLOAD(实现AC←AC’,AC←AC∨DR,AC<-AC+DR')
ACLOAD=COM1+OR2+SUB12
5IRLOAD=FETCH3
6ALUS1,ALUS2
与AC相连的ALU有两个控制信号
[ALUS1,ALUS2]=[0,0],选COM1:
AC←AC’
[ALUS1,ALUS2]=[0,1],选OR2:
AC←AC∨DR;
[ALUS1,ALUS2]=[1,0],选SUB12:
AC<-AC+DR'
ALUS1=SUB12
ALUS2=OR2
缓冲器控制信号
许多操作需从内部总线上获取数据,CPU必须能控制缓冲器以便在合适的时间将正确的数据放到总线上,为此应满足如下逻辑关系。
MEMBUS=FETCH2+OR1+SUB11
PCBUS=FETCH1
READ=FETCH2+OR1+SUB11
DRBUS=FETCH3+JREL1+OR2+SUB12
部分电路图如下:
设计验证
1.程序段如下所列[存贮单元:
指令]
0:
COM
1:
JREL0
2OR4
3:
SUB5
420H
5:
30H
2.CPU遵循状态图并以合适的状态顺序取出、译码和执行
每条指令:
COM:
FETCH1→FETCH2→FETCH3→COM1
JREL4:
FETCH1→FETCH2→FETCH3→JREL1
OR5:
FETCH1→FETCH2→FETCH3→OR1→OR2
SUB6:
FETCH1→FETCH2→FETCH3→SUB11→SUB12
2.对这段程序的一次循环的跟踪情况(所有寄存器的初始值都是0)
指令
状态
有效信号
所执行的操作
下一个状态
COM
FETCH1
PCBUS,ARLOAD
AR←0
FETCH2
FETCH2
READ,MEMBUS,
DRLOAD,PCINC
DR←00H,PC←1
FETCH3
FETCH3
DRBUS,ARLOAD,
IRLOAD
IR←00
AR←00H
COM1
COM1
ACLOAD
AC←00H’=FFH
FETCH1
指令
状态
有效信号
所执行的操作
下一个状态
JREL0
FETCH1
PCBUS,ARLOAD
AR←1
FETCH2
FETCH2
READ,MEMBUS,
DRLOAD,PCINC
DR←40H
PC←2
FETCH3
FETCH3
DRBUS,ARLOAD,
IRLOAD
IR←01,
AR←00H
JREL1
JREL1
DRBUS,PCLOAD
PC←02H+00H=02H
FETCH1
OR4
FETCH1
PCBUS,ARLOAD
AR←2
FETCH2
FETCH2
READ,MEMBUS,
DRLOAD,PCINC
DR←84H,
PC←3
FETCH3
FETCH3
DRBUS,ARLOAD,
IRLOAD
IR←10,
AR←04H
OR1
OR1
READ,MEMBUS,DRLOAD
DR←20H;
OR2
OR2
DRBUS,ALUS2
ACLOAD
AC←FFH∨20H=FFH
FETCH1
SUB5
FETCH1
PCBUS,ARLOAD
AR←3
FETCH2
FETCH2
READ,MEMBUS,
DRLOAD,PCINC
DR←C5H,
PC←4
FETCH3
FETCH3
DRBUS,ARLOAD,
IRLOAD
IR←11,
AR←05H
SUB11
SUB11
READ,MEMBUS,
DRLOAD
DR←30H
SUB12
SUB12
DRBUS,ALUS1
ACLOAD
AC←FFH+30H'=2FH
FETCH1
用微程序控制器设计
一微程序控制器的基本框图
两种可能的下址方式(由MUX实现选择)
S=1―――操作码映象(经指令译码进入下一条指令的执行周期)
S=0―――绝对跳转(下一条要执行的微指令在控存内)
工作原理分析描述
1)确定微子程序的第一条指令入口地址。
方法是根据取批中的最后一个状态FETCH3,便可转入到四条指令中任一条执行周期的第一条微指令入口,但必须通过MAP输入来实现
2)下址的确定
绝对跳转:
可直接跳转到FETCH1状态
当前地址加1。
3)几个参数的设定
控存中地址的倍数
24=16>9因共有9条微指令,可用四位
MUX→微地址寄存器,微地址寄存器→控存
24=16>9用四位
确定UPOS的位数
二生成正确序列并设计映象逻辑
1.给有限状态机的每一种状态分配一个控存地址
利用IR映射1[IR]0来确定指令的执行如下表
IR
计数值
状态
00
1000
COM1
01
1010
JREL1
10
1100
OR1
11
1110
SUB1
2.其余微指令的地址
微程序控制器的状态地址
FETCH1――――――――――――――――0
FETCH2――――――――――――――――1
FETCH3――――――――――――――――2
COM1:
――――――――――――――――8
JREL1:
――――――――――――――――10
OR1:
――――――――――――――――12
OR2:
――――――――――――――――13
SUB11:
――――――――――――――――14
SUB12:
――――――――――――――――15
3.确定微指令中的选择域和地址域,即生成正确的微指令执行顺序
1)一般状态转换
设SEL=0,ADDR为下一条指令要执行的控存号,一个微指执行完后,从ADDR中得到下址,转到ADDR指定的微指令
2)特别状态FETCH3下址的确定
当FETCH3执行完后,必须到指令执行周期的微子程序入处,根据1IR[]0所算出的结果
三生成正确的微操作及相应的控制信号
用水平型微指令生成微操作及用垂直型指令生成微操作
本CPU采用水平型微指令生成微操作法
微操作及它们的助记符
助记符
微操作
ARPC
AR←PC
DRM
DR←M
PCIN
PC←PC+1
IRDR
IR←DR[7,6]
ARDR
AR←DR[5…0]
NOAC
AC←AC’
PCPLUSDR
PC←PC+DR[5…0]
ACORDR
AC←AC∨DR
ACSUBDR
AC←AC+DR'
由于IRDR和ARDR在同一个微操作进行,可以对他们进行合并为AIDR来表示。
指令格式
选择域1位
微操作域8位
下址域4位
微程序控制器基本的水平微代码
状态
地址
SE
L
AR
PC
DR
M
PC
IN
AI
DR
NO
AC
PCPL
USDR
ACO
RDR
AC
SU
BDR
AD
DR
FETCH1
0000
0
1
0
0
0
0
0
0
0
0001
FETCH2
0001
0
0
1
1
0
0
0
0
0
0010
FETCH3
0010
1
0
0
0
1
0
0
0
0
****
COM1
1000
0
0
0
0
0
1
0
0
0
0000
JREL1
1010
0
0
0
0
0
0
1
0
0
0000
OR1
1100
0
0
0
1
0
0
0
0
0
1101
OR2
1101
0
0
0
0
0
0
0
1
0
0000
SUB11
1110
0
0
1
0
0
0
0
0
0
1111
SUB12
1111
0
0
0
0
0
0
0
0
1
0000
1位
8位
4位
控存容量:
(1+8+4)*9=117位
CPU控制信号值
控制信号
值
ARLOAD
ARPC∨AIDR
PCLOAD
PCPLUSDR
PCINC
PCIN
DRLOAD
DRM
ACLOAD
NOAC∨ACORDR∨ACSUBDR
IRLOAD
AIDR
ALUS1
ACSUBDR
ALUS2
ACORDR
MEMBUS
DRM
PCBUS
ARPC
READ
DRM
DRBUS
AIDR∨PCPLUSDR∨ACORDR∨ACSUBDR
设计体会
由于这个CPU的设计和教材上的例子很相似,只要按照教材上设计程序就可以一步步的设计出来。
通过这个CPU设计对CPU的指令的执行和实现有了更加深的了解,也对CPU内部的结构有了更好的理解。
对这类非常简单的CPU设计的过程和具体步骤有一定的了解。