CPU设计.docx
《CPU设计.docx》由会员分享,可在线阅读,更多相关《CPU设计.docx(26页珍藏版)》请在冰豆网上搜索。
CPU设计
作业:
10、解:
对非常简单CPU增加了一条CLEAR指令后的新的状态图如下:
其RTL代码如下:
FETCH1:
ARPC
FETCH2:
DRM,PCPC+1
FETCH3:
IRDR[7..6],ARDR[5,0]
ADD1:
DRM
ADD2:
ACAC+DR
AND1:
DRM
AND2:
ACAC^DR
JMP:
PCDR[5..0]
R5:
DR[5]1或DR[5]0
INC:
ACAC+1
CLEAR:
AC0
11、解:
一、确定CPU的用途
以下设计的CPU是要用来执行取反运算、加法运算、逻辑或运算、减法运算这四条指令的,而且该CPU能够访问64个字的存储器,每个字为8位宽。
字长:
8位D[7....0]
寻址范围:
64Btye,2^6=64,A[5....0]
二、确定ISA
1、程序员可访问的寄存器
在下表中,为了完成COM,JREL,OR和SUB1这四条指令,显然我们只需用到一个通用寄存器AC——8位累加器就可以实现。
指令操作码操作
COM00XXXXXXACAC'(取反)
JRET01AAAAAAPCPC+00AAAAAA
OR10AAAAAAACAC^M[00AAAAAA]
SUB111AAAAAAACAC—M[00AAAAAA]—1
2、CPU还需要一些其他的寄存器以便完成取指令(或数据)、译码和执行指令所必须的内部操作,最基本的寄存器有:
AR(地址寄存器)——6位,由A[5.....0]向存贮提供地址
PC(程序计数器)——6位,指出下一条指令的地址
DR(数据寄存器)——8位,通过D[7....0]从存贮器接受指令和数据
IR(指令寄存器)——2位,存放从存贮器中取回的指令的操作码部分。
三、为CPU设计状态图
为了确定CPU的状态图,需对每条指令作如下分析:
1、从存贮器取出指令(所有指令都相同)
2、指令译码
3、指令执行
从存贮器中取出指令:
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]从地址寄存器AR中接收值,因此第一步就要把PC的内容拷贝到AR中。
这样,取指令的第一个状态就是:
FETCH1:
ARPC
这一状态的意义就是当FETCH1为真时,把PC的值传给AR,执行微操作ARPC,以下同理。
【2】CPU必须从存贮器中读出指令。
为此CPU必须发一个READ信号到存贮器的RD端使存贮器将数据送到D[7...0]上。
同时,CPU读进该数据并放到DR中,因为DR是用来访问存贮器的唯一寄存器。
同时还实现了微操作PCPC+1,为取下一条指令作准备。
FETCH2:
DRM,PCPC+1
【3】作为取指令的一部分,CPU还必须完成以下操作:
*DR的高2位拷贝到IR,目的是确定指令的功能(即将指令的操作码读入IR)
*DR的低6位拷贝到AR,目的是
对于OR和SUB1指令,这6位包含了该指令的一个操作的存贮器地址(因为一个数已经在AC中),将地址拷贝到AR可减少这些指令在执行周期的状态。
而对于JRET和COM指令,也不会产生影响。
它们不需要再次访问寄存器,因为他们恰好不会用到在AR中的值。
一旦它们返回到FETCH1状态,FETCH1将把PC的值装载到AR,从而覆盖了没有用到的值。
FETCH3:
IRDR[7、6],ARDR[5...0]
取指令周期的状态图
FETCH1
FETCH2
FETCH3
指令译码
由于本CPU只有四条指令,因此只有四个不同的执行周期,由IR中的值来确定的,以下为取指令和译码周期的状态图:
OR
执行
周期
SUB1执行
周期
JRET执行周期
COM执行周期
FETCH1
FETCH3
FETCH2
IR=00
IR=01IR=10IR=11
指令执行
【1】COM指令
功能是将AC的内容取反,主要是通过一个非门将AC的内容取反,执行周期的状态是:
COM1:
ACAC'
【2】JREL指令
代码是01AAAAAA,意即转移的目标地址由AAAAAA(6位二进制数)与原来的PC的
地址相加确定的,而AAAAAA在DR[5....0]中,所以有:
JREL:
PCPC+DR[5...0]
【3】OR指令
为执行或指令,CPU必须完成以下操作:
OR1:
DRM,从存贮器取出一个操作数送到数据寄存器;
OR2:
ACACDR,数据寄存器DR和AC的数进行或运算,并把结果存回AC中
注意:
M的地址是由A[5...0]确定,已存放在AR中。
【4】SUB1指令
为执行该减法指令,(由于计算机是没有减法操作的,故减法要变为加上该数的补码即对该数去反加1,因此该指令的执行周期从ACAC-M[00AAAAAA]-1变为
ACAC+M'[00AAAAAA]),CPU必须完成以下操作:
SUB11:
DRM,从存贮器取出一个操作数送到数据寄存器;
SUB12:
ACAC+DR',对数据寄存器的数DR先求反(通过非门),再把取反后的数与AC的数相加,并把结果存回AC中;
综上所述可得该CPU的完全状态图如下:
FETCH1
FETCH2
FETCH3
IR=00
IR=01IR=10IR=11
SUB12
SUB11
JREL
OR2
COM
OR1
四、建立所需要的数据通路
1、与CPU的每个状态相关联的微操作(共九个状态)
FETCH1:
ARPC
FETCH2:
DRM,PCPC+1
FETCH3:
IRDR[7.6],ARDR[5....0]
COM:
ACAC'
JREL:
PCPC+DR[5...0]
OR1:
DRM
OR2:
ACACDR
SUB11:
DRM
SUB12:
ACAC+DR'
2、建立数据通路的原理和方法
存贮器数据通路的原理:
【1】存贮器是通过引脚D[7....0]将数据送给CPU的8位内部总线。
【2】存贮器的地址确定是通过地址引脚A[5...0]从AR中获得的。
于是CPU与存贮器之间需要A[5...0](地址)和D[7..0](数据)通路。
CPU内部的数据通路:
【1】在CPU的内部创建一条总线,并且在各个部件之间使用总线传递数据。
3、CPU内部寄存器控制信号的定义和确定方法
【1】原理:
首先把各种操作重新分组,依据是把修改同一个寄存器的操作分配在同一组。
在本CPU中其分配如下:
AR:
ARPC;ARDR[5...0]
PC:
PCPC+1;PCDR[5...0];PCPC+DR[5....0]
DR:
DRM
IR:
IRDR[7..6]
AC:
ACAC';ACACDR;ACAC+DR'
【2】决定完成每个部件应完成的功能
AR,DR,IR,AC
这四个寄存器总是从其他一些部件中载入数据。
若数据已在总线上,则需要做的就是能够执行并行装入操作。
(它们各自的LD端分别由ARLOAD、DRLOAD、IRLOAD、ACLOAD信号同步装入)
PC
这个寄存器能从其他一些部件中装入数据。
还有自增当前值。
所以应创建一个单独的硬件使之能自增当前值。
(即要有PCINC信号进行自增)还要有载入信号PCLOAD。
4、把每个部件都连接到系统总线上
三态缓冲区——原有的寄存器总是在结果准备好后立即输出到系统总线,造成多个结果同时
输出到系统总线的可能性出现,使CPU内部数据可能发生冲突。
所以应增
加三态缓冲区加以控制。
但AR的输出还应与A[5...0]相连,这是寻址所需。
注:
CPU的控制信号的设置见后面——控制器的设计
5、CPU最终的寄存器部分的图
分析:
【1】AR:
仅仅向存贮器提供数据(地址),没有必要将它连接到内部总线上(也就是不用
连三态缓冲区)。
故只要加上ARLOAD实现从BUS装入数据,注意图中的CLK是
CPU的核心时钟。
【2】IR:
不通过内部总线向任何其他部件提供数据而IR的输出将直接送到控制器用于确定
指令的功能。
(不用接三态缓冲器)
【3】ARPC:
要接三态缓冲器由PCBUS控制同步。
【4】AC:
本CPU不向其他任何寄存器提供数据。
【5】D[7....0]:
各部件所需要的数据位不是统一的。
显然,从存贮器读出的数据为8位,有
些部件需要8位D[7...0](如DR、AC),而有些部件只需6位D[5....0](如AR、AC),
还有些只需要2位D[7..6](如:
IR),必须确定哪些寄存器从总线上的哪些为上接收和发
送数据。
对于DR寄存器来说应该由DRBUS实现同步。
DRLOAD实现LD(载入)。
【6】AC:
必须能载装AC+DR'的和,以及ACDR的逻辑或、AC'取非的结果。
CPU必须
包含一个能产生这些结果的ALU(算术逻辑运算器)并由ACLOAD实现装入。
该CPU最终的寄存器部分的图如下:
M
READ
68
A[5..0]
D[7...0]
68
AR
LD
6[5..0]MEMBUS
[5..0]6ARLOAD
PC
LDINC
[5..0]6PCBUS6[5..0]
ALU2
6
ALUS4PCLOADPCINC
DR
LD
DRBUS
888
8DRLOAD
ALU1
AC
LD
8
ALUS[1..3]ACLOAD
IR
LD
2[7..6]
IRLOAD
CLK
8位总线
5、ALU的设计
1、ALU数据通路的分析(由于要将运算结果送回AC、PC中,又它们的数据位数不同,故用2个ALU)
ALU1必须能接收AC和DR作为输入,然后把运算结果输出到AC,还有ALU2必须能接收到PC和DR[5....0]做输入,然后把运算结果输出到PC。
2、修改AC、PC的内容有以下传送:
COM:
ACAC'
OR2:
ACACDR
SUB12:
ACAC+DR'
FETCH2:
PCPC+1
JREL:
PCPC+DR[5...0]
由于具有多个操作要通过ALU1、ALU2运算,故要用多路选择器从正确的输出中选择数据送入AC、PC。
3、具体设计
ALU1的设计
【1】算术运算部件
SUB12:
ACAC+DR'可变为先对DR取反,再执行加法。
还有有可能会有进位产生,故还要用Cin来控制输入,ALUS1是用来控制Cin的(实现了末位加1的功能。
【2】逻辑运算部件
用一个8为2选1的多路选择器。
MUX的输入有两种运算,分别为AC',ACDR。
用控制信号ALUS1来实现2选1的输出。
【3】ALU1的逻辑电路图如下:
888
DRDRAC
8
AC
01
MUXS0
并行加法器Cin
ALUS1ALUS2
01
MUXS1
ALUS3
ToAC
ALU2的设计
【1】由于只有算术运算,且只要弄加法运算,有一个2选1的多路选择器,选择是否要跳转到另一个地址。
(ALUS1作为控制信号)
ALU2的的逻辑电路图如下:
0RD[5..0]
并行加法器
01
MUXs0
PC666
ALUS4
6
TOPC
6、控制器的设计
硬布线方法设计控制器
1、该CPU的控制器
【1】组成包含三部分
计数器:
保存当前状态
译码器:
接受当前状态并为每个状态生成单独的信号
逻辑组合:
接受单独的状态信号,为每一部件生成控制信号以及计数器的控制信号(反馈)
【2】一般硬连线控制单元原理图
逻
辑
译
码
器
计
数
器
LDINCCLR
输入
控制信号
注意:
计数器理应有时钟(CLK)输入端),本图省略。
【3】确定计数器的位数
本CPU共9个状态。
(四条指令,共9个状态)
2的4次方为16大于9,所以需要一个四位计数器和一个4—16位译码器。
显然,译码器中有7个输出没用到。
2、计数器和译码器的设计原则
计数器的输出状态共16个(0000~1111)
译码器的输出最多只有16个,本CPU实际只用到9个,分析如下
【1】FECTH1状态(公共状态,又称公共操作)
规定为计数器的0值,使用计数器的CLR=1(清零有效)达到这一状态。
这也是因为CPU的任一条指令执行完毕,CPU一定转入取指令状态。
【2】建顺序状态设定为计数器的连续值,用INC(自增1)实现。
这样的好处是控制器通过发出计数器的INC信号来到达任一需要的状态。
FETCH2赋值为计数器值1
FETCH3.............................2
COM............................8(由于映射函数建立的需要,故设置为8)
JREL............................10
OR1............................12
OR2............................13
SUB11............................14
SUB12............................15
由于本CPU的任一条指令的执行都是少于或等于2个状态,因此就要求每条指令执行周期的第一个状态之间的计数值间隔至少应为2。
于是,为指令的第一个状态建立函数映射为——1IR[1...0]0,通过这个新的映射函数确定个指令的执行周期的入口:
1000(8)——COM
1010(10)——JREL
1100(12)——OR1
1110(14)——SUB11
该CPU的硬布线控制器图如下:
计数器
LDINCCLR
0
1
译2
。
码。
。
器8
。
10
。
12
13
14
15
译码器
FETCH1
FETCH2
FETCH3
1IR[0..1]04COM
4
JREL
OR1
OR2
SUB11
SUB12
FETCH3
COM
JRET
BUS12OR2
FETCH1
FETCH2
OR1
SUB11
【4】计数器LD、INC、CLR控制信号的确定
LD(装载)——应在每个取指周期的末尾FETCH3状态中发生,因为准备进入该指令的执行
周期的第一个状态,所以必须要装载1IR[1..0]0才能进入指令的正确执行周
期。
不难得出逻辑函数应是:
LD=FETCH3
FETCH3:
IRDR[7..6],ARDR[5...0]
INC(增1)——因为在确定第一个状态(由计数器输入1IR[1..0]0决定)后,就要决定接下来的状态,其中有一些只需要增1。
即产生INC信号即可。
本CPU中的逻辑函数是:
INC=FETCH1+FETCH2+OR1+SUB11,对应的电路图如下:
FETCH1
FETCH2
INCOR1
SUB11
CLR(清0)——每条指令执行完后都要转入下一条指令的取指周期,所以必定要清0。
本
CPU的逻辑函数是:
CLR=COM+JRET+OR2+SUB12,对应的电路图如下:
COM
JRET
CLR
OR2
SUB12
3、根据译码器的输出信号经组合后产生CPU中寄存器的有关控制信号,用于控制AR,PC,DR,IR,M,ALU1,ALU2及缓冲器。
【1】ARLOAD(转载地址寄存器控制信号)
因为在FETCH1中实现ARPC
FETCH3中实现ARDR[5...0]
所以逻辑函数为:
ARLOAD=FETCH1+FETCH3
【2】PCLOAD,PCINC
PCLOAD=JRET1
PCINC=FETCH2
【3】DRLOAD(实现DRM)
DRLOAD=FETCH2+OR1+SUB11
【4】ACLOAD
ACLOAD=COM+OR2+SUB12
【5】IRLOAD
IRLOAD=FETCH3
【6】ALUS1,ALUS2,ALUS3,ALUS4
ALUS1,ALUS2,ALUS3是ALU1的控制信号,
ALUS1——是控制算术运算进位的,当ALUS1=1时,表示要有进位输入到下一个部件,
否则没有输入。
ALUS2——是控制逻辑运算的,当ALUS2=1时,执行取反运算,当ALUS2=0时,执行
或运算。
(ALUS2=COM)
ALUS3——是控制算术运算、逻辑运算输入的,当ALUS3=1时,逻辑运算部分的结果
输入,当ALUS3=0时,算术运算部分的结果输入。
ALUS3=COM+OR2
ALUS4是ALU2的控制信号
ALUS4——是决定PC是否跳转的,当ALUS4=1时,PC与当前地址的后六位相加,实现跳
转,当ALUS4=0时,PC与0相加,即不跳转。
ALUS4=JERT
【7】缓冲器控制信号
许多操作需要从内部总线上获取数据,CPU必须能控制缓冲器以便在合适的时候将数据放到总线上,为此应满足如下逻辑函数关系:
MEMBUS=FETCH2+OR1+SUB11
PCBUS=FETCH1
READ=FETCH2+OR1+SUB11
DRBUS=FETCH3+JERT+OR2+SUB12
各元件的逻辑图如下:
FETCH1
FETCH3ARLOADCOMALUS2
JERLALSU4
JRET1PCLOAD
FETCH2PCINC
OR1ALUS3
COM
FETCH2
OR1DRLOAD
SUB11FETCH2
OR1MEMBUS
COMSUB11
OR2
SUB12ACLOAD
FETCH1PCBUS
FETCH2
OR1READFETCH3
JERTDRBUS
SUB11OR2
SUB12
用微程序方法设计控制器
该CPU微程序控制器的基本框图如下:
IR
MAP
2
4
s1MUX0
4
SELuOPSADDR
uAR(微地址寄存器)
4
CLK4
4
1、该CPU的微程序控制器基本框图的说明
【1】本CPU只有4条指令分别对应4个微程序,合共9条微指令(对应完全状态图9个状态)。
【2】指令操作码IR只有2位,分别是00、01、10、11
【3】MAP(映射逻辑)确定了访问微子程序的入口地址(即执行周期的第一条微指令),
此映射函数可与前面硬布线的相同,即为1IR[1..0]0
【4】两种可能的下址方式(有多路开关MUX实现选择):
S=1——操作码映射(经“指令译码”,从而确定进入一条新指令的执行周期的第一个微指令的入口地址,并送到uAR在CLK同步下,从控存取出这条微指令)。
S=0——绝对跳转(下一条要执行的微指令在控存内,绝对地址由ADDR给定。
)
2、工作原理分析描述
【1】确定微子程序的第一条微指令(如OR指令的OR1微指令)入口地址(当S=1)。
方法是根据取指中的最后一个状态(取指中的最后一条微指令)FETCH3,紧跟着根据映射函数(通过输入MAP来实现)对IR进行译码,便能转入到(在四条指令中确定一条)指令执行周期的第一条微指令入口)。
【2】下址(后继地址)的确定。
(当S=0)
用绝对跳转,还可以直接跳转到FETCH1状态。
本CPU是有ADDR域所指定的。
【3】几个参数的设定
(1)控存中地址域的位数(输出绝对地址的宽度)
由于2的4次方为16大于9,而本CPU共有9条指令,可以用4位。
(2)MUX到微地址寄存器,再由微地址寄存器到控存
因此,都要用4位的。
(传输的时候位数要一致)
(3)uOPS的位数
由于本次设计是用到水平型微指令设计法的(每个位代表一个操作),有于本CPU有9种不同的指令,故本因有9位的,但由于有些指令时可以合并优化的,故不用9位。
见下分析:
1)本CPU的所有微操作并为其分配助记符(共9种不同的操作)。
助记符
微操作
ARPC
ARPC
ARDR
ARDR[5..0]
PCIN
PCPC+1
PCDR
PCPC+DR
DRM
DRM
IRDR
IRDR[7..6[
COM(取反)
ACAC'
OR(与)
ACACDR
SUB1(减)
ACAC+DR'
2)可得到初级微指令的格式为:
选择域
微操作域
下址域
1位9位4位
在微指令字中,每一位表示一个微操作,当该位的值为“1”表示对应的微操作要发生(有效);当该位的值为“0”表示对应的微操作不发生(无效)。
本CPU的微程序控制器基本的水平微代码表格如下:
1位
4位
状态
地址
SEL
ARPC
ARDR
PCIN
PCDR
DRM
IRDR
COM
OR
SUB1
ADDR
FETCH1
0000
(0)
0
1
0
0
0
0
0
0
0
0
0001
FETCH2
0001
(1)
0
0
0
1
0
1
0
0
0
0
0010
FETCH3
0010
(2)
1
0
1
0
0
0
1
0
0
0
****
COM1
1000
(8)
0
0
0
0
0
0
0
1
0
0
0000
JRET1
1010
(10)
0
0
0