- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多周期MIPSCPU实验报告
组成原理实验报告【实验名称】多周期MIPS CPU设计【实验目的】1.学习如何使用ISE的IP核2.学习使用Xilinx FPGA内的RAM资源3.熟悉mips指令集4.掌握多周期mips CPU的原理。5.多周期状态机的编写。【实验内容】设计CPU,完成以下程序代码的执行,其功能是起始数为3和3的斐波拉契数列的计算。只计算20个数。.datafibs: .word 0 : 20 # array of 20 words to contain fib valuessize: .word 20 # size of array temp: .word 3 3 .text la $t0, fibs # load address of array la $t5, size # load address of size variable lw $t5, 0($t5) # load array size la $t3, temp # load lw $t3, 0($t3) la $t4, temp lw $t4, 4($t4) sw $t3, 0($t0) # F[0] = $t3 sw $t4, 4($t0) # F[1] = $t4 addi $t1, $t5, -2 # Counter for loop, will execute (size-2) timesloop: lw $t3, 0($t0) # Get value from array F[n] lw $t4, 4($t0) # Get value from array F[n+1] add $t2, $t3, $t4 # $t2 = F[n] + F[n+1] sw $t2, 8($t0) # Store F[n+2] = F[n] + F[n+1] in array addi $t0, $t0, 4 # increment address of Fib. number source addi $t1, $t1, -1 # decrement loop counter bgtz $t1, loop # repeat if not finished yet.out: j out实验设计中可以不使用给定的数据通路和状态机,但仅允许使用一个存储器。对指令/数据存储器的附加要求:使用异步存储器,最高评分为√√使用同步存储器,最高评分为√√√,使用同步存储器时,需要对数据通路和状态机进行适当修改。需要例化一个mem,代码段和数据段首地址自行指定。【实验要求】仿真查看数据ram 内容是否正确检查仿真执行状态等检查代码设计,代码是否独立完成【实验操作及结果】按照所给ppt上的数据通路完成连线,并对jump进行针对性改进,完成连线设计。图中的每个块为一个模块。实验中控制电路部分主要用三段式状态机的方式对控制信号进行赋值,其中每个一个周期。PPT所给电路图为异步实现方式,现将其改为同步实现方式,只需在s0和s1之间加入一个状态,取名为s12。再在外部电路连线中将输出为data的那个CLK模块删除掉即可改为同步实现方式。【仿真结果】DataandInstrMem中结果符合要求。仿真图【附:源代码】`timescale1ns/1psmodule Top(input clk,reset,output[31:0]PC,Instr);wire[31:0]PC1,Adr;wire[31:0]Data,RD1,RD2,A,B,SrcA,SrcB,ALUResult,ALUOut,SignImm,WD3,WD,RD,PCJump;wire[4:0]A1,A2,A3;wire[5:0]Funct,Op;wire[31:0]Result;//自己定义的wire lorD,MemWrite,IRWrite,PCWrite,Branch,ALUSrcA,RegWrite,RegDst,MemtoReg,PCEn,zero,PCB;wire[2:0]ALUOp;wire[1:0]ALUSrcB,PCSrc;assign PC1=Result;assign Op=Instr[31:26];assign Funct=Instr[5:0];assign A1=Instr[25:21];assign A2=Instr[2
文档评论(0)