嵌入式CISC模型机设计.docx
- 文档编号:9837949
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:41
- 大小:279.94KB
嵌入式CISC模型机设计.docx
《嵌入式CISC模型机设计.docx》由会员分享,可在线阅读,更多相关《嵌入式CISC模型机设计.docx(41页珍藏版)》请在冰豆网上搜索。
嵌入式CISC模型机设计
1:
课程设计题目
设计一台嵌入式CISC模型计算机:
采用定长CPU周期、联合控制方法,并完成一定功能的机器语言源程序进行验证,机器语言源程序功能如下:
输入5个有符号整数(8位二进制补码表示),求所有正数的平方和并输出显示。
2:
嵌入式CISC模型机数据通路框图
模型机由CISC微处理器、地址寄存器AR、ROM存储器组成。
微处理器有算数逻辑单元ALU、状态条件寄存器、累加器AC、数据暂存器R、通用寄存器R0~R3、程序计数器PC、指令寄存器IR、操作控制器和时序产生器组成。
模型机数据通路如图2-1所示:
图2-1模型机数据通路框图
说明:
外部时钟信号上边沿有效。
3:
操作控制器的逻辑框图
微程序控制器主要由控制存储器、微指令寄存器和地址转移逻辑电路三大部分组成,其中微指令寄存器分为微地址寄存器和微命令寄存器两部分。
微程序控制器在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。
微程序控制器组成原理框图如下图3-1所示。
图3-1微程序控制器组成原理框图
4:
模型机的指令系统和所有指令的指令格式
为了完成求和功能,系统设计了9条指令:
IN(输入指令),MOV(将一个数送入寄存器),CMP(完成比较功能),JB(小于等于跳转),ADD(两数相加),DEC(自减1),JMP(无条件跳转),MUL(两数相乘),OUT(输出)。
助记符号
指令格式
功能
INRd
1000
××
Rd
将数据存到Rd寄存器
OUTRs
1111
Rs
××
(Rs)→LED
ADDRs,Rd
1100
××
Rd
(Rs)+(Rd)→Rd
CMPRs,Rd
1010
Rs
Rd
(Rs)-(Rd),锁存CY和ZI
DECRd
1101
××
Rd
(Rd)+1→Rd
MOVRd,data
1001
××
Rd
data
data→Rd
JMPaddr
1110
××××
addr
addr→PC
JBaddr
1011
××××
addr
若小于,则addr→PC
MULRs,Rd
0001
Rs
Rd
(Rs)*(Rd)→Rd
说明:
①对Rs和Rd的规定:
Rs或Rd
选定的寄存器
00
R0
01
R1
10
R2
11
R3
②模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:
7
6543210
符号位
尾数
5:
所有机器指令的微程序流程图或CPU操作流程图
微程序控制器的设计过程如下:
(1)根据指令格式和指令系统设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;
(2)设计微指令格式和微指令代码表;
(3)设计地址转移逻辑电路;
(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;
(5)设计微程序控制器的顶层电路(由多个模块组成)。
DEC
JMP
ADD
JB
CMP
MOV
IN
MUL
FS=1
FS=0
30
20
07
13
12
06
0F
05
04
03
16
15
0E
0D
0C
0B
0A
09
08
02
00
01
PC→AR
PC+1
READM
BUS→IR
P
(1)
Rs→LED
PC→AR
PC+1
Rd→BUS
BUS→AC
RS→BUS
BUS→AC
PC→AR
PC+1
Rs→BUS
BUS→AC
PC→AR
PC+1
SW→BUS
BUS→Rd
RS→BUS
BUS→AC
ROM→BUS
BUS→PC
AC-1→BUS
BUS→Rd
Rd→BUS
BUS→DR
Rd→BUS
BUS→DR
ROM→BUS
BUS→Rd
Rd→BUS
BUS→DR
P
(2)
ROM→BUS
BUS→PC
AC+DR→Rd
AC→DR
锁存FC、FZ
AC*DR→Rd
00
00
00
00
00
00
00
00
00
00
OUT
6:
操作控制器单元
(1)设计微指令格式和微指令代码表
CISC模型机系统使用的微指令采用全水平型微指令,字长为25位,其中微命令字段为17位,P字段为2位,后继微地址为6位,其格式如下:
2423222120191817161514131211109876543210
LOADLDPCLDARLDIRLDRiRD_BRS_BS1S0ALU_BLDACLDDRWRCSSW_BLED_BLDFRP1P2后继微地址
由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:
LOAD、LDPC、LDAR、LDIR、LDRi、RD_B、RS_B、S1、S0、ALU_B、LDAC、LDDR、WR、CS、SW_B、LED_B、LDFR。
微地址
微命令字段
P1
P1
后继位地址
LOAD
LDPC
LDAR
LDIR
LDRi
RD_B
RS_B
S1
S0
ALU_B
LDAC
LDDR
WR
CS
SW_B
LED_B
LDFR
000000
1
1
1
0
0
1
1
0
0
1
0
0
1
1
1
1
0
0
0
000010
000001
1
0
0
0
0
1
0
0
0
1
1
0
1
1
1
1
0
0
0
010101
000010
1
0
0
1
0
1
1
0
0
1
0
0
1
0
1
1
0
1
0
001000
000011
1
0
0
0
1
1
1
0
0
1
0
0
1
0
1
1
0
0
0
000000
000100
1
0
0
0
0
0
1
0
0
1
0
1
1
1
1
1
0
0
0
000101
000101
1
0
0
0
0
1
1
0
1
1
0
0
1
1
1
1
1
0
0
000000
000110
1
0
0
0
0
0
1
0
0
1
0
1
1
1
1
1
0
0
0
000111
000111
1
0
0
0
1
1
1
0
0
0
0
0
1
1
1
1
0
0
0
000000
001000
1
0
0
0
1
1
1
0
0
1
0
0
1
1
0
1
0
0
0
000000
001001
1
1
1
0
0
1
1
0
0
1
0
0
1
1
1
1
0
0
0
000011
001010
1
0
0
0
0
1
0
0
0
1
1
0
1
1
1
1
0
0
0
000100
001011
1
1
1
0
0
1
1
0
0
1
0
0
1
1
1
1
0
0
1
100000
001100
1
0
0
0
0
1
0
0
0
1
1
0
1
1
1
1
0
0
0
000110
001101
1
0
0
0
0
0
1
0
0
1
1
0
1
1
1
1
0
0
0
010010
001110
1
1
1
0
0
1
1
0
0
1
0
0
1
1
1
1
0
0
0
010012
001111
1
0
0
0
0
1
0
0
0
1
0
0
0
1
1
0
0
0
0
000000
010010
1
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
000000
010011
0
1
0
0
0
1
1
0
0
1
0
0
1
0
1
1
0
0
0
000000
010101
1
0
0
0
0
0
1
0
0
1
0
1
1
1
1
1
0
0
0
010110
010110
1
0
0
0
1
1
1
1
1
0
0
0
1
1
1
1
0
0
0
000000
100000
0
1
0
0
0
1
1
0
0
1
0
0
1
0
1
1
0
0
0
000000
110000
1
0
0
0
0
1
1
0
0
1
0
0
1
1
1
1
0
0
0
000000
(2)设计地址转移逻辑电路
地址转移逻辑电路是根据微程序流程图3-2中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。
由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA4~µA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:
SE5=(FC+FZ)•P
(2)•T4
SE4=I7•P
(1)•T4
SE3=I6•P
(1)•T4
SE2=I5•P
(1)•T4
SE1=I4•P
(1)•T4
7:
嵌入式CISC模型计算机的顶层电路图
在MAX+plusⅡ下设计的CISC模型机的顶层电路图如下图7-1所示。
图7-1嵌入式CISC模型计算机的顶层电路图
8:
汇编语言源程序
MOVR10--R1置为0,保存累加结果
MOVR20--R2置为0,判输入数据正负性,计输入数据的次数
MOVR35--R3置为5,计输入次数
L1:
INR0--外部输入数据存到R0
DECR3--R3减1
CMPR2,R0--比较R2和R0的大小
JBL2--若R2小于R0则跳转L2
CMPR2,R3--判断次数,若不到5次返回L1
JBL1--跳转到L1
JMPL3--若次数达到5次,跳转到L3,输出结果,程序结束
L2:
MULR0,R0--R0大于0,做平方运算,存到R0中
ADDR0,R1--R1用来存累加结果的,故将R0中的平方和R1的值相加
CMPR2,R3--判断次数,若不到5次返回L1
JBL1--跳转到L1
L3:
OUTR1--将正数的平方和输出
9:
机器语言源程序
根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去。
与汇编语言源程序对应的机器语言源程序如下:
助记符地址(十六进制)机器代码功能
MOV1R0,0001001000100H→R0
0100000000
MOV1R1,0021001001000H→R1
0300000000
MOV1R2,5041001001105H→R2
0500000101
L1:
INR00610000000(SW)→R0
DECR30711010011(R0)-1→R3
CMPR2,R00810101000(R2)-(R0)
JBL20910110000若小于,L2→PC
0A00010000
CMPR2,R30B10101011(R2)-(R3)
JBL10C10110000L1→PC
OD00000110
JMPL30E11100000L3→PC
0F00010101
L2:
MULR0,R01000010000(R0)*(R0)→R0
ADDR0,R11111000001(R0)+(R1)→R1
CMPR2,R31210101011(R2)-(R3)
JBL11310110000L1→PC
1400000110
L3:
OUTR11511110100(R1)→LED
10:
机器语言程序的功能仿真波形图及结果分析
结果分析:
输入的整数依次为01H,FFH,01H,02H,FFH。
结果输出:
06H。
计算结果与事实相符,程序正确执行
11:
进行时序仿真是芯片的引脚分配
在进行仿真时主要的引脚分配为:
PC
AR
IR
CROM
R0
R1
R2
R3
MUX1
MUX2
ALU
PSW
ROM
26
23
22
5
15
16
17
18
28
30
2
3
1
12:
故障现象和故障分析
1.CMP指令一开始设为CMPR0,R2导致结果出错。
原来JB指令是小于等于的时候跳转,所以导致结果取反。
之后将CMP指令改为CMPR2,R0,结果程序正确。
2.微程序控制器中采用全水平微指令,在设计AC*DR→Rd指令时忘记设计S0,S1为1,1,即控制为乘法时,变成了加法,导致结果出错。
在仿真时发现结果不对,算的是加法,然后通过修改为乘法,结果正确。
13:
软件清单,含各个部件的VHDL源程序(.VHD)或图形描述文件(.gfd)
13.1:
ALU单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;--有符号型
ENTITYALUIS
PORT(
A:
INSTD_LOGIC_VECTOR(7DOWNTO0);
B:
INSTD_LOGIC_VECTOR(7DOWNTO0);
S1,S0:
INSTD_LOGIC;
BCDOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
CY,ZI:
OUTSTD_LOGIC
);
ENDALU;
ARCHITECTUREAOFALUIS
SIGNALAA,BB,TEMP:
STD_LOGIC_VECTOR(8DOWNTO0);
BEGIN
PROCESS(S1,S0)
BEGIN
IF(S1='0'ANDS0='0')THEN--加法
AA<='0'&A;
BB<='0'&B;
TEMP<=AA+BB;
BCDOUT<=TEMP(7DOWNTO0);
CY<=TEMP(8);
IF(TEMP="100000000"ORTEMP="000000000")THEN
ZI<='1';
ELSE
ZI<='0';
ENDIF;
ELSIF(S1='0'ANDS0='1')THEN--减法
BCDOUT<=A-B;
IF(A
CY<='1';
ZI<='0';
ELSIF(A=B)THEN
Y<='0';
ZI<='1';
ELSE
CY<='0';
ZI<='0';
ENDIF;
ELSIF(S1='1'ANDS0='1')THEN--乘法
AA<='0'&A;
BB<='0'&B;
TEMP<=AA*BB;
BCDOUT<=TEMP(7DOWNTO0);
CY<=TEMP(8);
IF(TEMP="100000000"ORTEMP="000000000")THEN
ZI<='1';
ELSE
ZI<='0';
ENDIF;
ELSIF(S1='1'ANDS0='0')THEN--自减1
AA<='0'&A;
TEMP<=AA-1;
BCDOUT<=TEMP(7DOWNTO0);
CY<=TEMP(8);
IF(TEMP="100000000"ORTEMP="000000000")THEN
ZI<='1';
ELSE
ZI<='0';
ENDIF;
ELSE
BCDOUT<="00000000";
CY<='0';
ZI<='0';
ENDIF;
ENDPROCESS;
ENDA;
13.2:
状态条件寄存器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLS74IS
PORT(
LDFR:
INSTD_LOGIC;
CY,ZI:
INSTD_LOGIC;
FC,FZ:
OUTSTD_LOGIC
);
ENDLS74;--状态寄存器
ARCHITECTUREAOFLS74IS
BEGIN
PROCESS(LDFR)
BEGIN
IF(LDFR'EVENTANDLDFR='1')THEN
FC<=CY;
FZ<=ZI;
ENDIF;
ENDPROCESS;
ENDA;
13.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;
13.4:
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;--3选1数据选择器单元
ARCHITECTUREAOFMUX3IS
BEGIN
PROCESS(SW_B,CS)
BEGIN
IF(SW_B='0')THEN
EW<=ID;--从输入设备输入数据
ELSIF(CS='0')THEN
EW<=N2;--将ROM中读出的指令代码送入内部数据通路
ELSE
EW<=N1;--将5选1多路选择器的输出送入内部数据通路
ENDIF;
ENDPROCESS;
ENDA;
13.5:
5选1数据选择器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYMUX5IS
PORT(
C,D,E,F,G:
INSTD_LOGIC;
X1,X2,X3,X4,x5:
INSTD_LOGIC_VECTOR(7DOWNTO0);
W:
outSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDMUX5;--5选1数据选择器单元
ARCHITECTUREAOFMUX5IS
SIGNALSEL:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
SEL<=G&F&E&D&C;
PROCESS(SEL)
BEGIN
IF(SEL="11110")THEN--输出R0的内容
W<=X1;
ELSIF(SEL="11101")THEN--输出R1的内容
W<=X2;
ELSIF(SEL="11011")THEN--输出R2的内容
W<=X3;
ELSIF(SEL="10111")THEN--输出R3的内容
W<=X4;
ELSIF(SEL="01111")THEN--输出ALU的内容
W<=X5;
ELSE
null;
ENDIF;
ENDPROCESS;
ENDA;
13.6:
程序计数器单元
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";--将pc清0
ELSIF(LDPC'EVENTANDLDPC='1')THEN
IF(LOAD='0')THEN
QOUT<=D;--将数据总线的内容送入pc
ELSE
QOUT<=QOUT+1;--PC+1
ENDIF;
ENDIF;
ENDPROCESS;
O<=QOUT;
ENDA;
13.7:
地址寄存器单元
13.8:
主存储器单元
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 CISC 模型 设计