您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 计算机组成原理实验报告--指令译码器
1、河北大学计算机组成原理实验报告实验项目指令译码器成绩一、实验目的:(1)理解指令译码器的作用和重要性。(2)学习设计指令译码器。二、实验原理:指令译码器是计算机控制器中最重要的部分。所谓组合逻辑控制器就是指指令译码电路是由组合逻辑实现的。组合逻辑控制器又称硬连线控制器,是设计计算机的一种方法。这种控制器中的控制信号直接由各种类型的逻辑门和触发器等构成。这样,一旦控制部件构成后,除非重新设计和物理上对它重新连线,否则要想增加新的功能是不可能的。结构上这种缺陷使得硬连线控制器的设计和调试变得非常复杂而且代价很大。所以,硬连线控制器曾一度被微程序控制器所取代。但是随着新一代及其及VLSI技术的发展,这种控制器又得到了广泛重视,如RISC机广泛使用这种控制器。图6-42是组合逻辑控制器的方框图。逻辑网络的输入信号来源有3个:①指令操作码译码器的输出In;②来自时序发生器的节拍电位信号Tk;③来自执行部件的反馈信号Bj。逻辑网络的输出信号就是微操作控制信号,用来对执行部件进行控制。图6-42组合逻辑控制器的结构方框图组合逻辑控制器的基本原理可描述位:某一微操作控制信号Cm是指令操作码译码器的输。
2、出In、时序信号(节拍电位信号Tk)和状态条件信号Bj的逻辑函数。即Cm=f(In,Tk,Bj)用这种方法设计控制器,需要根据每条指令的要求,让节拍电位和时序脉冲有步骤地去控制机器的各有关部分,一步一步地执行指令所规定的微操作,从而在一个指令周期内完成一条指令所规定的全部操作。三、实验步骤:(1)将试验台设置成FPGA-CPU独立调试模式,REGSEL=0、CLKSEL=1、FDSEL=0。使用试验台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开。(2)将设计在QuartusII下输入,变异后下载到TEC-CA上的FPGA中。(3)拨动试验台上的开关SD5~SD0,改变IR[15..12]、进位标志C和结果为0标志Z,观察指示灯R10~R0显示的控制信号,并填写表6-28。四、实验现象及分析:模k计数器I/k译码器计数启停复位时钟组合逻辑网络T1T2…Tk操作码地址码指令译码器I1I2…InC1C2…Cm执行部件的反馈信号B1B2…Bj实验结果如表6-28所示:表6-28指令译码器实验(C=0且Z=0)指令IR[15..12]OP[2..0]c_z_j_flaglj。
3、_instructDRWrMem_WriteDW_instructChange_zchange_csel_memdataADDDR,SR000000000100110INCDR000100100100110SUBDR,SR001001000100110DECDR001101100100110ANDDR,SR010010000100100ORDR,SR010110100100100NOTDR011011000100100MOVDR,SR011111100100000JMPADR100011101001000JNCADR100111110000000JNZADR101011110000000MVRDDR,DATA110011100101001LDRDR,SR110111100100001STRSR,DR111011100010000C=0且Z=1JNCADR100111110000000JNZADR101011100000000C=1且Z=0JNCADR100111100000000JNZADR101011110000000C=0且Z=0JNCADR100111100000000JNZAD。
4、R101011100000000由上表可知,C和Z只影响与标志位有关的指令的结果。其中指令JNCADR和JNZADR有条件转移,所以当C和Z的取值变化时,会影响实验结果。对于其他指令,C和Z的取值发生变化时结果不变。对于JNCADR指令,其功能是:如果C=0,则PC←ADR;如果C=1,则PC←PC+1。当C=0时,c_z_j_flag=1,表示需要条件转移;当C=1时,转向下一条指令,c_z_j_flag=0。对于指令JNZADR,其功能是:如果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取何值,实验结果不变。指令“ADDDR,SR”“INCDR”“SUBDE,SR”“DECDR”结果一致,因为它们都是算术运算,都可能影响进位标志C和结果为0标志Z,只是它们的控制运算的编码OP[2..0]不同。指令“ADDDR,SR”“ORDR,SR”“ORDR”除表示运算编码不同外,其他结果相同,因为它们都是逻辑运算,不影响进位标志C,只影响结果为0标志Z。
5、。指令“MOVDR,SR”,功能是DR←SR,不影响标志位,但需要把执行结果写入目的寄存器,故DRWr=1。指令“JMPADR”,功能是PC←ADR,是双字节指令,并且需要写入存储器,故lj_instruct=1,DW_instruct=1。指令“MVRDDR,DATA”,功能是DR←DATA,PC=PC+2,是双字节指令,并且写入目的寄存器的值来自读寄存器,故DW_instruct=1,DRWr=1,sel_memdate=1。指令“LDRDR,SR”,功能是DR←[SR],PC=PC+1,写入寄存器的值来自读寄存器,故,DRWr=1,sel_memdate=1。指令“STRSR,DR”,功能是[DR]←SR,PC=PC+1,有存储器写操作,故Mem_Write=1。五、实验过程中遇到问题及解决方法:双字指令:指令字长等于两个机器字长度的指令。操作码:指令操作码IR[15..12]六、实验源码:--实验6.12——实验CPU:指令译码器libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.。
6、std_logic_unsigned.all;--实体的定义部分entityinstruction_decoderisport(IRH:instd_logic_vector(3downto0);--指令操作码IR[15..12]c,z:instd_logic;--c表示进位标志,z表示结果为0标志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表示本条指令可能改变Z标志change_c:outstd_logic;--为1表示本条指令可能改变C标志sel_mem。
7、data:outstd_logic--为1时存储器的读出数据作为写入DR的数据);endinstruction_decoder;architecturebehavofinstruction_decoderissignalzj_instruct,cj_instruct:std_logic;beginsel_memdata=IRH(3)andIRH(2)and(notIRH(1));--110..开头操作码的指令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)));--10..010..0110开头操作码的指令改变z标志change_c=(notIRH(3))and(notIRH(2));--00..开头操作码的指令改变c标志c_z_j_flag=(zj_instructand(notz))or(cj_instructand(notc));--条件转移DRWr_proc:process(IRH)begi。
8、nifIRH(3)='0'then--算术逻辑指令,000,001,010,011,DRWr为1,将结果存入目的寄存器DRWr='1';elsifIRH(2)='1'andIRH(1)='0'then--MVRDDR,DATA;LDRDR,SRDRWr='1';--110,111,DRWr为1,将结果存入目的寄存器elseDRWr='0';endif;endprocess;M_instruct:process(IRH)begincaseIRH(3downto0)iswhen1000|1100=--jmpaddr;mvrddr,dataMem_Write='0';DW_intruct='1';when1110=--strsr,drMem_Write='1';DW_intruct='0';whenothers=Mem_Write='0';DW_intruct='0';endcase;endprocess;ALUOP_CODE_PROC:PROCESS(IRH)—算术逻辑单元beginifIRH(3)='0'then--000,001,010,011op_code=IRH(2downto0)。
9、;elseop_code=111;endif;endprocess;Jinstruct_PROC:process(IRH)begincaseIRH(3downto0)iswhen1000=--jmpadr功能:PC-ADR无条件转移zj_instruct='0';cj_instruct='0';lj_instruct='1';when1001=--jncaddr条件转移zj_instruct='0';cj_instruct='1';lj_instruct='0';when1010=--jnzaddrzj_instruct='1';cj_instruct='0';lj_instruct='0';whenothers=zj_instruct='0';cj_instruct='0';lj_instruct='0';endcase;endprocess;endbehav;。
本文标题:计算机组成原理实验报告--指令译码器
链接地址:https://www.777doc.com/doc-5724281 .html