好文档 - 专业文书写作范文服务资料分享网站

组成原理位模型机的设计

天下 分享 时间: 加入收藏 我要投稿 点赞

空(110:nop)。

(4)微命令的设置(各标识的含义)

6. 指令流程图

指令的流程图如图 3所示,共有 8 条指令,每条指令都要经过取指令、分析指令和执行指令3个步骤。

在取指令阶段,8 条指令是一样的,首先程序计数器PC的内容通过总线送入地址寄存器MAR,存储信息,PC+1传送给PC,把读出的内容传送给指令寄存器IR 。再接下来的操作中,根据不同的指令,执行顺序也不同。 stM—>IR,PC+1—>PC add sub and jmp shl nop PC—>MAR 开始 PC→MAR PC→MAR PC→MAR PC→MAR M→PC PC→MAR 无 PC+1→PC PC+1→PC PC+1→PC PC+1→PC PC+1→PC R→ACC M→R→D M→D R→D M→D R→D M→D R→ACC M→ACC ACC ACC+D→ACC ACC-D→ACC ACC AND ACC左移→ACC D→ACC 结束 图3 指令流程图

7.微指令格式(微程序控制器)设计 微指令格式设计如表1:

控 制 信 号 ACC_bus load_ACC PC_bus load_IR load_MAR MDR_bus ALU_ACC INC_PC Addr_bus CS R_NW Reg_bus load_Reg ALU_ADD ALU_SUB ALU_AND ALU_SHL

用ACC的内容驱动总线 将总线上的数据载入ACC 用PC的内容驱动总线 将总线上的数据装载至IR 将总线上的数据装载至MAR 用MDR的内容驱动总线 用ALU的结果装载ACC PC+1并将结果存至PC中 用IR指令中的地址部分驱动总线 片选。用MAR的内容设置存储器地址 读取,不可写。当R_NW无效且CS有效时,MBR的内容存储于存储器中 用寄存器R的内容驱动总线 将总线上的数据装载至R 在ALU中执行逻辑加操作 在ALU中执行减操作 在ALU中执行与操作 在ALU中执行左移操作 表2 微指令格式 描 述 8. 微程序(微程序控制器)设计

根据微处理器的数据通路和指令系统,可得出微程序的流程图如图4所示。微程序的编码采用直接编码方法,每一个控制信号对应一位,共有17个控制信号,根据微指令格式把相关的控制信号整合到一起进行编码。

微程序流程图的下地址,可知共有25条微指令,表2给出了该模拟机微程序的编码。地址3的下地址,应该根据指令操作码来和寻址方式形成,所以将其下地址设为11111,表示如果下地址为11111时,且寻址方式标志位为0(即立即寻址),则下地址应为01 & 指令的操作码,若寻址方式

标志位为1(即寄存器寻址),则下地址应为10 & 指令的操作码。 8 sta PC_bus load_MAR INC_PC 0 CS R_NW 1 MDR_bus load_IR 2 addr_bus load_MAR 3 op 9 add 10 sub 11 an12 jmp 13 sh nop 18 5 15 CS R_NW 7 CS R_NW 16 MDR_bus ALU_ACC ALU_ADD IR_out(20 CS R_NW 21 MDR_bus ALU_ACC ALU_AND 22 CS R_NW 25 l 4 CS R_NW 6 MDR_bus load_acc IR_out( 0) 17 Reg_bus ALU_ACC ALU_ADD CS R_NW 19 MDR_bus ALU_ACC ALU_SUB ALU_ACC ALU_SRL MDR_bus load_re g

z_fla23 MDR_bus Load_PC 24 无 图4 微程序流程图

该模拟机微程序的编码如下

0=> 000000001

1=> 00000000000000 2=> 000000011 3=> 000000011

4=> 00000000000000 5=> 00000000000001 6=> 000000000 7=> 000000000

8=> 0000000000000000011011 9=> 0000000000000000011100 10=> 0000000000000000010010 11=> 0000000000000000010100 12=> 0000000000000000010110 13=> 0000000000000000011001 14=> 00000000000000 15=> 00000000000001 16=> 000000000 17=> 001000000

18=> 00000000000001 19=> 000000000

20=> 00000000000001 21=> 000000000

22=> 00000000000001 23=> 000000000

24=> 0000000000000000000000

25=> 000000000

9. VHDL实现 头文件如下: LIBRARY IEEE; USE cpu_defs IS

TYPE opcode IS (sta, add, sub, and1, jmp, shl, nop); CONSTANT word_w: NATURAL :=8; CONSTANT op_w: NATURAL :=3;

CONSTANT rfill: STD_LOGIC_VECTOR(op_w-1 downto 0):=(others =>'0'); --FUNCTIOn slv2op(slv:IN STD_LOGIC_VECTOR) RETURN opcode; FUNCTION op2slv(op:in opcode) RETURN STD_LOGIC_VECTOR; END PACKAGE cpu_defs;

PACKAGE BODY cpu_defs IS

TYPE optable IS ARRAY(opcode) OF STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);

CONSTANT trans_table:optable :=(\ FUNCTION op2slv(op:IN opcode) RETURN STD_LOGIC_VECTOR IS BEGIN

RETURN trans_table(op); END FUNCTION op2slv;

--function slv2op(slv:in std_logic_vector) return opcode is -- variable transop:opcode; -- begin

-- for i in opcode loop

-- if slv=trans_table(i) then -- transop:=i; -- end if; -- end loop;

-- return transop; --end function slv2op; END PACKAGE BODY cpu_defs; 源程序如下:

LIBRARY IEEE; USE CPU IS

PORT( clock : IN STD_LOGIC; reset : IN STD_LOGIC;

mode : IN STD_LOGIC_VECTOR(2 DOWNTO 0); mem_addr : IN UNSIGNED(word_w-op_w-1 DOWNTO 0); output : OUT STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); data_r_out : OUT STD_LOGIC_VECTOR(21 DOWNTO 0); op_out : OUT STD_LOGIC_VECTOR(op_w-1 DOWNTO 0); add_r_out : OUT UNSIGNED(4 DOWNTO 0) ); END ENTITY;

ARCHITECTURE rtl OF CPU IS

TYPE mem_array IS ARRAY (0 TO 2**(word_w-op_w)-1) OF STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);

SIGNAL mem : mem_array;

组成原理位模型机的设计

空(110:nop)。(4)微命令的设置(各标识的含义)6.指令流程图指令的流程图如图3所示,共有8条指令,每条指令都要经过取指令、分析指令和执行指令3个步骤。在取指令阶段,8条指令是一样的,首先程序计数器PC的内容通过总线送入地址寄存器MAR,存储信息,PC+1传送给PC,把读出的内容传送给指令寄
推荐度:
点击下载文档文档为doc格式
13vdk9yhyg01k8300wxv0h1ll01f5u01c34
领取福利

微信扫码领取福利

微信扫码分享