2023年MIPS单周期CPU实验报告_第1页
2023年MIPS单周期CPU实验报告_第2页
2023年MIPS单周期CPU实验报告_第3页
2023年MIPS单周期CPU实验报告_第4页
2023年MIPS单周期CPU实验报告_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

勤中"孽

《计算机组成原理实验》

实验报告

(实验二)

学院名称:

专业(班级):

学生姓名:

学号:

时间:2023年11月25日

成绩:

实验二:单周期CPU设计与实现

一.实验目的

(1)掌握单周期CPU数据通路图的构成、原理及其设计方法;

(2)掌握单周期CPU的实现方法,代码实现方法;

(3)结识和掌握指令与CPU的关系;

(4)掌握测试单周期CPU的方法;

(5)掌握单周期CPU的实现方法。

二.实验内容

设计一个单周期的MIPSCPU,使其能实现下列指令:

==>算术运算指令

(l)addrd,rs,rt(说明:以助记符表达,是汇编指令;以代码表达,是机器指令)

000000rs(5位)rt(5位)rd(5位)reserved

功能:rd-rs+rt。reserved为预留部分,即未用,一般填“0”„

(2)addirt,rs,immediate

000001rs(5位)rt(5位)immediate(16位)

功能:rt-rs+(sign—extend)immediate;immediate符号扩展再参与“加"

运算。

(3)subrd,rs,rt

000010rs(5位)rt(5位)rd(5位)reserved

功能:rdrs-rt

==>逻辑运算指令

(4)orirt,rs,immediate

010000rs(5位)rt(5位)immediate(16位)

功能:rt-<-rs|(zero-extend)immediate;immediate做"0"扩展再参与"或"

运算.

(5)andrd,rs,rt

010001rs(5位)rt(5位)rd(5位)reserved

功能:rd-rs&rt;逻辑与运算。

(6)orrd,rs,rt

010010rs(5位)rt(5位)rd(5位)reserved

功能:rd-rs|rt;逻辑或运算。

==>移位指令

(7)sllrd,rt,sa

0110OO未用rt(5位)rd(5位)sareserve

d

功能:rd<—rt<<(zero-extend)sa,左移sa位,(zero-extend)sa

==>比较指令

(8)sitrd,rs,rt带符号数

011100rs(5位)rt(5位)rd(5位)reserved

功能:if(rs<rt)rd=lelserd=0,具体请看表2ALU运算功能表,

带符号

==>存储器读/写指令

(9)swrt,immediate(rs)写存储器

100110rs(5位)rt(5位)immediate(16位)

功能:memory[rs+(sign-extendJimmediate]-*-rt;immediate符号扩展再

相加。即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址

的内存单元中。

(10)lwrt,immediate(rs)读存储器

100111rs(5位)rt(5位)immediate(16位)

功能:rt«-memory[rs+(sign-extend)immediate];immediate符号扩展

再相加。

即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后

保存到rt寄存器中。

==>分支指令

(11)beqrs,rt,immediate

110000rs(5位)rt(5位)immediate(16位)

功能:if(rs=rt)pc+pc+4+(sign—extend)immediate<<2elsep

c—pc+4

特别说明:immediate是从PC+4地址开始和转移到的指令之间指令条数。immed

iate符号扩展之后左移2位再相加。为什么要左移2位?由于跳转到的指令地址肯定是4

的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的

时候,是右移了2位的,也就是以上说的“指令之间指令条数”。

12)bners,rt,immediate

110001rs(5位)rt(5位)immediate

功能:if(rs!=rt)pc―pc+4+(sign-extend)immediate<<2elsep

c-pc+4

特别说明:与beq不同点是,不等时转移,相等时顺序执行。

(13)bgtzrs,immediate

110010rs(5位)oooooimmediate

功能:if(rs>0)pc—pc+4+(sign—extend)immediate<<2elsepc—p

c+4

==>跳转指令

(14)jaddr

111OO0addr[27..2]

==>停机指令

(15)halt

11111i00(26位)

功能:停机;不改变PC的值,PC保持不变。

三.实验原理

1.时间周期:

单周期CPU指的是一条指令的执行在一个时钟周期内完毕,然后开始下一条指令的执

行,即一条指令用一个时钟周期完毕。电平从低到高变化的瞬间称为时钟上升沿,两个相邻

时钟上升沿之间的时间间隔称为一个时钟周期。时钟周期一般也称振荡周期(假如晶振的输出

没有通过度频就直接作为CPU的工作时钟,则时钟周期就等于振荡周期。若振荡周期经二分频后形成时

钟脉冲信号作为CPU的工作时钟,这样,时钟周期就是振荡周期的两倍。)

CPU在解决指令时,一般需要通过以下几个环节:

(1)取指令(IF):根据程序计数器PC中的指令地址,从存储器中取出一条指令,同

时,PC根据指令字长度自动递增产生下一条指令所需要的指令地址,但碰到“地址转移”指

令时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PC。

(2)指令译码(ID):对取指令操作中得到的指令进行分析并译码,拟定这条指

令需要完毕的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。

(3)指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,

然后转移到结果写回状态。

(4)存储器访问(MEM):所有需要访问存储器的操作都将在这个环节中执行,该环节

给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中

得到数据地址单元中的数据。

(5)结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄

存器中。

单周期CPU,是在一个时钟周期内完毕这五个阶段的解决。

图1单周期CPU指令处理过程

对于不同的指令,需要执行的环节是不同的,其中取字指令(lw)需要执行所有五个

环节。因此,CPU的时间周期由取字指令决定。

2.指令类型:

MIPS的三种指令类型:

R类型:

312625212016151110650

oprsrtrdsafunct

6位5位5位5位5位6位

I类型:

312625212016150

oprsrtimmediate

6位5位5位16位

J类型:

3126250

opaddress

6位26位

其中,

op:为操作码;

rs:只读。为第1个源操作数寄存器,寄存器地址(编号)是00000~11111,00~1F;

rt:可读可写。为第2个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上);

rd:只写。为目的操作数寄存器,寄存器地址(同上);

sa:为位移量(shiftamt),移位指令用于指定移多少位;

funet:为功能码,在寄存器类型指令中(R类型)用来指定指令的功能与操作码配合使

用;

immediate:为16位立即数,用作无符号的逻辑操作数、有符号的算术操作数、数

据加载(Load)/数据保存(Store)指令的数据地址字节偏移量和分支指令中相对程序计数

器(PC)的有符号偏移量;

address:为地址。

在本CPU设计中,由于指令的类型较少,所以所有指令均由操作码(op)拟定。在R型

指令中,功能码(funct)为0OOOOOo

3.控制线路图与数据通路:

InsMemRW

Control^LUSrc6

Unit

、S-

660

6在

TRegWre

EI5VWE

rs

RWReadReg1

lAddr

ReadReg2

IDataOutReadDatal

IDataln

WriteReg

Ins.MEM

►1RegisterFile

ReadData2

WriteData

16[15..O]

ExtSel

1.28]addr127_2],0,0

上图为CPU的数据通路和必要的控制线路图,其中Ins.Mem为指令存储器,D

ata.Mem为数据存储器。访问存储器时,先给出内存地址,然后由读或写信号控制操作。

对于寄存器组,先给出寄存器地址,读操作时,输出端就直接输出相应数据;而在写操作时,

在WE使能信号为1,在时钟边沿触发将数据写入寄存器。

4.控制信号:

控制信号的作用

控制信号名状态“o”状态“1”

Reset初始化PC为0PC接受新地址

PCWrePC不更改,相关指令:haItPC更改,相关指令:除指令ha1t外

来自寄存器堆data1输出湘关指来自移位数sa,同时,进行(zero-ex

令:add、sub、addi、or、and、tend)sa,即{{27

ALUSrcA

ori、beq、bne、bgtz>sit、s关指令:sll

w、Iw

ALUSrcB来自寄存器堆data2输出,相关指来自sign或zero扩展的立即数相关

令:add、sub、or、and、s11、s指令:addi、ori、sw、Iw

It、beq、bne>bgtz

DBDataSrc来自ALU运算结果的输出,相关指来自数据存储器(DataMEM)的输

令:add、addi%sub、ori、or、出,相关指令:Iw

and>s1t>sll

RegWre无写寄存器组寄存器,相关指令:寄存器组写使能,相关指令:add、

beq>bne、bgtz、sw>halt、jaddi>sub>ori>or>and、sit、

s11>Iw

InsMemRW写指令存储器读指令存储器(Ins.Data)

/RD读数据存储器,相关指令:1W输出高阻态

/WR写数据存储器,相关指令:SW无操作

RegDst写寄存器组寄存器的地址,来自rt写寄存器组寄存器的地址,来自rd字

字段,相关指令:addi、ori.Iw段,相关指令:add、sub、and、

or、slt>sll

ExtSel(zero-extend)immediate(0(sign—extend)immediate

扩展),相关指令:ori(符号扩展)

,相关指令:addi、sw>1w>bn

e、bne>bgtz

00:pc<—pc+4,相关指令:add、addi、sub、or、ori、and>si

t、

sll、sw、Iw、beq(zero=0)>bne(zero=1)>bgtz(sign=l,^cz

ero=1);

PCSrc[l..O]

01:pc<-pc+4+(sign-extendJimmediate,相关指令:beq(zero=1)、

bne(zero=0)、bgtz(sign=0,zero=0);

10:pc<-{(pc+4)[31..28],addr[27..2],0,0},相关指令:j;

11沫用

ALUOp[2..0]ALU8种运算功能选择(000-111),看功能表

ALU功能表

ALUOp功能描述

[2..0]

000Y=A+B加

001Y=A-B减

010Y=B«AB左移A位

011Y=AVB或

100Y=AAB与

比较A与B

101Y=(A<B)?1:0

不带符号

if(A<B&&(A[31]==B[31]))

Y=1;

比较A与B

110elseif(A[31]&&!B[31)Y=

带符号

1;

elseY=0;

111Y=A©B异或

附:本CPU的指令集并未用到ALU的所有功能。

5.重要模块接口说明:

。InstructionMemory:指令存储器,

address,指令存储器地址输入端口

Dataln,指令存储器数据输入端口(指令代码输入端口)

DataOut,指令存储器数据输出端口(指令代码输出端口)

InsMemRW,指令存储器读写控制信号,为。写,为1读

DataMemory:数据存储器,

address,数据存储器地址输入端口

DataOut,数据存储器数据输出端口

/RD,数据存储器读控制信号,为0读

/WR,数据存储器写控制信号,为0写

RegisterFile:寄存器组

ReadRegl,rs寄存器地址输入端口

ReadReg2,rt寄存器地址输入端口

WriteReg,将数据写入的寄存器端口,其地址来源rt或rd字段

WriteData,写入寄存器的数据输入端口

ReadDatal,rs寄存器数据输出端口

ReadData2,rt寄存器数据输出端口

WE,写使能信号,为1时,在时钟边沿触发写入

RST,寄存器清零信号,为0时寄存器清零

ALU:算术逻辑单元

result,ALU运算结果

zero,运算结果标志,结果为0,贝!]zero=1;否贝!]zero=0

。sign,运算结果标志,结果最高位为。,则sign=O,正数;否则,sign=l,负数

四.实验器材

电脑一台,Xi1inxVivado软件一套,Basys3板一块。

五.实验过程与结果

1.各个指令相应的控制信号

指令PcALUSALUSrcDBDataSReInsMemRDWRRegDstExtSel

WrercABrcgWreRW

Add100011111X

Ad1010111101

di

Sub100011111X

Ori1010111100

And100011111X

Or100011111X

S11110011111X

S1t100011111X

Sw101X0110X1

Lw1011110101

Beq100X0111X1

Bne100X0111X1

Bgtz100X0111X1

J1XXX0111XX

Hal0XXX0111XX

t

控制信号ALUOp

Add000

Addi000

Sub001

Ori011

And100

Or011

Sil010

Sit110

Sw000

Lwooo

Beq001

Bne001

Bgtz101

J010

HaltXXX

除异或运算(111)外,ALU所有功能均被使用。

PCSrc指令

00add、addi>sub、or、ori、and、sit、s11、sw、1w、beq(zero=0)、

bne(zero=1)>bgtz(sign=1,或zero=l)

01beq(zero=1)>bne(zero=0)>bgtz(sign=0,zero=0)

10j

2.重要模块代码及仿真

(1)控制单元(contro1unit)

Veri1og代码:

1.modu1econtroIUnit(

2.input[5:0]opcode,

3.inputzero,

4.inputsign,

5.outputregPCWre,

6.outputregALUSrcA,

7.outputregALUSrcB,

8.outputregDBDataSrc,

9.outputregRegWre^

10.outputregInsMemRW,

11.outputregRD,

12.outputregWR,

13.outputregRegDst,

14.outputregExtSel,

15.outputreg[1:0]PCSrc,

16.outputreg[2:0]ALUOp

17.);

18.initialbegin

19.RD=1;

20.WR=1;

21.RegWre=0;

22.InsMemRW=0;

23.end

24.a1ways@(opcode)begin

25.case(opcode)

26.6'b000000:begin//add

27.PCWre=1;

28.ALUSrcA=0;

29.ALUSrcB=0;

30.DBDataSrc=0;

31.RegWre=1;

32.InsMemRW=1;

33.RD=1;

34.WR=1;

35.RegDst=1;

36.ALUOp=3'b000;

37.end

38.6Zb000001:begin//addi

39.PCWre=1;

40.ALUSrcA=0;

41.ALUSrcB=1;

42.DBDataSrC=0;

43.RegWre=1;

44.InsMemRW=1;

45.RD=1;

46.WR=1:

47.RegDst=0;

48.ExtSe1=1;

49.ALUOp=3'b000;

50.end

51.6'b000010:begin//sub

52.PCWre=1;

53.ALUSrcA=0;

54.ALUSrcB=0;

55.DBDataSrc=0;

56.RegWre=1;

57.InsMemRW=1;

58.RD=1;

59.WR=1;

60.RegDst=1;

61.ALUOp=3'b001;

62.end

63.6'b010000:begin//ori

64.PCWre=1;

65.ALUSrcA=0;

66.ALUSrcB=1;

67.DBDataSrc=0;

68.RegWre=1;

69.InsMemRW=1;

70.RD=1;

71.WR=1;

72.RegDst=0:

73.ExtSel=0;

74.ALUOp=3'b011;

75.end

76.6'b01000l:begin//and

77.PCWre=1;

78.ALUSrcA=0;

79.ALUSrcB=0;

80.DBDataSrc=0;

81.RegWre=1;

82.InsMemRW=1;

83.RD=1;

84.WR=1;

85.RegDst=1;

86.ALUOp=3'bl00;

87.end

88.6'b010010:begin//or

89.PCWre=1;

90.ALUSrcA=0;

91.ALUSrcB=0;

92.DBDataSrc=0;

93.RegWre=1;

94.InsMemRW=1:

95.RD=1;

96.WR=1;

97.RegDst=1;

98.ALUOp=3'b011;

99.end

100.6'b011000:begin//si1

101.PCWre=1;

102.ALUSrcA=1;

103.ALUSrcB=0;

104.DBDataSrc=0;

105.RegWre=1;

106.InsMemRW=1;

107.RD=1;

108.WR=1;

109.RegDst=1;

110.ALUOp=3'b010;

111.end

112.6'b011100:begin//sit

113.PCWre=1;

114.ALUSrcA=0;

115.ALUSrcB=0;

116.DBDataSrc=0;

117.RegWre=1;

118.InsMemRW=1;

119.RD=1;

120.WR=1;

121.RegDst=1;

122.ALUOp=3'bll0;

123.end

124.6,b100110:begin//sw

125.PCWre=1;

126.ALUSrcA=0;

127.ALUSrcB=1;

128.RegWre=0;

129.InsMemRW=1;

130.RD=1;

131.WR=0;

132.ExtSel=1;

133.ALUOp=3'b000;

134.end

135.6'bl00111:begin//lw

136.PCWre=1;

137.ALUSrcA=0;

138.ALUSrcB=1;

139.DBDataSrc=1;

140.RegWre=1;

141.InsMemRW=1;

142.RD=0;

143.HR=1;

144.RegDst=0;

145.ExtSel=1;

146.ALUOp=3'b000;

147.end

148.6'bll0000:begin//beq

149.PCWre=1;

150.ALUSrcA=0;

151.ALUSrcB=0;

152.RegWre=0;

153.InsMemRW=1;

154.RD=1;

155.WR=1;

156.ExtSe1=1;

157.ALUOp=3'b0O1;

158.end

159.6'b11000l:begin//bne

160.PCWre=1;

161.ALUSrcA=0;

162.ALUSrcB=0;

163.RegWre=0;

164.InsMemRW=1;

165.RD=1;

166.WR=1;

167.ExtSei=1;

168.ALUOp=3'bO01;

169.end

170.6'b110010:begin

171.PCWre=1;

172.ALUSrcA=0;

173.ALUSrcB=0;

174.RegWre=0;

175.InsMemRW=1;

176.RD=1;

177.WR=1;

178.ExtSel=1;

179.ALUOp=3'b001;

180.end

181.6'b111000:begin//j

182.PCWre=1;

183.RegWre=0;

184.InsMemRW=1;

185.RD=1;

186.WR=1;

187.ALUOp=3zb010;

188.end

189.6'bllllll:begin//halt

190.PCWre=1;

191.RegWre=0;

192.InsMemRW=1;

193.RD=1;

194.WR=1;

195.end

196.default:begin

197.RD=1;

198.WR=1;

199.RegWre=0;

200.InsMemRW=0;

201.end

202.endcase

203.end

204.always@(opcodeorzeroorsign)begin

205.if(opcode==6'bll1000)//j

206.PCSrc=2'b10;

207.elseif(opcode[5:3]==3'bllO)begin

208.if(opcode[2:0]==3'b000)begin

209.if(zero==1)

210.PCSrc=2'b01;

211.e1se

212.PCSrc=2'b00;

213.end

214.elseif(opcode[2:0]==3'b001)begin

215.if(zero==0)

216.PCSrc=2'b01;

217.else

218.PCSrc=2'b00:

219.end

220.elsebegin

221.if(zero==0&&sign==0)

222.PCSrc=2,b01;

223.e1se

224.PCSrc=2'b00;

225.end

226.end

227.elsebegin

228.PCSrc=2rb00:

229.end

230.end

231.endmodu1e

仿真截图:

HemeValue

B■opcode[5:0]3£

Ubzero1

Ssipi0

1

&ALDSrcA0

■ALOSrcB0

玷DBDataSrc1

0

■InsMoaRT1

&即1

3YR1

,RagDzt0

/ExtSal1

■RBPCSrc(l:O)0

■ReALO0p'2:O]2

(2)程序计数器(PC)

Verilog代码:

1.modu1ePC(

2.inputelk,

3.input[31:0]PCin,

4.inputPCWre,

5.inputReset,

6.outputreg[31:0]PCout

7.);

8.initialbegin

9.PCout<=0;

10.end

11.always@(posedgecIk)begin

12.if(Reset==0)begin

13.PCout<=0;

14.end

15.elseif(PCWre==0)begin

16.PCout<=PCout;

17.end

18.elsebegin

19.PCout<=PCin;

20.end

21.end

22.endmodule

仿真械图:

(3)程序存储器(instructionmemory)

Veri1og代码:

1.modulelMemory(

2.inputInsMemRW,

3.input[31:0]address,

4.outputreg[31:0]DataOut

5.);

6.reg[7:0]mem[0:127];

7.initia1begin

8.DataOut=32'bllll11_0000000_0000000_0000000_00000;

9.$readmcmb("C:/Users/ACER/Desktop/—p/project_l/rom_dat

a.coe'\mem);

10.end

11.always@(addressorInsMemRW)begin

12.if(InsMemRW==1)begin

13.DataOut[31:24]<=mem[address];

14.DataOut[23:16]<=mem[address+1];

15.DataOut[15:8]<=mem[address+2];

16.Data0ut[7:0]<=mem[address+3];

17.end

18.end

19.endmodule

仿真截图:

lineVdue

|100as]

1°严i-1一"图唱.............1悭野…1……|P止,,1…|件型…1,,…1

9InsMeaRX1!1

flmaddress[31:0]00000004:Ciiijuocui(00000004_)LVUOjjijinonto'Jr■ijioomi1i.―ooooc。必

fonodiiiicjIooood

000000011

[0041180013

□•,■儿MH显暨卡■0401000840020002)E08622800)I:446220001r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论