《单周期CPU设计》实验报告文档格式.docx
- 文档编号:22712142
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:30
- 大小:337.29KB
《单周期CPU设计》实验报告文档格式.docx
《《单周期CPU设计》实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《《单周期CPU设计》实验报告文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
010010
rdJrs|rt;
逻辑或运算。
==>传送指令
(7)moverd,rs
100000
00000
rdJrs+$0;
$0=$zero=0。
==>存储器读/写指令
(8)swrt,immediate(rs)写存储器
100110
memory[rs+(sign-extend)
immediate]Jrt;
immediate符号扩展再相加。
(9)lwrt,
immediate(rs)读存储器
100111
rtJmemory[rs+(sign-extend)immediate];
==>分支指令
(10)beqrs,rt,immediate
110000
immediate(位移量,16位)
if(rs=rt)pcJpc+4+(sign-extend)immediate<<2;
特别说明:
immediate是从PC+4地址开始和转移到的指令之间指令条数oimmediate符号扩展之后左移2位再相加。
为什么要左移2位由于跳转到的指令地址肯定是4的倍数(每
条指令占4个字节),最低两位是"
00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。
==>停机指令
(11)halt
111111
00000000000000000000000000(26位)
停机;
不改变PC的值,PC保持不变。
三.实验原理
单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令
两个
的执行,即一条指令用一个时钟周期完成。
电平从低到高变化的瞬间称为时钟上升沿,
如果晶振
相邻时钟上升沿之间的时间间隔称为一个时钟周期。
时钟周期一般也称振荡周期(
的输岀没有经过分频就直接作为CPU的工作时钟,则时钟周期就等于振荡周期。
若振荡周期经二分频后形
成时钟脉冲信号作为CPU的工作时钟,这样,时钟周期就是振荡周期的两倍。
)
CPU在处理指令时,一般需要经过以下几个步骤:
(1)取指令(IF):
根据程序计数器PC中的指令地址,从存储器中取出一条指令,同时,PC根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令
时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PG
(2)指令译码(ID):
对取指令操作中得到的指令进行分析并译码,确定这条指令需要完
成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。
(3)指令执行(EXE:
根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。
(4)存储器访问(MEM:
所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。
(5)结果写回(WB:
指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。
单周期CPU是在一个时钟周期内完成这五个阶段的处理。
取指令
―►
指令译码
指令执行
存储器访问
►
结果写回
图1单周期CPU指令处理过程
MIPS32的指令的三种格式:
R类型:
312625212016151110650
op
rs
rt
rd
sa
func
位5位5位5位6位
I类型:
312625212016150
immediate
6位5位5位16位
J类型:
3126250
address
6位26位
其中,
op:
为操作码;
rs:
为第1个源操作数寄存器,寄存器地址(编号)是00000~11111,00~1F;
rt:
为第2个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上);
rd:
为目的操作数寄存器,寄存器地址(同上);
sa:
为位移量(shiftamt),移位指令用于指定移多少位;
func:
为功能码,在寄存器类型指令中(R类型)用来指定指令的功能;
immediate:
为16位立即数,用作无符号的逻辑操作数、有符号的算术操作数、数据加载(Laod)/数据保存(Store)指令的数据地址字节偏移量和分支指令中相对程序计数器(PC)
的有符号偏移量;
address:
为地址。
图2单周期CPU数据通路和控制线路图
图2是一个简单的基本上能够在单周期上完成所要求设计的指令功能的数据通路和必
要的控制线路图。
其中指令和数据各存储在不同存储器中,即有指令存储器和数据存储
器。
访问存储器时,先给出地址,然后由读/写信号控制(1-写,0-读。
当然,也可以由时
钟信号控制,但必须在图上标出)。
对于寄存器组,读操作时,先给出地址,输出端就直接输出相应数据;
而在写操作时,在WE使能信号为1时,在时钟边沿触发写入。
图中控
制信号作用如表1所示,表2是ALU运算功能表。
表1控制信号的作用
控制信号名
状态“0”
状态“1”
PCWre
PC不更改,相关指令:
halt
PC更改,相关指令:
除指令halt夕卜
ALUSrcB
来自寄存器堆data2输出,相关指
令:
add、sub、or、and、movebeq
来自sign或zero扩展的立即数,相
关指令:
ori、sw、lw
ALUM2Reg
来自ALU运算结果的输出,相关指
add、sub、ori、or、and、
move
来自数据存储器(DataMEM)的输出,相关指令:
lw
RegWre
无写寄存器组寄存器,相关指令:
sw、halt
寄存器组写使能,相关指令:
add、
sub、ori、or、and、move、lw
InsMemRW
读指令存储器(Ins.Data),初始化为0
写指令存储器
DataMemRW
读数据存储器,相关指令:
「写数据存储器,相关指令:
sw
ExtSel
相关指令:
ori,(zero-
extend)immediate(0扩展)
sw、lw、beq,
(sign-extend)immediate(符号扩
展)
PCSrc
POPC+4,相关指令:
add、sub、ori、or、and、move、sw、lw、beq(zero=0)
PC^PC+4+(sign-extend)immediate,同时
zero=1,相关指令:
beq
RegOut
与奇存器组奇存器的地址,来自rt
字段,相关指令:
ori、lw
与奇存器组奇存器的地址,来自rd字
段,相关指令:
add、sub、and、or、
ALUOp[2..0]
ALU8种运算功能选择(000-111),看功能表
相关部件及引脚说明:
InstructionMemory:
指令存储器,
laddr,指令存储器地址输入端口
IDataln,指令存储器数据输入端口(指令代码输入端口)
IDataOut,指令存储器数据输出端口(指令代码输出端口)
RW,指令存储器读写控制信号,为1写,为0读
DataMemory:
数据存储器,
Daddr
,数据存储器地址输入端口
DataIn
,数据存储器数据输入端口
DataOut
,数据存储器数据输出端口
RW,数据存储器读与控制信号,为1与,为0读
RegisterFile
:
(寄存器组)
ReadReg1
rs寄存器地址输入端口
ReadReg2
rt寄存器地址输入端口
WriteReg
,将数据写入的寄存器端口,其地址来源rt或rd字段
WriteData
,写入寄存器的数据输入端口
ReadData2,rt寄存器数据输出端口
WE,写使能信号,为1时,在时钟上升沿写入
ALU
result,ALU运算结果
zero,运算结果标志,结果为0输出1,否则输出0
表2ALU运算功能表
功能
描述
000
A
+
B
加
001
—
减
010
011
V
或
100
与
101
/AA
A非与B
110
异或
111
O
同或
需要说明的是根据要实现的指令功能要求画出以上数据通路图,和确定ALU的运算功
能(当然,以上指令没有完全用到提供的ALU所有功能,但至少必须能实现以上指令功能操作)。
从数据
通路图上可以看出控制单元部分需要产生各种控制信号,当然,也有些信号必须要传送给控
制单元。
从指令功能要求和数据通路图的关系得出以上表1,这样,从表1可以看出各控制
信号与相应指令之间的相互关系,根据这种关系就可以得出控制信号与指令之间的关系表
(留给学生完成),再根据关系表可以写出各控制信号的逻辑表达式,这样控制单元部分就可实现了。
指令执行的结果总是在下个时钟到来前开始保存到寄存器、或存储器中,PC的改变也
关于ALU
是在这个时候进行。
另外,值得注意的问题,设计时,用模块化的思想方法设计,
设计、存储器设计、寄存器组设计等等,也是必须认真考虑的问题。
可以参考其他资料文档,
里面有相应的设计方法介绍
电脑一台、XilinxISE软件一套。
五•实验分析与设计
CPQQQ皿回03
模块分析:
根据单周期CPU数据通路和控制
线路图,大致可以将CPU分为右图七个
模块,每个模块负责一个部分的功能:
(代码存于code文件夹)
(CPU.V)
cu*CU(CU.v)programCounter-PC(PC.v)rom-ROM(ROM+v)ram-RAM(RAM.^)regfile-RF(REv)
signExtend-SE(SE.v)alu-ALU(ALU.v)
output,unu/ved
regeg
wxrc[31;
0]pc;
wixti轟“tru口首ianF
wirePCWre,ALU5rcB,ALUKZReg^REgWre,InsMenRllpDataMieaiinfaExtSel,PCSrc^RegChJtrzero;
wire[2:
0]ALDOp;
wireALuRazitDacaOuxajlrr绘日mx合*
wxxc:
0JvrxteReg:
wiref4:
0]rsrrcrrd:
wixfl:
[15:
0]haftiisiedlate?
aasig*rs■xna^rtictioDliS:
!
];
"
3詡jig■就rt■instruction[20e16);
asdianrd•iha>
cruecion[15s11]:
assignWKiteReg■«
R亡贰hJEp?
rd:
rc;
wrixcD&
ca■(U.UM2Reg}?
RaxTi越》Out;
:
ALU_RESULT;
■ALOSrcB?
imucdiatesReadData2;
(图的下方为各个模块的变量,在后图会出现,故省略)
CPU负责各模块之间的数据的传输,如同C语言中的头文件,将其他的子模块连接在一起,
其中clk信号在此声明。
moduleCU(mpuc[5eO]H
outputRedout*//output
outputInsMsmRW,oncpui:
PCWref
outputExcSel.r
C遇二MlPMTfiF,
nut匚nt*LLJM2ReJr
4tAL^Sr^3t
o-cputPCSrc,
■ou^puc[2:
0]ALUCp,
□RejWre
regi_addri^addi.i_3uk?
^i_ariti^an.11,
ior,iTE3VC,i3W,ilw,1btq,ihalt;
alwayjS(opJbeQini_*dd*Or丄」ddi•Q;
iaxib▼Q;
i_on■0;
±
_and*0;
i_or*0;
i_isove■0;
i_sw=0;
l_lw«
0;
i_i>
eq=0;
ltialt*0;
=ase5)
ۥtcoacoo:
iaid=1;
^-tOOOOOl:
raddi-1;
t'
bODQOlD:
•1;
€fi;
C-lCCOG:
1cri=1;
€*bCIQQ01:
i]占nd-Zie'
bOlOO^O:
ior-1;
€*tolOOQQQ:
imavt-1;
£
・kslOOHO:
l^sw■If€*bl00111;
i^lw■1;
fbllOQQQ:
匸QZ*1;
6'
bllllll:
i~hal^-1;
enlease
«
ad
aflaiQHPCWre■!
i_haIt:
aadl^nALUSxcB•l_addi|l_orl||l_Lwj
9S丄g;
iALUHZHeg■i_lw;
assignRegWre■!
{i_swji_beq);
asjiQr:
InaHeitAK■0;
ej^xgn■i_s^;
assignExtSel■1i_cn;
aasujr:
PCSre■■i_beq&
zero):
aadlgnKeoOuc■!
{l_dddlIl^orlIA_lw}r
assignALU^)■{iand*iori|1ait1sub|iori|ior|1beq};
I^HII^MI^MrI^H
endEEDdule
CUCl负责指令的解析,即将由RO读取的指令转化为操作发送给其他子模块进行操作。
endnvddult
PC负责指令的计数,已经指令的向前或向后跳动,每个时钟周期计数加一。
®
LOduleROM(
ijiputRW^//xeadorna€xead
input[31:
0]|LEsAddzessr「jtneaH-Lre5±
=£
data
夕竝tLput[312OJInsOut//datawhichneedszc匕urqp竝
);
reg[31:
0Jren^ry[0:
121];
//inirtai-heffiemnry
initialbegin//onlyonce
営匚住IS"
t匕wj鸞vr,,m^ncry);
end
//it(RH=0)//read
In^Ouz=iLenicry[InsAddjreaa]:
cndtfflddijle
BIOS的数
ROM即存储器,发送信息,CPU勺指令文件即由RO读取,只读,在电脑中表现为
据文件。
moduleRAMI
.E*avp
、lisrfQ
亠4丄^-iu3xn_n$
irp^c131:
O]Datainrintut[^:
0]Da^aAldr^
output(31:
0]Dac&
Out);
reg[31<
C)teixoxy[0:
1;
7];
inLc^exx;
inirialb亡gin
tor(1=0:
1<
12C:
1=1+1)^cEL^ry[i]-0;
a^aiffnDa~aO-ju=meniory£
I>
ataAdcl*]i
<
p=sedgeclkl
if(RK—1)
ry[EaeiAdir]~Daralri;
end
$s的储存地点。
RAM内存,可读可写,用来保存临时数据,汇编语言中的
assign庆eatSDat自丄==0|?
0:
register[R&
aclBejl|iassignReadData^=(Readftjegl=Ok?
legiaxez[Readfte^2);
aiwAys^(po^tigeclt)&
agii:
.-/^ritt
If(WE=1}
register;
Wri-;
eEe?
]=闆二itwDa耳m;
encijTZizi'
jle
RF:
寄存器,可读可写,数据由寄存器发送向ALU十算,汇编语言中的$t的储存地点。
n<
d^L«
St1
inputEi^-Seli-
二幻匚也匕1)ha.£
tI±
i皿i±
La•亡e『
0g中口xf31;
0|zjqwdxa'
ce//wtpuT:
de:
Js
902^11lameate鼻(Ex^-Sel)?
{{144hafC-loBfedlH-U[15i]Irha-fSlaiM1i-«
t-E(l-5«
0J|:
141,CClllMl]l'
}fitafltlamedl-Hte(IS:
4.|}p
tnsodjlt
SE产生立即数,将发送过来的半数零拓展或符号拓展。
assignZERO■(ALU_RE3ULT**0)?
l*hl:
l*toO;
//iftrieresulttczere*ZERO■1
*r.n-rns^
ALU算术单元,加减乘除逻辑运算等等,都在这里计算。
测试数据输入00000000000000000000000000000000(不操作)
可得到如上图,CPUE确运行
实验测试:
(根据实验内容指令表格)
0,1,2,3算术运算指令4,5,6逻辑运算指令
7传送指令8,9存储器读/写指令
10,11分支指令14停机指令
指令序号
00001
00010
00011
00000000000
add
$1
$2
$3
$3=$1+$2=0
1
00100
0000000000000011
addi
$4
$4=$3+3=3
2
0000000000001000
$2=$4+8=11
3
sub
$1=$2-$4=8
4
00101
ori
$5
$5=$2|(上式)=11
5
00110
and
$6
$6=$1&
$2=8
6
00111
or
$7
$7=$1|$2=11
7
01000
$zero
$8
$8=$7
8
0000000000000100
sw
RAM[$8+4]=$1
9
$8=0
10
0000000000000000
$1!
=$2,pc=pc+1
11
0000000000000001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单周期CPU设计 周期 CPU 设计 实验 报告