微程序控制器实验报告.docx
- 文档编号:30126196
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:10
- 大小:17.44KB
微程序控制器实验报告.docx
《微程序控制器实验报告.docx》由会员分享,可在线阅读,更多相关《微程序控制器实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
微程序控制器实验报告
一、实验目的
1、通过实验,进一步理解微程序控制器的组成结构。
理解微程序控制器的控制原理
2、加深理解微程序控制器的工作原理。
掌握指令流程与功能
3、理解掌握微程序控制器的设计思路与方法
二、实验内容与步骤
1、微程序控制器的组成原理
控制存储器:
实现整个指令系统的所有微程序,一般指令系统是规定的由高速半导体存储器构成,容量视机器指令系统而定,取决于微程序的个数,其长度就是微指令字的长度。
微指令寄存器:
存放从控存读出的当前微指令。
微操作控制字段将操作控制信号送到控制信号线上,微地址字段指出下一条微地址的形成。
微地址寄存器:
存放将要访问的下一条微指令地址
地址转移逻辑:
形成将要执行的微指令地址,形成方式:
取指令公操作所对应的微程序一般从控存的0地址开始,所以微程序的人口地址0是由硬件控制的。
当出现分支时,通过判别测试字段、微地址字段、和执行部件的反馈信息形成后即微地址。
Cpu设计步骤:
1.拟定指令系统
2.确定总体结构(数据通路)
3.安排时序
4.拟定指令流程。
根据指令系统,写出对应所有机器指令的全部微操作机器节拍安排,然后列出操作时间表
5.确定微指令的控制方式、下地址形成方式、微指令格式及微指令字长,编写全部的微指令的代码,最后将编写的微指令放入控制存储器中。
微程序控制器的设计步骤
(1)设计微程序
确定微程序流程图,也就是控制算法流程图。
(2)确定微指令格式
微指令格式中的操作控制字段取决于执行部件的子系统需要多少微指令。
假定采用直接控制方式,执行部件需要10个微命令,则操作控制字段需要10位。
?
?
?
测试判别字段取决于微程序流程图中有多少处分支转移。
假定有3处分支,则测试判别字段需要3位。
下址字段取决于微程序流程图的规模。
假定微程序共用50条微指令,则下址字段至少需要6位。
这是因为ROM地址译码时,26=64,6位地址可容纳64条微指令。
(3)将微程序编译成二进制代码
(4)微程序写入控制存储器
(5)设计硬件电路
三、实验现象
--CPU头文件cpu_defs
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
PACKAGEcpu_defsIS--定义程序包,包头,包体
TYPEopcodeIS(load,store,add,sub,bne);--这个语句适合于定义一些用std_logic等不方便定义的类型,综合器自动实现枚举类型元素的编码,一般将第一个枚举量(最左边)编码为0
CONSTANTword_w:
NATURAL:
=8;
CONSTANTop_w:
NATURAL:
=3;
CONSTANTrfill:
STD_LOGIC_VECTOR(op_w-1downto0):
=(others=>'0');
--FUNCTIOnslv2op(slv:
INSTD_LOGIC_VECTOR)RETURNopcode;
FUNCTIONop2slv(op:
inopcode)RETURNSTD_LOGIC_VECTOR;
ENDPACKAGEcpu_defs;
PACKAGEBODYcpu_defsIS
TYPEoptableISARRAY(opcode)OFSTD_LOGIC_VECTOR(op_w-1DOWNTO0);--数组有5个元素,其他均0
CONSTANTtrans_table:
optable:
=("000","001","010","011","100");
FUNCTIONop2slv(op:
INopcode)RETURNSTD_LOGIC_VECTORIS
BEGIN
RETURNtrans_table(op);
ENDFUNCTIONop2slv;
ENDPACKAGEBODYcpu_defs;
--实验7-8微程序控制器实验
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL,IEEE.NUMERIC_STD.ALL;
USEWORK.CPU_DEFS.ALL;--使用自己定义的程序包
ENTITYCPUIS
PORT(clock:
INSTD_LOGIC;--时钟
reset:
INSTD_LOGIC;--复位
mode:
INSTD_LOGIC_VECTOR(2DOWNTO0);--查看用
mem_addr:
INUNSIGNED(word_w-op_w-1DOWNTO0);--地址
output:
OUTSTD_LOGIC_VECTOR(word_w-1DOWNTO0);
data_r_out:
OUTSTD_LOGIC_VECTOR(19DOWNTO0);--微指令R
op_out:
OUTSTD_LOGIC_VECTOR(op_w-1DOWNTO0);--操作码
add_r_out:
OUTUNSIGNED(4DOWNTO0)--微地址R
);
ENDENTITY;
ARCHITECTURErtlOFCPUIS
TYPEmem_arrayISARRAY(0TO2**(word_w-op_w)-1)OFSTD_LOGIC_VECTOR(word_w-1DOWNTO0);--定义RAM
SIGNALmem:
mem_array;
CONSTANTprog:
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,word_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'));
TYPEmicrocode_arrayISARRAY(0TO14)OFSTD_LOGIC_VECTOR(19DOWNTO0);
CONSTANTcode:
microcode_array:
=(--控制存储器
14=>"00000000000000000000");
SIGNALcount:
UNSIGNED(word_w-op_w-1DOWNTO0);
SIGNALop:
STD_LOGIC_VECTOR(op_w-1DOWNTO0);
SIGNALz_flag:
STD_LOGIC;
SIGNALmdr_out:
STD_LOGIC_VECTOR(word_w-1DOWNTO0);
SIGNALmar_out:
UNSIGNED(word_w-op_w-1DOWNTO0);
SIGNALIR_out:
STD_LOGIC_VECTOR(word_w-1DOWNTO0);
SIGNALacc_out:
UNSIGNED(word_w-1DOWNTO0);
SIGNALsysbus_out:
STD_LOGIC_VECTOR(word_w-1DOWNTO0);
EGIN
PROCESS(reset,clock)
VARIABLEinstr_reg:
STD_LOGIC_VECTOR(word_w-1DOWNTO0);
VARIABLEacc:
UNSIGNED(word_w-1DOWNTO0);
CONSTANTzero:
UNSIGNED(word_w-1DOWNTO0):
=(OTHERS=>'0')
VARIABLEmdr:
STD_LOGIC_VECTOR(word_w-1DOWNTO0);
VARIABLEmar:
UNSIGNED(word_w-op_w-1DOWNTO0);
VARIABLEsysbus:
STD_LOGIC_VECTOR(word_w-1DOWNTO0);
VARIABLEmicrocode:
microcode_array;
VARIABLEadd_r:
UNSIGNED(4DOWNTO0);
VARIABLEdata_r:
STD_LOGIC_VECTOR(19DOWNTO0);
VARIABLEtemp:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
IFreset='0'THEN
add_r:
=(OTHERS=>'0');
count<=(OTHERS=>'0');
instr_reg:
=(OTHERS=>'0');
acc:
=(OTHERS=>'0');
mdr:
=(OTHERS=>'0');
mar:
=(OTHERS=>'0');
z_flag<='0';
mem<=prog;
sysbus:
=(OTHERS=>'0');
ELSIFRISING_EDGE(clock)THEN
--microprogramcontroller
data_r:
=code(TO_INTEGER(add_r));
IFdata_r(4DOWNTO0)="01111"THEN--判断下地址
temp:
="01"&op(2DOWNTO0);
add_r:
=UNSIGNED(temp);
ELSIFdata_r(4DOWNTO0)="10000"THEN
IFz_flag='1'THEN
add_r:
="01110";
ELSE
add_r:
="01101";
ENDIF;
ELSE
add_r:
=UNSIGNED(data_r(4DOWNTO0));
ENDIF;
data_r_out<=data_r;
add_r_out<=add_r;
--PC
IFdata_r(16)='1'THEN--PC_bus='1'
sysbus:
=rfill&STD_LOGIC_VECTOR(count);
ENDIF;
IFdata_r(19)='1'THEN--load_PC='1'
count<=UNSIGNED(mdr(word_w-op_w-1DOWNTO0));
ELSIFdata_r(10)='1'THEN--INC_PC='1'
count<=count+1;
ELSE
count<=count;
ENDIF;
--IR
IFdata_r(15)='1'THEN--load_IR
instr_reg:
=mdr;
ENDIF;
IFdata_r(9)='1'THEN--Addr_bus='1'
sysbus:
=rfill&instr_reg(word_w-op_w-1DOWNTO0);
ENDIF;
op<=instr_reg(word_w-1DOWNTOword_w-op_w);
IR_out<=instr_reg;
op_out<=op;
--ALU
IFdata_r(17)='1'THEN--load_ACC='1'
acc:
=UNSIGNED(mdr);
ENDIF;
IFdata_r(11)='1'THEN--ALU_ACC='1'
IFdata_r(6)='1'THEN--ALU_add='1'
acc:
=acc+UNSIGNED(mdr);
ELSIFdata_r(5)='1'THEN--ALU_sub='1'
acc:
=acc-UNSIGNED(mdr);
ENDIF;
ENDIF;
IFdata_r(18)='1'THEN--ACC_bus='1'
sysbus:
=STD_LOGIC_VECTOR(acc);
ENDIF;
IFacc=zeroTHEN
z_flag<='1';
ELSE
z_flag<='0';
ENDIF;
acc_out<=acc;
--RAM
IFdata_r(14)='1'THEN--load_MAR='1'
mar:
=UNSIGNED(sysbus(word_w-op_w-1DOWNTO0));
ELSIFdata_r(12)='1'THEN--load_MDR='1'
mdr:
=sysbus;
ELSIFdata_r(8)='1'THEN--CS='1'
IFdata_r(7)='1'THEN--R_NW='1'
mdr:
=mem(TO_INTEGER(mar));
ELSE
mem(TO_INTEGER(mar))<=mdr;
ENDIF;
ENDIF;
IFdata_r(13)='1'THEN--MDR_bus='1'
sysbus:
=mdr;
ENDIF;
mdr_out<=mdr;
mar_out<=mar;
ENDIF;
sysbus_out<=sysbus;
ENDPROCESS;
PROCESS(mode,mem_addr)
BEGIN
--mode=0->sysbus
--mode=1->PC
--mode=2->resultofALU
--mode=3->IR
--mode=4->MAR
--mode=5->MDR
--mode=6->mem
output<=(OTHERS=>'0');
CASEmodeis
WHEN"000"=>
output<=sysbus_out;
WHEN"001"=>
output(word_w-op_w-1DOWNTO0)<=STD_LOGIC_VECTOR(count);
WHEN"010"=>
output<=STD_LOGIC_VECTOR(acc_out);
WHEN"011"=>
output<=IR_out;
WHEN"100"=>
output(word_w-op_w-1DOWNTO0)<=STD_LOGIC_VECTOR(mar_out);
WHEN"101"=>
output<=mdr_out;
WHEN"110"=>
output<=mem(TO_INTEGER(mem_addr));
WHENothers=>
output<=(OTHERS=>'Z');
ENDCASE;
ENDPROCESS;
ENDARCHITECTURE;
现象结果:
四、实验体会
原本对于控制器的设计还是一片空白,通过实验初步理解微程序控制器的组成结构。
理解微程序控制器的控制原理,加深了理解微程序控制器的工作原理。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微程序 控制器 实验 报告