计算机组成原理课内实验报告四.
- 格式:doc
- 大小:275.50 KB
- 文档页数:13
计算机组成与设计课内实验四 一、实验名称 指令译码器设计与调试 二、实验目的 ●理解指令译码器的作用和重要性。 ●学习设计指令译码器。 三、实验内容 ●实验设计目标 本实验要求根据第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表示本条指令是条“JMP ADR”指令。 ✓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。 六、设计思路与源代码 ●实验思路:
●源代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity instruction_decoder is port (IRH: in std_logic_vector(3 downto 0; c,z: in std_logic; op_code: out std_logic_vector(2 downto 0; --控制ALU进行8种运算操作的3位编码 c_z_j_flag: out std_logic; --为1表示需要条件转移 lj_instruct: out std_logic; --为1表示本条指令是条"JMP ADR"指令 DRWr: buffer std_logic; --为1时写DR寄存器 Mem_Write: out std_logic; --为1时进行存储器读 DW_intruct: buffer std_logic; --为1表示本条指令是双字指令change_z: out std_logic; --为1时改变ZF标志位
change_c: out std_logic; --为1时改变CF标志位 sel_memdata: out std_logic --为1时存储器的读出数据作为写入DR 的数据 ; end instruction_decoder; architecture behav of instruction_decoder is signal zj_instruct, cj_instruct: std_logic; begin sel_memdata<= IRH(3 and IRH(2 and (not IRH(1; change_z<= ((not IRH(3 and (not IRH(2 or ((not IRH(3 and IRH(2 and (not IRH(1 or ((not IRH(3 and IRH(2 and IRH(1 and (not IRH(0; --00** 010* 0110 change_c<= (not IRH(3 and (not IRH(2; --00** c_z_j_flag<= (zj_instruct and (not z or (cj_instruct and (not c; DRWr_proc: process(IRH --将结果写入寄存器 begin if IRH(3 = '0' then --算术逻辑指令 DRWr<= '1'; elsif IRH(2 = '1' and IRH(1 = '0' then --MVRD DR,DATA;LDR DR,SR 110* DRWr<= '1';
else DRWr<= '0'; end if; end process; M_instruct:process(IRH --存储器控制命令产生函数 begin case IRH(3 downto 0 is when "1000" | "1100" => --指令jmpaddr;mvrddr,data产生下控制命令结果Mem_Write<= '0';
DW_intruct<= '1'; when "1110" => -- 指令strsr,dr产生如下控制命令结果 Mem_Write<= '1'; DW_intruct<= '0'; when others => Mem_Write<= '0'; DW_intruct<= '0'; end case; end process; ALUOP_CODE_PROC: PROCESS(IRH --ALU 8种运算操作3位编码的产生begin
if IRH(3 = '0' then op_code<= IRH(2 downto 0; else op_code<= "111"; end if; end process; Jinstruct_PROC: process(IRH --跳转指令 begin case IRH(3 downto 0 is when "1000" => --jmpadr --无条件跳转 zj_instruct<= '0';