计算机组成原理实验报告1-单周期
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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