硬件基础 微程序控制器实验报告.docx

上传人:b****6 文档编号:7000507 上传时间:2023-01-16 格式:DOCX 页数:13 大小:275.54KB
下载 相关 举报
硬件基础 微程序控制器实验报告.docx_第1页
第1页 / 共13页
硬件基础 微程序控制器实验报告.docx_第2页
第2页 / 共13页
硬件基础 微程序控制器实验报告.docx_第3页
第3页 / 共13页
硬件基础 微程序控制器实验报告.docx_第4页
第4页 / 共13页
硬件基础 微程序控制器实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

硬件基础 微程序控制器实验报告.docx

《硬件基础 微程序控制器实验报告.docx》由会员分享,可在线阅读,更多相关《硬件基础 微程序控制器实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

硬件基础 微程序控制器实验报告.docx

硬件基础微程序控制器实验报告

湖南大学

HUNANUNIVERSITY

硬件基础实验2

实验报告

 

1、实验预习

1.书中的图形实现微程序控制器,中间的映射逻辑究竟是怎么实现的?

答:

但出现分支时,预设端信号由IR决定。

IR为1时信号有效,输出为1.

通过IR的值映射为下址的低三位,从而产生下址。

2.书中设计用到了强写强读,为什么要设计这个功能?

答:

满足用户因为没有初始化mif文件时输入数据的需要。

2、实验目的

微程序控制器实验的主要任务:

生成CPU里的控制信号,并使程序按正

确的顺序执行。

核心部分是ROM,存放机器指令的微程序。

1、掌握微程序控制器的组成、工作原理;

2、掌握微程序控制器的基本概念和术语:

微命令、微操作、微指令、微

程序等;

3、掌握微指令、微程序的设计及调试方法;

4、通过单步运行若干条微指令,深入理解微程序控制器的工作原理;

二、实验电路

图1

附:

电路图过大,请放大观察详情

三、实验原理

将机器指令的操作(从取指到执行)分解为若干个更基本的微操作序列,并将有

关的控制信息(微命令)以微码的形式编成微指令输入到控制存储器中。

这样,

每条机器指令将与一段微程序对应,取出微指令就产生微命令,以实现机器指令

要求的信息传送与加工。

四、实验步骤及概述

1)设计状态机部分

a、编写VHDL代码如下

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYzhuangtaijiIS

PORT(

reset:

INSTD_LOGIC:

='0';

clock:

INSTD_LOGIC;

qd:

INSTD_LOGIC:

='0';

dp:

INSTD_LOGIC:

='0';

tj:

INSTD_LOGIC:

='0';

t1:

OUTSTD_LOGIC;

t2:

OUTSTD_LOGIC;

t3:

OUTSTD_LOGIC;

t4:

OUTSTD_LOGIC

);

ENDzhuangtaiji;

ARCHITECTUREBEHAVIOROFzhuangtaijiIS

TYPEtype_fstateIS(idle,st1,s_st2,st4,st2,st3,s_st4,s_st3);

SIGNALfstate:

type_fstate;

SIGNALreg_fstate:

type_fstate;

BEGIN

PROCESS(clock,reset,reg_fstate)

BEGIN

IF(reset='1')THEN

fstate<=idle;

ELSIF(clock='1'ANDclock'event)THEN

fstate<=reg_fstate;

ENDIF;

ENDPROCESS;

PROCESS(fstate,qd,dp,tj)

BEGIN

t1<='0';

t2<='0';

t3<='0';

t4<='0';

CASEfstateIS

WHENidle=>

IF(NOT((qd='1')))THEN

reg_fstate<=st1;

ELSE

reg_fstate<=idle;

ENDIF;

t1<='0';

t2<='0';

t3<='0';

t4<='0';

WHENst1=>

IF(((tj='1')ANDNOT((dp='1'))))THEN

reg_fstate<=st1;

ELSIF(((dp='1')ANDNOT((tj='1'))))THEN

reg_fstate<=s_st2;

ELSE

reg_fstate<=st2;

ENDIF;

t1<='1';

t2<='0';

t3<='0';

t4<='0';

WHENs_st2=>

IF((tj='1'))THEN

reg_fstate<=s_st2;

ELSE

reg_fstate<=s_st3;

ENDIF;

t1<='0';

t2<='1';

t3<='0';

t4<='0';

WHENst4=>

IF(((tj='1')ANDNOT((dp='1'))))THEN

reg_fstate<=st4;

ELSIF(((dp='1')ANDNOT((tj='1'))))THEN

reg_fstate<=idle;

ELSE

reg_fstate<=st1;

ENDIF;

t1<='0';

t2<='0';

t3<='0';

t4<='1';

WHENst2=>

IF(((tj='1')ANDNOT((dp='1'))))THEN

reg_fstate<=st2;

ELSIF(((dp='1')ANDNOT((tj='1'))))THEN

reg_fstate<=s_st3;

ELSE

reg_fstate<=st3;

ENDIF;

t1<='0';

t2<='1';

t3<='0';

t4<='0';

WHENst3=>

IF(((tj='1')ANDNOT((dp='1'))))THEN

reg_fstate<=st3;

ELSIF(((dp='1')ANDNOT((tj='1'))))THEN

reg_fstate<=s_st4;

ELSE

reg_fstate<=st4;

ENDIF;

t1<='0';

t2<='0';

t3<='1';

t4<='0';

WHENs_st4=>

IF((tj='1'))THEN

reg_fstate<=s_st4;

ELSE

reg_fstate<=idle;

ENDIF;

t1<='0';

t2<='0';

t3<='0';

t4<='1';

WHENs_st3=>

IF((tj='1'))THEN

reg_fstate<=s_st3;

ELSE

reg_fstate<=s_st4;

ENDIF;

t1<='0';

t2<='0';

t3<='1';

t4<='0';

WHENOTHERS=>

t1<='X';

t2<='X';

t3<='X';

t4<='X';

report"Reachundefinedstate";

ENDCASE;

ENDPROCESS;

ENDBEHAVIOR;

b、新建blockfile选定zhaungtaiji得到电路图

2)设计rom部分

a、编写VHDL代码如下

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYromIS

PORT

address:

INSTD_LOGIC_VECTOR(4DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(27DOWNTO0));

ENDrom;

ARCHITECTURESYNOFromIS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(27DOWNTO0);

BEGIN

sub_wire0<=

"1011000000100000010100000001"WHENaddress="00000"ELSE

"1110100100100000010101100010"WHENaddress="00001"ELSE

"1001000100100000010100101000"WHENaddress="00010"ELSE

"1110100100100000010100010101"WHENaddress="01001"ELSE

"1001101100100000010100010110"WHENaddress="10101"ELSE

"1001001100100000011100000001"WHENaddress="10110"ELSE

"1110100100100000010100010111"WHENaddress="01010"ELSE

"1001101100100000010100011000"WHENaddress="10111"ELSE

"1001010100100000010000000001"WHENaddress="11000"ELSE

"1110100100100000010100011001"WHENaddress="01011"ELSE

"1001101100100000010100011010"WHENaddress="11001"ELSE

"1001001100100000010100000001"WHENaddress="11010"ELSE

"1001000101100000010000011011"WHENaddress="01100"ELSE

"1001000100110000001100000001"WHENaddress="11011"ELSE

"1110100100100000010100011100"WHENaddress="01101"ELSE

"1011001100100000010100000001"WHENaddress="11100"ELSE

"1110100100100000010100000011"WHENaddress="01110"ELSE

"1001101100100000010100000100"WHENaddress="00011"ELSE

"1001001100100000010110000101"WHENaddress="00100"ELSE

"1001000101100000010000000110"WHENaddress="00101"ELSE

"1001000100101001101100000001"WHENaddress="00110"ELSE

"1110100100100000010100011101"WHENaddress="01111"ELSE

"1001101100100000010100011110"WHENaddress="11101"ELSE

"1001001100100000010110011111"WHENaddress="11110"ELSE

"1001000101100000010000000111"WHENaddress="11111"ELSE

"1001000100100001111100000001"WHENaddress="00111"ELSE

"1011000000100000010100010011"WHENaddress="01000"ELSE

"1110100100100000010100010100"WHENaddress="10011"ELSE

"1001001100100000010100010011"WHENaddress="10100"ELSE

"1011000000100000010100010001"WHENaddress="10000"ELSE

"1110100100100000010100010010"WHENaddress="10001"ELSE

"1001010000100000010100010001";

q<=sub_wire0(27DOWNTO0);

ENDSYN;

b、新建blockfile选定rom得到电路图

3)、整合电路图

整合电路图如图1所示。

建工程-建立Block Diagram File-按照电路图连好电路-保存、编译-建立

Vector Waveform File-插入引脚-设置波形-保存、仿真。

仿真后的波形如下:

参数设置:

GridSize:

50ns

EndTime:

5.0us

其具体实现还需要与数据通路结合才能最终进行具体运算。

分析ADD的每条微指的指令格式和功能:

ADD:

为双字长指令。

第一字为操作码,第二字为操作数地址,其含义是将R0寄存器的内容与内存中以A为地址单元的数相加,结果放R0寄存器中。

ADD加法指令由:

S3 S2 S1 S0 MCn WEA9A8ABCμA5--μA0

a、(PC→AR,PC+1):

0  0  0  0  0  0  0  1  11 0 11 0 11 0 10 0 0 0 1 1

b、(RAM→BUS,BUS→AR):

0  0  0  0  0  0  0  1  01 0 11 1 11 1 10 0 0 1 0 0

C、(RAM→BUS,BUS→DR2):

0  0  0  0  0  0  0  1  00 1 01 1 11 1 10 0 0 1 0 1

d、(RO→DR1):

0  0  0  0  0  0  0  1  10 1 00 0 10 0 00 0 0 1 1 0

e、((DR1)+(DR2)→RO):

1  0  0  1  0  1  0  1  10 0 00 0 11 1 10 0 0 0 0 1

共8条微指令组成。

a微指令功能是RAM赋给BUS,BUS赋给DR2;S3S2S1S0MCN的值为“000000”代表进行自加1运算;A字段“110”代表选择LDAR操作,B字段“110”是选择PC-B操作;UA5-UA0中“000011”代表下一指令的地址为“011”。

b微指令功能是RAM赋给BUS,BUS赋给DR2;S3S2S1S0MCN的值为“000000”代表进行自加1运算;A字段“110”代表选择LDAR操作,B字段“000”是无选择操作;UA5-UA0中“000100”代表下一指令的地址为“100”。

c微指令功能是RAM赋给BUS,BUS赋给DR2;S3S2S1S0MCN的值为“000000”代表进行自加1运算;A字段“011”代表选择LDDR2操作,B字段“000”是无选择操作;UA5-UA0中“000101”代表下一指令的地址为“101”。

d微指令功能是RO赋给DR1;S3S2S1S0MCN的值为“000000”代表进行自加1运算;A字段“010”代表选择LDDR1操作,B字段“001”是选择RS-B操作;UA5-UA0中“000110”代表下一指令的地址为“110”。

e微指令功能是DR1+DR2的和赋给R0;S3S2S1S0MCN的值为“100101”代表进行加法运算;A字段“001

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1