CPU模型机设计课程设计报告Word文件下载.docx
- 文档编号:20675479
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:26
- 大小:532.33KB
CPU模型机设计课程设计报告Word文件下载.docx
《CPU模型机设计课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《CPU模型机设计课程设计报告Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
Ry
空白
格式2:
立即数寻址方式
I
{
格式3:
无操作数寻址方式
格式4:
直接寻址方式
|
Addr
四.模型机的指令系统
CPU的指令集:
操作码OP
IR(15..12)
指令
格式
指令的助记符
指令的内容
00000
3
Idle
无操作PC=PC+1
00001
2
>
LoadData
R0I立即数操作
00010
1
MoveRxRy
Rx(Ry)PC=PC+1
00011
AddRxRy
Rx(Rx)+(Ry)PC=PC+1
00100
SubRxRy
Rx(Rx)-(Ry)PC=PC+1
00101
%
ANDRxRy
Rx(Rx)AND(Ry)PC=PC+1
00110
SHRLRx
逻辑右移PC=PC+1
00111
-
SHLLRx
逻辑左移PC=PC+1
01000
SHRCRx
循环右移PC=PC+1
01001
$
SHLCRx
循环左移PC=PC+1
01010
SwapRxRy
A(Ry)Ry(Rx)Rx(A)PC=PC+1
01011
4
JmpAddr
PCAddrPC=PC+1
01100
JzAddr
If(R0)=0thenPCAddr
elsePC=PC+1
01101
)
ReadAddr
R0(Addr)PC=PC+1
01110
WriteAddr
Addr(R0)PC=PC+1
01111
。
Stop
无操作PC保持不变
10000
XNORRxRy
Rxnot((Rx)OR(Ry))PC=PC+1
10001
;
ORRxRy
Rx(Rx)OR(Ry)PC=PC+1
10010
XORRxRy
Rx(Rx)XOR(Ry)PC=PC+1
10011
~
NOTRxRy
Rx(Rx)PC=PC+1
10100
NANDRxRy
Rxnot((Rx)AND(Ry))PC=PC+1
—
五.处理器的状态跳转操作过程:
(1)、模型机每一状态下的操作及状态跳转
当前状态
执行操作
[
次态与读下一条指令的有关的操作
St_0
取指令
IR(15..0)M_data_in(15..0)
St_1
Write-Read’0’PC=PC+1
;
IFOP=LoadTHEN
R0IR(11..8)||”000000000000”
MARPC
IF(OP=Stop)THEN
ELSESt_2
ENDIF
IFOP=MoveTHENRx(Ry)
IFOP=shrcTHENRx(Rx)循环右移
IFOP=shrlTHENRx(Rx)循环左移
`
IFOP=shrcTHENRx(Rx)逻辑右移
IFOP=shlcTHENRx(Rx)逻辑左移
IFOP=AddTHENA(Ry)
IFOP=SUBTHENA(Ry)
IFOP=NOTTHENA(Rx)
IFOP=ANDTHENA(Ry)
IFOP=NANDTHENA(Ry)
IFOP=ORTHENA(Ry)
IFOP=XORTHENA(Ry)
IFOP=NXORTHENA(Ry)
IFOP=SwapTHENA(Ry)
IFOP=StopTHENNULL
IFOP=IdleTHENNULL
IFOP=JmpTHENNULL
IFOP=JzTHENNULL
IFOP=ReadTHENNULL
\
IFOP=WriteTHENNULL
St_2
IFOP=LoadOROP=MoveOROP=SHRLOROP=SHLLOROP=IdleOROP=SHRCOROP=SHLC
THENNULL
Write-Read’0’
IFOP=AddTHENRx(Rx)+A
IFOP=SubTHENRx(Rx)-A
IFOP=ANDTHENRx(Rx)ANDA
】
IFOP=NANDTHENRx(Rx)NANDA
IFOP=ORTHENRx(Rx)ORA
IFOP=NOTTHENRxNOTA
IFOP=XORTHENRx(Rx)XORA
}
IFOP=NXORTHENRx(Rx)NXORA
IFOP=SwapTHENRy(Rx)
St_3
IFOP=JmpTHEN
(PCIR(1..0)MARIR(10..0))
IFOP=JzTHEN
IF(R0)=0THEN
ELSEMARPC
IFOP=ReadTHENMARIR(10..0)
IFOP=WriteTHEN
MARIR(11..0)MDAR0
?
IFOP=SwapTHENRx(A)
IFOP=JmpNOTOP=Jz
IFOP=Write
St_4
IFOP=Read
IFOP=ReadTHEN
R0M_data_in
(2)》
(3)、简单指令执行状态描述
读内存指令:
(1)St_0:
取指令执行以下操作;
1)M_address(MAR)把指令地址送到地址总线
2)令Write-Read’0’向内存发出读命令(取指令)
3)IR(15..0)M_data_in(15..0)将读出的指令加载于IR(15..0)
4)PC=PC+1至此指令已经全部取出,存在于IR(15..0),为取下一条指令准备地址
(2)St_1:
NULL直接跳转到下一状态
(3)`
(4)St_2:
MARIR(10..0)将数据地址加载于MAR
(5)St_3:
1)M_address(MAR)把数据地址送到地址总线
2)令Write-Read’0’向内存发出读命令(取数据)
3)MARPC把下一条指令地址加载于MAR
(6)St_4:
1)R0M_data_in将来自内存的数据加载于R0,本指令执行完毕
2)M_address(MAR)把下一条指令地址送到地址总线
<
3)令Write-Read’0’向内存发出读命令(取下一条指令)
4)下一状态跳转到St_0
无条件转移指令
4)PC=PC+1(此语句无用,因为程序计数器后续重新复制达到无条件转移目的)
(2)*
(3)St_1:
1)MARIR(10..0)将转移目标地址加载于MAR
2)PCIR(10..0)将转移目标地址加载于PC
1)M_address(MAR)把下一条指令地址送到地址总线
2)令Write-Read’0’向内存发出读命令(取下一条指令)
3)下一状态跳转到St_0
六.CPU的VHDL代码:
libraryieee;
usenamespackis
constantidle:
std_logic_vector(4downto0):
="
00000"
constantload:
00001"
constantmove:
00010"
constantaddp:
00011"
constantsubp:
00100"
]
constantandp:
00101"
constantshrl:
00110"
constantshll:
00111"
constantshrc:
01000"
constantshlc:
01001"
constantswap:
01010"
constantjmp:
01011"
constantjz:
01100"
constantread:
01101"
constantwrite:
01110"
constantstop:
01111"
constantxnorp:
10000"
constantorp:
10001"
constantxorp:
10010"
constantnotp:
10011"
constantnandp:
10100"
endnamespack;
usecpuis
port(
reset:
instd_logic;
clock:
Write_Read:
outstd_logic;
M_address:
outstd_logic_vector(10downto0);
M_data_in:
instd_logic_vector(15downto0);
M_data_out:
outstd_logic_vector(15downto0);
overflow:
outstd_logic);
endcpu;
architectureRTLofcpuis
signalIR:
std_logic_vector(15downto0);
signalMDR:
signalMAR:
std_logic_vector(10downto0);
,
signalstate:
integerrange0to4;
begin
state_change:
process(reset,clock,state)
begin
ifreset='
0'
thenstate<
=0;
elsifclock'
eventandclock='
then
casestateis
when0=>
【
state<
=1;
when1=>
ifIR(15downto11)=Stopthen
else
=2;
endif;
when2=>
《
caseIR(15downto11)is
whenSwap|Jmp|Jz|Read|Write=>
state<
=3;
whenothers=>
state<
=0;
endcase;
when3=>
caseIR(15downto11)is
whenSwap|Jmp|Jz=>
state<
=0;
whenothers=>
=4;
endcase;
whenothers=>
endcase;
》
else
NULL;
endif;
endprocessstate_change;
seq:
process(reset,clock)
variablePC:
std_logic_vector(10downto0);
variableR0,R1,R2,R3:
variableA:
variabletemp:
std_logic_vector(16downto0);
if(reset='
)then
IR<
=(others=>
);
PC:
R0:
R1:
、
R2:
R3:
A:
MAR<
MDR<
elsif(clock'
eventandclock='
1'
)thenoverflow<
='
casestateis
when0=>
=M_data_in;
PC:
=PC+1;
when1=>
if(IR(15downto11)/=Stop)then
=PC;
endif;
caseIR(15downto11)is
whenLoad=>
R0:
000000000000"
&
IR(10downto7);
whenMove=>
--MoveRx,Ry;
caseIR(10downto7)is
when"
0001"
=>
=R1;
0010"
=R2;
0011"
=R3;
0100"
R1:
=R0;
@
0110"
0111"
1000"
R2:
1001"
1011"
when"
1100"
R3:
1101"
1110"
whenothers=>
NULL;
whenShrc=>
--cyclerightshift
caseIR(10downto9)is
00"
=R0(0)&
R0(15downto1);
01"
=R1(0)&
R1(15downto1);
10"
=R2(0)&
R2(15downto1);
=R3(0)&
R3(15downto1);
whenShlc=>
--cycleleftshift
=R0(14downto0)&
R0(15);
=R1(14downto0)&
R1(15);
=R2(14downto0)&
R2(15);
=R3(14downto0)&
R3(15);
whenShrl=>
--logicrightshift
='
&
whenShll=>
--logicleftshift
caseIR(11downto10)is
whenAddp|Subp|Andp|Swap|orp|xorp|xnorp|nandp|notp=>
caseIR(8downto7)is
A:
whenothers=>
when2=>
--state2
whenAddp=>
--Rx:
=Rx+A;
temp:
=(R0(15)&
R0(15downto0))+(A(15)&
A(15downto0));
R0:
=temp(15downto0);
overflow<
=temp(16)XORtemp(15);
=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPU 模型 设计 课程设计 报告