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

Subversion Repositories raptor64

[/] [raptor64/] [trunk/] [rtl/] [verilog/] [Raptor64_SetOperandRegs.v] - Diff between revs 33 and 41

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 33 Rev 41
Line 21... Line 21...
//                                                                          
//                                                                          
// You should have received a copy of the GNU General Public License        
// You should have received a copy of the GNU General Public License        
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
//                                                                          
//                                                                          
//
//
 
// 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
 
// avoided, which would otherwise occur.
//=============================================================================
//=============================================================================
 
 
module Raptor64_SetOperandRegs(rst, clk, advanceI, advanceR, advanceX, b, AXC, insn, xIR, dRa, dRb, dRc);
module Raptor64_SetOperandRegs(rst, clk, advanceI, advanceR, advanceX, b, AXC, insn, xIR, dRa, dRb, dRc);
input rst;
input rst;
input clk;
input clk;
input advanceI;
input advanceI;
input advanceR;
input advanceR;
input advanceX;
input advanceX;
input [63:0] b;
input [63:0] b;
input [3:0] AXC;
input [3:0] AXC;
input [41:0] insn;
input [31:0] insn;
input [41:0] xIR;
input [31:0] xIR;
output [8:0] dRa;
output [8:0] dRa;
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;
 
 
wire [6:0] iOpcode = insn[41:35];
wire [6:0] iOpcode = insn[31:25];
wire [6:0] xOpcode = xIR[41:35];
wire [6:0] xOpcode = xIR[31:25];
wire [6:0] xFunc = xIR[6:0];
wire [5:0] xFunc = xIR[5:0];
 
wire [6:0] iFunc7 = insn[6:0];
 
 
always @(posedge clk)
always @(posedge clk)
if (rst) begin
if (rst) begin
        dRa <= 9'd0;
        dRa <= 9'd0;
        dRb <= 9'd0;
        dRb <= 9'd0;
        dRc <= 9'd0;
        dRc <= 9'd0;
end
end
else begin
else begin
        if (advanceI) begin
        if (advanceI) begin
                // Default settings, to be overridden
                // Default settings, to be overridden
                dRa <= {AXC,insn[34:30]};
                dRa <= {AXC,insn[24:20]};
                dRb <= {AXC,insn[29:25]};
                dRb <= {AXC,insn[19:15]};
                dRc <= {AXC,insn[24:20]};
                dRc <= {AXC,insn[14:10]};
                casex(iOpcode)
                casex(iOpcode)
 
                `MISC:
 
                        case(iFunc7)
 
                        `IRET:  begin
 
                                        dRa <= {AXC,5'd25};
 
                                        dRb <= 9'd0;
 
                                        dRc <= 9'd0;
 
                                        end
 
                        `ERET:  begin
 
                                        dRa <= {AXC,5'd24};
 
                                        dRb <= 9'd0;
 
                                        dRc <= 9'd0;
 
                                        end
 
                        default:
 
                                        begin
 
                                        dRa <= 9'd0;
 
                                        dRb <= 9'd0;
 
                                        dRc <= 9'd0;
 
                                        end
 
                        endcase
 
                `CALL,`JMP,`NOPI:
 
                                        begin
 
                                        dRa <= 9'd0;
 
                                        dRb <= 9'd0;
 
                                        dRc <= 9'd0;
 
                                        end
                `RET:           begin
                `RET:           begin
                                        dRa <= {AXC,5'd30};
                                        dRa <= {AXC,5'd30};
                                        dRb <= {AXC,5'd31};
                                        dRb <= {AXC,5'd31};
 
                                        dRc <= 9'd0;
                                        end
                                        end
                `SETLO:         dRa <= {AXC,insn[36:32]};
                `BLTI,`BLEI,`BGTI,`BGEI,
                `SETHI:         dRa <= {AXC,insn[36:32]};
                `BLTUI,`BLEUI,`BGTUI,`BGEUI,
                `SM,`LM:
                `BEQI,`BNEI:
                        begin
                        begin
                        dRa <= {AXC,1'b1,insn[34:31]};
                                        dRb <= 9'd0;
                        casex(insn[30:0])
                                        dRc <= 9'd0;
                        31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1:    dRb <= {AXC,5'd1};
                                        end
                        31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxx10:    dRb <= {AXC,5'd2};
                `SLTI,`SLEI,`SGTI,`SGEI,
                        31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxx100:    dRb <= {AXC,5'd3};
                `SLTUI,`SLEUI,`SGTUI,`SGEUI,
                        31'bxxxxxxxxxxxxxxxxxxxxxxxxxxx1000:    dRb <= {AXC,5'd4};
                `SEQI,`SNEI:
                        31'bxxxxxxxxxxxxxxxxxxxxxxxxxx10000:    dRb <= {AXC,5'd5};
                                        begin
                        31'bxxxxxxxxxxxxxxxxxxxxxxxxx100000:    dRb <= {AXC,5'd6};
                                        dRb <= 9'd0;
                        31'bxxxxxxxxxxxxxxxxxxxxxxxx1000000:    dRb <= {AXC,5'd7};
                                        dRc <= 9'd0;
                        31'bxxxxxxxxxxxxxxxxxxxxxxx10000000:    dRb <= {AXC,5'd8};
 
                        31'bxxxxxxxxxxxxxxxxxxxxxx100000000:    dRb <= {AXC,5'd9};
 
                        31'bxxxxxxxxxxxxxxxxxxxxx1000000000:    dRb <= {AXC,5'd10};
 
                        31'bxxxxxxxxxxxxxxxxxxxx10000000000:    dRb <= {AXC,5'd11};
 
                        31'bxxxxxxxxxxxxxxxxxxx100000000000:    dRb <= {AXC,5'd12};
 
                        31'bxxxxxxxxxxxxxxxxxx1000000000000:    dRb <= {AXC,5'd13};
 
                        31'bxxxxxxxxxxxxxxxxx10000000000000:    dRb <= {AXC,5'd14};
 
                        31'bxxxxxxxxxxxxxxxx100000000000000:    dRb <= {AXC,5'd15};
 
                        31'bxxxxxxxxxxxxxxx1000000000000000:    dRb <= {AXC,5'd16};
 
                        31'bxxxxxxxxxxxxxx10000000000000000:    dRb <= {AXC,5'd17};
 
                        31'bxxxxxxxxxxxxx100000000000000000:    dRb <= {AXC,5'd18};
 
                        31'bxxxxxxxxxxxx1000000000000000000:    dRb <= {AXC,5'd19};
 
                        31'bxxxxxxxxxxx10000000000000000000:    dRb <= {AXC,5'd20};
 
                        31'bxxxxxxxxxx100000000000000000000:    dRb <= {AXC,5'd21};
 
                        31'bxxxxxxxxx1000000000000000000000:    dRb <= {AXC,5'd22};
 
                        31'bxxxxxxxx10000000000000000000000:    dRb <= {AXC,5'd23};
 
                        31'bxxxxxxx100000000000000000000000:    dRb <= {AXC,5'd24};
 
                        31'bxxxxxx1000000000000000000000000:    dRb <= {AXC,5'd25};
 
                        31'bxxxxx10000000000000000000000000:    dRb <= {AXC,5'd26};
 
                        31'bxxxx100000000000000000000000000:    dRb <= {AXC,5'd27};
 
                        31'bxxx1000000000000000000000000000:    dRb <= {AXC,5'd28};
 
                        31'bxx10000000000000000000000000000:    dRb <= {AXC,5'd29};
 
                        31'bx100000000000000000000000000000:    dRb <= {AXC,5'd30};
 
                        31'b1000000000000000000000000000000:    dRb <= {AXC,5'd31};
 
                        default:        dRb <= {AXC,5'd0};
 
                        endcase
 
                        end
                        end
                default:        dRa <= {AXC,insn[34:30]};
                `SETLO:         dRa <= {AXC,insn[26:22]};
 
                `SETMID:        dRa <= {AXC,insn[26:22]};
 
                `SETHI:         dRa <= {AXC,insn[26:22]};
 
                default:        dRa <= {AXC,insn[24:20]};
                endcase
                endcase
        end
        end
        else if (advanceR) begin
        else if (advanceR) begin
                dRa <= 9'd0;
                dRa <= 9'd0;
                dRb <= 9'd0;
                dRb <= 9'd0;
Line 113... Line 120...
        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 <= b[34:30];
                                dRa <= b[24:20];
                                dRb <= b[29:25];
                                dRb <= b[19:15];
                                dRc <= b[24:20];
                                dRc <= b[14:10];
                        end
                        end
                end
                end
        end
        end
end
end
 
 

powered by: WebSVN 2.1.0

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