组成原理实验报告
【实验名称】多周期MIPS CPU设计 【实验目的】
1.学习如何使用ISE的IP核
2.学习使用Xilinx FPGA内的RAM资源 3.熟悉mips指令集
4.掌握多周期mips CPU的原理。 5.多周期状态机的编写。
【实验内容】
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
设计CPU,完成以下程序代码的执行,其功能是起始数为3和3的斐波拉契数列的计算。只计算20个数。
.data
fibs: .word 0 : 20 # \ 20 words to contain fib values size: .word 20 # size of \ 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 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) times loop: 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
# load
? ?
?
实验设计中可以不使用给定的数据通路和状态机,但仅允许使用一个存储器。 对指令/数据存储器的附加要求:
? 使用异步存储器,最高评分为√√
? 使用同步存储器,最高评分为√√√,使用同步存储器时,需要对数据通路
和状态机进行适当修改。
需要例化一个mem,代码段和数据段首地址自行指定。
【实验要求】
? 仿真查看数据ram 内容是否正确 ? 检查仿真执行状态等
? 检查代码设计,代码是否独立完成
【实验操作及结果】
按照所给ppt上的数据通路完成连线,并对jump进行针对性改进,完成连线设计。 图中的每个块为一个模块。
实验中控制电路部分主要用三段式状态机的方式对控制信号进行赋值,其中每个一个周期。
PPT所给电路图为异步实现方式,现将其改为同步实现方式,只需在s0和s1之间加入一个状态,取名为s12。再在外部电路连线中将输出为data的那个CLK模块删除掉即可改为同步实现方式。
【仿真结果】DataandInstrMem中结果符合要求。
仿真图
【附:源代码】
`timescale1ns/1ps
module 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[20:16];
assign PCJump={PC[31:28],Instr[25:0],2'b00};//???? assign PCB=zero&Branch; assign PCEn=PCWrite|PCB; assign PC1=Result; assign WD=B; assign Data=RD;
相关推荐: