硬布线设计实验报告概要.docx
《硬布线设计实验报告概要.docx》由会员分享,可在线阅读,更多相关《硬布线设计实验报告概要.docx(16页珍藏版)》请在冰豆网上搜索。
硬布线设计实验报告概要
计算机组成原理
实验报告
实验名称:
使用硬连线控制器的CPU设计
专业班级:
计算机科学与技术2010211301
学生姓名:
贾晓冬宋丽君杨嘉宁肖迪月
实验时间:
2012.06
目录
1教学目的、实验设备与任务
1.1教学目的3
1.2实验设备....................................................................................3
1.3设计与调试任务........................................................................3
2总体说明4
2.1硬连线控制器的基本原理4
2.2指令系统..................................................................................4
2.3控制台指令..............................................................................5
2.4数据通路..................................................................................5
2.5控制器指令周期流程图..........................................................5
2.6控制台控制信号及作用..........................................................6
3设计方案7
3.1说明及流程图...........................................................................7
3.2逻辑状态表..............................................................................8
4设计的实现10
4.1ABEL源代码..........................................................................10
4.2组装、调试及管脚连线..........................................................11
4.3数据测试及结果......................................................................13
5本次设计的体会14
一、教学目的、实验设备与任务
·教学目的
1.融会贯通计算机组成原理课程和计算机系统结构课程的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识。
2.掌握硬连线控制器的设计方法‘
3.学习运用大容量可编程器件开发技术,掌握设计和调试的基本步骤和方法,体会ISP技术的优点。
4.培养科学研究能力,取得设计与调试的实践经验。
·实验设备
TEC-5计算机组成原理实验系统一台
Pentium3以上微型计算机一台
逻辑测试笔一支
·设计与调试任务
1.按给定的数据格式和指令系统,利用大容量ISP可编程器件,设计一台硬布线控制器组成的处理机
2.根据设计,在TEC-5实验系统中进行调试。
3.在调试成功的基础上,整理出设计图纸和其他文件
2、总体说明
1、硬连线控制器的基本原理
硬布线控制器的基本原理是,每个微操作控制信号S是一系列输入量的逻辑函数,即用组合逻辑电路来实现,
S=f(Im,Mi,Tk,Bj)
其中Im是机器指令操作码译码器的输出信号,Mi是节拍信号发生器的节拍信号,Tk是时序信号发生器的时序信号,Bj是状态条件判断信号。
在TEC—5实验系统中,时序信号Tk(T1—T4)已经直接输送给数据通路;因为机器指令系统比较简单,操作码只有4位,省去操作码译码器,用Im直接作为操作码,即指令寄存器的IR4—IR7信号。
Mi的来源就是时序模块的节拍信号,例如W3—W1。
Bj的信号包括:
来自数据通路中运算器ALU的进位信号C;来自控制台的开关信号SWC、SWB、SWA;其他信号。
其中C、SWC、SWA和SWB信号在微程序控制器中同样存在。
每个控制信号的函数式都是上述输入信号的逻辑表达式,因此可以用组合逻辑构造电路。
只要对所有控制信号都设计出逻辑函数表达式,这个硬布线控制器的方案也就得到了。
2、指令系统,由老师幻灯片中给出
3、控制台指令
SWC
SWB
SWA
操作
0
0
0
启动程序(PR)
0
0
1
写存储器(WRM)
0
1
0
读存储器(RRM)
0
1
1
写寄存器(WRF)
1
0
0
读寄存器(RRF)
4、数据通路
5、控制器的指令周期流程图
由老师幻灯片给出
6、控制台控制信号及作用
控制信号
信号有效条件
C
在加法和减法运算时产生的进位信号
RAM-BUS_
存储器数据送数据总线DBUS信号。
为0时将指令送往指令总线IBUS
ALU-BUS_
ALU输出三态门使能信号,为0时将ALU运算结果送DBUS
RS-BUS_
通用寄存器右端口三态门使能信号。
为0时将RF的B端口数据送DBUS
SW-BUS_
将SW7-SW0的数据送往DBUS
LDRi
双端口寄存器堆写入信号。
为1时将数据总线上的数据再T3的上升沿写入由WR1/WR0指定的寄存器
LDDR2
对操作数寄存器DR2进行加载控制信号。
为1时在T2的上升沿将由RS1、RS0指定的寄存器中的数据打入DR2
LDDR1
对操作数寄存器DR1进行加载控制信号。
为1时在T2的上升沿将由RD1、RD0指定的寄存器中的数据打入DR1
LDAR_
对AR进行加载的控制信号,为0时在T2的上升沿将数据总线上的数据打入AR
AR_1
AR+1
LDPC_
程序计数器PC接受来自DBUS的地址
PC_1
PC+1
LDIR
将来自RAM的指令打入指令寄存器IR
TJ
停机命令,关闭时序信号
SKIP
使节拍发生器在任意状态下直接跳到最后1拍
S3/S2/S1/S0
选择ALU的运算类型
M
选择ALU的运算模式:
M=1时逻辑运算,M=0时算术运算
Cn_
ALU最低位的+1信号,为0时,ALU最低位
LRW_
当LRW_=1且CEL_=0时,对双端口存储器左端口进行读操作
当LRW_=0且CEL_=0时在T2节拍对左端口进行写操作
CEL_
双端口存储器左端口使能信号。
为0时允许对左端口读、写
CER_
双端口存储器右端口使能信号。
为0时将指令送往指令总线IBUS
3、设计方案
1、说明
硬布线控制器以节拍为时间单位,1拍是从时序T1的上升沿到T4的下降沿的一段时间。
在硬布线控制流程图中,1个执行框代表1拍。
决定执行一条指令需要的节拍数,要根据所有指令而定。
既不能只考虑某些需要最多节拍的指令,也不能只考虑节拍数最少的指令,一般要根据大多数机器指令所需的节拍数而定,设计才比较合理。
在本实验中,由于选用3拍对大多数指令就够用,所以节拍发生器产生3个节拍信号(W1—W3)。
统一用3拍执行1条机器指令后,对于所需节拍较少的的指令,为减少浪费,在时序电路中加入了一个控制信号SKIP的输入,该信号的作用是使节拍发生器在任意状态下直接跳到最后1拍(W3)。
这样,设计控制流程时,在所需节拍较少的的指令流程的适当位置使SKIP控制信号有效,多余的节拍就可以跳过,从而提高了性能。
机器指令选用3拍以后,将一条机器指令的执行化为占用两条(或者更多)机器指令的节拍,执行一条指令就可以占用W1、W2、W3、W1、W2、W3。
为了区分一条指令的两个不同阶段,我们加了个ST内部信号作为标志位,当ST0=0时,标志执行指令的前3个节拍,当ST0=1时,标志执行指令的后3个节拍。
同时设置了一个SSTO信号作为ST信号的触发信号。
具体流程图如下:
2、逻辑状态表
4、设计的实现(ABEL-HDL)
1、ABEL语言源代码如下:
MODULEController
DECLARATIONS
"输入管脚
SWC,SWB,SWAPIN;
IR7,IR6,IR5,IR4PIN;
W1,W2,W3,MF,T1,C,CLRPIN;
"输出管脚
RAM_BUS_,ALU_BUS_,RS_BUS_,SW_BUS_,LDIR,LDAR_,AR_1,LDPC_,PC_1,S3,S2,S1,S0,Cn_,M,LDDR2,LDDR1,TJ,SKIP,CEL_,CER_,LRW_,LDRiPIN;
"自定义
MF1,SSTONODEISTYPE'COM';
RUN,STONODEISTYPE'REG';
RRF,WRF,RRM,WRM,RP,ADD,SUB,AND,STA,LDA,JC,STP,OUTNODEISTYPE'COM';
CLK=.C.;
EQUATIONS
MF1=!
CLR&MF#T1&CLR;
RUN:
=CLR;
RUN.CLK=MF1;
STO:
=CLR&SSTO#CLR&STO;
STO.CLK=MF1;
SSTO=!
STO&W3&RUN;
"指令译码
RRF=SWC&(!
SWB)&(!
SWA);
WRF=(!
SWC)&SWB&SWA;
RRM=(!
SWC)&SWB&(!
SWA);
WRM=(!
SWC)&(!
SWB)&SWA;
RP=(!
SWC)&(!
SWB)&(!
SWA);
ADD=(!
IR7)&(!
IR6)&(!
IR5)&(!
IR4)&RP&STO;
SUB=(!
IR7)&(!
IR6)&(!
IR5)&IR4&RP&STO;
AND=(!
IR7)&(!
IR6)&IR5&(!
IR4)&RP&STO;
STA=(!
IR7)&(!
IR6)&IR5&IR4&RP&STO;
LDA=(!
IR7)&IR6&(!
IR5)&(!
IR4)&RP&STO;
JC=(!
IR7)&IR6&(!
IR5)&IR4&RP&STO;
STP=(!
IR7)&IR6&IR5&(!
IR4)&RP&STO;
OUT=(!
IR7)&IR6&IR5&IR4&RP&STO;
"管脚译码
LRW_=!
((RRF#WRF#WRM)&STO&W1#STA&W3);
CEL_=!
((RRF#WRF#RRM#WRM)&W1&STO#(STA#LDA)&W3);
CER_=!
((RRF#WRF)&W2&STO#W1&RP&STO);
RAM_BUS_=!
(RRM&W1&STO#W3&LDA);
ALU_BUS_=!
(W3&(ADD#SUB#AND#STA));
RS_BUS_=!
(W3&(RRF&STO#OUT#JC&C)#W2&(STA#LDA));
SW_BUS_=!
(W3&(!
STO)&(RRF#WRF#RRM#WRM#RP)#W3&STO&WRF#W1&STO&(RRF#WRF#WRM));
LDRi=W3&(WRF&STO#ADD#SUB#AND#LDA);
LDDR2=W2&(ADD#SUB#AND);
LDDR1=W2&(ADD#SUB#AND#STA);
LDAR_=!
(W3&(!
STO)&(RRF#WRF#RRM#WRM)#W2&(STA#LDA));
AR_1=W3&STO&(RRM#WRM);
LDPC_=!
(W3&(!
STO&(RRF#WRF#RP)#JC&C));
PC_1=W3&(ADD#SUB#AND#STA#LDA#STP#OUT)#W2&JC;
LDIR=!
CER_;
TJ=W1&STO&RRM#W2&STO&WRF#W3&((!
STO)&(RRF#WRF#WRM)#STO&(RRF#WRF#WRM)#STP#OUT);
SKIP=W1&((!
STO)&(RRF#WRF#RRM#WRM#RP)#STO&(RRM#WRM));
S3=W3&(ADD#AND#STA);
S2=W3&(SUB#STA);
S1=W3&(SUB#AND#STA);
S0=W3&(ADD#AND#STA);
M=W3&(AND#STA);
Cn_=!
(W3&SUB);
END
2、组装与调试
对程序进行编译,无误后下载到芯片
连线,调试
连线按照ABEL程序里面对管脚的定义连线
第一步:
检查全部硬布线控制流程,以单拍(DP)方式执行指令。
进行的顺序也是先执行控制台命令,然后执行机器指令。
当全部控制流程图检查完毕后,数据通路的执行部件(运算器,存储器等)功能正确;
第二步:
在内存中装入包括有全部指令系统的一段程序和有关数据,进一步可采用单步(DB)方式或连续方式执行,以验证机器执行指令的正确性;
第三步:
编写一段表演程序,令机器运行。
管脚连线:
PinNamePinAssignmentPinType,PinAttribute
TJ3Output,PULLUP
CLR4Input,PULLUP
LDIR5Output,PULLUP
LDAR_6Output,PULLUP
RAM_BUS_7Output,PULLUP
CER_8Output,PULLUP
T19Input,PULLUP
S210Output,PULLUP
LRW_11Output,PULLUP
LDDR212Output,PULLUP
M13Output,PULLUP
W214Input,PULLUP
SWA15Input,PULLUP
SWC16Input,PULLUP
IR418Input,PULLUP
PC_126Output,PULLUP
IR527Input,PULLUP
RS_BUS_28Output,PULLUP
LDPC_29Output,PULLUP
SKIP30Output,PULLUP
CEL_31Output,PULLUP
SW_BUS_32Output,PULLUP
IR633Input,PULLUP
LDDR135Output,PULLUP
ALU_BUS_37Output,PULLUP
S154Output,PULLUP
S346Output,PULLUP
CN_47Output,PULLUP
LDRI48Output,PULLUP
S050Output,PULLUP
MF57Input,PULLUP
C59Input,PULLUP
SWB60Input,PULLUP
IR769Input,PULLUP
W370Input,PULLUP
AR_171Output,PULLUP
W173Input,PULLUP
寄存器和内存单元内容:
计算结果:
五、本次设计的体会
贾晓冬:
这次小组做实验其实还是挺开心的,而且在开始做之前有一个大体的计划,所以等到真正开始做的时候没有手忙脚乱,而且合作的很好。
不过做的过程中也确实发现了很多问题,比如说ABEL语言的标识符只能有字母、数字和下划线组成,或者里面的一个小小的逗号由于格式不对都能导致错误,各种奇奇怪怪的错误都在做的过程中出现了,不过幸好在大家的合作下都能找出来,虽然有时候找的过程很痛苦。
其实我的主要任务就是各种找错,比如说在译码表和程序出来之后找错啊什么的,还有就是参与讨论,理清原理。
说起来很简单,但是其实做起来还是比较费时的,因为程序或者表格做出来,然后就需要一个一个的去对流程图,稍有不慎就有可能把错误忽略过去,不过由于是大家一起在做,所以也没有觉得有多难,还是那句话吧,三个臭皮匠顶一个诸葛亮,虽然几个人的水平都没那么高,但是一起合作可以找出很多忽略的地方,纠正很多一个人想不到的错误,所以效率也就提高。
总之这次试验做的很成功也很高兴,全都仰仗大家的合作。
宋丽君:
硬布线控制器是依赖于组合逻辑而实现的,而老师在课堂上对微程序控制器讲解得比较多,所以在微程序控制器方面掌握的知识对我们研究硬布线控制器是很有帮助的。
因为在数字逻辑课上,老师讲授的是VHDL语言,所以大多数同学选择用VHDL语言编写代码。
但是,经我们小组的仔细研究讨论,我们觉得相比于VHDL语言,ABEL语言显得更精练,更易于编写,所以我们决定在网上搜集资料来自主学习ABEL语言。
在用ABEL语言编写代码的时候,主要是逻辑表达式的编写,其实也没有什么特别难的地方,只需按照组合逻辑译码表,则可以很轻松地完成这些代码的编写。
当然,前提是这个组合逻辑译码表是完全正确的。
其实,数据通路是非常重要的,每个方框里的每个信号都是不可缺少的部分。
我们必须能知道每一步要做什么操作,而且要知道各个操作在哪个节拍电位里执行。
总之,数据通路是基础,组合逻辑译码表是关键。
只要这两个任务能完美地完成,代码就能自然而然地编写出来了。
同时,一个小组里组员之间的合作也是非常重要的,所谓集思广益,只有大家相互配合,各司其能,这个实验才能获得成功。
杨嘉宁:
这是我们计算机专业做的第一个硬件和软件结合的课程设计。
在正式进实验室进行操作前,我们小组成员先进行了对这个实验必要的分析,对整个实验的各个步骤都进行了详细的了解和讨论。
个人认为最有成效的讨论结果,莫过于决定用ABEL语言而非VHDL语言进行编写。
这一决定使我们在代码的编写上有了很大的改进,不仅提高了效率,还使差错变得简单易行,这一点在正式进入实验室操作时表现的更加明显。
我的任务是前期讨论以及实验室里电脑软件和试验台的操作,这又使我对ispLEVER等软件的操作有了进一步的了解,从载入源代码、查错,到生成管脚和固定管脚,再到后来的下载到TEC-5上,不但让我认识到代码编写时细心谨慎的重要性(因为代码报错,经检查,都是类似于逗号没有写或者诸如此类的小错误),还极大地提高了我对这一软件的认识以及将软件与实验台结合使用的能力。
个人认为,这是很好的一个课程设计安排,学以致用才是最好的结果,它不仅锻炼我们思考能力和动手能力,还加强了我们的团队合作能力。