硬件基础 微程序控制器实验报告.docx
- 文档编号:6747006
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:13
- 大小:141.60KB
硬件基础 微程序控制器实验报告.docx
《硬件基础 微程序控制器实验报告.docx》由会员分享,可在线阅读,更多相关《硬件基础 微程序控制器实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
硬件基础微程序控制器实验报告
湖南大学
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件基础 微程序控制器实验报告 硬件 基础 微程序 控制器 实验 报告