单周期CPU实验报告.docx

上传人:b****5 文档编号:5364307 上传时间:2022-12-15 格式:DOCX 页数:43 大小:1.02MB
下载 相关 举报
单周期CPU实验报告.docx_第1页
第1页 / 共43页
单周期CPU实验报告.docx_第2页
第2页 / 共43页
单周期CPU实验报告.docx_第3页
第3页 / 共43页
单周期CPU实验报告.docx_第4页
第4页 / 共43页
单周期CPU实验报告.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

单周期CPU实验报告.docx

《单周期CPU实验报告.docx》由会员分享,可在线阅读,更多相关《单周期CPU实验报告.docx(43页珍藏版)》请在冰豆网上搜索。

单周期CPU实验报告.docx

单周期CPU实验报告

电子科技大学

 

标准实验报告

 

(实验)课程名称:

单周期CPU的设计与实现

 

电子科技大学教务处制表

 

电子科技大学

实验报告

学生姓名:

xx学号:

2012xx指导教师:

xx

实验地点:

主楼A2-412实验时间:

2015.4.12

一、实验室名称:

主楼A2-412

二、实验项目名称:

单周期CPU的设计与实现。

三、实验学时:

4

四、实验原理:

本实验的单周期CPU的工作原理如下图1如示。

 

一条指令的执行过程包括:

取指令(IF)→指令译码(ID)→执行指令(EXE)→访问存储器(MEM)(如果有的话)→结果写回寄存器(如果有的话)。

对于单周期CPU来说,这些执行步骤均在一个时钟周期内完成。

1.本实验的所设计的指令共有16条,分为4种类型:

R型、I型和J型。

不同的指令类型有不同的数据路径。

2.在每个时钟周期根据当前PC的内容取出一条指令,将指令的op高6位送控制器(ControlUnit)译码,产生指令执行的相应控制信号,控制指令的执行。

3.寄存器堆、多路选择器、数据存储器及运算器等部件在相应控制码的控制下工作,产生指令的输出数据流,并将结果写入相应的存储部件。

4.在下一个时钟周期到来时,重复2、3步骤,直到程序执行完成。

五、实验目的

通过使用硬件描述语言Verilog、Xilinx软件进行CPU设计、综合与仿真,以增强分析和设计CPU的能力,掌握单周期CPU的工作原理,控制器、运算器等部件设计的基本方法和技能,加深对所学知识的理解和掌握。

六、实验内容

1.拟定本实验的16条指令构成的指令系统,并进行相应编码

2.CPU各功能模块的设计与实现

3.CPU的封装

4.对所做设计综合与仿真,以验证实验结果

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

1.LenovoG480Laptop(PC)一台

2.XilinxISEDesignSuite14.6软件

3.Editplus3编辑器

八、实验步骤

1.拟定本实验所设计CPU的指令系统;

本实验所设计CPU支持的指令共有16条,包含了R型、I型和J型指令,如表1所示。

表1本实验所涉及的16条指令

指令

[31:

26]

[25:

21]

[20:

16]

[15:

5]

[4:

0]

功能

and

000000

rd

rs1

rs2

寄存器与

andi

000001

rd

rs1

imme

立即数与

or

000010

rd

rs1

rs2

寄存器或

ori

000011

rd

rs1

imme

立即数或

add

000100

rd

rs1

rs2

寄存器加

addi

000101

rd

rs1

imme

立即数加

sub

000110

rd

rs1

rs2

寄存器减

subi

000111

rd

rs1

imme

立即数减

load

001000

rd

rs1

imme

访问数据

store

001001

rd

rs1

imme

存储数据

beq

001010

16位address

为0转移

bne

001011

16位address

不为0转移

branch

001100

26位address

无条件转移

sll

001101

rd

sa

rs2

逻辑左移

srl

001110

rd

sa

rs2

逻辑右移

sra

001111

rd

sa

rs2

算术右移

sa保存要移位的位数;

rd、rs1、rs2分别为寄存器的寄存器号;

imme保存立即数的低16位;

address为转移地址。

1、对于add/sub/and/orrd,rs1,rs2指令//rdrs1oprs2

其中rs1和rs2是两个源操作数的寄存器号,rd是目的寄存器号。

2、对于sll/srl/srard,rs2,sa指令//rdrs2移动sa位

3、对于addi/subird,rs1,imme指令//rdrs1+imme(符号拓展)

rd是目的寄存器号,立即数要做符号拓展到32位。

符号扩展:

取imme的最高位的值,用其填充imme的左边所有位至imme成为32位二进制数为止(imme为16位,所以需填充16位)。

4、对于andi/orird,rs1,imme指令//rdrs1opimme(零拓展)

因为是逻辑指令,所以是零拓展。

零拓展:

用0填充imme的左边所有位至imme成为32位二进制数为止(imme为16位,所以需填充16位)。

5、对于loadrd,imme(rs1)指令//rdmemory[rs+imme]

load是一条取存储器字的指令。

寄存器rs的内容与符号拓展的imme想加,得到存储器地址。

从存储器取来的数据存入rd寄存器。

6、对于storerd,imme(rs1)指令//memory[rs1+imme]rd

store是一条存字指令。

存储器地址的计算方法与load相同。

7、对于beqaddress指令//if(Z==0)PCaddress

beq是一条条件转移指令。

当Z标志位为1时,转移到address。

address的二进制值的最低两位应当为0,这是因为PC是字节地址,而一条指令要占4个字节。

8、bne指令去beq类似,但是是在Z标志位为0时,转移到address。

9、对于branchaddress指令//PCtarget

branch是一条跳转指令。

target是转移的目标地址。

控制信号及意义如下:

控制信号

意义

wreg

写寄存器,为1时写寄存器,否则不写

sst

是否为store指令,为1时选择rd写入寄存器堆,否则选择rs2

m2reg

存储器数据写入寄存器为1时选择存储器数据,否则选择ALU结果

shift

ALUa使用移位位数为1时使用移位位数,否则使用寄存器数据

aluimm

ALUb使用立即数为1时使用立即数,否则使用寄存器数据

sext

立即数符号扩展为1时符号扩展,否则零扩展

aluc[3:

0]

ALU操作控制码

wmem

写存储器为1时写存储器,否则不写

pcsource[1:

0]

下一条指令地址的选择00选PC+4,01选转移地址,11选跳转地址

2.新建工程(NewProject)

启动ISEDesignSuite13.4软件,然后选择菜单File→NewProject,在对话框中输入工程名sccpu,新建名为sccpu的工程。

3.基本功能器件的设计与实现

(1)多路选择器的设计与实现

✧32位2选1多路选择器的设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

mux2x32,然后输入其实现代码:

在ISE集成开发环境中,对模块mux2x32进行仿真(Simulation)。

首先输入如下测试代码:

然后进行仿真,仿真结果如图3所示。

✧32位4选1多路选择器的设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

mux4x32然后输入其实现代码:

仿真结果:

✧5位2选1多路选择器的设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

mux2x5,然后输入其实现代码:

(2)32位D触发器的设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

dff32,然后输入其实现代码:

(3)移位器的设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

shift,然后输入其实现代码:

(4)32位加/减法器的设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

addsub32,然后输入其实现代码:

(5)32位加法器的设计

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

cla32,然后输入其实现代码:

4.运算器(ALU)设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

alu,然后输入其实现代码:

5.寄储器堆(RegisterFile)设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

regfile,然后输入其实现代码:

6.控制器(ControlUnit)设计与实现

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

sccu,然后输入其实现代码:

7.CPU的封装

CPU封装的基本原理就是根据单周期CPU的总体电路将各功能部件连接起来按照指令的数据路径连接起来。

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

sccpu_cpu,然后输入其实现代码:

8.测试

(1)指令存储器

在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,选择VerilogModule输入,并输入Verilog文件名:

scinst_mem,写出测试指令若干,用到所有16条指令,程序代码如下:

(2)数据存储器

在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,选择VerilogModule输入,并输入Verilog文件名:

scdatamem,创建数据存储器模块,实现scdatamem的Verilog程序代码:

(3)仿真测试

将CPU、指令存储器和数据存储器连接起来。

在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,选择VerilogModule输入,并输入Verilog文件名:

sccpu,实现sccpu的Verilog程序参考代码:

点击左下角CheckSyntax,检查语法,成功,然后点击SynthesizeXST进行综合,综合图如下:

CPU、指令存储器和数据存储器连接图

综合通过后,新建VerilogTestFixture文件,输入测试文件名:

test_cpu,单击下一步。

这时所有工程中的模块名都会显示出来。

模块列表如下:

然后ISE会自动生成测试模块的代码,在test_cpu中添加代码如下:

完成测试文件编辑后,确认工程管理区中View选项设置为Simulation,点击BehavioralCheckSyntax检查语法,成功,然后在过程管理区双击SimulateBehavioralModel,ISE将启动ISESimulator,可以得到仿真结果,如图所示。

CPU仿真测试结果

九、实验数据及结果分析:

在一个时钟周期内所设计的CPU能够完成一条指令的执行,指令执行结果与预期的结果是一致的。

指令一次执行,到28时处于beq36,由于此时的zero为0,因为上次aluout=3,所以不跳转,继续执行到32,无条件跳转到48,结果是3。

十、实验结论:

正确完成单周期CPU的设计,在一个时钟周期内CPU能正确完成一条指令的执行,中间结果也正确。

十一、总结及心得体会:

通过此次单周期CPU设计实验,基本掌握了单周期CPU的设计方法,对CPU内部执行机制有了进一步了解,并且加强了动手能力。

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

可以扩展更多的指令集。

报告评分:

指导教师签字:

电子科技大学

实验报告

学生姓名:

xx学号:

2012xx指导教师:

xx

一、实验地点:

主楼A2-412实验时间:

2015.5.9

二、实验室名称:

主楼A2-412

三、实验项目名称:

流水线CPU的实现(不考虑数据、控制相关)

四、实验学时:

4

五、实验原理:

本实验的流水线CPU的工作原理如下图1如示。

六、实验目的

使用硬件描述语言Verilog以及Xilinx软件进行流水线CPU设计、编码、综合与仿真,并拟定无数据相关,控制相关的指令进行测试,从而掌握流水线CPU的工作原理及设计思想。

七、实验内容

1.沿用单周期CPU实验的16条指令构成的指令系统,并进行相应编码

2.流水线CPU各功能模块的设计与实现

3.流水线CPU的封装

4.对所做设计综合与仿真测试,以验证实验结果

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

1.LenovoG480Laptop(PC)一台

2.XilinxISEDesignSuite14.6软件

3.Editplus3编辑器

九、实验步骤

1.沿用单周期CPU实验的指令系统,这里不再给出指令编码

2.新建工程(NewProject)

启动ISEDesignSuite13.4软件,然后选择菜单File→NewProject,在对话框中输入工程名pipeline,新建工程。

3基本功能器件的设计与实现

(1)程序计数器PC:

(2)取指(IF)级

完成功能:

计算pc+4,根据pcsource信号将npc设置为pc+4或者bpc(跳转地址),并从指令存储器中取pc位置的指令到finst中

(3)指令寄存器IR

在时钟上升沿将finst打入dinst,即传递给ID级

(4)指令译码(ID)级

将指令通过控制器CU译码,并根据rna,rnb内容从寄存器堆取出两个源寄存器的数据、或者将WB级到来的数据wdi根据是否写寄存器信号,将数据写入目的寄存器rd中,并符号扩展立即数,计算转移地址bpc。

(5)ID级和EXE级中间寄存器

在时钟上升沿将诸多信号打入中间寄存器中供EXE级取用。

(6)指令执行(EXE)级

根据两个ALU操作数,根据运算信号aluc,计算运算结果,存到er中,并根据ewz信号将z值写入或者不写入Z寄存器ez。

(7)EXE级和MEM级中间寄存器

在时钟上升沿将MEM级所需信号打入中间寄存器。

(8)存储(MEM)级

如果写使能为1,那么把数据datain写入到addr地址,并读出数据到dataout。

(9)MEM级和WB级中间寄存器

在时钟上升沿将WB级所需信号打入中间寄存器。

(10)写回(WB)级

根据wm2reg信号选择写回数据,并提供地址以供写回。

4.CPU的封装

流水线CPU封装的基本原理就是根据流水线CPU的总体电路将各功能部件连接起来按照指令的数据路径连接起来。

在ISE集成开发环境中,在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择NewSource命令,创建一个VerilogModule模块,名称为:

pipelinedcpu,然后输入其实现代码,将各模块封装:

5测试

(1)指令存储器

程序代码如下:

(2)数据存储器

Verilog程序代码:

(3)仿真测试

点击左下角CheckSyntax,检查语法,成功,然后点击SynthesizeXST进行综合,综合图如下:

图1.pipelinedcpu综合RTL图

图2.整个流水线CPU综合图

综合通过后,新建VerilogTestFixture文件,输入测试文件名:

testpipeline,单击下一步。

这时所有工程中的模块名都会显示出来。

模块列表如下:

图3.模块列表

然后ISE会自动生成测试模块的代码,在testpipeline中添加代码如下:

完成测试文件编辑后,确认工程管理区中View选项设置为Simulation,点击BehavioralCheckSyntax检查语法,成功,然后在过程管理区双击SimulateBehavioralModel,ISE将启动ISESimulator,可以得到仿真结果,如图所示。

图4.流水线CPU仿真测试结果

十三、实验数据及结果分析:

在一个时钟周期内所设计的CPU能够完成一条指令的执行,指令执行结果与预期的结果是一致的。

指令一次执行,到28时处于beq36,由于此时的zero为0,因为上次aluout=3,所以不跳转,继续执行到32,无条件跳转到48,结果是3。

十四、实验结论:

正确完成流水线CPU的设计,指令能够并行一条一条地经过流水线被执行,中间结果正确。

十五、总结及心得体会:

通过此次流水线CPU设计实验,基本掌握了流水线CPU的设计方法,对流水线CPU内部执行机制有了进一步了解,并且加强了动手能力。

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

可以扩展更多的指令集。

报告评分:

指导教师签字:

电子科技大学

实验报告

学生姓名:

xx学号:

2012xx指导教师:

xx

一、实验地点:

主楼A2-412实验时间:

2015.6.3

二、实验室名称:

主楼A2-412

三、实验项目名称:

流水线CPU的设计与实现,解决数据、控制相关

四、实验学时:

4

五、实验原理:

本实验的流水线CPU的工作原理如下图1如示

 

六、实验目的

通过使用硬件描述语言Verilog、Xilinx软件进行CPU设计、综合与仿真,以增强分析和设计CPU的能力,掌握单周期CPU的工作原理,控制器、运算器等部件设计的基本方法和技能,加深对所学知识的理解和掌握。

七、实验内容

拟定本实验的16条指令构成的指令系统,并进行相应编码

CPU各功能模块的设计与实现

CPU的封装

对所做设计综合与仿真,以验证实验结果

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

LenovoG480Laptop(PC)一台

XilinxISEDesignSuite14.6软件

Editplus3编辑器

九、实验步骤

拟定本实验所设计CPU的指令系统;

本实验所设计CPU支持的指令共有16条,包含了R型、I型和J型指令,如表1所示。

表1本实验所涉及的16条指令

指令

[31:

26]

[25:

21]

[20:

16]

[15:

5]

[4:

0]

功能

and

000000

rd

rs1

rs2

寄存器与

andi

000001

rd

rs1

imme

立即数与

or

000010

rd

rs1

rs2

寄存器或

ori

000011

rd

rs1

imme

立即数或

add

000100

rd

rs1

rs2

寄存器加

addi

000101

rd

rs1

imme

立即数加

sub

000110

rd

rs1

rs2

寄存器减

subi

000111

rd

rs1

imme

立即数减

load

001000

rd

rs1

imme

访问数据

store

001001

rd

rs1

imme

存储数据

beq

001010

16位address

为0转移

bne

001011

16位address

不为0转移

branch

001100

26位address

无条件转移

sll

001101

rd

sa

rs2

逻辑左移

srl

001110

rd

sa

rs2

逻辑右移

sra

001111

rd

sa

rs2

算术右移

sa保存要移位的位数;

rd、rs1、rs2分别为寄存器的寄存器号;

imme保存立即数的低16位;

address为转移地址。

1、对于add/sub/and/orrd,rs1,rs2指令//rdrs1oprs2

其中rs1和rs2是两个源操作数的寄存器号,rd是目的寄存器号。

2、对于sll/srl/srard,rs2,sa指令//rdrs2移动sa位

3、对于addi/subird,rs1,imme指令//rdrs1+imme(符号拓展)

rd是目的寄存器号,立即数要做符号拓展到32位。

符号扩展:

取imme的最高位的值,用其填充imme的左边所有位至imme成为32位二进制数为止(imme为16位,所以需填充16位)。

4、对于andi/orird,rs1,imme指令//rdrs1opimme(零拓展)

因为是逻辑指令,所以是零拓展。

零拓展:

用0填充imme的左边所有位至imme成为32位二进制数为止(imme为16位,所以需填充16位)。

5、对于loadrd,imme(rs1)指令//rdmemory[rs+imme]

load是一条取存储器字的指令。

寄存器rs的内容与符号拓展的imme想加,得到存储器地址。

从存储器取来的数据存入rd寄存器。

6、对于storerd,imme(rs1)指令//memory[rs1+imme]rd

store是一条存字指令。

存储器地址的计算方法与load相同。

7、对于beqaddress指令//if(Z==0)PCaddress

beq是一条条件转移指令。

当Z标志位为1时,转移到address。

address的二进制值的最低两位应当为0,这是因为PC是字节地址,而一条指令要占4个字节。

8、bne指令去beq类似,但是是在Z标志位为0时,转移到address。

9、对于branchaddress指令//PCtarget

branch是一条跳转指令。

target是转移的目标地址。

控制信号及意义如下:

控制信号

意义

wreg

写寄存器,为1时写寄存器,否则不写

sst

是否为store指令,为1时选择rd写入寄存器堆,否则选择rs2

m2reg

存储器数据写入寄存器为1时选择存储器数据,否则选择ALU结果

shift

ALUa使用移位位数为1时使用移位位数,否则使用寄存器数据

aluimm

ALUb使用立即数为1时使用立即数,否则使用寄存器数据

sext

立即数符号扩展为1时符号扩展,否则零扩展

aluc[3:

0]

ALU操作控制码

wmem

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

当前位置:首页 > 农林牧渔 > 畜牧兽医

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

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