组成课内实验报告四.docx
《组成课内实验报告四.docx》由会员分享,可在线阅读,更多相关《组成课内实验报告四.docx(24页珍藏版)》请在冰豆网上搜索。
![组成课内实验报告四.docx](https://file1.bdocx.com/fileroot1/2023-3/31/52d20c82-350c-4107-b4d4-e3175073c413/52d20c82-350c-4107-b4d4-e3175073c4131.gif)
组成课内实验报告四
计算机组成原理实验报告
学生姓名陈世阳
专业/班级计算机01班
学号10055008
所在学院电信学院
指导教师姜欣宁
提交日期2013.115
实验名称:
指令译码器(硬连线控制器)
一.实验目的
(1)理解指令译码器的作用和重要性。
(2)学习设计指令译码器。
二.实验要求
1)实验设计目标
本实验要求根据实验CPU中使用的指令系统设计指令译码器,本实验指令译码器的设计相对比较简单,节拍(t1、t2和t3)因素只在存储器读写时需要对存储器地址分时使用时需要考虑,这里暂不考虑节拍脉冲t,也就是说微操作控制信号只是指令操作码In和Bj的函数:
Cm=f(In,Bj)
式中的In主要代表指令操作码IR[15..12],还有辅助操作码(如算术逻辑指令时的IR[2..0],我们这里要求只考虑指令操作码IR[15..12]。
Bj代表进位标志C和结果为0标志Z。
要求产生的微操作控制信号如下:
op_code控制ALU进行8种运算操作的3位编码。
c_z_j_flag为1表示需要条件转移。
lj_instruct为1表示本条指令是条“JMPADR”指令。
DRWr为1表示在t3的下降沿将本条指令的执行结果写入目的寄存器。
Mem_Write为1表示本条指令有存储器写操作,存储器的地址是目的寄存器的内容。
DW_intruct为1表示本条指令是双字指令。
change_z为1表示本条指令可能改变z(结果为0)标志。
change_c为1表示本条指令可能改变c(进位)标志。
sel_memdata为1表示本条指令写入目的寄存器的值来自读存储器。
2).顶层设计实体的引脚要求
引脚要求的对应关系如下:
(1)指令IR[15..12]对应实验台开关SD3—SD0
进位C对应实验台开关SD4
结果为0标志Z对应实验台开关SD5
(2)控制信号对应如下:
op_code[2..0]指示灯R2、R1、R0
c_z_j_flag指示灯R3
lj_instruct指示灯R4
DRWr指示灯R5
Mem_Write指示灯R6
DW_intruct指示灯R7
change_z指示灯R8
change_c指示灯R9
sel_memdata指示灯R10
三.实验原理
指令译码器是计算机控制器中最重要的部分。
所谓组合逻辑控制器就是指指令译码电路是由组合逻辑实现的。
组合逻辑控制器又称硬连线控制器,是早期设计计算机的一种方法。
这种控制器中的控制信号直接由各种类型的逻辑门和触发器等组合产生。
这样,一旦控制部件构成后,除非重新设计和物理上对它重新连线,否则要想增加新的功能是不可能的。
结构上的这种缺陷使得硬连线控制器的设计和调试变得非常复杂而且代价很大。
所以,硬连线控制器曾一度被微程序控制器所取代。
但是随着新一代机器及VLSI技术的发展,这种控制器又得到了重视,如RISC机广泛使用这种控制器。
1.组合逻辑控制器原理
图6-42组合逻辑控制器的结构方框图
图6-42是组合逻辑控制器的结构方框图。
逻辑网络的输入信号来源有三个:
(1)指令操作码译码器的输出In;
(2)来自时序发生器的节拍电位信号Tk;(3)来自执行部件的反馈信
号Bj。
逻辑网络的输出信号就是微操作控制信号,用来对执行部件进行控制。
显然,组合逻辑控制器的基本原理,可描述为:
某一微操作控制信号Cm是指令操作码译码器的输出In、时序信号(节拍电位信号Tk)和状态条件信号Bj的逻辑函数。
即
Cm=f(In,Tk,Bj)
用这种方法设计控制器,需要根据每条指令的要求,让节拍电位和时序脉冲有步骤地去控制机器的各有关部分,一步一步地执行指令所规定的微操作,从而在一个指令周期内完成一条指令所规定的全部操作。
一般来说,组合逻辑控制器的设计步骤如下。
(1)绘制指令流程图
为了确定指令执行过程所需的基本步骤,通常是以指令为纲,按指令类型分类,将每条指令归纳成若干微操作,然后根据操作的先后次序画出流程图。
(2)安排指令操作时间表
指令流程图的进一步具体化,把每一条指令的微操作序列分配到各个机器周期的各个时序节拍信号上。
要求尽量多的安排公共操作,避免出现互斥。
(3)安排微命令表
以指令流程图为依据,表示出在哪个机器周期的哪个节拍有哪些指令要求哪些微命令。
(4)进行微操作逻辑综合
根据微操作时间表,将执行某一微操作的所有条件(哪条指令、哪个机器周期、哪个节拍和脉冲等)都考虑在内,加以分类组合,列出各微操作产生的逻辑表达式,并加以简化。
(5)实现电路
根据上面所得逻辑表达式,用硬件电路模块来实现。
四.译码器的设计思路
1、设计指令系统首先要设计指令系统。
ADDDR,SR指令编码:
0000DRSR
00000111
功能:
DR←DR+SR,影响CZ标志。
PC←PC+1。
INCDR指令编码:
0001DRSR
00000111
功能:
DR←DR+1,影响C和Z标志。
PC←PC+1。
SUBDR,SR指令编码:
0010DRSR
00000111
功能:
DR←DR–SR,影响C和Z标志。
PC←PC+1
DECDR指令编码:
0011DRSR
00000111
功能:
DR←DR–1,影响C和Z标志。
PC←PC+1。
ANDDR,SR指令编码:
0100DRSR
00000011
功能:
DR←DRandSR,影响Z标志。
PC←PC+1。
ORDR,SR指令编码:
0101DRSR
00000011
功能:
DR←DRorSR,影响Z标志。
PC←PC+1。
NOTDR指令编码:
0110DRSR
00000011
功能:
DR←notDR,影响Z标志。
PC←PC+1。
MOVDR,SR指令编码:
0111DRSR
00000001
功能:
DR←SR,不影响标志位。
PC←PC+1。
JMPADR指令编码:
10000000
00000000
ADR
功能:
PC←ADR。
JNCADR指令编码:
10010000
ADR-@-1
功能:
如果C=0,则PC←ADR;如果C=1,则PC←PC+1。
JNZADR指令编码:
10100000
ADR-@-1
功能:
如果Z=0,则PC←ADR;如果Z=1,则PC←PC+1。
MVRDDR,DATA指令编码:
1100DR00
00000000
DATA
功能:
DR←DATA。
PC←PC+2。
LDRDR,SR指令编码:
1101DRSR
00000001
功能:
DR←[SR]。
PC←PC+1。
STRSR,DR指令编码:
1110DRSR
00000000
功能:
[DR]←SR。
PC←PC+1。
NOP指令编码:
01110000
00000000
功能:
PC←PC+1
新增指令:
PUSH指令编码:
1110DRSR
00000000
功能:
向内存中中写入数据,即压栈操作。
POP指令编码:
1101DRSR
00000001
功能:
从内存中读出数据,即出栈操作。
1、op_code的扩展,由原来3位变成5位,目的是为了PUSH和POP的引入。
op_code(4downto2)为原来op_code,op_code(1downto0)为IR(5downto4),后两位区分STR和PUSH,LDR和POP指令。
当op_code(1downto0)为11时,执行对压栈弹栈操作。
2、将PUSH和POP两条指令与STR和LDR两条指令相结合,容易发现,PUSH和STR指令的区别在于,STR是从寄存器DR中提取内存的地址,而PUSH是从另设的寄存器中提取的地址,同为对内存的写操作,两者仅在t2阶段的执行有区别。
而POP和LDR的区别也类似,POP是将栈顶指针减一所指的内存地址中存放的数据放入寄存器中,而LDR是将SR寄存器中存的内存地址中的数据放入寄存器中,同为对内存的读操作。
五.设计方案
1、一条指令执行需要3拍时间
t1取指。
在t2的上升沿,将从存储器取出的指令写入指令寄存器IR。
t2根据指令寄存器IR的内容进行指令译码;根据指令译码得到的控制信号进行运算和其它操作。
t3存储器读、写操作;在t3的下降沿将运算结果写入目的寄存器,改变C标志和Z标志;在t3的下降沿,改变PC的值,为取下一条指令做好准备。
由于取指阶段和存储器读写阶段都要访问存储器,速度较慢;而指令译码和运算都由CPU本身完成,因此取指阶段和存储器读写阶段各占一拍时间,指令译码和运算共占一拍时间。
实验CPU的总体构成
实验CPU由5部分组成:
取指部分instru_fetch、指令译码部分decoder_unit、执行部分exe_unit、存储器部分memory_unit和通用寄存器组fegfile。
另外,还有一个程序包exe_cpu_components,将各低层设计实体作为元件存储,供各设计实体使用。
顶层设计实体exe_cpu完成5个组成部分的连接。
2、指令译码部分decoder_unit
SR
源寄存器号(编址)。
DR
目的寄存器号(编址)。
op_code
控制ALU进行8种运算操作的3位编码。
zj_instruct
为1表示本条指令是条“JNZADR”指令。
cj_instruct
为1表示本条指令是条“JNCADR”指令。
lj_instruc
为1表示本条指令是条“JMPADR”指令。
DRWr
为1表示在t3的下降沿将本条指令的执行结果写入目的寄存器。
Mem_Write
为1表示本条指令有存储器写操作,存储器的地址是源寄存器的内容。
DW_intruct
为1表示本条指令是双字指令
change_z
为1表示本条指令可能改变z(结果为0)标志。
change_c
为1表示本条指令本条指令可能改变c(进位)标志。
sel_memdata
为1表示本条指令写入目的寄存器的值来自读存储器。
r_sjmp_addr
计算条件转移指令转移地址所需要的16位相对地址。
它是由条件转移指令中的8位相对地址经过符号扩展生成的。
从上述控制信号看,实验CPU的指令译码器是很简单的。
指令译码器在传统上属于控制器部分,是控制器的核心。
所谓组合逻辑控制器是指指令译码器是由组合逻辑构成的,所谓微程序控制器是指指令译码器主要由控制存储器ROM和少许组合逻辑构成的。
指令流程表
实验CPU的指令流程表见表1。
表2-1实验CPU指令流程表
指令
微操作
t1
t2
t3
ADDDR,SR
Mem_Addr←pc
16存储器地址总线/
we←1
data_read←ob
从存储器读出的指令
IR←data_read
pc_inc←pc+1
result←DR+SR
generatez_tmp
generatec_tmp
pc←pc_inc
DR←result
z_out←z_tmp
c_out←c_tmp
INCDR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
result←DR+1generatez_tmp
generatec_tmp
pc←pc_inc
DR←result
z_out←z_tmp
c_out←c_tmp
SUBDR,SR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
result←DR-SRgeneratez_tmp
generatec_tmp
pc←pc_inc
DR←result
z_out←z_tmp
c_out←c_tmp
DECDR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
result←DR-1generatez_tmp
generatec_tmp
pc←pc_inc
DR←result
z_out←z_tmp
c_out←c_tmp
ANDDR,SR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
result←DRandSRgeneratez_tmp
pc←pc_inc
DR←result
z_out←z_tmp
ORDR,SR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
result←DRorSRgeneratez_tmp
pc←pc_inc
DR←result
z_out←z_tmp
NOTDR
IR←data_read
pc_inc←pc+1
result←notDRgeneratez_tmp
pc←pc_inc
DR←result
z_out←z_tmp
MOVDR,SR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
result←DR
pc←pc_inc
DR←result
JMPADR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
Mem_Addr←pc_inc
we←1
data_read←ob
pc←data_read
JNCADR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
generatec_z_j_flag
generatesjmp_addr
ifc_z_j_flag=1thenpc←sjmp_addr
elsepc←pc_inc
JNZADR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
generatec_z_j_flag
generatesjmp_addr
ifc_z_j_flag=1thenpc←sjmp_addr
elsepc←pc_inc
MVRDDR,DATA
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
Mem_Addr←pc_inc
we←1
data_read←ob
DR←data_read
pc←pc+2
LDRDR,SR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
Mem_Addr←SR
we←1
data_read←ob
DR←data_readpc←pc_inc
STRSR,DR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
Mem_Addr←DR
we←0
ob←SR
pc←pc_inc
NOP
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
pc←pc_inc
PUSHSR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
Mem_Addr←POUT
we←1
data_read←ob
DR←data_readpc←pc_inc
POPDR
Mem_Addr←pc
we←1
data_read←ob
IR←data_read
pc_inc←pc+1
Mem_Addr←POUT-1
we←0
ob←SR
pc←pc_inc
说明:
(1)Mem_Addr是存储器地址总线。
(2)ob是存储器数据总线。
(3)WE是存储器读写信号,为1时写存储器,为0时读存储器。
(4)z_tmp是运算产生的结果为0标志,z_out是本条指令执行完成后的结果为0标志。
(5)c_tmp是运算产生的进位标志,c_out是本条指令执行完成后的进位标志。
(6)IR是指令寄存器。
(7)c_z_j_flag是条件转移指令“JNCADR”或者“JNZADR”产生的条件转移标志。
(8)sjmp_addr是条件转移指令“JNCADR”或者“JNZADR”产生的条件转移地址。
(9)result是运算器产生的运算结果。
(10)POUT是新增加的寄存器中存放的栈顶指针。
六实验步骤
(1)实验台设置成FPGA-CPU独立调试模式
REGSEL=0、CLKSEL=1、FDSEL=0。
使用实验台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开。
(2)将设计在QuartusⅡ下输入,编译后下载到TEC-CA上的FPGA中。
(3)拨动实验台上的开关SD5—SD0,改变IR[15..12]、进位标志C和结果为0标志Z,观察指示灯R10-R0显示的控制信号,并填写表6-28和表6-29。
七.实验过程及结果
译码器是控制器的一个重要组成部分。
而要进行译码器的设计,首先应有码可译,即须进行指令系统的设计。
由于采用硬布线系统,故应先在数据通路上排出每条指令的指令周期流程,并把流程中的每一步操作分解成微操作序列,然后为每一个微操作分配时间,列出微操作对应的微命令操作时间表,写出微命令的最简逻辑表达式,最终用电路实现。
实验时,在原有指令的基础上,按照实验要求,考虑了PUSHSR,POPDR,CALLADDR和RET指令,并相应设计了译码器。
实验中遇到了困难主要是编写的程序一直无法通过。
经过查阅了大量资料后,终于编写出正确的程序,完成了实验要求。
加上附加的4条指令后,该实验中指令条数达到了17条。
因此指令操作码字段应扩展为5位,对应地,IR也为5位。
对应指令的微操做系统已经写在上面的表格中。
存储指令译码分析
以上图为例,指令寄存器中的指令为1110111000000000(即STRR2R3,存储指令),译出的Mem_Write为1表示本条指令有存储器写操作,存储器的地址是源寄存器的内容。
译出的操作码op_code为1111(非算术操作),译出的目的操作数寄存器DR为11(即R3),源操作数寄存器SR均为10(即R2),change_c和change_z等其他无关标志均为无效。
转移指令译码分析
以上图为例,指令寄存器中的指令为1010000001010101(即JNZ55H,条件转移指令),译出的条件转移标志zj_instruct为1表示本条指令是条“JNZADR”指令,译出的操作码op_code为1111(非算术操作),译出的条件转移指令转移地址所需要的16位相对地址r_sjmp_addr为0000000001010101(单独测试此指令时PC为0)。
change_c和change_z等其他无关标志均为无效。
运算指令译码分析
以上图为例,指令寄存器中的指令为0000000010000111(即指令MUIR0,R0,令R0与R0相乘),译出的操作码op_code为1000(执行单元的乘法的操作码),译出的目的操作数寄存器DR和源操作数寄存器SR均为00(即R0),译出的可能改变进位标志change_c为1(有效),change_z为0(无效)。
其他指令译码分析
以上图为例,指令寄存器中的指令为0000000001110000(即NOP指令),实际上是一个不影响标志位的MOVR0,R0指令,change_c和change_z等所有标志均为无效。
八.实验感想
在做这个实验之前由于组成原理的第八章还学得比较懵懂,因此有点茫然无从入手一开始觉得无从下手,将第八章的知识复习了一遍,才清晰许多。
完成实验前面的基本要求时还是比较容易,比较快地完成了实验,观察了现象,并填写完了状态表。
实验中附加的一些指令才是难点。
在经过一步一步的分析之后才一点一点地改善过来。
由此可见,很多事情不一定是一蹴而就的,需要慢慢地改进,接近目标。
9.附录
1.状态表
表6-28指令译码器实验(C=0且Z=0)
指令
IR[15..12]
OP[2..0]
c_z_j_flag
lj_instruct
DRWr
Mem_Write
DW_intruct
change_z
change_c
sel_memdata
ADDDR,SR
0000
000
0
0
1
0
0
1
1
0
INCDR
0001
100
0
0
1
0
0
1
1
0
SUBDR,SR
0010
010
0
0
1
0
0
1
1
0
DECDR
0011
110
0
0
1
0
0
1
1
0
ANDDR,SR
0100
001
0
0
1
0
0
1
0
0
ORDR,SR
0101
101
0
0
1
0
0
1
0
0
NOTDR
0110
011
0
0
1
0
0
1
0
0
MOVDR,SR
0111
111
0
0
1
0
0
0
0
0
JMPADR
1000
111
0
1
0
0
1
0
0
0
JNCADR
1001
111
1
0
0
0
0
0
0
0
JNZADR
1010
111
1
0
0
0
0
0
0
0
MVRDDR,DATA
1100
111
0
0
1
0
1
0
0
1
LDRDR,SR
1101
111
0
0
1
0
0
0
0
1
STRSR,DR
1110
111
0
0
0
1
0
0
0
0
表6-29指令译码器实验(C=0且Z=1或者C=1且Z=0或者C=1且Z=1)
指令
IR[15..12]
OP[2..0]
c_z_j_flag
lj_instruct
DRWr
Mem_Write
DW_intruct
change_z
change_c
sel_memdata
A