OpenCores
URL https://opencores.org/ocsvn/raptor64/raptor64/trunk

Subversion Repositories raptor64

[/] [raptor64/] [trunk/] [rtl/] [verilog/] [Raptor64_SetOperandRegs.v] - Diff between revs 45 and 48

Show entire file | Details | Blame | View Log

Rev 45 Rev 48
Line 26... Line 26...
// If a register field is not used by an instruction, then the register
// If a register field is not used by an instruction, then the register
// selected is forced to r0 for that field. This causes load stalls to be
// selected is forced to r0 for that field. This causes load stalls to be
// avoided, which would otherwise occur.
// avoided, which would otherwise occur.
//=============================================================================
//=============================================================================
 
 
module Raptor64_SetOperandRegs(rst, clk, advanceI, advanceR, advanceX, b, AXC, xAXC, insn, xIR, dRa, dRb, dRc);
module Raptor64_SetOperandRegs(rst, clk, advanceI, advanceR, advanceX, b, AXC, xAXC, insn, xIR, dRa, dRb, dRc, nxt_Ra, nxt_Rb, nxt_Rc);
input rst;
input rst;
input clk;
input clk;
input advanceI;
input advanceI;
input advanceR;
input advanceR;
input advanceX;
input advanceX;
Line 43... Line 43...
reg [8:0] dRa;
reg [8:0] dRa;
output [8:0] dRb;
output [8:0] dRb;
reg [8:0] dRb;
reg [8:0] dRb;
output [8:0] dRc;
output [8:0] dRc;
reg [8:0] dRc;
reg [8:0] dRc;
 
output [8:0] nxt_Ra;
 
reg [8:0] nxt_Ra;
 
output [8:0] nxt_Rb;
 
reg [8:0] nxt_Rb;
 
output [8:0] nxt_Rc;
 
reg [8:0] nxt_Rc;
 
 
wire [6:0] iOpcode = insn[31:25];
wire [6:0] iOpcode = insn[31:25];
wire [6:0] xOpcode = xIR[31:25];
wire [6:0] xOpcode = xIR[31:25];
wire [5:0] xFunc = xIR[5:0];
wire [5:0] xFunc = xIR[5:0];
wire [6:0] iFunc7 = insn[6:0];
wire [6:0] iFunc7 = insn[6:0];
 
 
always @(posedge clk)
 
if (rst) begin
always @*
        dRa <= 9'd0;
begin
        dRb <= 9'd0;
        nxt_Ra <= dRa;
        dRc <= 9'd0;
        nxt_Rb <= dRb;
end
        nxt_Rc <= dRc;
else begin
 
        if (advanceI) begin
        if (advanceI) begin
                // Default settings, to be overridden
                // Default settings, to be overridden
                dRa <= {AXC,insn[24:20]};
                nxt_Ra <= {AXC,insn[24:20]};
                dRb <= {AXC,insn[19:15]};
                nxt_Rb <= {AXC,insn[19:15]};
                dRc <= {AXC,insn[14:10]};
                nxt_Rc <= {AXC,insn[14:10]};
                casex(iOpcode)
                casex(iOpcode)
                `MISC:
                `MISC:
                        case(iFunc7)
                        case(iFunc7)
                        `IRET:  begin
                        `IRET:  begin
                                        dRa <= {AXC,5'd25};
                                        nxt_Ra <= {AXC,5'd25};
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                        `ERET:  begin
                        `ERET:  begin
                                        dRa <= {AXC,5'd24};
                                        nxt_Ra <= {AXC,5'd24};
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                        default:
                        default:
                                        begin
                                        begin
                                        dRa <= 9'd0;
                                        nxt_Ra <= 9'd0;
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                        endcase
                        endcase
                `R:     begin dRb <= 9'd0; dRc <= 9'd0; end
                `R:     begin nxt_Rb <= 9'd0; nxt_Rc <= 9'd0; end
                `RR: dRc <= 9'd0;
                `RR: nxt_Rc <= 9'd0;
                `TRAPcc:        dRc <= 9'd0;
                `TRAPcc:        nxt_Rc <= 9'd0;
                `TRAPcci:       begin dRb <= 9'd0; dRc <= 9'd0; end
                `TRAPcci:       begin nxt_Rb <= 9'd0; nxt_Rc <= 9'd0; end
                `CALL,`JMP,`NOPI:
                `CALL,`JMP,`NOPI:
                                        begin
                                        begin
                                        dRa <= 9'd0;
                                        nxt_Ra <= 9'd0;
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `RET:           begin
                `RET:           begin
                                        dRa <= {AXC,5'd30};
                                        nxt_Ra <= {AXC,5'd30};
                                        dRb <= {AXC,5'd31};
                                        nxt_Rb <= {AXC,5'd31};
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `LB,`LBU,`LH,`LHU,`LC,`LCU,`LW,`LP,`LSH,`LSW,`LF,`LFD,`LFP,`LFDP,`LWR:
                `LB,`LBU,`LH,`LHU,`LC,`LCU,`LW,`LP,`LSH,`LSW,`LF,`LFD,`LFP,`LFDP,`LWR:
                                        begin
                                        begin
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `SB,`SC,`SH,`SW,`SP,`SSH,`SSW,`SF,`SFD,`SFP,`SFDP,`SWC:
                `SB,`SC,`SH,`SW,`SP,`SSH,`SSW,`SF,`SFD,`SFP,`SFDP,`SWC:
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                `INB,`INBU,`INCH,`INCU,`INH,`INHU,`INW:
                `INB,`INBU,`INCH,`INCU,`INH,`INHU,`INW:
                                        begin
                                        begin
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `OUTB,`OUTC,`OUTH,`OUTW:
                `OUTB,`OUTC,`OUTH,`OUTW:
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                `BLTI,`BLEI,`BGTI,`BGEI,
                `BLTI,`BLEI,`BGTI,`BGEI,
                `BLTUI,`BLEUI,`BGTUI,`BGEUI,
                `BLTUI,`BLEUI,`BGTUI,`BGEUI,
                `BEQI,`BNEI:
                `BEQI,`BNEI:
                                        begin
                                        begin
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `BTRI:          dRc <= 9'd0;
                `BTRI:          nxt_Rc <= 9'd0;
                `SLTI,`SLEI,`SGTI,`SGEI,
                `SLTI,`SLEI,`SGTI,`SGEI,
                `SLTUI,`SLEUI,`SGTUI,`SGEUI,
                `SLTUI,`SLEUI,`SGTUI,`SGEUI,
                `SEQI,`SNEI:
                `SEQI,`SNEI:
                                        begin
                                        begin
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `ADDI,`ADDUI,`SUBI,`SUBUI,`CMPI,`CMPUI,
                `ADDI,`ADDUI,`SUBI,`SUBUI,`CMPI,`CMPUI,
                `ANDI,`XORI,`ORI,`MULUI,`MULSI,`DIVUI,`DIVSI:
                `ANDI,`XORI,`ORI,`MULUI,`MULSI,`DIVUI,`DIVSI:
                                        begin
                                        begin
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `JAL:
                `JAL:
                                        begin
                                        begin
                                        dRb <= 9'd0;
                                        nxt_Rb <= 9'd0;
                                        dRc <= 9'd0;
                                        nxt_Rc <= 9'd0;
                                        end
                                        end
                `SETLO:         begin dRa <= {AXC,insn[26:22]}; dRb <= 9'd0; dRc <= 9'd0; end
                `SETLO:         begin nxt_Ra <= {AXC,insn[26:22]}; nxt_Rb <= 9'd0; nxt_Rc <= 9'd0; end
                `SETMID:        begin dRa <= {AXC,insn[26:22]}; dRb <= 9'd0; dRc <= 9'd0; end
                `SETMID:        begin nxt_Ra <= {AXC,insn[26:22]}; nxt_Rb <= 9'd0; nxt_Rc <= 9'd0; end
                `SETHI:         begin dRa <= {AXC,insn[26:22]}; dRb <= 9'd0; dRc <= 9'd0; end
                `SETHI:         begin nxt_Ra <= {AXC,insn[26:22]}; nxt_Rb <= 9'd0; nxt_Rc <= 9'd0; end
                default:        dRa <= {AXC,insn[24:20]};
                default:        nxt_Ra <= {AXC,insn[24:20]};
                endcase
                endcase
        end
        end
        else if (advanceR) begin
        else if (advanceR) begin
                dRa <= 9'd0;
                nxt_Ra <= 9'd0;
                dRb <= 9'd0;
                nxt_Rb <= 9'd0;
                dRc <= 9'd0;
                nxt_Rc <= 9'd0;
        end
        end
        // no else here
        // no else here
        if (advanceX) begin
        if (advanceX) begin
                if (xOpcode==`R) begin
                if (xOpcode==`R) begin
                        if (xFunc==`EXEC) begin
                        if (xFunc==`EXEC) begin
                                dRa <= {xAXC,b[24:20]};
                                nxt_Ra <= {xAXC,b[24:20]};
                                dRb <= {xAXC,b[19:15]};
                                nxt_Rb <= {xAXC,b[19:15]};
                                dRc <= {xAXC,b[14:10]};
                                nxt_Rc <= {xAXC,b[14:10]};
 
                        end
                        end
                        end
                end
                end
        end
        end
 
 
 
always @(posedge clk)
 
if (rst) begin
 
        dRa <= 9'd0;
 
        dRb <= 9'd0;
 
        dRc <= 9'd0;
 
end
 
else begin
 
        dRa <= nxt_Ra;
 
        dRb <= nxt_Rb;
 
        dRc <= nxt_Rc;
end
end
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.