组成原理指令扩展实验.docx
- 文档编号:10786719
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:15
- 大小:144.22KB
组成原理指令扩展实验.docx
《组成原理指令扩展实验.docx》由会员分享,可在线阅读,更多相关《组成原理指令扩展实验.docx(15页珍藏版)》请在冰点文库上搜索。
组成原理指令扩展实验
华北科技学院计算机系设计性实验
实验报告
课程名称计算机组成原理B
实验学期2011至2012学年第一学期
学生所在系部计算机系
年级2011专业班级计科ZB111
学生姓名学号
任课教师席振元
实验成绩
计算机系制
《计算机组成原理B》课程设计性实验报告
开课实验室:
计算机组成原理实验室2011年 11月9日
实验题目
指令扩展实验
一、实验目的
深入了解教学计算机微程序控制器的组成和设计技术,包括Am2910器件的功能与具体用法,教学计算机的总体组成和部件之间的连接方法,深入理解控制器部件的组成、设计、控制与使用等诸项知识。
1、进一步掌握微程序定序器AM2910、运算器AM2901、外围GAL、EPROM芯片之间的联系,达到对整机概念的提升;
2、进一步掌握微程序控制器的组成;
3、掌握微程序及机器指令的扩展方法。
二、设备与环境
TEC-XP+教学机、微机、EEPROM芯片、装有WindowsXP、ISPLEVER、ispVMSystem等软件。
三、实验内容
在现有的基本指令系统上,扩展2条指令。
四、实验步骤
1、扩展的2、4指令的格式及功能
写明2条指令的格式、功能、寻址方式、操作码编码、微程序步数、微程序入口地址。
第二条指令格式:
ADTWDR
功能:
DR+2->DR(DR内的值自加2)
寻址方式:
寄存器寻址
操作码编码:
10100001(A1)
微程序步数:
2
微程序入口地址:
81
第四条指令格式:
SWRMDR,[SR]
功能:
DR和[SR]的值互换
寻址方式:
DR为寄存器寻址、[SR]为寄存器间接寻址
操作码编码:
11101001(E9)
微程序步数:
4
微程序入口地址:
A1
2、指令所对应的微程序
指令
入口
地址
下址
CI3-0
SCC3-0
MVR
I2-0
I8-6
I5-3
B口
A口
SST
SSHSCI
DC2
DC1
ADTWDR
81
00
E0
43
30
80
11
00
30
30
43
30
80
11
00
SWRMDR,[SR]
A1
00
E0
43
00
80
00
00
00
E0
44
10
08
00
30
00
E0
17
30
80
00
00
30
30
02
10
00
00
01
3、ABEL语言源程序编辑以及JED文件生成
m256c.abl源程序修改过程(10步)以及生成JED文件的整个操作过程。
10步操作过程如下所示:
定义指令操作码、定义微址、入口地址定义、下址的定义、定义条件判断、定义MVR3位、修改I0~8、修改A,B口、修改SST,SSH,SCI、修改DC1,DC2。
按照上述10个步骤在以下代码中进行添加:
DC1=[DC1_2,DC1_1,DC1_0];
DC2=[DC2_2,DC2_1,DC2_0];
D=[D7,D6,D5,D4,D3,D2,D1,D0];
Y=[Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0];
NXTADDR=[NXTADDR7,NXTADDR6,NXTADDR5,NXTADDR4,NXTADDR3,
NXTADDR2,NXTADDR1,NXTADDR0];
GALSCC=[CI3,CI2,CI1,CI0,SCC3,SCC2,SCC1,SCC0];
all=[OUTER,SCI,SSH,I,SST,A,B,DC1,DC2];
ADD=(IR==[0,0,0,0,0,0,0,0]);
SUB=(IR==[0,0,0,0,0,0,0,1]);
AND=(IR==[0,0,0,0,0,0,1,0]);
OR=(IR==[0,0,0,0,0,1,1,0]);
XOR_=(IR==[0,0,0,0,0,1,0,0]);
CMP=(IR==[0,0,0,0,0,0,1,1]);
TEST=(IR==[0,0,0,0,0,1,0,1]);
MVRR=(IR==[0,0,0,0,0,1,1,1]);
INC=(IR==[0,0,0,0,1,0,0,1]);
DEC=(IR==[0,0,0,0,1,0,0,0]);
SHL=(IR==[0,0,0,0,1,0,1,0]);
SHR=(IR==[0,0,0,0,1,0,1,1]);
JR=(IR==[0,1,0,0,0,0,0,1]);
JRC=(IR==[0,1,0,0,0,1,0,0]);
JRNC=(IR==[0,1,0,0,0,1,0,1]);
JRZ=(IR==[0,1,0,0,0,1,1,0]);
JRNZ=(IR==[0,1,0,0,0,1,1,1]);
JMPA=(IR==[1,0,0,0,0,0,0,0]);
LDRR=(IR==[1,0,0,0,0,0,0,1]);
LDPC=(IR==[1,0,0,0,1,0,0,1]);
STRR=(IR==[1,0,0,0,0,0,1,1]);
IN_=(IR==[1,0,0,0,0,0,1,0]);
OUT=(IR==[1,0,0,0,0,1,1,0]);
PUSH=(IR==[1,0,0,0,0,1,0,1]);
POP=(IR==[1,0,0,0,0,1,1,1]);
PSHF=(IR==[1,0,0,0,0,1,0,0]);
POPF=(IR==[1,0,0,0,1,1,0,0]);
MVRD=(IR==[1,0,0,0,1,0,0,0]);
CALA=(IR==[1,1,0,0,1,1,1,0]);
RET=(IR==[1,0,0,0,1,1,1,1]);
MA00=(Y==[0,0,0,0,0,0,0,0]);
MA01=(Y==[0,0,0,0,0,0,0,1]);
MA02=(Y==[0,0,0,0,0,0,1,0]);
MA03=(Y==[0,0,0,0,0,0,1,1]);
MA04=(Y==[0,0,0,0,0,1,0,0]);
MA05=(Y==[0,0,0,0,0,1,0,1]);
MA06=(Y==[0,0,0,0,0,1,1,0]);
MA07=(Y==[0,0,0,0,0,1,1,1]);
MA08=(Y==[0,0,0,0,1,0,0,0]);
MA09=(Y==[0,0,0,0,1,0,0,1]);
MA0A=(Y==[0,0,0,0,1,0,1,0]);
MA0B=(Y==[0,0,0,0,1,0,1,1]);
MA0C=(Y==[0,0,0,0,1,1,0,0]);
MA0D=(Y==[0,0,0,0,1,1,0,1]);
MA0E=(Y==[0,0,0,0,1,1,1,0]);
MA0F=(Y==[0,0,0,0,1,1,1,1]);
MA10=(Y==[0,0,0,1,0,0,0,0]);
MA11=(Y==[0,0,0,1,0,0,0,1]);
MA12=(Y==[0,0,0,1,0,0,1,0]);
MA13=(Y==[0,0,0,1,0,0,1,1]);
MA14=(Y==[0,0,0,1,0,1,0,0]);
MA15=(Y==[0,0,0,1,0,1,0,1]);
MA16=(Y==[0,0,0,1,0,1,1,0]);
MA17=(Y==[0,0,0,1,0,1,1,1]);
MA18=(Y==[0,0,0,1,1,0,0,0]);
MA19=(Y==[0,0,0,1,1,0,0,1]);
MA1A=(Y==[0,0,0,1,1,0,1,0]);
MA1B=(Y==[0,0,0,1,1,0,1,1]);
MA1C=(Y==[0,0,0,1,1,1,0,0]);
MA1D=(Y==[0,0,0,1,1,1,0,1]);
MA1E=(Y==[0,0,0,1,1,1,1,0]);
MA1F=(Y==[0,0,0,1,1,1,1,1]);
MA20=(Y==[0,0,1,0,0,0,0,0]);
MA21=(Y==[0,0,1,0,0,0,0,1]);
MA22=(Y==[0,0,1,0,0,0,1,0]);
MA23=(Y==[0,0,1,0,0,0,1,1]);
MA24=(Y==[0,0,1,0,0,1,0,0]);
MA30=(Y==[0,0,1,1,0,0,0,0]);
MA31=(Y==[0,0,1,1,0,0,0,1]);
MA89=(Y==[1,0,0,0,1,0,0,1]);
//***********************************************
MA3A=(Y==[0,0,1,1,1,0,1,0]);
MA3B=(Y==[0,0,1,1,1,0,1,1]);
MA3C=(Y==[0,0,1,1,1,1,0,0]);
MA3D=(Y==[0,0,1,1,1,1,0,1]);
MA3E=(Y==[0,0,1,1,1,1,1,0]);
MA3F=(Y==[0,0,1,1,1,1,1,1]);
MA50=(Y==[0,1,0,1,0,0,0,0]);
MA51=(Y==[0,1,0,1,0,0,0,1]);
MA52=(Y==[0,1,0,1,0,0,1,0]);
MA53=(Y==[0,1,0,1,0,0,1,1]);
MA54=(Y==[0,1,0,1,0,1,0,0]);
MA55=(Y==[0,1,0,1,0,1,0,1]);
MA56=(Y==[0,1,0,1,0,1,1,0]);
MA57=(Y==[0,1,0,1,0,1,1,1]);
MA58=(Y==[0,1,0,1,1,0,0,0]);
MA59=(Y==[0,1,0,1,1,0,0,1]);
MA5A=(Y==[0,1,0,1,1,0,1,0]);
MA5B=(Y==[0,1,0,1,1,0,1,1]);
MA5C=(Y==[0,1,0,1,1,1,0,0]);
MA5D=(Y==[0,1,0,1,1,1,0,1]);
MA5E=(Y==[0,1,0,1,1,1,1,0]);
MA5F=(Y==[0,1,0,1,1,1,1,1]);
MA60=(Y==[0,1,1,0,0,0,0,0]);
MA61=(Y==[0,1,1,0,0,0,0,1]);
MA62=(Y==[0,1,1,0,0,0,1,0]);
MA63=(Y==[0,1,1,0,0,0,1,1]);
MA64=(Y==[0,1,1,0,0,1,0,0]);
MA65=(Y==[0,1,1,0,0,1,0,1]);
MA66=(Y==[0,1,1,0,0,1,1,0]);
MA67=(Y==[0,1,1,0,0,1,1,1]);
MA68=(Y==[0,1,1,0,1,0,0,0]);
MA69=(Y==[0,1,1,0,1,0,0,1]);
MA6A=(Y==[0,1,1,0,1,0,1,0]);
EQUATIONS
CK=CK1;
SIGEXT=IR7&!
IR15#!
IR7&IR15;
//************MAPROM58C65*****************************
D0=!
C_M&(!
_MAP&(SUB#OR#CMP#MVRR#DEC#SHR#JR#PSHF#PUSH#POP#POPF
#STRR#LDRR#LDPC#MVRD#CALA#RET)#NXTADDR0&!
_PL)&!
Bit8;
D1=!
C_M&(!
_MAP&(AND#OR#TEST#MVRR#SHL#SHR#IN_#OUT#POP#POPF#LDRR
#LDPC#JMPA#CALA#RET)#NXTADDR1&!
_PL)&!
Bit8;
D2=!
C_M&(!
_MAP&(ADD#SUB#AND#OR#INC#DEC#SHL#SHR#PSHF#PUSH#POP
#POPF#MVRD#JMPA#CALA)#NXTADDR2&!
_PL)&!
Bit8;
D3=!
C_M&(!
_MAP&(XOR_#CMP#TEST#MVRR#INC#DEC#SHR#SHL#STRR#LDRR
#LDPC#MVRD#JMPA#CALA)#NXTADDR3&!
_PL)&!
Bit8;
D4=!
C_M&(!
_MAP&(JRC#JRNC#JRZ#JRNZ#JR#IN_#OUT#PSHF#PUSH#POP#POPF
#STRR#LDRR#LDPC#MVRD#JMPA#CALA)#NXTADDR4&!
_PL)&!
Bit8;
D5=!
C_M&(!
_MAP&(RET)#NXTADDR5&!
_PL)&!
Bit8;
D6=!
C_M&(!
_MAP&(0)#NXTADDR6&!
_PL)&!
Bit8;
D7=!
C_M&(!
_MAP&(0)#NXTADDR7&!
_PL)&!
Bit8;
//************CMHANDNEXTADDRESS*****************************
NXTADDR7:
=0;
NXTADDR6:
=0;
NXTADDR5:
=!
C_M&(MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D
#MA0E#MA0F#MA10#MA11#MA13#MA14#MA16#MA18#MA1A#MA1C
#MA1E#MA22#MA24#MA30#MA3F#MA50#MA51#MA52#MA53#MA54#MA55
#MA56#MA57#MA58#MA59#MA5A#MA63#MA66#MA68#MA69#MA6A)
&!
Bit8;
NXTADDR4:
=!
C_M&(MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D
#MA0E#MA0F#MA10#MA11#MA12#MA13#MA14#MA15#MA16#MA17#MA1#M
A1A#MA1C#MA1D#MA22#MA24#MA30#MA3F#MA50#MA51#MA52#MA53#MA
54#MA55#MA56#MA57#MA58#MA59#MA5A#MA5C#MA5E#MA60#MA63#MA6
6#MA69#MA6A)&!
Bit8;
NXTADDR3:
=!
C_M&(MA15#MA17#MA1D#MA30#MA5C#MA5E#MA60)&!
Bit8;
NXTADDR2:
=!
C_M&(MA12#MA17#MA1D#MA1E#MA5C#MA5E)&!
Bit8;
NXTADDR1:
=!
C_M&(MA15#MA30#MA31#MA60#MA68)&!
Bit8;
NXTADDR0:
=!
C_M&(MA3F#MA68)&!
Bit8;
NXTADDR.CLK=CK;
CI3:
=!
C_M&(MA00#MA01#MA02#MA19#MA1B#MA89#MA1F#MA20#MA21#MA23
#MA89)&NRST&!
Bit8;
CI2:
=!
C_M&(MA00#MA01#MA02#MA19#MA1B#MA89#MA1F#MA20#MA21
#MA23)&NRST&!
Bit8;
CI1:
=!
C_M&1&NRST&!
Bit8;
CI0:
=!
C_M&(MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D
#MA0E#MA0F#MA10#MA11#MA12#MA13#MA14#MA15#MA16#MA17#MA18#MA1A
#MA1C#MA1D#MA1E#MA22#MA24#MA30#MA31)&NRST&!
Bit8;
SCC3:
=!
C_M&0&NRST&!
Bit8;
SCC2:
=!
C_M&(MA10#MA12#MA15#MA17#MA69)&NRST&!
Bit8;
SCC1:
=!
C_M&(MA12#MA15#MA17#MA30)&NRST&!
Bit8;
SCC0:
=!
C_M&(MA15#MA17)&NRST&!
Bit8;
GALSCC.CLK=CK;
…
//****************************16bit!
C_M*********************************
!
_MIO00:
=!
(MA00#MA01#MA03#MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C
#MA0D#MA0E#MA0F#MA10#MA11#MA12#MA15#MA17#MA19#MA1B#MA89#MA1D#MA1E
#MA21#MA23#MA30#MA31);
REQ00:
=(MA13#MA14);
_WE00:
=(MA02#MA14#MA18#MA1C#MA20#MA24);
I200:
=(MA0B#MA11#MA12#MA14#MA1A#MA1B#MA89#MA1C#MA20#MA24#MA30);
I100:
=(MA01#MA0C#MA0D#MA0E#MA0F#MA12#MA13#MA14#MA15#MA17#MA19
#MA1C#MA1D#MA1E#MA1F#MA20#MA21#MA22#MA23#MA24#MA30#MA31);
!
I000:
=!
(MA00#MA01#MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0C#MA0D#MA0E
#MA0F#MA11#MA12#MA13#MA14#MA15#MA17#MA19#MA1C#MA1D#MA1E#MA1F#
MA20#MA21#MA23#MA24#MA30#MA31);
I800:
=(MA0E#MA0F);
I700:
=(MA00#MA01#MA04#MA05#MA06#MA07#MA08#MA0B#MA0C#MA0D#MA0E#MA11
#MA14#MA15#MA17#MA1C#MA1D#MA1E#MA1F#MA21#MA22#MA23#MA24#MA31);
!
I600:
=!
(MA00#MA02#MA03#MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C
#MA0D#MA0E#MA0F#MA10#MA11#MA12#MA13#MA14#MA15#MA16#MA18#MA19
#MA1A#MA1B#MA89#MA1C#MA21#MA24);
I500:
=(MA06#MA08#MA0A);
I400:
=(MA07#MA08);
I300:
=(MA00#MA05#MA07#MA09#MA0D#MA15#MA21);
B30=(MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA0C#MA0D#MA0E
#MA0F#MA19#MA1C);
B300:
=B30&IR7;
B20=(MA00#MA01#MA11#MA15#MA17#MA1D#MA1E#MA1F#MA21#MA22#MA23
#MA24#MA31);
B200:
=(!
B30&B20#B30&IR6);
B10=0;
B100:
=(!
B30&B10#B30&IR5);
B00=(MA00#MA01#MA11#MA1D#MA1E#MA1F#MA22#MA24#MA31);
B000:
=(!
B30&B00#B30&IR4);
A30=(MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0B#MA1A#MA1B#MA89);
A300:
=(A30&IR3);
A20=(MA00#MA01#MA11#MA17#MA1D#MA1E#MA1F#MA22#MA23#MA31);
A200:
=(!
A30&A20#A30&IR2);
A10=0;
A100:
=(!
A30&A10#A30&IR1);
A00=(MA00#MA01#MA11#MA1D#MA1E#MA1F#MA22#MA31);
A000:
=(!
A30&A00#A30&IR0);
SST200:
=(MA0E#MA0F);
SST100:
=(MA0E#MA18);
SST000:
=(MA04#MA05#MA06#MA07#MA08#MA09#MA0A#MA0C#MA0D#MA0F);
SSH00:
=(0);
SCI100:
=(0);
SCI000:
=(MA00#MA01#MA05#MA09#MA0C#MA17#MA1D#MA1E#MA1F#MA23#MA31);
DC2_200:
=(MA00);
DC2_100:
=(MA00#MA01#MA12#MA15#MA17#MA19#MA1B#MA89#MA1D#MA1E#MA1F#MA21
#MA23#MA31);
DC2_000:
=(MA00#MA01#MA02#MA12#MA15#MA17#MA19#MA1B#MA89#MA1D#MA1E#MA1F
#MA21#MA23#MA31);
DC1_200:
=(MA01#MA31);
DC1_100:
=(MA01#MA11#MA12#MA16#MA30#MA31);
DC1_000:
=(MA13#MA16#MA1A#MA22#MA30);
…
END
4、MACH编程
将JED文件下载到MACH器件的过程.
启动LatticeSemiconductor公司IspVMSystem软件,弹出主界面:
(1)连接好教学计算机上在线MACH编程电缆,打开教学计算机的电源。
(2)通过主界面的SCAN按钮找到在线编程器件。
(3)双击软件找到的设备LC4256v,通过Browse按钮选择已经编译好的JED文件,单击OK.
(4)重新回到主界面,点击GO命令进行编程,编程成功后关闭编程窗口。
五、编程验证及结果分析
编写一个验证程序,运行结果说明
1.第二条指令(ADTW)验证程序截图如下所示
图1-1
图1-1显示了编写的小程序以及其运行结果。
分析:
在运行ADTW指令前R0=5
运行ADTW指令
RO自增2,变为R0=7
由上述分析可知扩展指令ADTW正确。
2.第四条指令(SWRM)验证程序截图如下所示
图2-1
图2-2
分析:
图2-1显示了编写的程序
初始r1=5,r0=2100
图2-1显示了运行SWRM指令后
r1=2100,r0=5
由上述分析可知扩展指令SWRM正确。
教师评价
评定项目
A
B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组成 原理 指令 扩展 实验