课程设计cpuWord文档下载推荐.docx
- 文档编号:19772793
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:23
- 大小:76.75KB
课程设计cpuWord文档下载推荐.docx
《课程设计cpuWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《课程设计cpuWord文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
格式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从业者我还有很长的路要走。
但是这次课设也不是完全的没有意义,虽然结果不尽人意,但是从中也学到了很多东西,看到了自己的不足,在今后的学习中我会努力完善自己,争取下次更好!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 cpu