计算机组成原理实验报告1-单周期

  • 格式:doc
  • 大小:374.50 KB
  • 文档页数:18

下载文档原格式

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

计算机组成原理实验报告单周期处理器开发

Q:1064950364

2015.05.12

文档目录:

1、功能设计说明

2、模块化和层次化设计说明

3、具体模块定义

4、测试代码及结果

5、实验完成时间安排

6、心得体会

1、功能设计说明

1.完成的指令集:

a) add,sub,and,or,slt,lw,sw,beq 和J 指令。

b) 不支持溢出。

2. 处理器为单周期设计。

3. 功能模块统一采用书上201页的图4-24设计,信号控制采用书上的

193页图4-12和200页图4-22的真值表进行化简。

2、模块化和层次化设计说明

3、具体模块定义

数据通路:

1)PC模块定义:

(1) 基本描述

PC 主要功能是完成输出当前指令地址。复位后,PC指向0x0000_0000,此处为第一条指令的地址。

(2) 模块接口

(3)功能定义

2)NPC模块定义:

(1) 基本描述

NPC 主要功能是根据当前指令是否为beq指令,输出下一条指令的地址。该模块调用了MUX模块。

(2) 模块接口

(3)功能定义

3)ALU模块定义:

(1) 基本描述

实现加、减、与、或、小于则赋1五种计算。

(2) 模块接口

(3)功能定义

4)MUX模块定义:

(1) 基本描述

实现32位和5位二选一数据选择器

(2) 模块接口

(3)功能定义

5)EXT模块定义:

(1) 基本描述

将输入的16位地址按符号位扩展为32位。

(2) 模块接口

(3)功能定义

6)regfile模块定义:

(1) 基本描述

根据输入的两个寄存器地址,输出相应寄存器的值,根据寄存器写信号和寄存器地址,将输入的数据选择写入寄存器。

(2) 模块接口

(3)功能定义

7)im_4k模块定义:

(1) 基本描述

指令内存大小为4K,初始化从code.txt载入指令。根据输入的指令地址,输出当前位置存储的指令。

(2) 模块接口

(3)功能定义

8)dm_4k模块定义:

(1) 基本描述

“数据内存”大小为4K,根据输入的地址读出“数据内存”中的数据,并根据数据写信号,将输入的数据选择写入“数据内存”中。

(2) 模块接口

(3)功能定义

9)Jump模块定义:

(1) 基本描述

将输入的低26位指令左移两位,高四位加上pc+4的高4位,组成32位地址输出。

(2) 模块接口

(3)功能定义

10)ALUCtrl模块定义:

(1) 基本描述

根据指令的低6位(function字段)和输入的aluop 控制信号,利用真值表化简输出三位的ALU控制信号。真值表利用书上193页图4-12.

(2) 模块接口

(3)功能定义

11)controller模块定义:

(1) 基本描述

根据输入的指令高6位(Op字段),利用真值表化简,输出RegDst,ALUSrc,MemtoReg,RegWrite,MemWrite,

Branch,J,ALUOp控制信号。真值表采用书上200页图4-22,

再加上J指令的输入输出。其中高阻状态设为0。MemRead 信号可以省略。

(2) 模块接口

(3)功能定义

4、测试代码及结果

1)测试代码及结果:

在regfile模块初始化了17($s1),18($s2),20($s4)

号寄存器的值分别为8、4、12.

add $s3,$s2,$s1 //$s3=4+8=12

sub $s5,$s4,$s3 //$s5=12-12=0

beq $s3,$s4,LI //$s3==$s4,跳到LI

sw $s2,1($s1)

lw $s3,1($s1)

LI:and $s5,$s4,$s3 //$s5=$s4 & $s3=12

or $s5,$s3,$s1 //$s5=$s4 | $s3=12

slt $s5,$s3,$s1 //$s3>$s1,$s5=0

sw $s2,1($s1) //存入4

lw $s3,1($s1) //载入4到$s3

j LI //跳转

2)生成的16进制文件(code.txt):

02519820 // add $s3,$s2,$s1

0293a822 // sub $s5,$s4,$s3

12740002 // beq $s3,$s4,LI

ae320001 // sw $s2,1($s1)

8e330001 //lw $s3,1($s1)

0293a824 // LI:and $s5,$s4,$s3

0271a825 // or $s5,$s3,$s1

0271a82a // slt $s5,$s3,$s1

ae320001 // sw $s2,1($s1)

8e330001 // lw $s3,1($s1)

08100005 //j LI

5、实验完成时间安排

1、实验前2小时看了Verilog语法,并用ModelSim跑了PPT

给的counter程序。

2、实验课上跟着老师写了各个模块,至此各个模块已经基本

写完。

3、中午用了不到1小时写了控制信号及顶层模块,只剩下测

试工作。

4、中午用了大概半小时时间测试程序可以运行,完成调试。

5、总体完成时间在10小时以内。

6、心得体会

通过该实验,对硬件编程有了更深入的理解。之前参加学校的PLD 比赛赛前培训(后来时间太紧,比赛放弃),使用过Vivado跑了一段测试程序,当时对仿真一块还不太懂,此次实验更加深了理解。对单周期处理器的认识也更深刻了。开发初期,受c语言开发的限制,老是想不通这些模块的调用参数是如何传递的。后来想到Verilog有wire