西安交通大学组成专题实验报告.docx

上传人:b****2 文档编号:1268736 上传时间:2022-10-19 格式:DOCX 页数:42 大小:1.47MB
下载 相关 举报
西安交通大学组成专题实验报告.docx_第1页
第1页 / 共42页
西安交通大学组成专题实验报告.docx_第2页
第2页 / 共42页
西安交通大学组成专题实验报告.docx_第3页
第3页 / 共42页
西安交通大学组成专题实验报告.docx_第4页
第4页 / 共42页
西安交通大学组成专题实验报告.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

西安交通大学组成专题实验报告.docx

《西安交通大学组成专题实验报告.docx》由会员分享,可在线阅读,更多相关《西安交通大学组成专题实验报告.docx(42页珍藏版)》请在冰豆网上搜索。

西安交通大学组成专题实验报告.docx

计算机组织与结构专题实验报告

MIPS单周期处理器的设计

学生姓名赵荣建

专业班级计算机45班

学号2140505119

指导教师姜欣宁

完成日期2017-05-09

一.实验目的

根据所学的CPU组成原理,自主设计一个MIPS32位的单周期处理器。

二.设计方案

参照计算机组成原理教材上的MIPS32位处理器的工作原理。

1.构建数据通路

取指令

IF

指令译码

ID

指令执行

EXE

存储器访问

MEM

结果写回

WB

取指周期:

a.从指令寄存器PC输出端得到地址

b.送地址到指令存储器IM地址端A

c.从指令存储器IM的数据端RD得到指令

d.计算下地址:

通过运算器,PC+4形成下地址,送回到PC。

2..MIPS寄存器集:

定义了32个32位的寄存器

3.MIPS三种指令格式:

R-类型、I-类型和J-类型

R-类型格式:

*所有指令操作吗OP都是0;特定操作由funct决定。

*机器语言指令中,字段分配格式如上图;前两个寄存器rs、rt

是源寄存器,rd是目的寄存器。

而在汇编语言格式中,第一个

寄存器是目的寄存器。

如:

add$t0,$s4,$s5#[rd]=[rs]+[rt],[t0]=[s4]+[s5];

I-类型格式:

*指令含4个字段;op,rs,rt和imm

*有两个寄存器操作数和一个16位立即数操作数,

一些指令中,rt也可作为源寄存器。

J-类型格式:

*有一个26位立即数操作数,扩展后形成目的地址。

4.算逻单元ALU的设计

ALU工作原理图

*两级控制:

通过系统控制器(Control)

和运算器控制器(ALUControl)产生

ALU的控制信号:

ALUoper

*ALU控制信号对照表:

ALUop

Func(来自R型指令的func字段)

操作

ALUop1

ALUop2

F5

F4

F3

F2

F1

F0

0

0

×

×

×

×

×

×

010:

ADD

0

1

×

×

×

×

×

×

110:

SUB

1

×

×

×

0

0

0

0

010:

ADD

1

×

×

×

0

0

1

0

110:

SUB

1

×

×

×

0

1

0

0

000:

AND

1

×

×

×

0

1

0

1

001:

OR

1

×

×

×

1

0

1

0

111:

SLT

5.单周期数据通路的构建

1)构件:

PC、指令存储器、寄存器文件RF和数据存储器;

2)取指令的过程:

PC→IM:

A/RD

3)取源操作数的过程:

IM:

RD→RF:

A1/RD1。

4)立即数的符号扩展的过程:

IM:

RD(Instr:

15:

0)→SignExtend(15:

0→Signimm31:

0);

其中Signimm15:

0=Instr15:

0,Signimm31:

16=Instr15

5)存储器地址计算:

6)向寄存器文件写入数据

RegWrite信号被置成1,写入过程在时钟周期最后的时钟上升沿完成。

7)形成PC的下地址

指令占4个字节,字编址。

6.单周期控制器的构建

控制单元基于指令中的opcode字段(31:

26)、funct字段(5:

0)产生控制信号;主译码的真值表。

见下图:

7.完整的单周期MIPS处理器

三.设计过程

1.指令集设计

R型指令

指令序号

指令

译码结果(B)

存储指令(H)

<0>

add$s0,$s1,$s2

00000010001100101000000000100000

02328020

<1>

sub$t0,$t1,$t2

00000001001010100100000000100010

012a4022

<2>

and$s3,$s4,$s5

00000010100101011001100000100100

02959824

<3>

or$s0,$s6,$s7

00000010110101111000000000100101

02d78025

<4>

xor$t3,$t4,$t5

00000001100011010101100000100110

018d5826

<5>

slt$t7,$t5,$t6

00000001101011100111100000101010

01ae782a

<6>

nor$t7,$t5,$t6

00000001101011100111100000100111

01ae7827

<13>

srl$t0,$s1,$t5

00000010001011010100000000000010

022d4002

<14>

sll$t0,$s1,$t2

00000010001010100100000000000000

022a4000

<17>

inc$t0,$t6

00000001110000000100000000000011

01c04003

<18>

dec$t0,$t5

00000001101000000100000000000100

01a04004

I型指令

指令序号

指令

译码结果(B)

存储指令(H)

<7>

lw$s0,1($t1)

10001101001100000000000000000001

8d300001

<8>

sw$t1,1($t1)

10101101001010010000000000000001

ad290001

<10>

addi$t0,$t1,1

00100001001010000000000000000001

21280001

<11>

beq$t1,$t1,1

00010001001010010000000000000001

11290001

J型指令

指令序号

指令

译码结果(B)

存储指令(H)

<15>

J17

00001000000000000000000000010001

08000011

2.MIPS32位单周期处理器结构设计

CPU设计结构图如下:

信号说明:

a1:

pc中的指令的地址送往IM去寻找指令

a2:

pc产生的下一条指令的地址

a3:

pc中指令的地址加4

a4:

取pc中指令的地址加4后的高六位

b1:

取J型指令的低26位

b2:

操作码字段高六位

b3:

第一个源操作数的寄存器地址,R型的21-25位,I型的21-25位

b4:

第二个源操作数的寄存器地址,R型的16-20位,I型指令的目的寄存器地址,16-20位

b5:

R型指令的目的寄存器地址,11-15位

b6:

I型指令的立即数,0-15位

b7:

R型指令的低六位,0-5位

b8:

b4和b5经二路选择器二选一

b20:

从IM中取出来的指令内容

c1:

I型指令将16位立即数扩展成32位

c2:

存入目的寄存器的内容

c3:

从源寄存器1中取出的内容

c4:

从源寄存器2中取出的内容

c5:

c1和c4二选一

c6:

ALU计算出的结果,也是读DM的地址

c7:

从DM中取出的内容

c8、c9:

针对不同类型的指令对进行pc值的修正的选择

d1:

功能选择信号

e类信号:

主操作控制信号,主要是各部件的读写控制信号

核心模块说明:

IM:

按序号存放指令(共17条,其中lw指令执行了两次),在CPU启动时从<0>开始执行。

Rf:

主寄存器,存放32个32位字,存储情况见下表(十进制表示,单数行是地址序号,双数行是对应的存储值):

<0>

<1>

<2>

<3>

<4>

<5>

<6>

<7>

0

14

13

12

11

10

9

8

<8>

<9>

<10>

<11>

<12>

<13>

<14>

<15>

7

6

5

4

3

2

1

0

<16>

<17>

<18>

<19>

<20>

<21>

<22>

<23>

15

14

13

12

11

10

9

8

<24>

<25>

<26>

<27>

<28>

<29>

<30>

<31>

7

6

5

4

3

2

1

0

DM:

数据存储器,存储情况见下表(十进制表示,单数行是地址序号,双数行是对应的存储值):

<0>

<1>

<2>

<3>

<4>

<5>

<6>

<7>

8

7

6

5

4

3

2

1

<8>

<9>

<10>

<11>

<12>

<13>

<14>

<15>

8

7

6

5

4

3

2

1

<16>

<17>

<18>

<19>

<20>

<21>

<22>

<23>

8

7

6

5

4

3

2

1

<24>

<25>

<26>

<27>

<28>

<29>

<30>

<31>

8

7

6

5

4

3

2

1

tRf:

测试模块,用于输出指令执行结果以检验是否正确;

IRf:

测试模块,用于输出当前执行的指令,与tRf搭配使用。

四.代码分析

1.Add//完成分支指令的目标地址计算//

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityaddis

Port(a:

inSTD_LOGIC_VECTOR(31downto0);

b:

inSTD_LOGIC_VECTOR(31downto0);

y:

outSTD_LOGIC_VECTOR(31downto0));

endadd;

architectureBehavioralofaddis

begin

y<=a+b;-------将a和b相加赋给y

endBehavioral;

2.Add4//完成PC+1(采用字寻址)的计算//

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityAdd4is

port(pcin:

instd_logic_vector(31downto0);

pcout:

outstd_logic_vector(31downto0));

endAdd4;

architecturebehaveofAdd4is

begin

process(pcin)

begin

pcout<=pcin+1;---------pc值的修改

endproces

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

当前位置:首页 > 工程科技 > 材料科学

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

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