-
实用文案
哈尔滨理工大学
软件学院
课程设计报告
课
程
片上计算机系统
题
目
CPU
模型机设计
班
级
集成
14-2
班
专
业
集成电路设计与集成系统
学
生
宋鸿飞
学
号
1414020210
指导教师
崔林海
2016
年
07
月
8
日
文案大全
实用文案
索
引:
1
.课
程设计的目的及要求………………………………………
3
p>
2
.处理器的设计思想和设计内容………………………………
3
3
.设计处理器
的结构和实现方法………………………………
3
4
.模型机的指令系统……………………………………………
4
5
.处理器的状态跳转操
作过程…………………………………
4
6.
CPU
的
Verilog
代码……………………………………………
7
7.
模型机在
Quartus
II
环境下的应用…………………………
16
8.
仿真波形………………………………………………………
16
9.
课程设计的总结………………………………………………
18
文案大全
实用文案
一.
课程设计的目:
目的:了解
Quartus
II
软件的应用,学习
Quartus
II
环境下设计
CPU
的基
本过程;掌握
CPU
设计
代码的含义以及
CPU
的工作原理;了解
CPU
与内存
RAM
间的连接数据的
传输过程;学习在
Quartus II
环境下建立模型机的具
体过程。
融会贯通本课程各章节的内容,
通过知识的综合运用,
加深对计算机系统各模块
的工作原理及相互联系的认识。
学习设计和调试计算机的基本步骤和方法,
提高
使用软件仿真工具和集成电路的基本技能。
培养科学研究的独立工作能力,
取得
工程设计与组装调试的实践和经验。
二.
处理器的设计思想和设计内容:
我
设计的是
16
位
cpu
,
5
位的操作码,
18
条指令,其中包含了
4
种寻址方
式。内存容量为
2k
。
<
/p>
这个
CPU
是参考学姐的程序,在学姐的
程序的基础上增加了一些指令得到
的。
三.
设计处理器的结构和实现方法:
(指令格式)
格式
< br>1
:寄存器寻址方式
15
14 13 12 11 10 9 8 7 6 5 4
3 2 1 0
OP
Rx
Ry
空白
格式
2
:立即数寻址方式
15 14
13 12 11 10 9 8 7 6 5 4 3 2
1 0
OP
I
空白
格式
3
:无
操作数寻址方式
15 14 13 12 11
10 9 8 7 6 5 4 3 2 1 0
OP
空
白
空白
格式
4
:直接寻址方式
15 14
13 12 11 10 9 8 7 6 5 4 3
2 1 0
OP
Addr
内存(
2
的
11
次方
)
文案大全
实用文案
四.
模型机的指令系统
CPU
的指令集:
操作码
OP
指令
IR(15..1
格式
2)
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
指
令
的
助
记
符
Idle
Load
Data
Move
Rx Ry
Add
Rx
Ry
Sub
Rx
Ry
AND
Rx
Ry
OR
Rx
Ry
XOR
Rx
Ry
NAND
Rx
Ry
NOT
Rx
SHR
Rx Ry
SHL Rx Ry
SWAP
Rx Ry
JMP
Addr
JZ Addr
READ
WRITE
STOP
指
令
的
内
容
3
2
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
3
无操作
PC=PC+1
R0
?
I
立即数操作
Rx
?
(Ry) PC=PC+1
Rx
?
(Rx)+(Ry)
PC=PC+1
Rx
?
(Rx)-(Ry) PC=PC+1
Rx
?
(Rx)
AND
(Ry) PC=PC+1
Rx
?
(Rx)
OR
(Ry) PC=PC+1
Rx
?
(Rx)
XOR
(Ry)
PC=PC+1
Rx
?
(Rx)N
< br>AND
(Ry) PC=PC+1
Rx
?
NOT (Rx)
PC=PC+1
逻辑循环右移
PC=PC+1
逻辑循环左移
PC=PC+1
A
?
(Ry)
Ry
?
(Rx)
Rx
?
(A) PC=PC+1
PC
?
Addr
PC=PC+1
If (R0)=0 then
PC
?
Addr
else
PC=PC+1
R0
?
(Addr)
PC=PC+1
Addr
?
(R0)
PC=PC+1
无操作
PC
保持不变
五.
处理器的状态跳转操作过程:
文案大全
实用文案
(
一
)
、模型机每一状态下的操作及状
态跳转
当
前
状
执行操作
次态与读下一条指令的有关的操作
态
St_0
取指令
St_1
< br>IR(15..0)
?
M_data_in
(
15..0
)
Write-Read
?
’
0
’
PC=PC+1
St_1
IF
OP=Load
THEN
MAR
?
PC
R0
?
”<
/p>
”
IF
(OP=
Stop)
THEN
||IR(10..7)
St_1
IF
OP=Move
THEN
Rx
ELSE
St_2
END IF
?
(Ry)
IF
OP=
Shr
THEN
Rx
?
(Ry)
逻辑循环右移
IF
OP=
Shl
THEN
Rx
?
(Ry)
逻辑循环左移
IF
OP=
Add
THEN
A
?
(Ry)
IF
OP=
Sub
THEN
A
?
(Ry)
IF
OP=NAND THEN
A
?
(Ry)
IF OP=OR THEN
A
?
(Ry)
IF
OP= AND
THEN
A
?
(Ry)
IF
OP=NOT
THEN
A
?
(Ry)
IF
OP=
XOR
THEN
A
?
(Ry)
IF
OP=
Swap
THEN
A
?
(Ry)
IF
OP=Stop
THEN
NULL
IF
OP=Idle
THEN
NULL
IF
OP=Jmp
THEN NULL
IF
OP=Jz
THEN
NULL
IF
OP=Read
THEN NULL
IF
OP=Write
THEN
NULL
IF
OP=
Load
OR
OP=Move
OR
St_0
OP=Shr
OR
OP=Shl
OR
OP=Idle
Write-Read
?
’
0
’
THEN
NULL
IF
OP=
Add
THEN
Rx
?
(Rx)+A
IF
OP=
Sub
THEN
Rx
?
(Rx)-A
IF
OP=
AND
THEN
Rx
?
(Rx)
AND
A
IF
OP= NOT
THEN
Rx
?
(Rx)
St_2
文案大全
实用文案
St_3
St_4
St_5
St_6
NOT
A
IF
OP=
N
AND
THEN
Rx
?
(Rx)N
AND
A
IF
OP=
OR
THEN
Rx
?
(Rx)
OR
A
IF
OP=
XOR
THEN
Rx
?
(Rx)
XOR
A
IF
OP= Swap
THEN
Ry
?
(Rx)
St_3
IF (
OP= Jmp
OR
OP=Jz
) THEN
Write-Read
?
’
0
’
NULL
IF(
OP=Read
OR
OP=Write
)
THEN
NULL
IF
OP=
Swap
THEN
Ry
?
(Rx)
St_0
Write-Read
?<
/p>
’
0
’
IF
OPE=
Read
OR
OPE=
Write
OR
St_4
OPE=Jump
OR
OPE=Jz)
THEN
PC:=PC+1;
IR
?
Data_in
Write-Read<
/p>
?
’
0
’
IF
OP=
Jz
THEN
St_5
IF
(R0)=0
THEN
Write-Read
?
’
0
’
(PC
?
IR(10..0)
MAR
?
IR(10..0))
ELSE
MAR
?
PC
IF
OP= Jmp
THEN
(PC
?
IR(10..0)
MAR
?
IR(10..0))
IF
OP=
Read
THEN
MAR
?
IR(10..0)
IF
OP=
Write
THEN
MAR
?
IR(10..0)
MDA
?
R0
IF
< br>(OPE=Jump
)OR(
OPE=J
z)
St_0;
MAR
p>
?
PC;
Write-Read
?
’
0
’
IF
(OPE=Read)
St_6;
MAR
?
PC;
Write-Read
?
’
0
’
St_6;
MAR
?
PC;
Write-Read
?
’
0
’
IF
OP=Read
St_0
THEN
R0=M_data_in;
Write-Read
?
’
1
’
6. CPU
的代码
module cpu(reset, clock, Write_Read,
M_address, M_data_in, M_data_out,
overflow);
input
reset;
文案大全
实用文案
input
clock;
output Write_Read;
output [10:0] M_address;
input [15:0] M_data_in;
output
[15:0] M_data_out;
output
overflow;
reg overflow;
reg [15:0] IR;
reg [15: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 @(negedge
reset or negedge clock )
begin:
status_change
if (reset == 1'b0)
status <= 0;
else
case (status)
0 :
status <= 1;
1 :
if (IR[15:11] == stop)
文案大全
实用文案
status <= 1;
else
status <= 2;
2 :
case (IR[15:11])
swap, jmp, jz, read, write,nandp,notp:
status <= 3;
default
:
status <= 0;
endcase
3 :
if (IR[15:11] ==
swap)
status <= 0;
else
status <= 4;
4 :
status <= 5;
5 :
case (IR[15:11])
read, write :
status <= 6;
default :
status <= 0;
endcase
6 :
status<=0;
default :
status <= 0;
endcase
end
always @(negedge
reset or negedge clock)
begin: seq
reg [10:0] PC;
reg [15:0] R0;
reg [15:0]
R1;
reg [15:0] R2;
reg [15:0] R3;
reg [15:0] A;
reg [16:0]
temp;
if (reset == 1'b0)
begin
文案大全
实用文案
IR
<= {16{1'b0}};
PC =
{11{1'b0}};
R0 = {16{1'b0}};
R1 = {16{1'b0}};
R2 = {16{1'b0}};
R3 =
{16{1'b0}};
A = {16{1'b0}};
MAR <= {11{1'b0}};
MDR <= {16{1'b0}};
end
else
begin
overflow <= 1'b0;
case (status)
0 :
begin
IR <= M_data_in
PC
= PC + 1'b1;
end
1 :
begin
MAR <= PC;
case (IR[15:11])
load :
R0 = {{12{1'b0}}, IR[10:7]};
move :
case
(IR[10:7])
4'b0001 :
R0 = R1;
4'b0010 :
R0 = R2;
4'b0011 :
R0 = R3;
4'b0100 :
R1 = R0;
4'b0110 :
R1 = R2;
4'b0111 :
R1 = R3;
4'b1000 :
R2 = R0;
4'b1001 :
R2 = R1;
4'b1011 :
文案大全
-
-
-
-
-
-
-
-
-
上一篇:概率论与数理统计作业
下一篇:伊朗概况