多周期MIPS CPU实验报告

上传人:ji****72 文档编号:37639024 上传时间:2018-04-20 格式:DOCX 页数:15 大小:195.97KB
返回 下载 相关 举报
多周期MIPS CPU实验报告_第1页
第1页 / 共15页
多周期MIPS CPU实验报告_第2页
第2页 / 共15页
多周期MIPS CPU实验报告_第3页
第3页 / 共15页
多周期MIPS CPU实验报告_第4页
第4页 / 共15页
多周期MIPS CPU实验报告_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《多周期MIPS CPU实验报告》由会员分享,可在线阅读,更多相关《多周期MIPS CPU实验报告(15页珍藏版)》请在金锄头文库上搜索。

1、组成原理实验报告组成原理实验报告【实验名称】多周期 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 “arr

2、ay“ 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) # F0 = $t3 sw $t4, 4($t0) # F1 = $t4 addi $t1, $t5, -2 # Counter for loop, will e

3、xecute (size-2) timesloop: lw $t3, 0($t0) # Get value from array Fn lw $t4, 4($t0) # Get value from array Fn+1 add $t2, $t3, $t4 # $t2 = Fn + Fn+1 sw $t2, 8($t0) # Store Fn+2 = Fn + Fn+1 in array addi $t0, $t0, 4 # increment address of Fib. number source addi $t1, $t1, -1 # decrement loop counter bg

4、tz $t1, loop # repeat if not finished yet.out: j out实验设计中可以不使用给定的数据通路和状态机,但仅允许使用一个存储器。 对指令/数据存储器的附加要求: 使用异步存储器,最高评分为 使用同步存储器,最高评分为,使用同步存储器时,需要对数据通 路和状态机进行适当修改。 需要例化一个 mem,代码段和数据段首地址自行指定。【实验要求】 仿真查看数据 ram 内容是否正确 检查仿真执行状态等 检查代码设计,代码是否独立完成【实验操作及结果】 按照所给 ppt 上的数据通路完成连线,并对 jump 进行针对性改进,完成连线设计。图中的每个块为一个模块

5、。 实验中控制电路部分主要用三段式状态机的方式对控制信号进行赋值,其中每个一 个周期。 PPT 所给电路图为异步实现方式,现将其改为同步实现方式,只需在 s0 和 s1 之间 加入一个状态,取名为 s12。再在外部电路连线中将输出为 data 的那个 CLK 模块删除 掉即可改为同步实现方式。【仿真结果】DataandInstrMem 中结果符合要求。仿真图【附:源代码】 timescale 1ns / 1psmodule Top(input clk,reset,output 31:0PC,Instr);wire 31:0PC1,Adr;wire 31:0Data,RD1,RD2,A,B,Sr

6、cA,SrcB,ALUResult,ALUOut,SignImm,WD3,WD,RD,PCJump;wire 4:0A1,A2,A3;wire 5:0Funct,Op;wire 31:0Result; /自己定义的 wire lorD,MemWrite,IRWrite,PCWrite,Branch,ALUSrcA,RegWrite,RegDst,MemtoReg,PCEn,zero,PCB;wire 2:0ALUOp;wire 1:0ALUSrcB,PCSrc;assign PC1=Result;assign Op=Instr31:26;assign Funct=Instr5:0;assign

7、 A1=Instr25:21;assign A2=Instr20:16;assign PCJump=PC31:28,Instr25:0,2b00; /?assign PCB=zeroassign PCEn=PCWrite|PCB;assign PC1=Result;assign WD=B;assign Data=RD;CLK PC1toPC (.PC1(PC1), .clk(clk), .reset(reset), .EN(PCEn), .PC(PC);Mux32 MuxAdr (.clk(clk), .A(PC), .B(ALUOut), .S(lorD), .C(Adr);Insttran

8、dData InsttrandData ( /a write b read.clka(clk),.wea(MemWrite), / Bus 0 : 0 .addra(Adr7:2), / Bus 5 : 0 .dina(WD), / Bus 31 : 0 .clkb(clk),.addrb(Adr7:2), / Bus 5 : 0 .doutb(RD); / Bus 31 : 0 CLK RDtoINstr(.PC1(RD), .clk(clk), .reset(reset), .EN(IRWrite), .PC(Instr);Mux5 MuxA3 (.clk(clk), .A(Instr20

9、:16), .B(Instr15:11), .S(RegDst), .C(A3);Mux32 MuxWD3 (.clk(clk), .A(ALUOut), .B(Data), .S(MemtoReg), .C(WD3);REG RegisterFile(.clk(clk), .WE3(RegWrite), .A1(A1), .A2(A2), .A3(A3), .WD3(WD3), .RD1(RD1), .RD2(RD2);CLK RD1toA(.PC1(RD1), .clk(clk), .reset(reset), .EN(1b1), .PC(A);CLK RD2toB(.PC1(RD2),

10、.clk(clk), .reset(reset), .EN(1b1), .PC(B);SignExtend SignExtend (.i_num(Instr15:0), .o_num(SignImm);Mux32 MuxSrcA (.clk(clk), .A(PC), .B(A), .S(ALUSrcA), .C(SrcA);MuxSrcB MuxSrcB (.a(B), .b(32d4), .c(SignImm), .d(SignImm32b0) zero=1b1;else zero=0;enddefault: begin result = 0; zero=0;endendcaseenden

11、dmodulemodule Mux3(input 31:0A,B,C,input 1:0S,output reg 31:0D);always(*)case(S)2b00:D=A;2b01:D=B;2b10:D=C;endcaseendmodulemodule CU(input clk,rst_n,input 5:0Op,Funct,output reg PCWrite,Branch,ALUSrcA,RegWrite,MemtoReg,RegDst,lorD,MemWrite,IRWrite,output reg 2:0ALUOp,output reg 1:0ALUSrcB,PCSrc);par

12、ameter s0=4d0;parameter s1=4d1;parameter s2=4d2;parameter s3=4d3;parameter s4=4d4;parameter s5=4d5;parameter s6=4d6;parameter s7=4d7;parameter s8=4d8;parameter s9=4d9;parameter s10=4d10;parameter s11=4d11;parameter s12=4d12;parameter Rtype=6b000000;parameter ADDI=6b001000;parameter LW=6b100011;param

13、eter SW=6b101011;parameter BGTZ=6b000111;parameter J=6b000010;reg 3:0curr_state;reg 3:0next_state;always(posedge clk or negedge rst_n)beginif(rst_n)curr_state=s0;elsecurr_state=next_state;endalways(*)begincase(curr_state)s0:next_state=s12;s12:next_state=s1;s1:beginif(Op=LW|Op=SW) next_state=s2;if(Op

14、=Rtype) next_state=s6;if(Op=BGTZ) next_state=s8;if(Op=ADDI) next_state=s9;if(Op=J) next_state=s11;ends2:beginif(Op=LW) next_state=s3;if(Op=SW) next_state=s5;ends3:next_state=s4;s4:next_state=s0;s5:next_state=s0;s6:next_state=s7;s7:next_state=s0;s8:next_state=s0;s9:next_state=s10;s10:next_state=s0;s11:next_state=s0;endcaseendalways(posedge clk or negedge rst_n)beginif(rst_n)begin lorD=0; ALUSrcA=0; ALUSrcB=2b01;ALUOp=3b000;PCSrc=2b00;IRWrite=1;PCWrite=1;Branch=0;RegWrite=0;MemtoReg=0;RegDs

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号