河北大学计算机组成原理实验报告实验项目指令译码器成绩一、实验目的:(1)理解指令译码器的作用和重要性。
(2)学习设计指令译码器。
二、实验原理:指令译码器是计算机控制器中最重要的部分。
所谓组合逻辑控制器就是指指令译码电路是由组合逻辑实现的。
组合逻辑控制器又称硬连线控制器,是设计计算机的一种方法。
这种控制器中的控制信号直接由各种类型的逻辑门和触发器等构成。
这样,一旦控制部件构成后,除非重新设计和物理上对它重新连线,否则要想增加新的功能是不可能的。
结构上这种缺陷使得硬连线控制器的设计和调试变得非常复杂而且代价很大。
所以,硬连线控制器曾一度被微程序控制器所取代。
但是随着新一代及其及VLSI技术的发展,这种控制器又得到了广泛重视,如RISC机广泛使用这种控制器。
图6-42是组合逻辑控制器的方框图。
逻辑网络的输入信号来源有3个:①指令操作码译码器的输出In ;②来自时序发生器的节拍电位信号Tk;③来自执行部件的反馈信号Bj。
逻辑网络的输出信号就是微操作控制信号,用来对执行部件进行控制。
图6-42 组合逻辑控制器的结构方框图组合逻辑控制器的基本原理可描述位:某一微操作控制信号C m 是指令操作码译码器的输出I n 、时序信号(节拍电位信号T k )和状态条件信号B j 的逻辑函数。
即C m =f(I n ,T k ,B j )用这种方法设计控制器,需要根据每条指令的要求,让节拍电位和时序脉冲有步骤地去控制机器的各有关部分,一步一步地执行指令所规定的微操作,从而在一个指令周期内完成一条指令所规定的全部操作。
三、实验步骤:(1)将试验台设置成FPGA-CPU 独立调试模式,REGSEL=0、CLKSEL=1、FDSEL=0。
使用试验台上的单脉冲,即STEP_CLK 短路子短接,短路子RUN_CLK 断开。
(2)将设计在QuartusII 下输入,变异后下载到TEC-CA 上的FPGA 中。
(3)拨动试验台上的开关SD 5~SD 0,改变IR[15..12]、进位标志C 和结果为0标志Z ,观察指示灯R 10~R 0显示的控制信号,并填写表6-28。
四、实验现象及分析:实验结果如表6-28所示:表6-28 指令译码器实验(C=0且Z=0)由上表可知,C和Z只影响与标志位有关的指令的结果。
其中指令JNC ADR和JNZ ADR有条件转移,所以当C和Z的取值变化时,会影响实验结果。
对于其他指令,C和Z的取值发生变化时结果不变。
对于JNC ADR指令,其功能是:如果C=0,则PC←ADR;如果C=1,则PC←PC+1。
当C=0时,c_z_j_flag=1,表示需要条件转移;当C=1时,转向下一条指令,c_z_j_flag=0。
对于指令JNZ ADR,其功能是:如果Z=0,则PC←ADR;如果Z=1,则PC←PC+1。
当Z=0时,c_z_j_flag=1,表示需要条件转移;当Z=1时,转向下一条指令,c_z_j_flag=0。
对于其他指令,不论C和Z取何值,实验结果不变。
指令“ADD DR,SR”“INC DR”“SUB DE,SR”“DEC DR”结果一致,因为它们都是算术运算,都可能影响进位标志C和结果为0标志Z,只是它们的控制运算的编码OP[2..0]不同。
指令“ADD DR,SR”“OR DR,SR”“OR DR”除表示运算编码不同外,其他结果相同,因为它们都是逻辑运算,不影响进位标志C,只影响结果为0标志Z。
指令“MOV DR,SR”,功能是DR←SR,不影响标志位,但需要把执行结果写入目的寄存器,故DRWr=1。
指令“JMP ADR”,功能是PC←ADR,是双字节指令,并且需要写入存储器,故lj_instruct=1,DW_instruct=1。
指令“MVRD DR,DATA”,功能是DR←DATA,PC=PC+2,是双字节指令,并且写入目的寄存器的值来自读寄存器,故DW_instruct=1,DRWr=1,sel_memdate=1。
指令“LDR DR,SR”,功能是DR←[SR],PC=PC+1,写入寄存器的值来自读寄存器,故,DRWr=1,sel_memdate=1。
指令“STR SR,DR”,功能是[DR] ←SR,PC=PC+1,有存储器写操作,故Mem_Write=1。
五、实验过程中遇到问题及解决方法:双字指令:指令字长等于两个机器字长度的指令。
操作码:指令操作码IR[15..12]六、实验源码:--实验6.12——实验CPU:指令译码器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;--实体的定义部分entity instruction_decoder isport (IRH: in std_logic_vector(3 downto 0);--指令操作码IR[15..12]c,z: in std_logic;--c表示进位标志,z表示结果为0标志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表示本条指令可能改变Z标志change_c: out std_logic;--为1表示本条指令可能改变C标志sel_memdata: out std_logic --为1时存储器的读出数据作为写入DR的数据);end instruction_decoder;architecture behav of instruction_decoder issignal zj_instruct, cj_instruct: std_logic;beginsel_memdata <= IRH(3) and IRH(2) and (not IRH(1));--110..开头操作码的指令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)));--10.. 010.. 0110开头操作码的指令改变z标志change_c <= (not IRH(3)) and (not IRH(2)); --00.. 开头操作码的指令改变c标志c_z_j_flag <= (zj_instruct and (not z)) or (cj_instruct and (not c));--条件转移DRWr_proc: process(IRH)beginif IRH(3) = '0' then --算术逻辑指令,000,001,010,011,DRWr为1,将结果存入目的寄存器DRWr <= '1';elsif IRH(2) = '1' and IRH(1) = '0' then --MVRD DR,DATA;LDR DR,SR DRWr <= '1';--110,111,DRWr为1,将结果存入目的寄存器elseDRWr <= '0';end if;end process;M_instruct:process(IRH)begincase IRH(3 downto 0) iswhen "1000" | "1100" => --jmp addr;mvrd dr,dataMem_Write <= '0';DW_intruct <= '1';when "1110" => -- str sr,drMem_Write <= '1';DW_intruct <= '0';when others =>Mem_Write <= '0';DW_intruct <= '0';end case;end process;ALUOP_CODE_PROC: PROCESS(IRH)—算术逻辑单元beginif IRH(3) = '0' then --000,001,010,011op_code <= IRH(2 downto 0);elseop_code <= "111";end if;end process;Jinstruct_PROC: process(IRH)begincase IRH(3 downto 0) iswhen "1000" => --jmp adr 功能:PC<-ADR 无条件转移zj_instruct <= '0';cj_instruct <= '0';lj_instruct <= '1';when "1001" => --jnc addr 条件转移zj_instruct <= '0';cj_instruct <= '1';lj_instruct <= '0';when "1010" => --jnz addrzj_instruct <= '1';cj_instruct <= '0';lj_instruct <= '0';when others =>zj_instruct <= '0';cj_instruct <= '0';lj_instruct <= '0';end case;end process;end behav;。