设计一台嵌入式CISC模型计算机.doc
《设计一台嵌入式CISC模型计算机.doc》由会员分享,可在线阅读,更多相关《设计一台嵌入式CISC模型计算机.doc(37页珍藏版)》请在冰点文库上搜索。
桂林电子科技大学课程设计论文报告纸
编号:
计算机组成原理课程设计说明书
题目:
设计一台嵌入式CISC模型计算机
系别:
专业:
学生姓名:
学号:
指导教师:
2013年4月09日
目录
1课程设计的题目及内容 1
1.1课程设计的题目 1
1.2课程设计完成的内容 1
2总体设计 2
2.1CISC模型机数据通路框图 2
2.2操作控制器的逻辑结构框图 2
2.3模型机的指令系统和所有指令的指令格式 3
2.4所有机器指令的微程序流程图 5
3汇编语言及机器语言源程序 8
3.1汇编语言源程序 8
3.2机器语言源程序 8
4机器语言源程序的功能仿真波形图及结果分析 9
5故障现象与故障分析 12
6体会 13
7软件清单 14
7.1算术逻辑运算单元ALU 14
7.2状态条件寄存器单元 16
7.3通用寄存器单元 16
7.41:
2分配器单元 17
7.53选1数据选择单元 18
7.5.13选1数据选择器MUX3_1 18
7.5.23选1数据选择器MUX3_2 18
7.64选1数据选择器单元 19
7.6.14选1数据选择器MUX4_1 19
7.6.14选1数据选择器MUX4_2 20
7.7程序计数器单元 21
7.8地址寄存器单元 22
7.9ROM存储器单元 23
7.10RAM存储器单元 24
7.11指令寄存器单元 25
7.12指令转换器单元 25
7.13时序产生器单元 26
7.14微程序控制器单元 27
1课程设计的题目及内容
1.1课程设计的题目
设计一台嵌入式CISC模型计算机(采用定长CPU周期、联合控制方式),并运行能完成一定功能的机器语言程序进行验证,机器语言源程序功能如下:
要求连续输入5个有符号整数(用8位二进制补码表示,十六进制数输入)求所有负数的平方和并输出显示。
说明:
①5个有符号数从外部输入;
②一定要使用符号位(比如说SF),并且要使用负的时候转移(JS)或不为负的时候转移(比如说JNS)指令。
③采用三数据总线结构的运算器,采用RAM,先将输入数据依次存放在RAM的某一连续的存储区域内,再依次读出判断是否为负数,若为负数再求其平方和。
1.2课程设计完成的内容
1.完成系统的总体设计,画出模型机数据通路框图;
2.设计微程序控制器(CISC模型计算机)的逻辑结构框图;
3.设计机器指令格式和指令系统;
4.设计时序产生器电路;
5.设计所有机器指令的微程序流程图;
6.设计操作控制器单元;
在CISC模型计算机中,设计的内容包括微指令格式(建议采用全水平型微指令)、微指令代码表(根据微程序流程图和微指令格式来设计)和微程序控制器硬件电路(包括地址转移逻辑电路、微地址寄存器、微命令寄存器和控制存储器等。
具体电路根据微程序控制器的逻辑结构框图、微指令格式和微指令代码来设计)。
7.设计模型机的所有单元电路,并用VHDL语言(也可使用GDF文件----图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件;
8.由给出的题目和设计的指令系统编写相应的汇编语言源程序;
9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去;
10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。
)
2总体设计
2.1CISC模型机数据通路框图
整个系统数据通路如下所示,但是在数据Cache处(RAM)将双向的数据总线改为单向的输出数据总线和输入数据总线,还有就是所有的输出总线不能直接连接,需增加多路选择器。
2.2操作控制器的逻辑结构框图
…
…
指令寄存器IR
操作码
微地址寄存器
地址译码
控制存储器
地址转移
逻辑
状态条件
微命令寄存器
P字段
操作控制字段
微命令信号
2.3模型机的指令系统和所有指令的指令格式
本指令系统共采用了12条不同功能的指令,指令字长度为双字节,寻址方式有三种,分别是寄存器寻址、直接寻址和立即寻址。
为了完成求负数和的平方和的功能,系统共设计了12条指令:
IN1(输入),OUT1(输出),MOV(将一个数送入寄存器),LAD(取数),STOI(存数),JNS(条件转移指令),JMP(无条件跳转指令),ADD(两数相加),MUL(两数相乘),INC(自增1),DEC(字减1),TEST(测试)。
下面分类介绍这些指令的指令格式。
(1)I/O指令
输入指令(IN1)格式:
15—12
1110
98
7—0
操作码
XX
Rd
XXXXXXXX
输出指令(OUT1)格式:
15—12
1110
98
7—0
操作码
Rs
XX
XXXXXXXX
(2)转移指令
条件转移指令(JNS)格式:
15—12
1110
98
7—0
操作码
XX
XX
addr
无条件跳转指令(JMP)格式:
15—12
1110
98
7—0
操作码
XX
XX
addr
(3)数据传输指令
传数指令(MOV)格式:
15—12
1110
98
7—0
操作码
XX
Rd
im
取数指令(LAD)格式:
15—12
1110
98
7—0
操作码
Rs
Rd
XXXXXXXX
存数指令(STOI)格式:
15—12
1110
98
7—0
操作码
Rs
Rd
XXXXXXXX
(4)运算指令
加法指令(ADD)格式:
15—12
1110
98
7—0
操作码
Rs
Rd
XXXXXXXX
乘法指令(MUL)格式:
15—12
1110
98
7—0
操作码
Rs
Rd
XXXXXXXX
自加1指令(INC)格式:
15—12
1110
98
7—0
操作码
XX
Rd
XXXXXXXX
自减1指令(DEC)格式:
15—12
1110
98
7—0
操作码
XX
Rd
XXXXXXXX
测试指令(TEST)格式:
15—12
1110
98
7—0
操作码
Rs
XX
XXXXXXXX
由此可见,本模型机中的指令系统共有12条基本指令。
表2.3给出了每条指令的助记符、指令格式和功能。
助记符号
指令格式
功能
15—12
1110
98
7—0
IN1Rd
0001
XX
Rd
XXXXXXXX
输入设备→Rd
MOVRd,im
0010
XX
Rd
im
立即数→Rd
LAD(Rs),Rd
0011
Rs
Rd
XXXXXXXX
((Rs))→Rd
ADDRs,Rd
0100
Rs
Rd
XXXXXXXX
(Rs)+(Rd)→Rd
INCRd
0101
XX
Rd
XXXXXXXX
(Rd)+1→Rd
DECRd
0110
XX
Rd
XXXXXXXX
(Rd)-1→Rd
JNSaddr
0111
XX
XX
addr
若为正数,addr→PC
STOIRs,(Rd)
1000
Rs
Rd
XXXXXXXX
(Rs)→(Rd)
JMPaddr
1001
XX
XX
addr
addr→PC
OUT1Rs
1010
Rs
XX
XXXXXXXX
(Rs)→输出设备
MULRs,Rd
1011
Rs
Rd
XXXXXXXX
(Rs)*(Rd)→Rd
TESTRs
1100
Rs
XX
XXXXXXXX
测试符号位
其中,对Rs和Rd的规定:
Rs或Rd
选定的寄存器
00
R0
01
R1
10
R2
11
R3
模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:
7
6543210
符号位
尾数
T1、T2、T3、T4与CLR、Q之间的关系图
Q
CLR
T1
T2
T3
T4
一个CPU周期
现在,我们开始微程序控制器的设计,它包括以下几部分工作:
(1)根据指令格式和指令系统设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;
(2)设计微指令格式和微指令代码表;
(3)设计地址转移逻辑电路;
(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;
(5)设计微程序控制器的顶层电路。
2.4所有机器指令的微程序流程图
PC→ABUS(I)
RDROM
IBUS→IR
PC+1
P
(1)
00
STOI
TEST
MUL
OUT1
MOV
JMP
JNS
ADDD
IN1
LADD
DEC
INC
0C
03
04
01
0B
0A
09
08
07
06
05
02
Rs→X
锁存CF、SF
Rs→X
Rd→Y
X*Y→Rd
锁存CF、SF
Rs→LED
IR(A)→PC
Rd→AR
Rd→Y
Y-1→Rd
锁存CF、SF
Rd→Y
Y+1→Rd
锁存CF、SF
Rs→X
Rd→Y
X+Y→Rd
锁存CF、SF
Rs→AR
IR(A)→Rd
SW→Rd→
0E
0D
00
00
00
00
RDRAM
DBUS→Rd
RDRAM
DBUS→Rd
00
00
00
00
00
00
P
(2)
IR(A)→PC
00
00
SF=1
0F
00
SF=0
CISC模型机系统使用的微指令采用全水平型微指令,字长为26位,其中微命令字段为18位,P字段为2位,后继微地址为6位,其格式如下:
252423222120191817161514131211109876543210
LOADLDPCLDARLDIRLDRiLDPSWRS_BS2S1S0ALU_BSW_BLED_SRD_DCS_DRAM_BCS_IADDR_BP1P2后继微地址
由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:
LOAD、LDPC、LDAR、LDIR、LDRi、LDPSW、RD_B、RS_B、s2、S1、S0、ALU_B、SW_B、LED_S、RD_D、CS_D、RAM_B、CS_I、ADDR_B。
微地址
LOAD
LDPC
LDAR
LDIR
LDRi
LDPSW
RS_B
S2
S1
S0
ALU_B
SW_B
LED_S
RD_D
CS_D
RAM_B
CS_I
ADDR_B
P1
P2
后继微地址
000000
1
1
0
1
0
0
1
0
0
0
1
1
1
1
1
1
0
1
1
0
000000
000001
1
0
0
0
1
0
1
0
0
0
1
0
1
1
1
1
1
1
0
0
000000
000010
1
0
0
0
1
0
1
0
0
0
1
1
1
1
1
1
1
0
0
0
000000
000011
1
0
1
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
001101
000100
1
0
0
0
1
1
1
0
0
0
0
1
1
1
1
1
1
1
0
0
000000
000101
1
0
0
0
1
1
1
0
1
0
0
1
1
1
1
1
1
1
0
0
000000
000110
1
0
0
0
1
1
1
0
1
1
0
1
1
1
1
1
1
1
0
0
000000
000111
1
0
0
0
0
0
1
0
0
0
1
1
1
1
1
1
1
1
0
0
000000
001000
1
0
1
0
0
0
1
1
1
0
0
1
1
1
1
1
1
1
0
0
001110
001001
0
1
0
0
0
0
1
0
0
0
1
1
1
1
1
1
1
0
0
0
000000
001010
1
0
0
0
0
0
0
0
0
0
1
1
0
1
1
1
1
1
0
0
000000
001011
1
0
0
0
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
0
000000
001100
1
0
0
0
0
1
1
1
0
1
1
1
1
1
1
1
1
1
0
0
000000
001101
1
0
0
0
1
0
1
0
0
0
1
1
1
1
0
0
1
1
0
0
000000
001110
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
1
1
1
0
0
000000
010000
0
1
0
0
0
0
1
0
0
0
1
1
1
1
1
1
1
0
0
0
000000
第三步:
设计好了微指令代码表之后,开始设计地址转移逻辑电路
地址转移逻辑电路是根据微程序流程图3-2中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。
由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA4~µA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:
(µA5的异步置“1”端SE5实际未使用)
SE4=SF·P
(2)·T4
SE3=I15·P
(1)·T4
SE2=I14·P
(1)·T4
SE1=I13·P
(1)·T4
SE0=I12·P
(1)·T4
2.5嵌入式CISC模型计算机的顶层电路图
3汇编语言及机器语言源程序
3.1汇编语言源程序
地址(十六进制)
汇编语言源程序
00
MOVR1,00H
01
MOVR2,04H
02
L0:
IN1R0
03
STOIR0,(R1)
04
INCR1
05
DECR2
06
JNSL0
07
MOVR0,0
08
MOVR1,00H
09
MOVR2,04H
0A
L1:
LAD(R1),R3
0B
TESTR3
0C
JNSL2
0D
MULR3,R3
0E
ADDR3,R0
0F
L2:
INCR1
10
DECR2
11
JNSL1
12
END:
OUT1R0
13
JMPEND
3.2机器语言源程序
根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去:
地址(十六进制)
汇编语言源程序
机器语言源程序(二进制)
00
MOVR1,00H
0010000100000000
01
MOVR2,04H
0010001000000100
02
L0:
IN1R0
0001000000000000
03
STOIR0,(R1)
1000000100000000
04
INCR1
0101000100000000
05
DECR2
0110001000000000
06
JNSL0
0111000000000010
07
MOVR0,0
0010000000000000
08
MOVR1,00H
0010000100000000
09
MOVR2,04H
0010001000000100
0A
L1:
LAD(R1),R3
0011011100000000
0B
TESTR3
1100110000000000
0C
JNSL2
0111000000001111
0D
MULR3,R3
1011111100000000
0E
ADDR3,R0
0100110000000000
0F
L2:
INCR1
0101000100000000
10
DECR2
0110001000000000
11
JNSL1
0111000000001010
12
END:
OUT1R0
1010000000000000
13
JMPEND
1001000000010010
4机器语言源程序的功能仿真波形图及结果分析
上图所示是汇编程序中前2个MOV指令的仿真执行过程。
可以看到,R1寄存器的内容是00,R2寄存器的内容由00变为04了。
然后执行IN1指令,输入数据,输入了FE,由上图可以看到,IN1指令执行完后R0寄存器中内容变成了FE。
再执行STOI指令,将(R0)→(R1),可以看到,执行完该指令后,RAM的00H存储器的内容为FE。
然后执行INC指令,可以看到,R1的内容由00变为01,然后执行DEC指令,R2的内容由04变为03,然后执行JNS指令,判断的出R2的内容的符号位为0,跳转到L0。
然后再循环执行IN1,STOI,INC,DEC,JNS指令,直至R2的内容的符号位为1。
共执行了IN1,STOI,INC,DEC,JNS指令各五次,可以由上图看到,依次输入的五个数为FE,02,FE,FE,FE。
R0的内容依次为FE,02,FE,FE,FE。
R1的内容00→01→02→03→04→05,R2的内容04→03→02→01→00→FF。
已将输入的五个数据依次存放在RAM的00H—05H连续的五个存储区域,00H存储单元的内容为FE,01H存储单元的内容为02,02H存储单元的内容为FE,03H存储单元的内容为FE,03H存储单元的内容为FE,04H存储单元的内容为FE。
然后执行3个MOV指令,可以看到R0的内容由FE变为00,R1的内容由05变为00,R2的内容由FF变为04。
然后执行LAD指令,取数功能,将RAM的00存储器中的内容FE取出放入R3中,由上图可以看到,R3的内容由00变成了FE。
然后执行TEST指令,测试R3的内容,然后执行JNS指令,若R3中的内容的SF=0,则跳转到L2。
若R3中的内容的SF=1,则顺序执行程序。
因为R3中的内容为FE,其SF=1,故顺序执行程序。
然后执行MUL指令,由上图可以看到,FE求平方和之后结果是04,R3变成04,然后执行ADD操作,和放在R0中,R0变成04。
R1自增1变成01,R2自减1变成03。
程序顺序执行下条语句。
R2的符号位为0,跳转到L1执行。
此后取数次数还剩四次,取出02,结果判断,可以得出程序不会顺序执行乘法,而是跳转到L2执行INC,DEC,然后判断到非负数之后,继续跳转到L1执行。
此后取数次数还剩3次,取出三个FE,结果判断,可以得出程序会顺序执行乘法,加法。
经过五次取数后,最终结果如下所示:
可以看出,此时R0中存放的10就是结果,数据输出端OUTBUS输出的就是R0内的数据。
输入数据是:
FE02FEFEFE运算后结果是10。
这是正确的。
结果分析:
输入五个数:
00→FE,01→02,02→FE,03→FE,04→FE
输出:
10H
输入的五个数中负数都为:
FE,二进制原码分别为10000010,转化十进制为-2,则(-2)2+(-2)2+(-2)2+(-2)2=16,用十六进制为10H,所以结果正确。
5故障现象与故障分析
在做这次课设时遇到了挺多的问题,但最终通过查阅资料,还有请教老师,同学及自己的努力下,我终于完成了课设。
通过对问题的解决,增长了我解决问题的能力。
下面就把所遇到的问题来个简单的总结:
首先,在写汇编语言程序时,遇到的问题是无法实现将输入数据依次存放在RAM的某一连续的存储区域内,后来通过看老师给的PPT资料,以及请教老师和同学,终于完成了汇编语言程序,能将五个数据存入到存储区域内。
其次,碰到的一个比较头痛的问题是,画顶层电路图时候,明明画的图没错,可是编译时却一直报错。
一开始不知道,经过了无数次痛苦的挣扎后才发现,