CPU指令译码器实验报告

时间:2024.3.31

数学与计算机学院  计算机组成原理  实验报告

年级 *****  学号  **********  姓名 *****  成绩     

专业网络工程   实验地点  主楼528   指导教师   何欣枫 

实验项目  CPU指令译码器    实验日期  20##-12-5        

一、实验目的

(1)理解指令译码器的作用和重要性。

(2)学习设计指令译码器。

二、实验原理

指令译码器是计算机控制器中最重要的部分。所谓组合逻辑控制器就是指指令译码电路是由组合逻辑实现的。

组合逻辑控制器又称硬连线控制器,是设计计算机的一种方法。这种控制器中的控制信号直接由各种类型的逻辑门和触发器等构成。这样,一旦控制部件构成后,除非重新设计和物理上对它重新连线,否则要想增加新的功能是不可能的。结构上这种缺陷使得硬连线控制器的设计和调试变得非常复杂而且代价很大。所以,硬连线控制器曾一度被微程序控制器所取代。但是随着新一代及其及VLSI技术的发展,这种控制器又得到了广泛重视,如RISC机广泛使用这种控制器。

图6-42是组合逻辑控制器的方框图。逻辑网络的输入信号来源有3个:①指令操作码译码器的输出In;②来自时序发生器的节拍电位信号Tk;③来自执行部件的反馈信号Bj。逻辑网络的输出信号就是微操作控制信号,用来对执行部件进行控制。

图6-42 组合逻辑控制器的结构方框图

组合逻辑控制器的基本原理可描述位:某一微操作控制信号Cm是指令操作码译码器的输出In、时序信号(节拍电位信号Tk)和状态条件信号Bj的逻辑函数。即

Cm=f(In,Tk,Bj)

用这种方法设计控制器,需要根据每条指令的要求,让节拍电位和时序脉冲有步骤地去控制机器的各有关部分,一步一步地执行指令所规定的微操作,从而在一个指令周期内完成一条指令所规定的全部操作。

一般来说,组合逻辑控制器的设计步骤如下。

(1)绘制指令流程图

为了确定指令执行过程所需的基本步骤,通常是以指令为线索,按指令类型分类,将每条指令归纳成基于微操作,然后根据操作的先后顺序画出流程图。

(2)安排指令操作时间表

指令流程图的进一步具体化,把每一条指令的微操作序列具体分配到各个机器周期的各个时序节拍的信号上。要求尽量多的安排公共操作,避免出现互斥。

(3)安排为命令表

依微命令为依据,表示在哪个机器周期的哪个节拍有哪些指令要求这些微命令。

(4)进行微操作逻辑综合

根据微操作时间表,将执行某一微操作的所有条件(哪条指令、哪个机器周期、哪个节拍脉冲等)都考虑在内,加以分类组合,列出各微操作产生的逻辑表达式,并加以简化。

(5)实现电路

根据上面所得逻辑表达式,用逻辑门实现电路的组合或大规模集成电路来实现。

三、实验要求

1、实验设计目标

本实验要求根据第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_instruct   为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       指示灯R2、R1、R0

c_z_j_flag    指示灯R3

lj_instruct   指示灯R4

DRWr          指示灯R5

Mem_Write    指示灯R6

DW_instruct   指示灯R7

change_z      指示灯R8

change_c      指示灯R9

sel_memdata   指示灯R10

四、实验步骤

(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。

五、实验结果(程序)及分析

1、编写的VHDL代码及解释如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity decoder is

port   (IRH          :in std_logic_vector(3 downto 0);

        c          :in std_logic;

        z          :in std_logic;

        op_code       :out std_logic_vector(2 downto 0);

        c_z_j_flag :out std_logic;

        lj_instruct :out std_logic;

        DRWr       :buffer std_logic; 

        Mem_Write   :out std_logic;

        DW_intruct  :buffer std_logic;

        change_z    :out std_logic;

        change_c    :out std_logic;

        sel_memdata :out std_logic                

      );

end decoder; --以上是实体的定义部分。

architecture behav of 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)));

change_c <= (not IRH(3)) and (not IRH(2));

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

        DRWr <= '1';

    else

        DRWr <= '0';

    end if;

end process;

M_instruct:process(IRH)

begin

    case IRH(3 downto 0) is

        when "1000" | "1100" => --jmp addr;mvrd  dr,data

            Mem_Write <= '0';

            DW_intruct <= '1';

        when "1110" =>  -- str sr,dr

            Mem_Write <= '1';

            DW_intruct <= '0';

        when "1011" =>--|"1111"            

            Mem_Write <='1';

            DW_intruct<='1';

        when others =>

            Mem_Write <= '0';

            DW_intruct <= '0';

    end case;

end process;

ALUOP_CODE_PROC:  PROCESS(IRH)

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" => --jmp 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 addr

            zj_instruct <= '1';

            cj_instruct <= '0';

            lj_instruct <= '0';

        when "1011"=>                 

            zj_instruct<='1';

            cj_instruct<='1';

            lj_instruct<='0';

        when "1111"=>               

            zj_instruct<='0';

            cj_instruct<='0';

            lj_instruct<='0';

        when others =>

            zj_instruct <= '0';

            cj_instruct <= '0';

            lj_instruct <= '0';

    end case;

end process;

end behav;


2、实验结果如表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。


第二篇:指令译码器实验报告


计算机组成与系统结构

指令译码器试验报告

姓 名:

试验时间:20xx年5月

一、实验名称:指令译码器的设计

二、实验原理:一台计算机能执行的机器指令的集合称为该机器的指令集或指令系统,它是构成程序的基本元素,也是硬件设计的依据,它衡量极其硬件的功能,反映硬件对软件支持的程度。而指令译码器所起到的作用就是根据用户所选择的指令代码来执行相关操作,将二进制代码转换为机器所能识别的机器码,设计时设置了一个6位二进制代码的指令输入端,输出端有各种控制信号,寄存器写信号,跳转信号,存储器写信号等等。

三、试验目的:使用指令译码器,使得我们使用简单的二进制代码,经过指令译码器转换为机器代码,从而很容易的使计算机执行相关操作,是cpu不可或缺的部件。

四、 Verilog源代码:

module

zlymq(op,func,RegWr,Branch,Jump,ExtOp,AluSrc,ALUctr,MemWr,MemtoReg,RegDst); input [5:0] op,func;

output RegWr,Branch,Jump,ExtOp,AluSrc,MemWr,MemtoReg,RegDst;

output [2:0] ALUctr;

reg RegWr,Branch,Jump,ExtOp,AluSrc,MemWr,MemtoReg,RegDst;

reg [2:0] ALUctr;

always @(op)

case (op)

6'b000000:

begin

{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr}=7'b0010010; case (func)

6'b100000:ALUctr=3'b001;

6'b100010:ALUctr=3'b101;

6'b100011:ALUctr=3'b100;

6'b101010:ALUctr=3'b111;

6'b101011:ALUctr=3'b110;

endcase

end

6'b001101:

begin

{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr,ExtOp}=8'b00010100; ALUctr=3'b010;

end

6'b001001:

begin

{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr,ExtOp}=8'b00010101; ALUctr=3'b000;

end

6'b100011:

begin

{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr,ExtOp}=8'b00011101; ALUctr=3'b000;

end

6'b101011:

begin

{Branch,Jump,AluSrc,RegWr,MemWr,ExtOp}=6'b001011;

ALUctr=3'b000;

end

6'b000100:

begin

{Branch,Jump,AluSrc,RegWr,MemWr}=5'b10000;

ALUctr=3'b100;

end

6'b000010:{Branch,Jump,RegWr,MemWr}=4'b0100;

endcase

Endmodule

五、试验心得:本次实验通过对指令译码器的编程,使我更加深刻的了解了计算机内部执行

一个操作的顺序,首先,取指令部件取到用户所输入的指令代码,然后转交给指令译码器转换成为机器能够识别的机器码,再转交给指令执行部件去执行,指令译码器将复杂的机器码简化成为了简单的二进制代码,从而大大增加了cpu的可行性。

更多相关推荐:
译码器实验报告

课程编号深圳大学实验报告课程名称数字电路实验名称译码器学院信息工程学院指导教师刘静报告人李金梁组号03学号20xx130025实验地点N102实验时间20xx年10月29日提交时间

数字电路译码器实验报告

一实验目的与要求1了解和正确使用MSI组合逻辑部件2掌握一般组合逻辑电路的特点及分析设计方法3学会对所设计的电路进行静态功能测试的方法4观察组合逻辑电路的竞争冒险现象预习要求1复习组合逻辑电路的分析与设计方法2...

数字电子线路实验报告_译码器及其应用

数电实验报告实验三译码器及其应用一实验目的1掌握译码器的测试方法2了解中规模集成译码器的功能管脚分布掌握其逻辑功能3掌握用译码器构成组合电路的方法4学习译码器的扩展二实验仪器1数字逻辑电路实验板1块274HC1...

138译码器实验报告

138译码器实验报告一实验目的与要求1掌握74HC138译码器的工作原理熟悉74HC138译码器的具体运用连接方法了解74HC138是如何译码的2认真预习本节实验内容尝试自行编写程序填写实验报告二实验设备STA...

译码器实验报告

实验2译码器及其应用一实验目的1掌握中规模集成译码器的逻辑功能和使用方法2熟悉数码管的使用二实验原理译码器是一个多输入多输出的组合逻辑电路它的作用是把给定的代码进行翻译变成相应的状态使输出通道中相应的一路有信号...

译码器实验报告

深圳大学实验报告课程名称学院计算机与软件学院班级实验时间实验报告提交时间教务部制深圳大学学生实验报告用纸注1报告内的项目或内容设置可根据实际情况加以调整和补充2教师批改学生实验报告时间应在学生提交实验报告时间后...

译码器及其应用实验报告

实验二译码器及其使用一实验目的1234掌握译码器的测试方法了解中规模集成译码器的管脚分布掌握其逻辑功能掌握译码器构成组合电路的方法学习译码器的扩展二实验设备及器件1数字逻辑电路实验板1块274HCLS20四二输...

2对4译码器 VHDL实验报告

通信与信息工程学院20xx20xx学年第二学期软件设计实验报告模块名称专业学生班级学生学号学生姓名指导教师实验目的本软件设计的目的和任务1使学生全面了解如何应用该硬件描述语言进行高速集成电路设计2通过软件使用设...

实验报告模板:实验二7段数码显示译码器

EDA与数字系统设计实验报告实验二7段数码显示译码器实验目的1设计七段显示译码器并在实验板上验证2学习VerilogHDL文本文件进行逻辑设计输入3学习设计仿真工具的使用方法实验内容1实现BCD七段显示译码器的...

哈夫曼编码译码器实验报告

问题解析与解题方法问题分析:设计一个哈夫曼编码、译码系统。对一个ASCII编码的文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将编码文件译码还原为一个文本文件。(1)从文件中读入任意一篇英文短文(文件…

哈夫曼编码译码器实验报告

实验报告哈夫曼编码及译码班级软件工程一班学号2220xx1524姓名孙正涛1问题描述1设计一个利用哈夫曼算法的编码和译码系统重复地显示并处理以下项目直到选择退出为止1将权值数据存放在数据文件文件名为datatx...

深圳大学译码器实验报告

深圳大学实验报告课程名称学院信息工程学院实验时间实验地点实验报告提交时间教务处制注1报告内的项目或内容设置可根据实际情况加以调整和补充2教师批改学生实验报告时间应在学生提交实验报告时间后10日内

译码器实验报告(45篇)