作者:
yunji137 发表日期: 2008-09-07 20:09 点击数: 565
八、微程序控制器设计与实现
(一)、非常简单CPU微程序控制器的基本框图(见图12)
(图12 非常简单CPU的微程序控制器)
1、说明:
a) 共8条指令,17条微指令
b) (指令操作码)IR 000¬----111
c) MAP---映象逻辑确定访问的微子程序的入口地址(即执行周期第一条微指令)
d) MUX实现操作码映象(S=1)和地址的绝对跳转(S=0)
(二)、为非常简单CPU生成正确序列并设计映象逻辑
1、给有限状态机的每种状态分配一个控存地址
首先确定每条指令执行周期中的第一条微指令入口地址,对于本CPU为程序控制器可使用与硬布线控制器相同的映象函数1IR[754]0 可得。
例:LDI1 10000 16
STO1 10010 18
ADD1 10100 20
OR1 10110 22
JUMP1 11000 24
JREL1 11010 26
SKIP1 11100 28
RST1 11110 30
(图 13 非常简单CPU微程序控制器的映射逻辑)
2、其余微指令的地址(剩下的状态)
连续的状态分配在控存中连续的存储单元
状态 地址
FETCH1 00000 (0)
FETCH2 00001 (1)
FETCH3 00010 (2)
LDI2 10000 (17)
STO2 10011 (19)
ADD2 10101 (21)
OR2 10111 (23)
JUMP2 11001 (25)
JREL2 11011 (27)
RST1 11111 (30)
(图14 非常简单CPU微程序控制器的状态地址)
3、确定微指令中的选择域(SEL)和地址域(ADDR),即生成正确的微指令执行顺序。
1)、一般状态转换
例:为了从FETCH1转到FETCH2,微程序控制器将控存的0号单元分配给FETCH1,且设定SEL=0和ADDR=0001。这样,当SEL=0使微程序控制器从ADDR中得到下一条地址,因ADDR=0001。所以,使它转到状态FETCH2所对应的控存地址并取出相应的微指令。
2)、特别状态FETCH3的下一条地址的确定
当执行完FETCH3状态后,必须映象到指令执行周期的微子程序入口处。根据1IR[765]0
所算出的结果。所以要求SEL=1表示采用映象地址。(见图15)
状态 地址 SEL ADDR
FETCH1 00000 (0) 0 00001
FETCH2 00001 (1) 0 00010
FETCH3 00010 (2) 1 ﹡﹡﹡﹡﹡(任意数)
LDI1 10000(16) 0 10000
LDI2 10000 (17) 0 00000
STO1 10010(18) 0 10011
STO2 10011 (19) 0 00000
ADD1 10100(20) 0 10101
ADD2 10101 (21) 0 00000
OR1 10110(22) 0 10111
OR2 10111 (23) 0 00000
JUMP1 11000(24) 0 11001
JUMP2 11001 (25) 0 00000
JREL1 11010(26) 0 11011
JREL2 11011 (27) 0 00000
SKI1 11100(28) 0 00000
RST1 11111 (30) 0 00000
(图15 非常简单CPU微程序控制器的部分微代码)
(三)、生成正确的微操作及相应的控制信号( )
微程序控制器的两个任务:
①产生正确的微操作
②遵循正确的状态序列
1、用水平型微指令生成微操作
特征:微指令中的每一位代表一种操作。可见,微操作数量越多,微指令的长度就越长。非常简单CPU共有12种不同的微操作,所以 应有17位。
1)、列出非常简单CPU为执行的所有微操作并为其分配助记符(共12种不同的微操作)。
助记符 微操作
ARPC AR←PC
DRM DR←M
PCIN PC←PC+1
IRDR IR←DR[7...5]
ACDR AC ←DR
DRAC DR←AC
MDR M←DR
PLUS1 AC←AC+DR
OR AC←AC∨DR
PCDR PC←DR
PLUS2 PC ←PC+DR
RST1 PC←0
RST2 AC
(图16 非常简单CPU的微操作及它们的助记符)
2)结合图15和16,并填上微操作的值。可得最终的微指令格式如下图所示
选择域 微操作域 下址域
1位 11位 5位
根据这一格式可得这12条微指令如下图17:
1位 13位 5位
状态 地址 SEL A
R
PC D
R
M P
C
I
N
I
R
D
R A
C
D
R D
R
A
C M
D
R P
L
U
S
1 O
R P
C
D
R P
L
U
S2 R
S
T
1 R
S
T
2 A
D
D
R
FETCH1 00000
(0) 0 1 0 0 0 0 0 0 0 0 0 0 0 0 00001
FETCH2 00001
(1) 0 0 1 1 0 0 0 0 0 0 0 0 0 0 00010
FETCH3 00010
(2) 1 1 0 0 1 0 0 0 0 0 0 0 0 0 ﹡﹡﹡﹡﹡(任意数)
LDI1 10000
(16) 0 0 1 0 0 0 0 0 0 0 0 0 0 0 10001
LDI2 10001
(17) 0 0 0 0 0 1 0 0 0 0 0 0 0 0 00000
STO1 10010
(18) 0 0 0 0 0 0 1 0 0 0 0 0 0 0 10011
STO2 10011
(19) 0 0 0 0 0 0 0 1 0 0 0 0 0 0 00000
ADD1 10100
(20) 0 0 1 0 0 0 0 0 0 0 0 0 0 0 10101
ADD2 10101
(21) 0 0 0 0 0 0 0 0 1 0 0 0 0 0 00000
OR1 10110
(22) 0 0 1 0 0 0 0 0 0 0 0 0 0 0 10111
OR2 10111
(23) 0 0 0 0 0 0 0 0 0 0 1 0 0 0 00000
JUMP1 11000
(24) 0 0 1 0 0 0 0 0 0 0 0 0 0 0 11001
JUMP2 11001
(25) 0 0 0 0 0 0 0 0 0 0 1 0 0 0 00000
JREL1 11010
(26) 0 0 1 0 0 0 0 0 0 0 0 0 0 0 11011
JREL2 11011
(27) 0 0 0 0 0 0 0 0 0 0 0 1 0 0 00000
SKI1 11100
(28) 0 0 0 1 0 0 0 0 0 0 0 0 0 0 00000
RST1 11111
(30) 0 0 0 0 0 0 0 0 0 0 0 0 1 1 00000
(图17 非常简单CPU微程序控制器基本的水平微代码)
3)控存总容量(1+13+5)×17=19×17=323位。
4)优化后的水平型微指令(图18)
分析图17可知,RST1和RST2的值相同,可用一个输出RST来驱动这两个操作。
此时,控存的总容量为(1+12+5)×17=306位。
1位 12位 5位
状态 地址 S
E
L A
R
P
C D
R
M P
C
I
N
I
R
D
R A
C
D
R D
R
A
C M
D
R P
L
U
S
1 O
R P
C
D
R P
L
U
S2 R
S
T
A
D
D
R
FETCH1 00000
(0) 0 1 0 0 0 0 0 0 0 0 0 0 0 00001
FETCH2 00001
(1) 0 0 1 1 0 0 0 0 0 0 0 0 0 00010
FETCH3 00010
(2) 1 1 0 0 1 0 0 0 0 0 0 0 0 ﹡﹡﹡﹡﹡(任意数)
LDI1 10000
(16) 0 0 1 0 0 0 0 0 0 0 0 0 0 10001
LDI2 10001
(17) 0 0 0 0 0 1 0 0 0 0 0 0 0 00000
STO1 10010
(18) 0 0 0 0 0 0 1 0 0 0 0 0 0 10011
STO2 10011
(19) 0 0 0 0 0 0 0 1 0 0 0 0 0 00000
ADD1 10100
(20) 0 0 1 0 0 0 0 0 0 0 0 0 0 10101
ADD2 10101
(21) 0 0 0 0 0 0 0 0 1 0 0 0 0 00000
OR1 10110
(22) 0 0 1 0 0 0 0 0 0 0 0 0 0 10111
OR2 10111
(23) 0 0 0 0 0 0 0 0 0 0 1 0 0 00000
JUMP1 11000
(24) 0 0 1 0 0 0 0 0 0 0 0 0 0 11001
JUMP2 11001
(25) 0 0 0 0 0 0 0 0 0 0 1 0 0 00000
JREL1 11010
(26) 0 0 1 0 0 0 0 0 0 0 0 0 0 11011
JREL2 11011
(27) 0 0 0 0 0 0 0 0 0 0 0 1 0 00000
SKI1 11100
(28) 0 0 0 1 0 0 0 0 0 0 0 0 0 00000
RST1 11111
(30) 0 0 0 0 0 0 0 0 0 0 0 0 1 00000
(图18 非常简单CPU的微程序控制器优化后的水平型微指令)
5)、由微操作信号产生该CPU所需的控制信号(剩余部分)
①、所需的控制信号
②、控制信号与微操作的关系
主要原理:根据满足什麽条件时需把信息载入寄存器来确定控制信号发出的时刻,见下图
控制信号 值
ARLOAD ARPC
PCLOAD PCDR
PCINC PCIN
DRLOAD DRM
ACLOAD ACDR∨PLUS1∨OR
IRLOAD IRDR
ALUSEL1 PLUS1
ALUSEL2 PLUS2∨OR
MEMBUS DRM
PCBUS ARPC
DRBUS IRDR∨ACDR∨MDR∨OR∨PLUS1∨PLUS2
READ DRM
(图19 非常简单CPU的控制信号值)
第四部分 设计体会
一、实验心得
这份课程设计是针对《计算机组成原理》的一个延伸。当初,我在学习该课程的过程中,总是把各个部分分开来了解,所以学完之后,总觉得有点欠缺,好像连不起来。但是在做了这个CPU的课程设计之后,我才知道原来一切是这么回事,有种豁然开朗的感觉。
在暑假做这份作业时,开始有很多不懂的地方,进展得不是很顺利;但是随着思考问题角度的深入,便渐渐地掌握了问题的本源,做起来也更得心应手一些。不过,还是有一些地方想不透彻,所以存在一些错误的地方,希望老师能够帮我圈点出来。总的来讲,我还是非常喜欢有这种教学方法的,希望以后技术性比较强的课程都能设定类似于课程设计的教案,加强我们学生对知识的理解和掌握,而不仅仅局限于课本,我们更希望得到现实技术的操作,这样,我们的学习兴趣也会加深。
二、完成以下四题单选题
1、你认为这样的课程设计(A)
A、很有必要 B、有必要 C、无意见 D、无比要
2、所选择内容难度(B)
A、很难 B、适中 C、无意见 D、大容易
3、你认为本学期所实施的《计算机组成原理》课程改革是否有必要?(B)
A、很有必要 B、有必要 C、无意见 D、无比要
4、你认为经过一个学期的努力是否已实现教学的三个目标?如果不能实现是什么原因造成?教学应该作哪些改进?(C)
A、完全能 B、基本能 C、无意见 D、不可能
第五部分 参考资料
[1]白中英 《计算机组成原理》(第三版•网络版) 北京:科学教育出版社,2000,11
[2]郑存陆 《计算机组成原理讲义》2006,8
[3]John D.Carpinelli《计算机系统组成与体系结构》北京:人民邮电出版社,2003,8
而非送到M[a]这个单元里,注意:a和M[a]是有区别的!讲义里有这个例子的!
图片和表格不见是可能因为这个论坛不支持发图片和表格或者要用特殊的格式才能发。
--郑存陆的学生上