计算机组成原理课设论文.docx
《计算机组成原理课设论文.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课设论文.docx(45页珍藏版)》请在冰豆网上搜索。
计算机组成原理课设论文
计算机组成原理课程设计
题目:
计算机原理课程设计
学院:
计算机科学与工程学院
专业:
计算机科学与技术
姓名:
孤狼
学号:
1100310315
指导教师:
2014年03月20日
2.5最终机器码……………………………………………………………………..........................5
三、时序产生器…………………………………………………………………………………………5
5.1模型机顶层电路设计…………………………………………………………………...…….11
5.2模型机crom单元电路设计……………………………………………………………..…….12
6.2STO(STOR2(R0))存储位置每次都为00H…………………………………………..13
各个单元的电路设计或VHDL源文件
一.课程设计选题和完成内容
选题:
本设计选择题目为A类第一题
题目:
设计一台嵌入式CISC模型计算机
采用定长CPU周期、联合控制方式,并运行能完成一定功能的机器语言源程序进行验证,机器语言源程序功能如下:
A类(最高成绩为“优”):
●输入包含5个整数(有符号数)的数组M,输出所有负数的平方和。
(非卓越班)
●输入包含5个整数(有符号数)的数组M,输出最大负数的绝对值。
(非卓越班)
●输入包含10个整数(无符号数)的数组M,输出众数(出现次数最多的数)及其出现的次数。
(卓越班)
●输入包含10个整数(无符号数)的数组M,输出中位数。
(卓越班)
说明:
A类题目的嵌入式模型计算机内必须设计和使用RAM存储器读写数据,相应地需要设计对RAM存储器数据的读写指令,以及对RAM中数组操作必须的寄存器间接寻址方式等。
B类(最高成绩为“良”):
●输入5个整数(有符号数),输出所有负数的平方和。
(非卓越班)
●输入5个整数(有符号数),输出最大负数的绝对值。
(非卓越班)
●输入5个整数(有符号数),输出它们的平均值,以及小于此平均值的数的个数。
(卓越班)
要完成的内容:
1.完成系统的总体设计,画出模型机数据通路框图;
2.设计微程序控制器(CISC模型计算机)的逻辑结构框图;
3.设计机器指令格式和指令系统;
4.设计时序产生器电路;
5.设计所有机器指令的微程序流程图;
6.设计操作
7.的所有单元电路,并用VHDL语言(也可使用GDF文件--图形描述文件)
8.对模型机中控制器单元;
设计模型机的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路。
9.由给出的题目和设计的指令系统编写相应的汇编语言源程序;
9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计
到模型机中的ROM中去;
10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软
件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。
)
二、系统的总体设计
2.1嵌入式CISC模型机的数据通路框图
图2-1
2.2系统的操作控制器的逻辑框图
2.3模型机的指令格式
这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
此模型的系统共设计了共有10条指令,分别为:
IN,MOV,LAD,STO,INC,JNS,ADD,MUL,OUT,TEST。
2.3.1具体指令格式如下:
微地址
助记符号
指令格式
指令功能
15--12
1110
98
7-----0
000001
MOVRd,im
0001
xx
Rd
im
立即数im→Rd
000010
INTRd
0010
xx
Rd
xx
将输入数据存到Rd寄存器
000011
STORs,(Rd)
0011
Rs
Rd
xx
(Rs)--->((Rd))将Rs的内容存到Rd地址中
000100
INCRd
0100
xx
Rd
xx
(Rd)+1→Rd锁存SF和ZF
000101
DECRd
0101
xx
Rd
xx
(Rd)-1→Rd锁存SF和ZF
000110
TESTRd
0110
xx
Rd
xx
测试(Rd)是否为负,锁存SF
000111
JNSaddr
0111
xx
xx
addr
若不为负数,则addr→PC
001000
LAD(Rs),Rd
1000
Rs
Rd
xx
((Rs))--->Rd将Rs地址的内容读到Rd
001001
MULRsRd
1001
Rs
Rd
xx
(Rs)*(Rd)-->Rd
001010
ADDRs,Rd
1010
Rs
Rd
addr
(Rs)+(Rd)-->Rd
001011
OUTRs
1011
Rs
xx
xx
(Rs)→OUTBUS
2.3.2对Rs和Rd的规定:
Rs或Rd
选定的寄存器
00
R0
01
R1
10
R2
11
R3
2.3.3模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:
7
6543210
符号位
尾数
2.4编写汇编源程序
我们要实现的功能是对连续输入的5个数据并存储到RAM的连续的存储单元中,然后再从RAM中将这5个数据依次读取出来并作判断是否为数,将5个数中所有的负数其求平方和,并对其结果进行显示等功能,从而得到一个简单的复杂指令模型机所实现的功能和结果
//根据要求编写如下汇编源程序:
MOVR0,00H;数据存放在RAM中的地址
MOVR1,4H;计数从4H(4)开始,到-1时结束
L1:
INTR2;输入一个数到R2
STOR2,(R0);将输入的数存放到RAM的(R0)地址
INCR0;RAM地址指针+1
DECR1;计数-1
TESTR1;测试计数是否到达5次,(R1)是否为负数
JNSL1;根据SF符号标志的判断,若不为负数,则跳转
MOVR000H;当5个数输入存储完成后,重新初始化RAM指针
MOVR14H;重置计数
L2:
LAD(R0)R2;将(R0)地址的数取出送到R2中
TESTR2;测试取出的数是否为负数
JNSL3;若不为负数,则跳转到L3
MULR2,R2;若为负数,则求平方
ADDR2,R3;再求平方和,把结果送到R3
L3:
INCR0;RAM地址+1
DECR1;计数-1+
TSTR1;测试计数是否到达5次,(R1)是否为负数
JNSL2;为正数,计数还不到5次,则跳转到L2
OUTR3;计数到达5次,则将最后结果输出
2.5最终机器码为:
地址
助记符(汇编)
机器代码
作用
00
MOVR0,00H
0001000000000000
数据存放在RAM中的地址00H开始
01
MOVR1,4H
0001000100000100
计数从4H(4)开始,到-1时结束
02
L1:
INTR2
0010001000000000
输入一个数到R2
03
STOR2,(R0)
0011100000000000
将输入的数存放到RAM的(R0)地址
04
INCR0
010*********
RAM地址指针+1
05
DECR1
010*********
计数-1
06
TESTR1
0110000100000000
测试计数是否到达5次,(R1)是否为负数,锁存SF
07
JNSL1
0111000000000010
根据SF符号标志的判断,若不为负数,则跳转
08
MOVR0,00H
0001000000000000
当5个数输入存储完成后,重新初始化RAM指针
09
MOVR1,4H
0001000100000100
重置计数
0A
L2:
LAD(R0),R2
1000001000000000
将(R0)地址的数取出送到R2中
0B
TESTR2
0110001000000000
测试取出的数是否为负数,锁存SF
0C
JNSL3
0111000000001111
若不为负数,则跳转到L3
0D
MULR2,R2
1001101000000000
若为负数,则求平方
0E
ADDR2,R3
1010101100000000
再求平方和,把结果送到R3
0F
L3:
INCR0
010*********
RAM地址+1
10
DECR1
010*********
计数-1+
11
TESTR1
0110000100000000
测试计数是否到达5次,(R1)是否为负数,锁存SF
12
JNSL2
0111000000001010
为正数,计数还不到5次,则跳转到L2
13
OUTR3
1011110000000000
计数到达5次,则将最后结果输出
三.时序产生器
T1、T2、T3、T4与CLR、Q之间的关系图如下:
四.微程序控制器的设计
微程序控制器的设计过程包括:
(1)根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;
(2)设计微指令格式和微指令代码表;
(3)设计地址转移逻辑电路;
(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;
(5)设计微程序控制器的顶层电路(由多个模块组成)。
4.1设计微指令流程图
根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;
00
MOVINTSTOINCDECTESTJNSLADMULADDOUT
0102030405060708090A0B
0E0C
0000000000
00000000
SF=1SF=000
10
00
00
4.2设计微指令格式和微指令代码表
指令流程图设计完成后,开始设计微指令格式和微指令代码表,按照要求,CISC模型机系统使用的微指令采用全水平型微指令,字长为26位,其中微命令字段为18位,P字段为2位,后继微地址为6位,其格式如下:
按照此格式并根据设计的指令流程图,可以得到:
由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:
LOAD、LDPC、LDAR、LDIR、LDRi、LDPSW、RS_B、S2、S1、S0、ALU_B、SW_B、LED_B、RD_B、CS_B、RAM_B、CS_I、ADDR_B。
CLR
LOAD
LDPC
功能
0
X
X
将PC清0
1
0
BUS->PC
1
1
0
不装入,不计数
1
1
PC+1
S2
S1
S0
功能
0
0
0
X+Y,修改ZF,SF
0
1
0
Y+1,修改ZF,SF
0
1
1
Y-1,修改ZF,SF
1
1
1
X*Y,修改ZF,SF
1
0
0
0&Y,修改ZF,SF
1
1
0
->Y
4.3设计地址转移逻辑电路
地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。
地址转移逻辑电路中异步置“1”信号SE6~SE1表达式的确定与P字段测试时转移微地址的确定密切相关.
由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA4~µA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:
(µA5的异步置“1”端SE6实际未使用)
SE6<='1';
SE5<=NOT(NOT(SF)ANDP2ANDT4);
SE4<=NOT(I4ANDP1ANDT4);
SE3<=NOT(I3ANDP1ANDT4);
SE2<=NOT(I2ANDP1ANDT4);
SE1<=NOT(I1ANDP1ANDT4);
五、单元电路设计
设计模型机中的所有单元电路,并用VHDL语言(也可使用GDF文件----图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件。
具体设计方法见附录。
重点设计单元电路为:
CR0M,ALU,ROM.
CROM内部重点单元:
COUNTROM,ADDR,MCOMMAND
5.1模型机(顶层)电路:
5.2模型机crom单元电路:
六.设计测试过程所遇到的问题及解决记录
6.1JNS(JNSL2\JNSL3)无法实现循环跳转
问题所在:
没有认真注意到P测试的返回地址与指令IR->PC地址的关系,开始时随便设置了IR->PC的地址
问题解决:
后来了解到改地址与P
(2)测试相关,改为010000后,跳转成功。
6.2STO(STOR2(R0))存储位置每次都为00H
问题所在:
STO指令中开启ADDR_B,关ALU_B,导致取地址来自于ROM内的机器码后八位addr,该机器码后八位为00H。
问题解决:
微指令中关ADDR_B,开ALU_B,ALU设置直接输出Y,此时Y值来源于(R0),即为目的地址。
七、测试及结果分析
根据设计的汇编程序和对应的机器代码,对设计的模型机进行仿真测试,并分析结果:
7.1下图显示了RAM地址的初值设置00H,循环计数设置04H,第一个循环读入40H至R2并存进RAM的过程。
7.2下图截取了其中3个循环,分别读进数40H,FCH,FEH.
7.3下图为5次循环后读进的5个数,如图从地址00H开始存放。
7.4下图为一次从RAM中读取负数,并计算平方并加到R3的过程
7.5下图为3个负数从RAM中读取判断,求得平方并求和的过程。
FC*FC+FE*FE+FF*FF=15H.
九、心得体会
通过课程设计的学习设计过程,我从对CISC模型机的组成和工作原理毫不了解,到慢慢的独立设计完成,并实现了预期功能。
这次课程设计我学会AlteraMAX+plusⅡEDA软件的使用,熟悉了VHDL语言,并能使用其进行期间的编程,当然,也能用图形描述文件(.Gdf)进行顶层电路的设计。
最终能用EDA软件设计一个能完成一定功能的模型计算机,并通过功能仿真和在EDA实验平台上运行一个程序来验证模型机设计的正确性。
在设计的过程中,我了解了每个机器码,每个微指令的作用,懂得模型机的原理。
此次的课程设计让我收获的不单单有课程的知识,也学会了自主学习、学会了细心解决问题,培养了自己做事的耐心活认真的态度,培养了调试纠错的良好素养,更有的就是加强了自己的实践动手能力。
十、附录(VHDL源文件)
8.1ROM的设计(保存汇编源代码对应的机器码以及地址)
程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYROMIS
PORT(
DOUT:
OUTSTD_LOGIC_VECTOR(15DOWNTO0);
ADDR:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CS_I:
INSTD_LOGIC
);
ENDROM;
ARCHITECTUREAOFROMIS
BEGIN
DOUT<=
"0001000000000000"WHENADDR="00000000"ANDCS_I='0'ELSE--MOVR0,10H
"0001000100000100"WHENADDR="00000001"ANDCS_I='0'ELSE--MOVR1,4H
"0010001000000000"WHENADDR="00000010"ANDCS_I='0'ELSE--L1:
INTR2
"0011100000000000"WHENADDR="00000011"ANDCS_I='0'ELSE--STOR2,(R0)
"0100000000000000"WHENADDR="00000100"ANDCS_I='0'ELSE--INCR0
"0101000100000000"WHENADDR="00000101"ANDCS_I='0'ELSE--DECR1
"0110000100000000"WHENADDR="00000110"ANDCS_I='0'ELSE--TESTR1
"0111000000000010"WHENADDR="00000111"ANDCS_I='0'ELSE--JNSL1
"0001000000000000"WHENADDR="00001000"ANDCS_I='0'ELSE--MOVR010H
"0001000100000100"WHENADDR="00001001"ANDCS_I='0'ELSE--MOVR14H
"1000001000000000"WHENADDR="00001010"ANDCS_I='0'ELSE--L2:
LAD(R0)R2
"0110001000000000"WHENADDR="00001011"ANDCS_I='0'ELSE--TESTR2
"0111000000001111"WHENADDR="00001100"ANDCS_I='0'ELSE--JNSL3
"1001101000000000"WHENADDR="00001101"ANDCS_I='0'ELSE--MULR2,R2
"1010101100000000"WHENADDR="00001110"ANDCS_I='0'ELSE--ADDR2,R3
"0100000000000000"WHENADDR="00001111"ANDCS_I='0'ELSE--L3:
INCR0
"0101000100000000"WHENADDR="00010000"ANDCS_I='0'ELSE--DECR1
"0110000100000000"WHENADDR="00010001"ANDCS_I='0'ELSE--TESTR1
"0111000000001010"WHENADDR="00010010"ANDCS_I='0'ELSE--JNSL2
"1011110000000000"WHENADDR="00010011"ANDCS_I='0'ELSE--OUTR3
"0000000000000000";
ENDA;
8.2ALU(运算器)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;1
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYALUIS
PORT(
X:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Y:
INSTD_LOGIC_VECTOR(7DOWNTO0);
S2,S1,S0:
INSTD_LOGIC;
ALUOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
SF:
OUTSTD_LOGIC
);
ENDALU;
ARCHITECTUREAOFALUIS
SIGNALAA,BB,TEMP:
STD_LOGIC_VECTOR(8DOWNTO0);
BEGIN
PROCESS
BEGIN
IF(S2='0'ANDS1='0'ANDS0='0')THEN--ADD
AA<='0'&X;
BB<='0'&Y;
TEMP<=AA+BB;
ALUOUT<=TEMP(7DOWNTO0);
SF<=TEMP(7);
ELSIF(S2='0'ANDS1='1'ANDS0='0')THEN--INC
AA<='0'&Y;
TEMP<=AA+1;
ALUOUT<=TEMP(7DOWNTO0);
SF<=TEMP(7);
ELSIF(S2='0'ANDS1='1'ANDS0='1')THEN--DEC
AA<='0'&Y;
TEMP<=AA-1;
ALUOUT<=TEMP(7DOWNTO0);
SF<=TEMP(7);
ELSIF(S2='1'ANDS1='1'ANDS0='1')THEN--MUL
AA<='0'&X;
BB<='0'&Y;
TEMP<=AA*BB;
ALUOUT<=TEMP(7DOWNTO0);
ELSIF(S2='1'ANDS1='0'ANDS0='0')THEN--TEST
AA<='0'&Y;
SF<=AA(7);
ELSIF(S2='1'ANDS1='1'ANDS0='0')THEN--Rd->BUS
ALUOUT<=Y;
ELSE
ALUOUT<="00000000";
SF<='0';
ENDIF;
ENDPROCESS;
ENDA;
8.3状态条件寄存器
只保留了用到的SF
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYPSWIS
PORT(
S,LDPSW:
INSTD_LOGIC;
SF:
OUTSTD_LOGIC
);
ENDPSW;
ARCHITECTUREAOFPSWIS
BEGIN
PROCESS(LDPSW)
BEGIN
IF(LDPSW'EVENTANDLDPSW='1')THEN
SF<=S;
ENDIF;
ENDPROCESS;
ENDA;
8.4微程序控制器
内部结构:
(1)