计算机组成原理课程设计硬布线控制器的设计与实现.docx
- 文档编号:11550716
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:17
- 大小:254.73KB
计算机组成原理课程设计硬布线控制器的设计与实现.docx
《计算机组成原理课程设计硬布线控制器的设计与实现.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计硬布线控制器的设计与实现.docx(17页珍藏版)》请在冰豆网上搜索。
计算机组成原理课程设计硬布线控制器的设计与实现
硬布线控制器的设计与调试
教学目的、任务与实验设备教学目的
熟练掌握实验5和硬布线控制器的组成原理与应用
复习和应用数据通路及逻辑表达式。
学习运用ISP(在系统编程)技术进行设计和调试的基本步骤和方法,熟悉集成开发软件中设计调试工具的使用,体会ISP技术相对于传统开发技术的优
点。
教学任务
按给定的数据格式和指令系统,在所提供的器件范围内,设计一台硬布线控制器控制的模型计算机。
根据设计图纸,在通用实验台上进行组装,并调试成功。
在组装调试成功的基础上,整理出设计图纸和其他文件。
实验设备
微操作控制信号
B1
Bn
硬布线控制器结构方框图
TEC-4计算机组成原理实验系统一台
直流万用表一只
集成电路建议使用ISP芯片(一片ispLSI1032)。
采用ISP器件,则需要一台PC机运行设计自动化软件(例如ispEXPERT作设计、编程和下载使用。
总体设计思路(描述指令系统,给数据通路)
采用与模型计算机相同的指令系统,即12条机器指令。
实验设计中采用该
指令系统的子集:
去掉中断指令后的3条机器指令,只保留9条指令。
采用的数据通路和微程序控制器方案相同。
•数据通路图和数据通路控制信号
DBUS
INS
图4数据通路总体图
2/13
控制器的设计思路
硬布线控制器能够实现控制功能,关键在于它的组合逻辑译码电路。
译码电路的任务就是将一系列有关指令、时序等的输入信号,转化为一个个控制信号,输出到各执行部件中。
根据硬布线控制器的基本原理,针对每个控制信号S,可以列出它的译码
函数S=f(Im,Mi,Tk,Bj)其中Im是机器指令操作码译码器的输出信号,Mi是节拍信号发生器的节拍信号,Tk是时序信号发生器的时序信号,Bj是状态条件判断信号。
在TEC—4计算机组成原理实验系统中,因为时序信号Tk(T1—T4)已经直接输送给数据通路,所以译码电路不需Tk作为输入。
又因为机器指令系统比较简单,操作码只有4位,不需要专门的操作码译码器,因此Im直接就是操作码,即指
令寄存器的IR4-IR7信号。
Mi的来源就是时序模块的节拍信号,例如W—W1Bj的信号包括:
1.来自数据通路中运算器ALU的进位信号C;
2.来自控制台的开关信号SWCSWBSWA
3.其他信号。
其中C、SWCSWA和SWB言号在微程序控制器中同样存在,不用加以解释。
由于硬布线控制器设计和微程序控制器设计的不同需求和特点以及控制器的设计方案的不同,可能需要其他信号,也可能不需要其他信号,根据设计方案而定。
每个控制信号的函数式都是上述输入信号的逻辑表达式,因此可以用各种组合逻辑构造电路网络,实现这些表达式的逻辑功能。
理论上,只要对所有控制信号都设计出译码函数,这个硬布线控制器的方案也就得到了。
根据要求,列出所需的控制台指令和机器指令
控制台指令名称
指令功能
指令格式
SWC
SWB
SWA
KRR
读寄存器堆方式
1
0
0
KRD
读双端口存储器方式
0
0
1
KWE
写双端口存储器方式
0
1
0
KLD
加载寄存器堆方式
0
1
1
PR
启动程序方式
0
0
0
机器指令名称
助记符
指令功能
指令格式
R7
R6R5R4R3R2
R1R0
加法
ADDRd,Rs
Rd+Rs->Rd
0
0
0
0
RS1
RS0
RD1
RD0
减法
SUBRd,Rs
Rd-Rs->Rd
0
0
0
1
RS1
RS0
RD1
RD0
乘法
MULRd,Rs
Rd*Rs->Rd
0
0
1
0
RS1
RS0
RD1
RD0
逻辑与
ANDRd,Rs
Rd&Rs->Rd
0
0
1
1
RS1
RS0
RD1
RD0
存数
STARd,[Rs]
Rd->[Rs]
0
1
0
0
RS1
RS0
RD1
RD0
取数
LDARd,[Rs]
[Rs]->Rd
0
1
0
1
RS1
RS0
RD1
RD0
无条件转移
JMP[Rs]
[Rs]->PC
1
0
0
0
RS1
RS0
RD1
RD0
条件转移
JCD
C=1
PC+D->PC
1
0
0
1
D3
D2
D1
D0
停机
STP
暂停运行
0
1
1
0
X
X
X
X
老师提供的控制台指令流程图:
控制台指令流程图
在这个控制台里,我们将控制台指令KRR,KRD,KWE,KLD,P分别拆分为
KRR1,KRR2,KRD1,KRD2,KWE1,KWE2,KLD1,K和DPR1,PR2每个小指令分别占用
W1-W43个节拍。
分2次执行完成。
控制台控制信号作用:
控制信号
信号作用
信号有效条件
C
在加法运算和减法运算时产生的进位信号
T4上升沿
ALUBUS
允许运算结果送往数据总线
1
LDDR1
M1=0时DR1接收寄存器堆A端口数据
T3下降沿
M1=1时DR1接收数据总线DBUS数据
LDDR2
M2=0时DR2接收寄存器堆B端口数据
T3下降沿
M2=1时DR2接收数据总线DBUS数据
WRD
控制双端口寄存器堆RF的写操作
1且T2上升沿
RSBUS#
控制RF的B端口数据是否能送DBUSh
0
LDER
将DBUS±的数据打入暂存寄存器ER
1且T4上升沿
SWBUS#
将SW7-SW数据送往DBUS
0
CEL#
选中双端口存储器RAM左端口
0
LRW
允许RAM左端口读操作
1且T3上升沿
允许RAM左端口写操作
0且T3上升沿
CER
RAM右端口读出数据并放到指令总线INS上
1
禁止右端口操作
0
LDAR1
将DBUS数据打入地址寄存器AR1
1且T4上升沿
AR1INC
AR1的值加1
1且T4上升沿
LDAR2
M3=0时AR2的数据从程序计数器PC打入
1且T2下降沿
M3=1时AR2的数据从DBUS丁入
LDR4
M4=1时R4的数据从DBUS打入
1且T2下降沿
M4=0时R4的数据从IR0-IR3打入
PCADD
ALU2完成PC和IR低4位相加即PC+D
1
PCINC
PC+1
1
LDPC
程序计数器PC接收来自DBUS的地址
1且T4上升沿
LDIR
将来自RAM的指令打入指令寄存器IR
1且T4上升沿
S2,S1,S0
选择运算器ALU的运算类型
1
设计方案
设计硬布线控制器的控制流程,也就是解决Mi、Im、Bj如何起作用的问题。
设计微程序控制器时可以使用流程图,设计硬布线控制器同样可以使用流程图。
微程序控制器的控制信号以微指令周期为时间单位,硬布线控制器以节拍为时间单位,两者本质上是一样的,1拍和1个微指令周期都是从时序T1的上升沿到T4的下降沿的一段时间。
在微程序控制流程图中,1个执行框代表1个微指令周期,而在硬布线控制流程图中,1个执行框就代表1拍。
执行一条机器指令所需的微指令数目,在硬布线控制器中相当于机器指令所需的节拍数。
决定执行一条指令需要的节拍数,要根据所有指令而定。
既不能只考虑某些需要最多节拍的指令,也不能只考虑节拍数最少的指令,一般要根据大多数机器指令所需的节拍数而定,设计才比较合理。
在本实验中,由于选用4拍对大多数指令就够用,所以节拍发生器产生4个节拍信号(W—W4。
统一用4拍执行1条机器指令后,对于所需节拍较少的的指令,例如JMP指令只用2拍(忽略中断),剩下2拍就无事可做了。
这在可行性上当然没有问题,但在性能上就打了折扣,因为多余的节拍都浪费掉了。
为减少浪费,在时序电路中加入了一个控制信号SKIP的输入,该信号的作用是使节拍发生器在任意状态下直接跳到最后1拍(W4。
这样,设计控制流程时,在所需节拍较少的的指令流程的适当位置使SKIP控制信号有效,多余的节拍就可以跳过,从而提高了性能。
机器指令选用四拍以后,将一条机器指令的执行化为占用两条(或者更多)机器指令的节拍,执行一条指令就可以占用W1W2W3W4W1W2W3W4为了区分一条指令的两个不同阶段,我们加了个ST内部信号作为标志位,当ST=0时,标志执行指令的前四个节拍,当ST=1时,标志执行指令的后四个节拍。
注意到只有CLR到来后的第四拍时ST信号才发生翻转,所以又设了一个SSTO言号作为ST信号的触发信号。
具体实现ST-SSTO模块如下:
我们增加了一个标志位RUN由于按CLR#按钮复位后,实验系统的时序停止在T4,W4,ST的值为0,这样SSTO=!
ST&W4值为1.按QD启动按钮后,由于立即产生T1信号,在T1的上升沿使ST置1,在第一组W1,W2,W3,W时,ST的值为1,这是我们不希望看到的。
增加了标志位RUN后,按CLR#按钮复位,使RUN为0。
由于SSTO=!
ST*W4*RUN,因此复位后的SSTO=0按QD启动按钮,在T1的上升沿,使RUN=1根据SSTO的布尔表达式,在W1,W2,W3时,SSTO=0直至UW4时,才使SSTO=1由于
ST:
=CLR#*SSTO#CLR*S在W4过后的下一个T1的上升沿,才使ST置1,从而将控制台操作的两种状态区分开来。
根据控制台指令设计出的硬布线控制器:
硬布线设计指令流程图
逻辑状态表:
根据硬布线指令流程图画出状态表,然后根据表格,列写出每个信号的逻辑表达式,并写出ABEL语言的源程序:
OUTPUT
ST=0
ST=1
KRR1
KRD1
KWE1
KLD1
PR1
KRR2
KRD2
KWE2
KLD2
ALU_BUS
AR1_INC
W4
W4
CEL#
W1
W1
W1
W1
CER
W2
W2
LDAR1
W4
W4
W4
W4
LDAR2
W4
W4
LDDR1
LDDR2
LDER
W3
LDIR
W2
W2
LDPC
W4
LDR4
W4
LRW
W1
W1
W1
M1
M2
M3
W4
W4
M4
W4
PCINC
PC_ADD
RSBUS#
W4
S0
S1
S2
SWBUS#
W4
W4
W4
W4
W4
W1
W1,W3
SKIP
W1
W1
W1
W1
W1
W2
W1
W1
TJ
W4
W4
W4
W4
W1
W4
W2,W4
WRD
W4
SSTO
W4
W4
W4
W4
W4
ST=1PR2
OUTPUT
PR2
ADD
SUB
MUL
AND
LDA
STA
JMP
JC
STP
W3
W3
W3
W3
W4
ALU_BUS
AR1_INC
W3
W4
CEL#
W1
CER
W2
W2
LDAR1
W1
LDAR2
W2
W2
W2
W2
LDDR1
W2
W2
W2
W2
W2
LDDR2
W3
W3
W3
W3
W3
LDER
W1
LDIR
W4
W4&C
LDPC
W4
W4&C
LDR4
W3
W4
LRW
W2
W2
W2
W2
M1
W2
W2
W2
W2
W2
M2
W1
M3
W4
W4&C
M4
W1
PC_INC
W4&C
PCADD
W2
W2
W2
RSBUS#
S0
S1
S2
SWBUS#
W2
W2
W2
W2
SKIP
W4
TJ
W4
W4
W4
W4
W4
WRD
SSTO
设计的实现(ABEL-HDL)
ABEL语言源代码如下:
MODULEComputeDECLARATIONS
"输入管脚
SWC,SWB,SWAPIN3..5;
IR7,IR6,IR5,IR4PIN6..9;
MF,T1,W1,W2,W3,W4,C,CLRPIN10..17;
"输出管脚
ALU_BUS,AR1_INC,CEL,CER,LDAR1,LDAR2,LDDR1,LDDR2,LDER,LDIR,LDPC,LDR4,LRWPIN29..41;
PC_INC,PC_ADD,RS_BUS,SW_BUS,WRD,SKIP,TJ,M1,M2,M3,M4,S0,S1,S2PIN45..58;
"自定义
MF1,SSTONODEISTYPE'COM';
RUN,STNODEISTYPE'REG';tKRR,tKRD,tKWE,tKLD,tPRNODEISTYPE'COM';
KRR1,KRD1,KWE1,KLD1,PR1,KRR2,KRD2,KWE2,KLD2,PR2NODEISTYPE'COM';ADD,SUB,MUL,AND,LDA,STA,JMP,JC,STPNODEISTYPE'COM';
CLK=.C.;
EQUATIONS
MF1=!
CLR&MF#T1&CLR;
RUN:
=CLR;
RUN.CLK=MF1;
ST:
=CLR&SSTO#CLR&ST;
ST.CLK=MF1;
SSTO=!
ST&RUN&W4;
"指令译码部分tKRR=SWC&!
SWB&!
SWA;
tKRD=!
SWC&!
SWB&SWA;tKWE=!
SWC&SWB&!
SWA;
tKLD=!
SWC&SWB&SWA;
tPR=!
SWC&!
SWB&!
SWA;
KRR1=!
ST&tKRR;
KRR2=ST&tKRR;
KRD1=!
ST&tKRD;
KRD2=ST&tKRD;
KWE1=!
ST&tKWE;
KWE2=ST&tKWE;
KLD1=!
ST&tKLD;
KLD2=ST&tKLD;
PR1=!
ST&tPR;
PR2=ST&tPR;
ADD=PR2&(!
IR7)&(!
IR6)&(!
IR5)&(!
IR4);SUB=PR2&(!
IR7)&(!
IR6)&(!
IR5)&(IR4);
MUL=PR2&(!
IR7)&(!
IR6)&(IR5)&(!
IR4);
AND=PR2&(!
IR7)&(!
IR6)&(IR5)&(IR4);
LDA=PR2&(!
IR7)&(IR6)&(!
IR5)&(IR4);
STA=PR2&(!
IR7)&(IR6)&(!
IR5)&(!
IR4);
JMP=PR2&(IR7)&(!
IR6)&(!
IR5)&(!
IR4);
JC=PR2&(IR7)&(!
IR6)&(!
IR5)&(IR4);
STP=PR2&(!
IR7)&(IR6)&(IR5)&(!
IR4);
"数据通路管脚译码
ALU_BUS=(ADD#SUB#MUL#AND)&W3#(STA&W4);
AR1」NC=(KRD2#KWE2)&W4;
CEL=!
((KRD2#KWE2#KLD2#KRR2)&W1#(W3&LDA)#(W4&STA));CER=(KLD2#KRR2)&W2#(W1&PR2);
LDAR1=W4&(KRR1#KRD1#KWE1#KLD1)#(W2&LDA)#(W2&STA);
LDAR2=W4&(KRR1#KLD1)#(PR2&W1);
LDDR1=W2&(ADD#SUB#MUL#AND);
LDDR2=LDDR1#(W2&STA);
LDER=W3&(KLD2#ADD#SUB#MUL#AND#LDA);
LDIR=CER;
LDPC=W4&(PR1#JMP#(JC&C));
LDR4=LDPC;
LRW=W1&KRD2#W3&LDA;
M1=!
LDDR1;
M2=!
LDDR2;
M3=W4&(KRR1#KLD1);
M4=W4&(PR1#JMP);
PC_INC=W1&PR2;
PC_ADD=W4&JC&C;
RS_BUS=!
(W2&(LDA#STA)#W4&(KRR2#JMP));
SW_BUS=!
(W1&(KWE2#KLD2#KRR2)#(W3&KLD2)#(W4&!
ST));
S0=SUB#STA;
S1=ADD#SUB;
S2=MUL;
SKIP=W1&!
ST#(W1&(KRD2#KWE2))#(W2&(KRR2#STA))#W2&(JMP#JC#STP);
TJ=W1&KRD2#W2&KLD2#W4&(tKRR#tKWE#tKLD)#W4&STP;
WRD=W4&(KLD2#ADD#SUB#MUL#AND#LDA);
END
对程序进行编译,无误后下载到芯片。
连线,调试,验收
连线按照ABEL程序里面对管脚的定义连线
寄存器和内存单元内容:
寄存器
存入内容
内存单元
存入内容
R2
60H
60H
24H
R3
61H
61H
83H
计算结果:
内存单元
内容
60H
24H
61H
83H
R0
0A7H
个人感想
实验开始就很考验我们的细心与操作,实验5的连线很多,虽然能够可以轻松的连出数据通路,但是在读寄存器还有读存储器时候很容易忽略一些细节。
尤其是
寄存器的编号设置很容易忘记怎么设,导致实验进入误区,读不出来正确的数据。
编程我们是通过参考网上的程序来完成的,虽然弄清楚怎么执行的写数据和读数据的指令,但是跟自己一开始的思路还是差很多,网上的太过于简便,反而容易误导我们的思路,自己做的错误太多,只能和网上的一块调试并应用。
需要注意的就是一开始写数的时候,网上的可以直接逻辑拉下来,我们只能一个个去写。
这个步骤的连线没什么难的,需要注意的就是最后那5个端口不能忘了。
硬布线控制器最最重要的就是数据通路和逻辑表达式的应用,不管是检测实验电
路还是最后实验数据的输出,都需要掌握这些知识。
本实验还涉及到了DP,DZ,DB的步骤顺序控制方式,只要掌握好数据通路就可以轻松理解这些步骤。
总的来说,小学期的实验需要的不仅仅是时间还有耐心和以前所学的应用,这次
的实验不仅告诉我们要牢牢掌握所学过的知识还是学会合作。
参考文献:
1.《计算机组成原理》白中英老师编写
本学期的五次实验指导书
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 课程设计 布线 控制器 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)