计算机系统结构实验报告.docx

上传人:b****3 文档编号:27360129 上传时间:2023-06-29 格式:DOCX 页数:26 大小:911.48KB
下载 相关 举报
计算机系统结构实验报告.docx_第1页
第1页 / 共26页
计算机系统结构实验报告.docx_第2页
第2页 / 共26页
计算机系统结构实验报告.docx_第3页
第3页 / 共26页
计算机系统结构实验报告.docx_第4页
第4页 / 共26页
计算机系统结构实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

计算机系统结构实验报告.docx

《计算机系统结构实验报告.docx》由会员分享,可在线阅读,更多相关《计算机系统结构实验报告.docx(26页珍藏版)》请在冰豆网上搜索。

计算机系统结构实验报告.docx

计算机系统结构实验报告

电子科技大学

实验报告

学生姓名:

学号:

一、实验室名称:

计算机学院实验中心

二、实验项目名称:

计算机系统结构课程实验

三、实验原理:

1.由教师给出一个具有基本功能的VerilogHDL流水线源代码;

2.学生完成下面3个方面的内容:

(1)自行设计汇编伪指令格式,完成一个能把自己的汇编指令转换成流水线CPU能够识别的二进制指令的汇编器,实现语言不限;

(2)自行设计能够解决数据相关的机制并基于源代码进行扩展;

(3)自行设计能够解决控制相关的机制并基于源代码进行扩展。

四、实验目的:

帮助学生理解流水线的运行机制和基于VerilogHDL硬件描述语言的实现技术。

五、实验内容:

(一)基本流水线分析

1.1认真阅读和理解源代码,请详细按要求回答每个问题。

1.源代码中文件是按什么样的规律来组织的?

答:

按照子模块组织源代码文件。

模块pipelinedcpu_tb用来控制CPU的时钟等信号,调用pipelinedcpu模块(假定为1级模块,最高级),1级模块中按顺序调用各个周期以及周期与周期之间的中间寄存器模块(假定为2级模块),2级模块中调用各自部件模块(假定为3级模块)。

模块pipelinedcpu用来控制每级流水线及流水线级之间的控制信号,寄存器信息,其余子模块用来具体实现每一级流水线的功能。

2.存储器的实现方式?

答:

用一个二维数组reg[31:

0]ram[0:

31]实现,其中第一维代表32位地址,第二维代表32位数据

接口有:

32位输入数据和输出,32位地址,一个同步时钟脉冲clk,一个控制写入的信号we

先对二维数组进行初始化

读数据时不需要时钟脉冲的激励,写数据时需要时钟脉冲的上升沿激励信号并且we信号为1

3.源代码文件中的流水线与我们课堂上讲的原理电路图有何相同之处,有何不同之处

答:

相同:

WB级,写回级使用2路32位的多路选择器来选择是获取ALU的计算结果还是LOAD指令从数据存储器中读取出来的数据。

这里与课堂上所讲的内容基本相同。

流水线都分为五个执行级,都是在译码级产生各种控制信号,一级一级往后传,分离的指令存储器和数据存储器。

各个部件以及逻辑都没有太大差异

不同:

源代码文件中的流水线中的ALU部件的输出接在一个两路选择器上,并且没有zero输出端,而课堂上的直接输出到中间寄存器

源代码文件中没有关于消除数据相关的代码,而课堂上讲的原理电路图有消除数据相关的线路

没有数据前推和load前推的相关实现,指令格式的区别,流水线alu运算部件两个端口都可以接受立即数。

4.通过分析,写出本流水线的控制信号有哪些?

对比我们课堂上讲的控制信号的差别有哪些?

答:

本实验的控制信号主要有:

wreg、m2reg、wmem、jal、aluc、aluimm

分别表示指令是否要写寄存器、信号是否有数据存储器中的数据需要写回寄存器、是否有指令需要往数据存储器中写数据、流水线寄存器R是要写入ALU的运算结果还是EPC的内容、指令的操作类型,例如加、减、与、或。

、ALU的B输入端是否要选择立即数输入

差别主要有:

regrt信号控制目的寄存器是rd或rt,sext信号控制是否需要传递立即数,wmem信号控制是否需要访存,jal信号控制exe级和mem级之间是传递运算结果还是立即数,这些信号是课堂上的流水线没有的。

1.2针对流水线的指令集,编写必要的测试指令,分析运算结果,回答哪些指令的组合能由此流水线源代码正确实现,哪些指令的组合不能由此流水线源代码正确实现。

(要求在实验报告中写出所完成的测试指令的组合、每个组合的仿真过程及结果、每个过程和结果的必要分析。

(1)第一组指令序列

指令序列:

addr2r11

addr2r110

addr1r31

addr1r210

addr2r21

addr2r310

subr2r1r3

截图:

结果分析:

观察三到九周期的ealu信号分别为(10,1,1,10,1,10,10),第九个周期的ealu为10,该周期执行的指令是subr2r1r3;可见第一条指令赋值r1=10;第二条指令赋值r2=1;所以最后一条指令subr1r1r2执行后结果为9,符合条件。

当有数据相关时,就会出问题,再观察第五、六、七两个周期,指令的执行结果均为1。

故该程序不能解决数据相关问题。

(二)汇编器实现

2.1自行设计与所给出的流水线指令的汇编格式,在下表中写出。

指令

指令意义

Op[31:

26]

Op2[25:

20]

[19:

15]

[14:

10]

[9:

5]

[4:

0]

add

寄存器加法

000000

000001

00000

rd

rs

rt

addrdrsrt

sub

寄存器减法

000000

000010

00000

rd

rs

rt

subrdrsrt

mul

寄存器乘法

000000

000011

00000

rd

rs

rt

mulrdrsrt

and

寄存器与

000001

000001

00000

rd

rs

rt

andrdrsrt

or

寄存器或

000001

000010

00000

rd

rs

rt

orrdrsrt

xor

寄存器异或

000001

000100

00000

rd

rs

rt

xorrdrsrt

sra

算术右移

000010

000001

shift

rd

00000

rt

srardrtshift

srl

逻辑右移

000010

000010

shift

rd

00000

rt

srlrdrtshift

sll

逻辑左移

000010

000011

shift

rd

00000

rt

sllrdrtshift

jreg

寄存器跳转

000010

000100

00000

00000

rs

00000

jregrs

addi

立即数加法

000101

16位immediate

rs

rt

addirtrsimme

muli

立即数乘法

000111

16位immediate

rs

rt

mulirttsimme

andi

立即数与

001001

16位immediate

rs

rt

addirtrsimme

ori

立即数或

001010

16位immediate

rs

rt

orirtrsimme

xori

立即数异或

001100

16位immediate

rs

rt

xorirtrsimme

load

取整数数据字

001101

16位offset

rs

rt

loadrtrsoffset

store

存整数数据字

001110

16位offset

rs

rt

storertrsoffset

beq

相等则跳转

001111

16位offset

rs

rt

beqrtrsoffset

bne

不相等则跳转

010000

16位offset

rs

rt

bnertrsoffset

lui

设置高位

010001

16位immediate

00000

rt

luirtimme

jump

无条件跳转

010010

26位address

jumpaddress

jal

子程序调用

010011

26位address

jaladdress

2.2写出实现语言、主要数据结构、主要功能模块名字和功能、以必要的流程图。

代码截图:

 

2.3给出汇编器的运行界面(若有),写出所实现的汇编器的操作步骤及使用说明,并自己设计并给出测试用例及运行结果,使得所有指令均能自动生成二进制格式的指令。

汇编器的使用步骤:

(1)在程序目录下的instruction.txt中输入指令

(2)运行程序。

(3)打开instruction.txt,发现在指令的下方依次出现了各条指令对应的二进制码。

测试截图:

(三)数据相关分析及解决

数据相关的分析

(1)一般指令的数据相关分析

rs2即第二源操作数可以是寄存器或者立即数,但根据字符串解析可以区分出来,因此这些指令都归为一类解决数据相关问题。

产生相关的条件:

如上图所示,相邻的两条指令中,如果第二条指令的两个源操作数寄存器与上一条指令的目的操作数寄存器相同,那么第二条指令在译码周期从寄存器堆中取源操作数值的时候,上一条指令还只在执行周期,还没有将最后结果写回到相应的寄存器中,因此第二条指令取到的源操作数的值并不是最新的值,因此而产生了数据相关。

解决方案:

如上图所示,在直接相邻的两条产生数据相关的指令之间插入三条空指令,这样在第二条指令译码之前,第一条指令已经将结果写回,第二条指令取到的源操作数的值是最新的值,数据相关就消除了。

以上情况针对相邻的两条产生数据相关指令的分析,而对于中间隔了一条或两条无数据相关指令的两条指令产生了数据相关,解决方案是分别插入两条、一条空指令。

(2)store和条件跳转指令的数据相关分析及解决

store和条件跳转指令设计的格式:

op+rs+rt+offset

对于这两条指令来说,rs和rs相当于源操作数,而它们没有目的操作数,因此在判断一般指令的数据相关需要作另外特殊判断。

(3)jreg指令

指令格式:

op+rs

没有目的寄存器,且只有一个源操作数,可以与条件跳转指令归为一类判断。

2.数据相关的解决

(1)程序流程图

上图左边部分就是汇编器实现部分的流程图,在此基础上进行扩展,即如箭头所指方向,中间两步替代为右边部分。

(2)测试程序

指令:

xorr2,r2,r2

addr3,r2,r1

xorr2,r2,r2

addir1,r1,20

addir2,r2,10

luir1,1

翻译结果:

如上图所示,在产生数据相关的指令前插入了空指令“addir0r00”。

在xilinx中的仿真结果:

结果是正确的。

(四)控制相关分析及解决

1.控制相关分析

在有跳转指令时,倘若跳转指令的操作数有寄存器,因此而产生的相关为数据相关,在(三)中已经解决,而控制相关指:

跳转指令只能在译码级被检测出来并形成跳转地址,而此时PC值已经更新为跳转指令的下一条指令的PC值,所以无论跳转是否成功,该指令都会被执行,跳转不成功是没问题的,但是跳转成功就产生了控制相关。

所以在跳转指令后加一条空指令就可以解决所有问题。

2.控制相关解决

程序中,只要在判断完数据相关的时候,再判断当前指令是否是跳转指令,如果是,则再翻译一条空指令到文件,如果不是,则取下一条指令进行同样的数据相关及控制相关的操作。

(1)在功能模块clear_relation_and_translate的最后加一下代码段:

(2)

测试程序:

(3)结果分析:

 

六、实验器材(设备、元器件):

PC

Windows8

XilinxISE

EclipseIDE

十、总结及心得体会:

实验我学习流水线的相关的知识,包括:

数据、控制、结构相关,汇编器指令的调整,功能部件数对流水线的影响,分支指令预测技术。

使我对计算机系统结构有了更深层次的认识,对基本流水线分析,汇编器,数据相关分析及解决和控制有了进一步的认识与理解,强化了我的实践能力

十一、对本实验过程及方法、手段的改进建议:

开始的时候思路不是很多,老师可以提供适当的帮助,点到为止即可。

报告评分:

指导教师签字:

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

当前位置:首页 > 工程科技 > 交通运输

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

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