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

上传人:苏美尔 文档编号:6081547 上传时间:2020-09-06 格式:DOC 页数:18 大小:358.51KB
返回 下载 相关 举报
计算机组成原理实验报告1-单周期.doc_第1页
第1页 / 共18页
计算机组成原理实验报告1-单周期.doc_第2页
第2页 / 共18页
计算机组成原理实验报告1-单周期.doc_第3页
第3页 / 共18页
计算机组成原理实验报告1-单周期.doc_第4页
第4页 / 共18页
计算机组成原理实验报告1-单周期.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《计算机组成原理实验报告1-单周期.doc》由会员分享,可在线阅读,更多相关《计算机组成原理实验报告1-单周期.doc(18页珍藏版)》请在三一文库上搜索。

1、计算机组成原理实验报告 单周期处理器开发 Q:10649503642015.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 主要

2、功能是完成输出当前指令地址。复位后,PC指向0x0000_0000,此处为第一条指令的地址。(2) 模块接口 信号名方向描述31:0addressI输入的指令地址clkI时钟信号rstI复位信号31:0outO输出的指令地址(3)功能定义序号功能名称功能描述1复位rst=1时,将out置为0X0000_00002输出指令地址时钟信号到来时,将address赋给out2)NPC模块定义:(1) 基本描述NPC 主要功能是根据当前指令是否为beq指令,输出下一条指令的地址。该模块调用了MUX模块。(2) 模块接口 信号名方向描述15:0imaddrI指令的低16位zeroIALU计算结果:1表示当

3、前两寄存器(rs,rt)值相等;0表示不相等。brI是否为beq指令。1是0否31:0pcI输入当前指令地址31:0npcO输出下一条指令地址(3)功能定义序号功能名称功能描述1输出指令地址根据zero与br的值输出下一条指令的地址。3)ALU模块定义:(1) 基本描述实现加、减、与、或、小于则赋1五种计算。(2) 模块接口 信号名方向描述2:0aluctrlIALU控制信号31:0AI rs寄存器的值31:0BIrt寄存器的值zeroOA- B=0,则zero=1;否则zero=0.31:0resultOAlu计算输出的结果。(3)功能定义序号功能名称功能描述1输出计算结果根据alu控制信号

4、,输出A与B的计算结果2输出zero若result=0则输出zero=1,否则输出zero=0。4)MUX模块定义:(1) 基本描述实现32位和5位二选一数据选择器(2) 模块接口信号名方向描述SIMUX控制信号31:0d0/4:0d0I MUX输入31:0d1/4:0d1IMUX输入31:0y/4:0yOMUX输出(3)功能定义序号功能名称功能描述1输出d0,或d1的值S为0,y=d0;S为1,y=d1.5)EXT模块定义:(1) 基本描述将输入的16位地址按符号位扩展为32位。(2) 模块接口信号名方向描述15:0addrinI输入的16位地址 31:0addroutO 输出的32位地址(

5、3)功能定义序号功能名称功能描述1输出扩展的32位地址.将addrin扩展为32位的addrout.6)regfile模块定义:(1) 基本描述 根据输入的两个寄存器地址,输出相应寄存器的值,根据寄存器写信号和寄存器地址,将输入的数据选择写入寄存器。 (2) 模块接口信号名方向描述clkI时钟信号4:0rreg1I Rs寄存器地址4:0rreg2IRt寄存器地址31:0rdata1ORs寄存器值31:0rdata2ORt寄存器值regwI写寄存器信号4:0wregIRt写寄存器地址31:0wdataI写入寄存器的信号(3)功能定义序号功能名称功能描述1读寄存器数据读rs、rt寄存器的数据2向寄

6、存器写入数据根据写信号向寄存器选择写入数据7)im_4k模块定义:(1) 基本描述 指令内存大小为4K,初始化从code.txt载入指令。根据输入的指令地址,输出当前位置存储的指令。 (2) 模块接口信号名方向描述9:0addrI指令地址31:0doutO 指令(3)功能定义序号功能名称功能描述1载入指令初始化载入code.txt中的指令2输出指令根据输入的指令地址,输出当前指令8)dm_4k模块定义:(1) 基本描述 “数据内存”大小为4K,根据输入的地址读出“数据内存”中的数据,并根据数据写信号,将输入的数据选择写入“数据内存”中。 (2) 模块接口信号名方向描述clkI时钟信号9:0ad

7、drI 数据地址31:0dinI写入的数据 weI数据内存写信号31:0doutO读出的数据(3)功能定义序号功能名称功能描述1读数据内存数据根据输入的数据地址,读出数据内存的数据,读出的数据不一定被使用,只有lw指令才会使用。2向数据内存写入数据在时钟信号到来时,根据写数据信号,将输入的数据选择写入数据内存中。9)Jump模块定义:(1) 基本描述 将输入的低26位指令左移两位,高四位加上pc+4的高4位,组成32位地址输出。 (2) 模块接口信号名方向描述25:0addrinI低26位指令31:0pcI 当前PC31:0addroutO计算出的32位地址(3)功能定义序号功能名称功能描述1

8、输出J跳转地址输出计算得到的32位地址,为J指令要跳转的地址。10) ALUCtrl模块定义:(1) 基本描述 根据指令的低6位(function字段)和输入的aluop控制信号,利用真值表化简输出三位的ALU控制信号。真值表利用书上193页图4-12. (2) 模块接口信号名方向描述5:0funcI指令低6位1:0aluopI Aluop控制信号2:0aluctrlO Alu控制信号(3)功能定义序号功能名称功能描述1 输出ALU控制信号利用真值表化简输出ALU控制信号。11) controller模块定义:(1) 基本描述 根据输入的指令高6位(Op字段),利用真值表化简,输出RegDst

9、,ALUSrc,MemtoReg,RegWrite,MemWrite,Branch,J,ALUOp控制信号。真值表采用书上200页图4-22,再加上J指令的输入输出。其中高阻状态设为0。MemRead信号可以省略。 (2) 模块接口信号名方向描述5:0OpI指令高6位 RegDstO Rd寄存器控制信号 ALUSrcO ALU数据来源控制信号 MemtoRegO 数据内存数据写入寄存器控制信号 RegWriteO 寄存器写控制信号 MemWriteO 数据内存写控制信号 BranchO Beq指令控制信号JO J指令控制信号1:0ALUOp O ALUOp控制信号(3)功能定义序号功能名称功能

10、描述1输出各种控制信号根据输入的OP,利用真值表化简,输出各种控制信号。4、 测试代码及结果1) 测试代码及结果:在regfile模块初始化了17($s1),18($s2),20($s4)号寄存器的值分别为8、4、12.add $s3,$s2,$s1 /$s3=4+8=12sub $s5,$s4,$s3 /$s5=12-12=0beq $s3,$s4,LI /$s3=$s4,跳到LIsw $s2,1($s1)lw $s3,1($s1)LI:and $s5,$s4,$s3 /$s5=$s4 & $s3=12or $s5,$s3,$s1 /$s5=$s4 | $s3=12slt $s5,$s3,$

11、s1 /$s3$s1,$s5=0sw $s2,1($s1) /存入4lw $s3,1($s1) /载入4到$s3j LI /跳转2) 生成的16进制文件(code.txt):02519820 / add $s3,$s2,$s10293a822 / sub $s5,$s4,$s312740002 / beq $s3,$s4,LIae320001 / sw $s2,1($s1)8e330001 /lw $s3,1($s1)0293a824 / LI:and $s5,$s4,$s30271a825 / or $s5,$s3,$s10271a82a / slt $s5,$s3,$s1ae320001

12、/ sw $s2,1($s1)8e330001 / lw $s3,1($s1)08100005 /j LI5、 实验完成时间安排1、 实验前2小时看了Verilog语法,并用ModelSim跑了PPT给的counter程序。2、 实验课上跟着老师写了各个模块,至此各个模块已经基本写完。3、 中午用了不到1小时写了控制信号及顶层模块,只剩下测试工作。4、 中午用了大概半小时时间测试程序可以运行,完成调试。5、 总体完成时间在10小时以内。6、心得体会 通过该实验,对硬件编程有了更深入的理解。之前参加学校的PLD比赛赛前培训(后来时间太紧,比赛放弃),使用过Vivado跑了一段测试程序,当时对仿真一块还不太懂,此次实验更加深了理解。对单周期处理器的认识也更深刻了。开发初期,受c语言开发的限制,老是想不通这些模块的调用参数是如何传递的。后来想到Verilog有wire型变量,其实就可以将其想象成一条条真实的线,各个模块就是各个真实的器件,这些器件用线连接起来才可以工作。于是,便突破了思想局限,顺利完成了实验。使用开发工具多了,渐渐就会发现这些工具都大同小异,所以上手也会很快。

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1