реализация процессора MIPS (Verilog) - PullRequest
0 голосов
/ 08 июня 2018

Это учебный проект, и я застрял в этой части.Компьютерная часть процессора выглядит очень хитрой и неясной в соответствии с моделью, предоставленной моим инструктором.Когда я делаю симуляцию, мой адрес компьютера устанавливается на 0 при обработке инструкций bne.Вот код, и я надеюсь, что кто-то может сказать мне, в какой части я ошибаюсь и почему:

module Ifetc32(Instruction,PC_plus_4_out,Add_result,Read_data_1,Branch,nBranch,Jmp,Jal,Jrn,Zero,clock,reset,opcplus4);
    output[31:0] Instruction;           
    output[31:0] PC_plus_4_out;         
    input[31:0]  Add_result;            
    input[31:0]  Read_data_1;           
    input        Branch;                
    input        nBranch;               
    input        Jmp;                   
    input        Jal;                   
    input        Jrn;                   
    input        Zero;                  
    input        clock,reset;           
    output[31:0] opcplus4;              // JAL PC+4
    wire[31:0]   PC_plus_4;            
    reg[31:0]     PC;                    
    reg[31:0]    next_PC;                
    reg[31:0]    opcplus4;
    assign PC_plus_4[31:2] = PC[31:2]+1'b1;
    assign PC_plus_4[1:0] = PC[1:0];
    assign PC_plus_4_out = PC_plus_4;
    always @* begin  // beq $n ,$m if $n=$m branch   bne if $n !=$m branch jr
            next_PC=PC;
            if(Branch==1'b1)
            begin
                if(Zero==1'b1)
                begin
                    next_PC=PC+Add_result;
                end
            end
            else if(nBranch==1'b1)
            begin
                if(Zero==1'b1)
                begin
                    next_PC=PC+Add_result;
                end

            end
            else if(Jrn==1'b1)
            begin
                next_PC=Read_data_1-4;
            end             
        end
        always @(negedge clock) begin  //(J,Jal and reset)
            if(reset==1'b1)
            begin
                opcplus4={32{1'b0}};
                PC={32{1'b0}};
            end
            else
            begin
                if(Jmp==1'b1)
                begin
                    next_PC={PC[31:28],Instruction[25:0],2'b00};
                end
                else if(Jal==1'b1)
                begin
                    opcplus4=PC+4;
                    next_PC={PC[31:28],Instruction[25:0],2'b00};
                end
                else 
                    next_PC=next_PC+4;
                PC=next_PC;
            end 
    end
endmodule
...