计算机组成原理课内实验报告四.docx
- 文档编号:8311761
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:11
- 大小:158.08KB
计算机组成原理课内实验报告四.docx
《计算机组成原理课内实验报告四.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课内实验报告四.docx(11页珍藏版)》请在冰豆网上搜索。
计算机组成原理课内实验报告四
计算机组成与设计课内实验四
一、实验名称
指令译码器设计与调试
二、实验目的
●理解指令译码器的作用和重要性。
●学习设计指令译码器。
三、实验内容
●实验设计目标
本实验要求根据第2章中的实验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表示本条指令写入目的寄存器的值来自读存储器。
●顶层设计实体的引脚要求
引脚要求的对应关系如下:
✓指令IR[15..12]对应实验台开关SD3—SD0
进位C对应实验台开关SD4
结果为0标志Z对应实验台开关SD5
✓控制信号对应如下:
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组合逻辑控制器的结构方框图
图1是组合逻辑控制器的结构方框图。
逻辑网络的输入信号来源有三个:
(1)指令操作码译码器的输出In;
(2)来自时序发生器的节拍电位信号Tk;(3)来自执行部件的反馈信号Bj。
逻辑网络的输出信号就是微操作控制信号,用来对执行部件进行控制。
显然,组合逻辑控制器的基本原理,可描述为:
某一微操作控制信号Cm是指令操作码译码器的输出In、时序信号(节拍电位信号Tk)和状态条件信号Bj的逻辑函数。
即Cm=f(In,Tk,Bj)
用这种方法设计控制器,需要根据每条指令的要求,让节拍电位和时序脉冲有步骤地去控制机器的各有关部分,一步一步地执行指令所规定的微操作,从而在一个指令周期内完成一条指令所规定的全部操作。
一般来说,组合逻辑控制器的设计步骤如下:
●绘制指令流程图:
为了确定指令执行过程所需的基本步骤,通常是以指令为纲,按指令类型分类,将每条指令归纳成若干微操作,然后根据操作的先后次序画出流程图。
●安排指令操作时间表:
指令流程图的进一步具体化,把每一条指令的微操作序列分配到各个机器周期的各个时序节拍信号上。
要求尽量多的安排公共操作,避免出现互斥。
●安排微命令表:
以指令流程图为依据,表示出在哪个机器周期的哪个节拍有哪些指令要求哪些微命令。
●进行微操作逻辑综合:
根据微操作时间表,将执行某一微操作的所有条件(哪条指令、哪个机器周期、哪个节拍和脉冲等)都考虑在内,加以分类组合,列出各微操作产生的逻辑表达式,并加以简化。
●实现电路:
根据上面所得逻辑表达式,用硬件电路模块来实现。
五、实验步骤
●实验台设置成FPGA-CPU独立调试模式
REGSEL=0、CLKSEL=1、FDSEL=0。
使用实验台上的单脉冲,STEP_CLK短路子短接,短路子RUN_CLK断开。
●将设计在QuartusⅡ下输入,编译后下载到TEC-CA上的FPGA中。
●拨动实验台上的开关SD5—SD0,改变IR[15..12]、进位标志C和结果为0标志Z,观察指示灯R10-R0显示的控制信号,填写表6-28和表6-29。
六、设计思路与源代码
●实验思路:
●源代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityinstruction_decoderis
port(IRH:
instd_logic_vector(3downto0);
c,z:
instd_logic;
op_code:
outstd_logic_vector(2downto0);
--控制ALU进行8种运算操作的3位编码
c_z_j_flag:
outstd_logic;--为1表示需要条件转移
lj_instruct:
outstd_logic;--为1表示本条指令是条"JMPADR"指令
DRWr:
bufferstd_logic;--为1时写DR寄存器
Mem_Write:
outstd_logic;--为1时进行存储器读
DW_intruct:
bufferstd_logic;--为1表示本条指令是双字指令
change_z:
outstd_logic;--为1时改变ZF标志位
change_c:
outstd_logic;--为1时改变CF标志位
sel_memdata:
outstd_logic--为1时存储器的读出数据作为写入DR的数据
);
endinstruction_decoder;
architecturebehavofinstruction_decoderis
signalzj_instruct,cj_instruct:
std_logic;
begin
sel_memdata<=IRH(3)andIRH
(2)and(notIRH
(1));
change_z<=((notIRH(3))and(notIRH
(2)))
or((notIRH(3))andIRH
(2)and(notIRH
(1)))
or((notIRH(3))andIRH
(2)andIRH
(1)and(notIRH(0)));
--00**010*0110
change_c<=(notIRH(3))and(notIRH
(2));--00**
c_z_j_flag<=(zj_instructand(notz))or(cj_instructand(notc));
DRWr_proc:
process(IRH)--将结果写入寄存器
begin
ifIRH(3)='0'then--算术逻辑指令
DRWr<='1';
elsifIRH
(2)='1'andIRH
(1)='0'then--MVRDDR,DATA;LDRDR,SR110*
DRWr<='1';
else
DRWr<='0';
endif;
endprocess;
M_instruct:
process(IRH)--存储器控制命令产生函数
begin
caseIRH(3downto0)is
when"1000"|"1100"=>--指令jmpaddr;mvrddr,data产生下控制命令结果
Mem_Write<='0';
DW_intruct<='1';
when"1110"=>--指令strsr,dr产生如下控制命令结果
Mem_Write<='1';
DW_intruct<='0';
whenothers=>
Mem_Write<='0';
DW_intruct<='0';
endcase;
endprocess;
ALUOP_CODE_PROC:
PROCESS(IRH)--ALU8种运算操作3位编码的产生
begin
ifIRH(3)='0'then
op_code<=IRH(2downto0);
else
op_code<="111";
endif;
endprocess;
Jinstruct_PROC:
process(IRH)--跳转指令
begin
caseIRH(3downto0)is
when"1000"=>--jmpadr--无条件跳转
zj_instruct<='0';
cj_instruct<='0';
lj_instruct<='1';
when"1001"=>--jncaddr--CF不为0时跳转?
zj_instruct<='0';
cj_instruct<='1';
lj_instruct<='0';
when"1010"=>--jnzaddr--ZF不为0时跳转
zj_instruct<='1';
cj_instruct<='0';
lj_instruct<='0';
whenothers=>--其他情况全为0
zj_instruct<='0';
cj_instruct<='0';
lj_instruct<='0';
endcase;
endprocess;
endbehav;
七、实验结果以及相关分析
表1.指令译码器实验(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
001
0
0
1
0
0
1
1
0
SUBDR,SR
0010
010
0
0
1
0
0
1
1
0
DECDR
0011
011
0
0
1
0
0
1
1
0
ANDDR,SR
0100
100
0
0
1
0
0
1
0
0
ORDR,SR
0101
101
0
0
1
0
0
1
0
0
NOTDR
0110
110
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
1011
111
0
0
0
0
0
0
0
0
LDRDR,SR
1100
111
0
0
1
0
1
0
0
1
STRSR,DR
1101
111
0
0
1
0
0
0
0
1
对应的仿真波形图如下:
表1.指令译码器实验(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
ADDDR,SR
0000
011
0
0
1
0
0
0
0
0
INCDR
0001
011
0
0
1
0
0
0
0
1
SUBDR,SR
0010
011
0
0
1
0
0
0
1
0
DECDR
0011
011
0
0
1
0
0
0
1
1
ANDDR,SR
0100
001
0
0
1
0
0
1
0
0
ORDR,SR
0101
001
0
0
1
0
0
1
1
0
NOTDR
0110
001
0
0
1
0
0
1
1
1
MOVDR,SR
0111
000
0
0
1
0
0
1
1
1
JMPADR
1000
000
1
0
0
1
0
1
1
1
JNCADR
1001
000
0
0
0
0
0
1
1
1
JNZADR
1010
000
0
0
0
0
0
1
1
1
MVRDDR,DATA
1011
000
0
0
0
0
0
1
1
1
LDRDR,SR
1100
100
1
0
1
0
0
1
1
1
STRSR,DR
1101
100
0
0
1
0
0
1
1
1
对应的仿真波形图如下:
八、实验小结
由于对于指令译码方面的内容理解不够透彻,所以在进行实验的时候感觉比较费力。
设计指令系统时首要考虑的是指令要满足功能上的需求。
根据需求分析,设计最基本的指令。
在实验过程中,遇到一个很大的困难在于,由于某一指令结果的产生,会影响诸多标志位的变化,这种变化相互之间相互关联。
思考不够缜密,运用不够熟练所以频频出错。
对于这个实验来说,在实验前先完成设计文档非常关键。
在文档中理清思路后,之后的实验设计就顺畅多了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 实验 报告