计算机组成原理课设报告设计一台嵌入式CISC模型机.docx
《计算机组成原理课设报告设计一台嵌入式CISC模型机.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课设报告设计一台嵌入式CISC模型机.docx(37页珍藏版)》请在冰点文库上搜索。
计算机组成原理课设报告设计一台嵌入式CISC模型机
计算机组成原理
课程设计(论文)说明书
题目:
设计一台嵌入式CISC模型机
系别:
专业:
学生姓名:
学号:
一.CISC模型机数据通路框图总体设计如下
嵌入式CISC模型机
FC
IR
ALU
状态条件
寄存器
ROM
FZ
外部时钟
DR
AC
操作控制器和
时序产生器
复位信号
AR
具有时间标志的
操作控制信号
PC
R3
R2
R1
R0
输出设备
输入设备
二.操作控制器的逻辑框图
微命令信号
三.模型机的指令系统
3.1指令系统
7
6
5
4
3
2
1
0
I/O指令
IN1
操作码
×
×
Rd
OUT1
操作码
Rs
×
×
自增指令
INC
操作码
×
×
Rd
跳转指令
JB
操作码
×
×
×
×
ADDR
JS
操作码
×
×
×
×
ADDR
JMP
操作码
×
×
×
×
ADDR
比较
CMP
操作码
Rs
Rd
移动
MOV
操作码
×
×
Rd
DATA
MOV1
操作码
Rs
Rd
测试
TEST
操作码
×
×
Rd
3.2本模型机中的指令系统中共有10条基本指令,下表列出了每条指令的格式、汇编符号和指令功能。
助记符
指令格式
功能
IN1Rd
0000
××
Rd
将数据存到Rd寄存器
OUT1Rs
0011
Rs
××
(Rs)→LED
MOV1Rs,Rd
0010
Rs
Rd
Rs→Rd
CMPRs,Rd
0110
Rs
Rd
(Rs)-(Rd),锁存CY和ZI
INCRd
0100
××
Rd
(Rd)+1→Rd
MOVRd,data
0001
××
Rd
data
data→Rd
JMPaddr
0101
××××
addr
addr→PC
JSaddr
1000
××××
addr
若为负,则addr→PC
JBaddr
1001
××××
addr
若小于,则addr→PC
TestRd
0111
××
Rd
80H-AC,锁存SF
说明:
①对Rs和Rd的规定:
RsRd
选定的寄存器
00
R0
01
R1
10
R2
11
R3
②模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:
7
6543210
符号位
尾数
3.3设计时序产生器电路
T1、T2、T3、T4与CLR、Q之间的关系图
一个CPU周期
四.微程序流程图
00
PC→AR
PC+1
02
RDM
BUS→IR
10
P
(1)
IN1
TEST
JB
JS
CMP
MOV
OUT1
JMP
INC
MOV1
107
19
17
14
12
18
16
11
13
15
Rd→BUS
BUS→AC
Rd→BUS
BUS→AC
PC→AR
PC+1
PC→AR
PC+1
PC→AR
PC+1
Rs→BUS
BUS→Rd
Rs→BUS
BUS→AC
SW→BUS
BUS→Rd
PC→AR
PC+1
Rs→LED
07
20
05
04
08
06
03
00
P(3)
AC
锁存FS
00
P
(2)
ROM→BUS
BUS→PC
Rd→BUS
BUS→DR
ROM→BUS
BUS→Rd
AC+1→BUS
BUS→Rd
00
FC=0或FZ=1
FC=1
且FZ=0
09
00
00
00
00
AC-DR
锁存FS和FZ
30
20
ROM→BUS
BUS→PC
00
00
00
FS=0
FS=1
28
08
ROM→BUS
BUS→PC
五.编写汇编语言源程序
由给出的题目(范例)和设计的指令系统编写相应的汇编语言源程序。
算法思想为:
采用R0寄存器存放从开关输入的任意一个整数,R1存放准备参加累加运算的奇数,R2存放累加和,用一个循环程序实现如下:
MOVR3,0
MOVR2,0
MOVR1,5
L2:
IN1R0
TestR0
JSL1
L3:
INCR2
CMPR2,R1
JBL2
L4:
OUT1R3
JMPL4
L1:
CMPR0,R3
JBL3
MOV1R0,R3
JMPL3
六.机器语言源程序
根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去。
与3.3.8中汇编语言源程序对应的机器语言源程序如下:
助记符地址(十六进制)机器代码功能
MOVR3,O00000100110→R3
010000000
MOVR2,002000100100→R2
0300000000
MOVR1,504000100015→R1
0500000101
L2:
IN1R00600000000(SW)→R0
TestR0070111000080H-AC
JSL10810000000若SF=1L1→PC
0900010001
L3:
INCR20A01000010(R2)+1→R2
CMPR2,R10B01101001(R2)-(R1)
JBL20C10010000L2→PC
OD00000110
L4:
OUT1R30E00111100(R3)→LED
JMPL40F01010000L4→PC
1000001110
L1:
CMPR0,R31101100011(R0)-(R3)
JBL31210010000L3→PC
1300001010
MOV1R0,R31400100011R0→R3
JMPL31501010000L3→PC
1600001010
七.机器语言源程序的功能仿真波形图及结果分析;
输入数值:
85,05,83,87,89
输出结果:
89
结果分析:
05是正数,判断为负直接跳出,83<85<87<89
所以89最大,与仿真波形图结果相同
八.故障现象和故障分析
1.问题:
为微程序流程图分配首地址时出现错误,导致不能正确译码。
解决方法:
进行功能仿真时ADDR进行P
(1)测试译码时出现错误的首地址,经过了解P
(1)测试原理,重新为微程序流程图分配地址
2.问题:
Test指令锁存标志位SF出现错误,无论输入为正为负,SF恒等于0,导致输入负数是不能进行相应的跳转。
解决方法:
在进行功能仿真时通过观察ADDR发现错误,查看ALU代码实现中判断输入数值的正负方法有误,经过老师提醒得以解决,解决后的表达式
九.心得体会
本次课程设计我们要设计一台微程序控制的模型机,了解了一个比较简单的模型机的实现,完成对计算机组成原理这门课程的综合应用,达到学习本书的作用.作为一个计算机系学生这是必需掌握的。
使我们对数据选择器、移位器、加法器、运算器、存储器和微程序控制器,有了比较透彻的认识。
由于计算机设计的部件较多、结构原理较复杂,对于我们这样的初设计者来说感到无从下手。
在设计过程中,我们从开始的粗略的一个概念,到中间的疑惑与焦虑,到解决了问题的快乐。
这对于我们以后工作也有着很大的好处,培养了我们遇到问题,分析问题,解决问题各个方面上的能力。
设计结束了,从中我们也学到了不少知识.虽然计算机组成原理的课程设计与学习已经结束,可我们学习之路并没有结束,我们会继续努力学习其相关的知识,以适应社会的发展与需要.这样才能真正成为一名合格的大学生.
在这次课程设计的过程,有些很基本的知识出现记混淆的现象,通过查书及询问同学,最终明白了。
在此次的设计中,感谢老师对我们的帮助和指导。
过程还不够完善,希望老师继续指导。
十.软件清单
1.ALU单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.all;
ENTITYALUIS
PORT(
A:
INSTD_LOGIC_VECTOR(7DOWNTO0);
B:
INSTD_LOGIC_VECTOR(7DOWNTO0);
S1,S0:
INSTD_LOGIC;
BCDOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
CY,ZI,SF:
OUTSTD_LOGIC
);
ENDALU;
ARCHITECTUREAOFALUIS
SIGNALAA,BB,TEMP:
STD_LOGIC_VECTOR(8DOWNTO0);
BEGIN
PROCESS(S1,S0)
BEGIN
IF(S1='1'ANDS0='1')THEN--TEST
BCDOUT<=10000000-A;
IF(10000000>=A)THEN
SF<='1';
ELSE
SF<='0';
ENDIF;
ELSIF(S1='0'ANDS0='1')THEN--CMP(SUB)
BCDOUT<=A-B;
IF(A
CY<='1';
ZI<='0';
ELSIF(A=B)THEN
CY<='0';
ZI<='1';
ELSE
CY<='0';
ZI<='0';
ENDIF;
ELSIF(S1='1'ANDS0='0')THEN--INC
AA<='0'&A;
TEMP<=A+1;
BCDOUT<=TEMP(7DOWNTO0);
CY<=TEMP(8);
IF(TEMP="100000000")THEN
ZI<='1';
ELSE
ZI<='0';
ENDIF;
ELSE
BCDOUT<="00000000";
CY<='0';
ZI<='0';
ENDIF;
ENDPROCESS;
ENDA;
2.状态条件寄存器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLS74IS
PORT(
LDFR:
INSTD_LOGIC;
SF,CY,ZI:
INSTD_LOGIC;
FS,FC,FZ:
OUTSTD_LOGIC
);
ENDLS74;
ARCHITECTUREAOFLS74IS
BEGIN
PROCESS(LDFR)
BEGIN
IF(LDFR'EVENTANDLDFR='1')THEN
FC<=CY;
FZ<=ZI;
FS<=SF;
ENDIF;
ENDPROCESS;
ENDA;
3.暂存器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLS273IS
PORT(
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CLK:
INSTD_LOGIC;
O:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDLS273;
ARCHITECTUREAOFLS273IS
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
O<=D;
ENDIF;
ENDPROCESS;
ENDA;
4.通用寄存器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLS273IS
PORT(
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CLK:
INSTD_LOGIC;
O:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDLS273;
ARCHITECTUREAOFLS273IS
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
O<=D;
ENDIF;
ENDPROCESS;
ENDA;
5.1:
2分配器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFEN2IS
PORT(
WR,LED_B:
INSTD_LOGIC;
X:
INSTD_LOGIC_VECTOR(7DOWNTO0);
W1,W2:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDFEN2;
ARCHITECTUREAOFFEN2IS
BEGIN
PROCESS(LED_B,WR)
BEGIN
IF(LED_B='0'ANDWR='0')THEN
W2<=X;
ELSE
W1<=X;
ENDIF;
ENDPROCESS;
ENDA;
6.3选1数据选择器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYMUX3IS
PORT(
ID:
INSTD_LOGIC_VECTOR(7DOWNTO0);
SW_B,CS:
INSTD_LOGIC;
N1,N2:
INSTD_LOGIC_VECTOR(7DOWNTO0);
EW:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDMUX3;
ARCHITECTUREAOFMUX3IS
BEGIN
PROCESS(SW_B,CS)
BEGIN
IF(SW_B='0')THEN
EW<=ID;
ELSIF(CS='0')THEN
EW<=N2;
ELSE
EW<=N1;
ENDIF;
ENDPROCESS;
ENDA;
7.5选1数据选择器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYMUX5IS
PORT(
B,C,D,E,F:
INSTD_LOGIC;
X1,X2,X3,X4,X5:
INSTD_LOGIC_VECTOR(7DOWNTO0);
W:
outSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDMUX5;
ARCHITECTUREAOFMUX5IS
SIGNALSEL:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
SEL<=F&E&D&C&B;
PROCESS(SEL)
BEGIN
IF(SEL="11101")THEN--R0_out
W<=X1;
ELSIF(SEL="11110")THEN--R3_out
W<=X5;
ELSIF(SEL="11011")THEN--R1_out
W<=X2;
ELSIF(SEL="10111")THEN--R2-out
W<=X3;
ELSIF(SEL="01111")THEN--ALU_out
W<=X4;
ELSE
null;
ENDIF;
ENDPROCESS;
ENDA;
8.程序计数器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYPCIS
PORT(
LOAD,LDPC,CLR:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
O:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDPC;
ARCHITECTUREAOFPCIS
SIGNALQOUT:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(LDPC,CLR,LOAD)
BEGIN
IF(CLR='0')THEN
QOUT<="00000000";
ELSIF(LDPC'EVENTANDLDPC='1')THEN
IF(LOAD='0')THEN
QOUT<=D;--BUS->PC
ELSE
QOUT<=QOUT+1;--PC=PC+1
ENDIF;
ENDIF;
ENDPROCESS;
O<=QOUT;
ENDA;
9、地址寄存器
10、主存储器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYROM16IS
PORT(
DOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
ADDR:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CS:
INSTD_LOGIC
);
ENDROM16;
ARCHITECTUREAOFROM16IS
BEGIN
DOUT<="00010011"WHENADDR="00000000"ANDCS='0'ELSE
"00000000"WHENADDR="00000001"ANDCS='0'ELSE
"00010010"WHENADDR="00000010"ANDCS='0'ELSE
"00000000"WHENADDR="00000011"ANDCS='0'ELSE
"00010001"WHENADDR="00000100"ANDCS='0'ELSE
"00000101"WHENADDR="00000101"ANDCS='0'ELSE
"00000000"WHENADDR="00000110"ANDCS='0'ELSE
"01110000"WHENADDR="00000111"ANDCS='0'ELSE
"10000000"WHENADDR="00001000"ANDCS='0'ELSE
"00010001"WHENADDR="00001001"ANDCS='0'ELSE
"01000010"WHENADDR="00001010"ANDCS='0'ELSE
"01101001"WHENADDR="00001011"ANDCS='0'ELSE
"10010000"WHENADDR="00001100"ANDCS='0'ELSE
"00000110"WHENADDR="00001101"ANDCS='0'ELSE
"00111100"WHENADDR="00001110"ANDCS='0'ELSE
"01010000"WHENADDR="00001111"ANDCS='0'ELSE
"00001110"WHENADDR="00010000"ANDCS='0'ELSE
"01100011"WHENADDR="00010001"ANDCS='0'ELSE
"10010000"WHENADDR="00010010"ANDCS='0'ELSE
"00001010"WHENADDR="00010011"ANDCS='0'ELSE
"00100011"WHENADDR="00010100"ANDCS='0'ELSE
"01010000"WHENADDR="00010101"ANDCS='0'ELSE
"00001010"WHENADDR="00010110"ANDCS='0'ELSE
"00000000";
ENDA;
11、指令寄存器单元
12、时序产生器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTERIS
PORT(
Q,CLR:
INSTD_LOGIC;
T2,T3,T4:
OUTSTD_LOGIC
);
ENDCOUNTER;
ARCHITECTUREAOFCOUNTERIS
SIGNALX:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
PROCESS(Q,CLR)
BEGIN
IF(CLR='0')THEN
T2<='0';
T3<='0';
T4<='0';
X<="00";
ELSIF(Q'EVENTANDQ='1')THEN
X<=X+1;
T2<=(NOTX
(1))ANDX(0);
T3<=X
(1)AND(NOTX(0));
T4<=X
(1)ANDX(0);
ENDIF;
ENDPROCESS;
ENDA;
13、操作控制器单元
操作控制器单元内部结构图
(1)地址转移逻辑电路
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYADDRIS
PORT(
I7,I6,I5,I4:
INSTD_LOGIC;
FS,FZ,FC