课程设计cpuWord文档下载推荐.docx

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

课程设计cpuWord文档下载推荐.docx

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

课程设计cpuWord文档下载推荐.docx

格式2:

立即数寻址方式

I

格式3:

无操作数寻址方式

格式4:

直接寻址方式

Addr

内存(2的11次方)

四.模型机的指令系统

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

ORRxRy

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

00111

XORRxRy

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

01000

NANDRxRy

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

01001

NOTRx

RxNOT(Rx)PC=PC+1

01010

1

SHRRxRy

逻辑循环右移PC=PC+1

01011

SHLRxRy

逻辑循环左移PC=PC+1

01100

SWAPRxRy

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

01101

4

JMPAddr

PCAddrPC=PC+1

01110

JZAddr

If(R0)=0thenPCAddr

elsePC=PC+1

01111

READ

R0(Addr)PC=PC+1

10000

WRITE

Addr(R0)PC=PC+1

10001

3

STOP

无操作PC保持不变

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

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

当前状态

执行操作

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

St_0

取指令

IR(15..0)M_data_in(15..0)

St_1

Write-Read’0’PC=PC+1

IFOP=LoadTHEN

R0”000000000000”||IR(10..7)

MARPC

IF(OP=Stop)THEN

ELSESt_2

ENDIF

IFOP=MoveTHENRx(Ry)

IFOP=ShrTHENRx(Ry)

逻辑循环右移

IFOP=ShlTHENRx(Ry)

逻辑循环左移

IFOP=AddTHENA(Ry)

IFOP=SubTHENA(Ry)

IFOP=NANDTHENA(Ry)

IFOP=ORTHENA(Ry)

IFOP=ANDTHENA(Ry)

IFOP=NOTTHENA(Ry)

IFOP=XORTHENA(Ry)

IFOP=SwapTHENA(Ry)

IFOP=StopTHENNULL

IFOP=IdleTHENNULL

IFOP=JmpTHENNULL

IFOP=JzTHENNULL

IFOP=ReadTHENNULL

IFOP=WriteTHENNULL

St_2

IFOP=LoadOROP=MoveOROP=ShrOROP=ShlOROP=Idle

THENNULL

Write-Read’0’

IFOP=AddTHENRx(Rx)+A

IFOP=SubTHENRx(Rx)-A

IFOP=ANDTHENRx(Rx)ANDA

IFOP=NOTTHENRx(Rx)NOTA

IFOP=NANDTHENRx(Rx)NANDA

IFOP=ORTHENRx(Rx)ORA

IFOP=XORTHENRx(Rx)XORA

IFOP=SwapTHENRy(Rx)

St_3

IF(OP=JmpOROP=Jz)THEN

NULL

IF(OP=ReadOROP=Write)THENNULL

IFOP=SwapTHENRy(Rx)

IFOPE=ReadOROPE=WriteOROPE=JumpOROPE=Jz)THENIRData_in

St_4

PC:

=PC+1;

IFOP=JzTHEN

IF(R0)=0THEN

(PCIR(10..0)MARIR(10..0))

ELSEMARPC

St_5

IFOP=JmpTHEN

IFOP=ReadTHENMARIR(10..0)

IFOP=WriteTHEN

MARIR(10..0)MDAR0

IF(OPE=Jump)OR(OPE=Jz)

St_0;

MARPC;

IF(OPE=Read)

St_6;

St_6

IFOP=Read

THENR0=M_data_in;

Write-Read’1’

6.CPU的代码

modulecpu(reset,clock,Write_Read,M_address,M_data_in,M_data_out,overflow);

inputreset;

inputclock;

outputWrite_Read;

output[10:

0]M_address;

input[15:

0]M_data_in;

output[15:

0]M_data_out;

outputoverflow;

regoverflow;

reg[15:

0]IR;

0]MDR;

reg[10:

0]MAR;

reg[2:

0]status;

parameter[4:

0]Idle=5'

d0,

load=5'

d1,

move=5'

d2,

addp=5'

d3,

subp=5'

d4,

andp=5'

d5,

orp=5'

d6,

xorp=5'

d7,

nandp=5'

d8,

notp=5'

d9,

shrp=5'

d10,

shlp=5'

d11,

swap=5'

d12,

jmp=5'

d13,

jz=5'

d14,

read=5'

d15,

write=5'

d16,

stop=5'

d17;

always@(negedgeresetornegedgeclock)

begin:

status_change

if(reset==1'

b0)

status<

=0;

else

case(status)

0:

=1;

1:

if(IR[15:

11]==stop)

else

=2;

2:

case(IR[15:

11])

swap,jmp,jz,read,write,nandp,notp:

=3;

default:

endcase

3:

11]==swap)

=4;

4:

=5;

5:

read,write:

=6;

6:

status<

=0;

end

always@(negedgeresetornegedgeclock)

seq

0]PC;

0]R0;

0]R1;

0]R2;

0]R3;

0]A;

reg[16:

0]temp;

begin

IR<

={16{1'

b0}};

PC={11{1'

R0={16{1'

R1={16{1'

R2={16{1'

R3={16{1'

A={16{1'

MAR<

={11{1'

MDR<

overflow<

=1'

b0;

=M_data_in;

PC=PC+1'

b1;

=PC;

load:

R0={{12{1'

b0}},IR[10:

7]};

move:

case(IR[10:

7])

4'

b0001:

R0=R1;

b0010:

R0=R2;

b0011:

R0=R3;

b0100:

R1=R0;

b0110:

R1=R2;

b0111:

R1=R3;

b1000:

R2=R0;

b1001:

R2=R1;

b1011:

R2=R3;

b1100:

R3=R0;

b1101:

R3=R1;

b1110:

R3=R2;

;

shrp:

9])

2'

b00:

R0={1'

b0,R0[15:

1]};

b01:

R1={1'

b0,R1[15:

b10:

R2={1'

b0,R2[15:

R3={1'

b0,R3[15:

shlp:

R0={R0[14:

0],1'

b0};

R1={R1[14:

R2={R2[14:

R3={R3[14:

addp,subp,andp,orp,nandp,notp,xorp,swap:

case(IR[8:

A=R0;

A=R1;

A=R2;

A=R3;

addp:

temp=({R0[15],R0[15:

0]})+({A[15],A[15:

0]});

R0=temp[15:

0];

=temp[16]^temp[15];

temp=({R1[15],R1[15:

R1=temp[15:

temp=({R2[15],R2[15:

R2=temp[15:

temp=({R3[15],R3[15:

R3=temp[15:

subp:

0]})+(~({A[15],A[15:

0]}))+1'

temp=({R1[7],R1[15:

andp:

R0=R0&

A;

R1=R1&

R2=R2&

R3=R3&

orp:

R0=R0|A;

R1=R1|A;

R2=R2|A;

R3=R3|A;

xorp:

R0=R0^A;

R1=R1^A;

R2=R2^A;

R3=R3^A;

nandp:

R0=~(R0&

A);

R1=~(R1&

R2=~(R2&

b11:

R3=~(R3&

notp:

R0=~A;

R1=~A;

R2=~A;

R3=~A;

swap:

R0=A;

R1=A;

R2=A;

R3=A;

jmp:

PC=IR[10:

=IR[10:

jz:

if(R0==16'

b0000000000000000)

read:

write:

=R0;

R0=M_data_in;

assignM_address=MAR;

assignM_data_out=MDR;

assignWrite_Read=(reset==1'

b1&

status==5&

IR[15:

11]==write)?

1'

b1:

endmodule

七模型机在QuartusII环境下的应用:

步骤:

1.建立工程:

工程名cpu。

2.编写cpu的verilog代码,将其添加到工程,仿真保存。

3.再建立computer文件,链接虚拟电路。

4.建立内存数据的mif2文件。

5.建立computer的Block1进行编译。

6.对computer进行功能模拟。

7.调出并分析仿真波形。

八仿真波形:

九课程设计的总结:

因为这次课程设计时间和期末考试有一些冲突,所以要分出一些精力复习其他科目,以至于最后不得不在学姐的程序基础上进行修改才得以完成本次课设。

总体来说对自己不是很满意吧,考试要复习虽然是原因但不能作为借口,因为有些同学还是凭借自己的能力完成了课设,可以说要成为一个合格的IC从业者我还有很长的路要走。

但是这次课设也不是完全的没有意义,虽然结果不尽人意,但是从中也学到了很多东西,看到了自己的不足,在今后的学习中我会努力完善自己,争取下次更好!

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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