CPU课程设计报告Word文件下载.docx

上传人:b****5 文档编号:21666834 上传时间:2023-01-31 格式:DOCX 页数:23 大小:118.82KB
下载 相关 举报
CPU课程设计报告Word文件下载.docx_第1页
第1页 / 共23页
CPU课程设计报告Word文件下载.docx_第2页
第2页 / 共23页
CPU课程设计报告Word文件下载.docx_第3页
第3页 / 共23页
CPU课程设计报告Word文件下载.docx_第4页
第4页 / 共23页
CPU课程设计报告Word文件下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

CPU课程设计报告Word文件下载.docx

《CPU课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《CPU课程设计报告Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。

CPU课程设计报告Word文件下载.docx

二.计处理器的结构和实现方法

(指令格式)

格式1:

寄存器寻址方式

1514131211109876543210

OP

Rx

Ry

空白

格式2:

立即数寻址方式

I

格式3:

无操作数寻址方式

格式4:

直接寻址方式

Addr

模型机的指令系统

操作码OP

(15~~12)

指令格式

指令

操作

0000

3

Idle

PC=PC+1

0001

2

Loaddata

R0←IPC=PC+1

0010

1

MoveRxRy

Rx←(Ry)PC=PC+1

0011

AddRxRy

Rx←(Rx)+(Ry)PC=PC+1

0100

ANDRxRy

Rx←(Rx)AND(Ry)PC=PC+1

0101

NANDRxRy

Rx←(Rx)NAND(Ry)PC=PC+1

0110

ORRxRy

Rx←(Rx)OR(Ry)PC=PC+1

0111

XNORRxRy

Rx←(Rx)XNOR(Ry)PC=PC+1

1000

ShrpRxRy

Rx←(Ry)算术右移PC=PC+1

1001

ShlpRxRy

Rx←(Ry)算术左移PC=PC+1

1010

SwapRxRy

A←(Ry);

Ry←(Rx);

Rx←(A);

1011

JampAdder

PC←AdderPC=PC+1

1100

JzAdder

If(R0)=0

thenPC←Adder

ElsePC=PC+1

1101

4

ReadAddr

R0←(Addr)

1110

WriteAddr

(Addr)←R0

PC=PC+1

1111

Stop

无操作,PC不变

处理器的状态跳转操作过程:

(一)、模型机每一状态下的操作及状态跳转

当前状态

执行操作

次态与读下一条指令的有关的操作

St_0

取指令

IR(15..0)M_data_in&

‘00000000’

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=SraTHENRy(Ry)

算术右移

IFOP=SlaTHENRy(Ry)

算术左移

IFOP=AddTHENA(Ry)

IFOP=AndTHENA(Ry)

IFOP=NandTHENA(Ry)

IFOP=OrTHENA(Ry)

IFOP=XnorTHENA(Ry)

IFOP=SwapTHENA(Ry)

IFOP=StopTHENNULL

IFOP=IdleTHENNULL

IFOP=JmpTHENNULL

IFOP=JzTHENNULL

IFOP=ReadTHENNULL

IFOP=WriteTHENNULL

St_2

IFOP=LoadOROP=MoveOROP=SraOROP=SlaOROP=Idle

THENNULL

Write-Read’0’

IFOP=AddTHENRx(Rx)+A

IFOP=ANDTHENRx(Rx)ANDA

IFOP=NANDTHENRx(Rx)NANDA

IFOP=ORTHENRx(Rx)ORA

IFOP=XNORTHENRx(Rx)XNORA

IFOP=SwapTHENRy(Rx)

St_3

IFOP=SkpTHEN

(PCIR(1..0)

IFOP=ReadTHENMARIR(11..0)

IFOP=WriteTHEN

MARIR(11..0)MDAR0

IFOP=SwapTHENRx(A)

IFOP=Skp

IFOP=Write

St_4

IFOP=Read

IFOP=ReadTHEN

R0M_data_in

IFOP=WriteTHEN

St_5

MAR<

=PC;

St_6

IfReadR0:

=M_data_in;

(二)、简单指令执行状态描述

读内存指令:

(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)St_2:

MARIR(11..0)将数据地址加载于MAR

(4)St_3:

1)M_address(MAR)把数据地址送到地址总线

2)令Write-Read’0’向内存发出读命令(取数据)

3)MARPC把下一条指令地址加载于MAR

(5)St_4:

1)R0M_data_in将来自内存的数据加载于R0,本指令执行完毕

2)M_address(MAR)把下一条指令地址送到地址总线

3)令Write-Read’0’向内存发出读命令(取下一条指令)

4)下一状态跳转到St_0

无条件转移指令

4)PC=PC+1(此语句无用,因为程序计数器后续重新复制达到无条件转移目的)

1)MARIR(11..0)将转移目标地址加载于MAR

2)PCIR(11..0)将转移目标地址加载于PC

1)M_address(MAR)把下一条指令地址送到地址总线

2)令Write-Read’0’向内存发出读命令(取下一条指令)

3)下一状态跳转到St_0

三.CPU的VHDL代码

LIBRARYieee;

USEieee.std_logic_1164.ALL;

PACKAGEnamespackIS

CONSTANTidle:

std_logic_vector(3DOWNTO0):

="

0000"

;

CONSTANTload:

0001"

CONSTANTmove:

0010"

CONSTANTaddP:

0011"

CONSTANTandp:

0100"

CONSTANTnandp:

0101"

CONSTANTorp:

0110"

CONSTANTxnorp:

0111"

CONSTANTshrp:

1000"

CONSTANTshlp:

1001"

CONSTANTswap:

1010"

CONSTANTjmp:

1011"

CONSTANTjz:

1100"

CONSTANTread:

1101"

CONSTANTwrite:

1110"

CONSTANTstop:

1111"

ENDnamespack;

USEieee.std_logic_unsigned.ALL;

USEWORK.namespack.ALL;

------------------------cpu实体声明---------------------------------

ENTITYcpuIS

PORT(

reset:

INstd_logic;

--清零信号低有效

clock:

--时钟信号

Write_Read:

OUTstd_logic;

--读写信号,'

1'

为写

M_address:

OUTstd_logic_vector(11DOWNTO0);

--地址线

M_data_in:

INstd_logic_vector(7DOWNTO0);

--数据输入线

M_data_out:

OUTstd_logic_vector(7DOWNTO0);

--数据输出线

overflow:

OUTstd_logic);

--溢出标志

ENDcpu;

------------------------cpu寄存器传输级行为描述--------------------------------

ARCHITECTURERTLOFcpuIS

SIGNALIR:

std_logic_vector(15DOWNTO0);

--指令寄存器

SIGNALMDR:

std_logic_vector(7DOWNTO0);

--数据寄存器

SIGNALMAR:

std_logic_vector(11DOWNTO0);

--地址寄存器

SIGNALstatus:

integerRANGE0TO6;

--状态寄存器

BEGIN

status_change:

PROCESS(reset,clock,status)

BEGIN

IFreset='

0'

THENstatus<

=0;

--进入初始状态

ELSIFclock'

EVENTANDclock='

THEN

CASEstatusIS

WHEN0=>

status<

=1;

WHEN1=>

IFIR(15DOWNTO12)=StopTHEN

ELSE

=2;

ENDIF;

WHEN2=>

CASEIR(15DOWNTO12)IS

WHENSwap|Jmp|Jz|Read|Write=>

status<

=3;

WHENOTHERS=>

status<

=0;

ENDCASE;

WHEN3=>

IFIR(15DOWNTO12)=SwapTHEN

=4;

WHEN4=>

status<

=5;

WHEN5=>

WHENRead|Write=>

=6;

WHENOTHERS=>

ENDCASE;

ELSE

NULL;

ENDIF;

ENDPROCESSstatus_change;

seq:

PROCESS(reset,clock)

VARIABLEPC:

std_logic_vector(11DOWNTO0);

--程序计数器

VARIABLER0,R1,R2,R3:

--通用寄存器

VARIABLEA:

--临时寄存器

VARIABLEtemp:

std_logic_vector(8DOWNTO0);

--临时变量

IF(reset='

)THEN--进入初始状态

IR<

=(OTHERS=>

'

);

PC:

R0:

R1:

R2:

R3:

A:

MAR<

MDR<

ELSIF(clock'

eventANDclock='

)THEN

overflow<

='

CASEstatusIS

WHEN0=>

--状态0

=M_data_in&

"

00000000"

--取指令

PC:

=PC+1;

--程序计数器加1

WHEN1=>

--状态1

IF(IR(15DOWNTO12)/=Stop)THEN

ENDIF;

CASEIR(15DOWNTO12)IS

WHENLoad=>

R0:

&

IR(11DOWNTO8);

WHENMove=>

--MoveRx,Ry;

CASEIR(11DOWNTO8)IS

WHEN"

=>

=R1;

=R2;

=R3;

R1:

=R0;

R2:

WHEN"

R3:

WHENOTHERS=>

NULL;

ENDCASE;

WHENShrp=>

--算术右移;

CASEIR(11DOWNTO10)IS

00"

000"

&

R0(5DOWNTO1);

01"

R1(5DOWNTO1);

10"

R2(5DOWNTO1);

R3(5DOWNTO1);

WHENShlp=>

--算术左移;

=R0(4DOWNTO0)&

"

=R1(4DOWNTO0)&

=R2(4DOWNTO0)&

=R3(4DOWNTO0)&

WHENAddp|Andp|Nandp|Orp|Xnorp|Swap=>

CASEIR(9DOWNTO8)IS

A:

WHENOTHERS=>

WHEN2=>

--状态2

WHENAddp=>

--Rx:

=Rx+A;

temp:

=(R0(7)&

R0(7DOWNTO0))+NOT(A(7)&

A(7DOWNTO0))+1;

R0:

=temp(7DOWNTO0);

overflow<

=temp(8)XORtemp(7);

=(R1(7)&

R1(7DOWNTO0))+NOT(A(7)&

R1:

=(R2(7)&

R2(7DOWNTO0))+NOT(A(7)&

R2:

=(R3(7)&

R3(7DOWNTO0))+NOT(A(7)&

R3:

WHENAndp=>

--Rx:

=RxANDA;

=R0andA;

=R1andA;

=R2andA;

=R3andA;

WHENNandp=>

=RxNANDA;

=R0nandA;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1