微程序控制器实验报告_第1页
微程序控制器实验报告_第2页
微程序控制器实验报告_第3页
微程序控制器实验报告_第4页
微程序控制器实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 一、实验目的1、通过实验,进一步理解微程序控制器的组成结构。理解微程序控制器的控制原理2、加深理解微程序控制器的工作原理。掌握指令流程与功能3、理解掌握微程序控制器的设计思路与方法二、实验内容与步骤 1、微程序控制器的组成原理 控制存储器:实现整个指令系统的所有微程序,一般指令系统是规定的由高速半导体存储器构成,容量视机器指令系统而定,取决于微程序的个数,其长度就是微指令字的长度。 微指令寄存器:存放从控存读出的当前微指令。微操作控制字段将操作控制信号送到控制信号线上,微地址字段指出下一条微地址的形成。 微地址寄存器:存放将要访问的下一条微指令地址 地址转移逻辑:形成将要执行的微指令地址,形

2、成方式:取指令公操作所对应的微程序一般从控存的0地址开始,所以微程序的人口地址0是由硬件控制的。当出现分支时,通过判别测试字段、微地址字段、和执行部件的反馈信息形成后即微地址。Cpu设计步骤:1. 拟定指令系统2. 确定总体结构(数据通路)3. 安排时序4. 拟定指令流程。根据指令系统,写出对应所有机器指令的全部微操作机器节拍安排,然后列出操作时间表5. 确定微指令的控制方式、下地址形成方式、微指令格式及微指令字长,编写全部的微指令的代码,最后将编写的微指令放入控制存储器中。微程序控制器的设计步骤(1)设计微程序 确定微程序流程图,也就是控制算法流程图。(2)确定微指令格式微指令格式中的操作控

3、制字段取决于执行部件的子系统需要多少微指令。假定采用直接控制方式,执行部件需要10个微命令,则操作控制字段需要10位。 测试判别字段取决于微程序流程图中有多少处分支转移。假定有3处分支,则测试判别字段需要3位。下址字段取决于微程序流程图的规模。假定微程序共用50条微指令,则下址字段至少需要6位。这是因为ROM地址译码时,26=64,6位地址可容纳64条微指令。(3)将微程序编译成二进制代码(4)微程序写入控制存储器(5)设计硬件电路 三、实验现象-CPU 头文件 cpu_defs LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE cpu_defs

4、 IS -定义程序包,包头,包体TYPE opcode IS (load, store, add, sub, bne);-这个语句适合于定义一些用std_logic 等不方便定义的类型,综合器自动实现枚举类型元素的编码,一般将第一个枚举量(最左边)编码为0CONSTANT 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 opco

5、de;FUNCTION op2slv(op:in opcode) RETURN STD_LOGIC_VECTOR;END PACKAGE cpu_defs;PACKAGE BODY cpu_defs ISTYPE optable IS ARRAY(opcode) OF STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);-数组有5个元素,其他均0CONSTANT trans_table:optable :=(000, 001, 010, 011, 100);FUNCTION op2slv(op:IN opcode) RETURN STD_LOGIC_VECTOR ISBEGIN

6、RETURN trans_table(op);END FUNCTION op2slv;END PACKAGE BODY cpu_defs;-实验 7-8 微程序控制器实验 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL,IEEE.NUMERIC_STD.ALL;USE WORK.CPU_DEFS.ALL;-使用自己定义的程序包ENTITY CPU ISPORT( clock : IN STD_LOGIC;-时钟 reset : IN STD_LOGIC;-复位 mode : IN STD_LOGIC_VECTOR(2 DOWNTO 0); -查看用 mem_a

7、ddr : INUNSIGNED(word_w-op_w-1 DOWNTO 0);-地址 output : OUT STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); data_r_out : OUT STD_LOGIC_VECTOR(19 DOWNTO 0);-微指令Rop_out : OUT STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);-操作码add_r_out : OUT UNSIGNED(4 DOWNTO 0) -微地址R ); END ENTITY;ARCHITECTURE rtl OF CPU ISTYPE mem_array IS A

8、RRAY (0 TO 2*(word_w-op_w)-1) OF STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);-定义RAMSIGNAL mem : mem_array;CONSTANT prog : mem_array:=(0= op2slv(load) & STD_LOGIC_VECTOR(TO_UNSIGNED(4,word_w-op_w),1= op2slv(add) & STD_LOGIC_VECTOR(TO_UNSIGNED(5,word_w-op_w),2= op2slv(store) & STD_LOGIC_VECTOR(TO_UNSIGNED(6,w

9、ord_w-op_w),3= op2slv(bne) & STD_LOGIC_VECTOR(TO_UNSIGNED(7,word_w-op_w),-TO_UNSIGNED转换函数将4转换为5位“00100”4= STD_LOGIC_VECTOR(TO_UNSIGNED(2,word_w),5= STD_LOGIC_VECTOR(TO_UNSIGNED(3,word_w),OTHERS = (OTHERS =0);TYPE microcode_array IS ARRAY (0 TO 14) OF STD_LOGIC_VECTOR(19 DOWNTO 0);CONSTANT code : mic

10、rocode_array:=(-控制存储器0= ,1= ,2= ,3= ,4= ,5= ,6= ,7= ,8= ,9= ,10= ,11= ,12= , 13= , 14= );SIGNAL count : UNSIGNED(word_w-op_w-1 DOWNTO 0);SIGNAL op : STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);SIGNAL z_flag : STD_LOGIC; SIGNAL mdr_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); SIGNAL mar_out : UNSIGNED(word_w-op_

11、w-1 DOWNTO 0); SIGNAL IR_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); SIGNAL acc_out : UNSIGNED(word_w-1 DOWNTO 0); SIGNAL sysbus_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); EGINPROCESS(reset,clock)VARIABLE instr_reg : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE acc : UNSIGNED(word_w-1 DOWNTO 0);CONST

12、ANT zero : UNSIGNED(word_w-1 DOWNTO 0):=(OTHERS =0)VARIABLE mdr : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE mar : UNSIGNED(word_w-op_w-1 DOWNTO 0);VARIABLE sysbus : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE microcode : microcode_array;VARIABLE add_r : UNSIGNED(4 DOWNTO 0); VARIABLE data_r : ST

13、D_LOGIC_VECTOR(19 DOWNTO 0);VARIABLE temp : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINIF reset=0 THENadd_r:=(OTHERS =0); count 0);instr_reg := (OTHERS =0);acc := (OTHERS =0);mdr := (OTHERS =0);mar := (OTHERS =0);z_flag =0;mem 0);ELSIF RISING_EDGE(clock) THEN-microprogram controllerdata_r := code(TO_INTEGER(

14、add_r);IF data_r(4 DOWNTO 0)=01111 THEN -判断下地址 temp:=01 & op(2 DOWNTO 0);add_r := UNSIGNED(temp);ELSIF data_r(4 DOWNTO 0)=10000 THENIF z_flag=1 THENadd_r:=01110;ELSEadd_r :=01101;END IF;ELSEadd_r := UNSIGNED(data_r(4 DOWNTO 0);END IF;data_r_out =data_r;add_r_out = add_r;-PCIF data_r(16)=1 THEN -PC_b

15、us=1sysbus := rfill & STD_LOGIC_VECTOR(count);END IF;IF data_r(19)=1 THEN -load_PC=1count = UNSIGNED(mdr(word_w-op_w-1 DOWNTO 0);ELSIF data_r(10)=1 THEN -INC_PC=1count = count+1;ELSE count = count;END IF;-IRIF data_r(15)=1 THEN -load_IRinstr_reg := mdr;END IF;IF data_r(9)=1 THEN -Addr_bus=1sysbus :=

16、 rfill & instr_reg(word_w-op_w-1 DOWNTO 0);END IF;op = instr_reg(word_w-1 DOWNTO word_w-op_w);IR_out = instr_reg;op_out =op;-ALUIF data_r(17)=1 THEN -load_ACC=1acc:=UNSIGNED(mdr);END IF;IF data_r(11)=1 THEN -ALU_ACC=1IF data_r(6)=1 THEN -ALU_add=1acc := acc + UNSIGNED(mdr);ELSIF data_r(5)=1 THEN -AL

17、U_sub=1 acc := acc - UNSIGNED(mdr);END IF;END IF;IF data_r(18)=1 THEN -ACC_bus=1sysbus := STD_LOGIC_VECTOR(acc);END IF;IF acc=zero THENz_flag =1;ELSEz_flag =0;END IF;acc_out= acc;-RAMIF data_r(14)=1 THEN -load_MAR=1mar := UNSIGNED(sysbus(word_w-op_w-1 DOWNTO 0);ELSIF data_r(12)=1 THEN -load_MDR=1mdr

18、 := sysbus;ELSIF data_r(8)=1 THEN -CS=1IF data_r(7)=1 THEN -R_NW=1mdr := mem(TO_INTEGER(mar);ELSEmem(TO_INTEGER(mar)=mdr;END IF;END IF;IF data_r(13)=1 THEN -MDR_bus=1sysbus:=mdr;END IF;mdr_out = mdr;mar_out = mar;END IF;sysbus_out sysbus -mode=1 - PC-mode=2 - result of ALU-mode=3 - IR-mode=4 - MAR-m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论