计算机组成实验报告_LAB5

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机组成实验五——简单的类MIPS单周期处理器实现

生命科学技术学院

5110809XXX

大豆比

目录

1OVERVIEW (1)

1.1实验名称 (1)

1.2实验目的 (1)

1.3实验范围 (1)

1.4注意事项 (1)

2实验描述 (2)

2.1新建工程 (2)

2.2顶层模块Top (5)

2.2.1模块描述 (5)

2.2.2新建模块源文件Top.v (5)

2.2.3定义信号线 (5)

2.2.4程序计数器PC (6)

2.2.5RESET (6)

2.2.6模块实例化,连接模块 (7)

2.2.7连接其他信号线 (8)

3仿真测试 (10)

3.1编写二进制测试程序 (10)

3.2初始化存储器 (10)

3.3编辑testbench文件 (11)

3.4仿真测试,观察波形 (11)

4下载验证 (12)

4.1修改Top.v中Top模块的输入输出端口 (12)

4.2编辑管脚约束文件top.ucf (12)

4.3时钟分频 (12)

4.4指定输入输出端口的意义 (13)

5实验感想与建议 (14)

5.1实验感想 (14)

5.2一些建议 (14)

6实验程序源代码 (15)

6.1Top.v (15)

6.2Ctr.v (18)

6.3Alu.v (21)

6.4AluCtr.v (22)

6.5data_memory.v (23)

6.6register.v (25)

6.7signext.v (27)

6.8inst_memory.v (27)

6.9timeDivider.v (28)

1.OVERVIEW1

1.1实验名称

简单的类MIPS单周期处理器实现-整体调试

1.2实验目的

完成单周期的类MIPS处理器

1.3实验范围

本次实验将覆盖以下范围

1、ISE的使用

2、Xilinx Spartan3E实验板的使用

3、使用VerilogHDL进行逻辑设计

4、仿真测试、下载验证

1.4注意事项

本实验的逻辑设计工具为Xilinx ISE13.4。

2.1新建工程1、启动ISE1

3.4;

2、新建工程lab5;

3、选择FPGA型号、综合和仿真工具、描述语言等配置;

4、右键点击Hierarchy窗口,添加已有模块。有:Ctr.v、Alu.v、AluCtr.v、data_memory.v、register.v、signext.v六个文件(之前两个实验完成)。

5、Adding Source Files...中,选中全部要添加的文件,保持默认项,点OK。

2.2顶层模块Top

2.2.1模块描述

MIPS单周期处理器原理图

2.2.2新建模块源文件Top.v

下图的例子是已经下载至板子验证过的,故输入和输出有1个时钟(mainClock)、4个开关([3:0]SWITCH)和8个LED灯([7:0]LED)。

2.2.3定义信号线

给Top模块内的每一根连接的信号线命名,并在top模块中声明它们。

2.2.4程序计数器PC

程序计数器是这个简单CPU能够跑起来的关键。定义一个32位reg类型PC,在时钟上升沿做PC<=PC+4。

//定义PC

//初始化PC为0

//在时钟的上升沿根据不同情况对PC

赋值

2.2.5RESET

当RESET为1时,PC置0,各寄存器清零。

要达成上述功能,就需要适当修改之前实验的各个模块,给模块添加reset信号。

以下以data_memory模块为例,演示reset信号的加入和功能实现。

1、在data_memory模块的定义中加入输入信号reset:

2、在always模块中添加初始化代码

在这一步中需要注意的是,对数据初始化的操作必须在原来数据赋值的always模块中进行,否则上板时会失败(不允许同一个变量在两个模块中赋值)。

2.2.6模块实例化,连接模块

实例化前两次实验中编写的模块,实例化的过程中连接模块的端口。本实验在实例化过程中采用的是如下方法:

在连接时用“.”符号,表明原模块是定义时规定的端口名:

模块模块名(.端口1(信号1),.端口2(信号2))

下面是本工程文件所有实例化对象和端口连接的代码:

2.2.7连接其他信号线

MUX

Mux可以用一个三目运算符来实现。

2.实验描述9

在Top.v中Mux的实现代码如下:

OUT1:OUT2:

OUT3:OUT4:OUT5:

3.1编写二进制测试程序

由于处理器是从指令内存inst_memory中读取指令,依次执行的,所以程序保存在指令内存中。

以下是测试程序的指令:

00001000000000000000000000000100//j a

00000000000000000000000000000000//nop

00000000000000000000000000000000//nop

00000000000000000000000000000000//nop

10101100000001000000000000000000//sw$40($0)

10101100000000110000000000000100//sw$34($0)

10001100000000010000000000000100//lw$14($0)

10001100000000100000000000000000//lw$20($0)

00000000001000100001100000100000//add$3,$1,$2

00000000001000100010000000100010//sub$4,$1,$2

00001000000000000000000000000100//j a

3.2初始化存储器

$readmemb和$readmemh这两个系统任务用来从文件中读取数据到存储器中,代码编写放在存储器的initial初始化块中。

data_memory中:

register中:

inst_memory中:

注意:在仿真测试时,初始化不完全并不会对波形造成影响,但是如果要上板子,则需对变量中的每一位进行赋值,否则会产生一个warning,提示你进行了部分初始化,系统默认会将你的初始化操作忽略从而产生错误。

相关文档
最新文档