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

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64v7/] [rtl/] [common/] [FT64_alu.v] - Diff between revs 61 and 66

Show entire file | Details | Blame | View Log

Rev 61 Rev 66
Line 23... Line 23...
// ============================================================================
// ============================================================================
//
//
`include "FT64_defines.vh"
`include "FT64_defines.vh"
`include "FT64_config.vh"
`include "FT64_config.vh"
 
 
module FT64_alu(rst, clk, ld, abort, instr, sz, tlb, store, a, b, c, t, pc, Ra, tgt, tgt2, ven, vm,
module FT64_alu(rst, clk, ld, abort, instr, sz, store, a, b, c, t, pc, Ra, tgt, tgt2, ven, vm,
    csr, o, ob, done, idle, excen, exc, thrd, ptrmask, state, mem, shift,
    csr, o, ob, done, idle, excen, exc, thrd, ptrmask, state, mem, shift,
    ol, dl, ASID, icl_i, cyc_i, we_i, vadr_i, cyc_o, we_o, padr_o, uncached, tlb_miss,
    ol, dl
    exv_o, rdv_o, wrv_o
 
`ifdef SUPPORT_BBMS
`ifdef SUPPORT_BBMS
    , pb, cbl, cbu, ro, dbl, dbu, sbl, sbu, en
    , pb, cbl, cbu, ro, dbl, dbu, sbl, sbu, en
`endif
`endif
    );
    );
parameter DBW = 64;
parameter DBW = 64;
Line 45... Line 44...
input clk;
input clk;
input ld;
input ld;
input abort;
input abort;
input [47:0] instr;
input [47:0] instr;
input [2:0] sz;
input [2:0] sz;
input tlb;
 
input store;
input store;
input [63:0] a;
input [63:0] a;
input [63:0] b;
input [63:0] b;
input [63:0] c;
input [63:0] c;
input [63:0] t;                  // target register value
input [63:0] t;                  // target register value
Line 71... Line 69...
input [1:0] state;
input [1:0] state;
input mem;
input mem;
input shift;
input shift;
input [1:0] ol;
input [1:0] ol;
input [1:0] dl;
input [1:0] dl;
input [7:0] ASID;
 
input icl_i;
 
input cyc_i;
 
input we_i;
 
input [ABW-1:0] vadr_i;
 
output cyc_o;
 
output we_o;
 
output [ABW-1:0] padr_o;
 
output uncached;
 
output tlb_miss;
 
output wrv_o;
 
output rdv_o;
 
output exv_o;
 
`ifdef SUPPORT_BBMS
`ifdef SUPPORT_BBMS
input [63:0] pb;
input [63:0] pb;
input [63:0] cbl;
input [63:0] cbl;
input [63:0] cbu;
input [63:0] cbu;
input [63:0] ro;
input [63:0] ro;
Line 280... Line 265...
6'h20:  shift10 <= ~shift9;             // COM
6'h20:  shift10 <= ~shift9;             // COM
6'h21:  shift10 <= !shift9;             // NOT
6'h21:  shift10 <= !shift9;             // NOT
default:        shift10 <= shift9;
default:        shift10 <= shift9;
endcase
endcase
 
 
wire tlb_done, tlb_idle;
 
wire [DBW-1:0] tlbo;
 
 
 
`ifdef SUPPORT_TLB
 
FT64_TLB utlb1 (
 
        .rst(rst),
 
        .clk(clk),
 
        .ld(ld & tlb),
 
        .done(tlb_done),
 
        .idle(tlb_idle),
 
        .ol(ol),
 
        .ASID(ASID),
 
        .op(instr[25:22]),
 
        .regno(instr[21:18]),
 
        .dati(a),
 
        .dato(tlbo),
 
        .uncached(uncached),
 
        .icl_i(icl_i),
 
        .cyc_i(cyc_i),
 
        .we_i(we_i),
 
        .vadr_i(vadr_i),
 
        .cyc_o(cyc_o),
 
        .we_o(we_o),
 
        .padr_o(padr_o),
 
        .TLBMiss(tlb_miss),
 
        .wrv_o(wrv_o),
 
        .rdv_o(rdv_o),
 
        .exv_o(exv_o),
 
        .HTLBVirtPageo()
 
);
 
`else
 
assign tlbo = 64'hDEADDEADDEADDEAD;
 
assign uncached = 1'b0;
 
assign padr_o = vadr_i;
 
assign cyc_o = cyc_i;
 
assign we_o = we_i;
 
assign tlb_miss = 1'b0;
 
assign wrv_o = 1'b0;
 
assign rdv_o = 1'b0;
 
assign exv_o = 1'b0;
 
`endif
 
 
 
FT64_bitfield #(DBW) ubf1
FT64_bitfield #(DBW) ubf1
(
(
    .inst(instr),
    .inst(instr),
    .a(a),
    .a(a),
    .b(b),
    .b(b),
Line 1045... Line 988...
                                $stop;
                                $stop;
                end
                end
            `ADD:
            `ADD:
`ifdef SIMD
`ifdef SIMD
                case(sz)
                case(sz)
                        3'd0,3'd4:
                        3'd0:
 
                                begin
 
                                        o[7:0] = a[7:0] + b[7:0];
 
                                        o[63:8] = {56{o[7]}};
 
                                end
 
                        3'd1:
 
                                begin
 
                                        o[15:0] = a[15:0] + b[15:0];
 
                                        o[63:16] = {48{o[15]}};
 
                                end
 
                        3'd2:
 
                                begin
 
                                        o[31:0] = a[31:0] + b[31:0];
 
                                        o[63:32] = {32{o[31]}};
 
                                end
 
                        3'd4:
                                begin
                                begin
                                        o[7:0] = a[7:0] + b[7:0];
                                        o[7:0] = a[7:0] + b[7:0];
                                        o[15:8] = a[15:8] + b[15:8];
                                        o[15:8] = a[15:8] + b[15:8];
                                        o[23:16] = a[23:16] + b[23:16];
                                        o[23:16] = a[23:16] + b[23:16];
                                        o[31:24] = a[31:24] + b[31:24];
                                        o[31:24] = a[31:24] + b[31:24];
                                        o[39:32] = a[39:32] + b[39:32];
                                        o[39:32] = a[39:32] + b[39:32];
                                        o[47:40] = a[47:40] + b[47:40];
                                        o[47:40] = a[47:40] + b[47:40];
                                        o[55:48] = a[55:48] + b[55:48];
                                        o[55:48] = a[55:48] + b[55:48];
                                        o[63:56] = a[63:56] + b[63:56];
                                        o[63:56] = a[63:56] + b[63:56];
                                end
                                end
                        3'd1,3'd5:
                        3'd5:
                                begin
                                begin
                                        o[15:0] = a[15:0] + b[15:0];
                                        o[15:0] = a[15:0] + b[15:0];
                                        o[31:16] = a[31:16] + b[31:16];
                                        o[31:16] = a[31:16] + b[31:16];
                                        o[47:32] = a[47:32] + b[47:32];
                                        o[47:32] = a[47:32] + b[47:32];
                                        o[63:48] = a[63:48] + b[63:48];
                                        o[63:48] = a[63:48] + b[63:48];
                                end
                                end
                        3'd2,3'd6:
                        3'd6:
                                begin
                                begin
                                        o[31:0] = a[31:0] + b[31:0];
                                        o[31:0] = a[31:0] + b[31:0];
                                        o[63:32] = a[63:32] + b[63:32];
                                        o[63:32] = a[63:32] + b[63:32];
                                end
                                end
                    default:
                    default:
Line 1076... Line 1034...
                        end
                        end
                    endcase
                    endcase
`else
`else
                        o = a + b;
                        o = a + b;
`endif
`endif
// If the operation is SIMD the target register must be passed in arg T.
 
            `SUB:
            `SUB:
`ifdef SIMD
`ifdef SIMD
                case(sz)
                case(sz)
                        3'd0:
                        3'd0:
                                begin
                                begin
                                        o[7:0] = a[7:0] - b[7:0];
                                        o[7:0] = a[7:0] - b[7:0];
                                        o[63:8] = t[63:8];
                                        o[63:8] = {56{o[7]}};
 
                                end
 
                        3'd1:
 
                                begin
 
                                        o[15:0] = a[15:0] - b[15:0];
 
                                        o[63:16] = {48{o[15]}};
 
                                end
 
                        3'd2:
 
                                begin
 
                                        o[31:0] = a[31:0] - b[31:0];
 
                                        o[63:32] = {31{o[31]}};
                                end
                                end
                        3'd4:
                        3'd4:
                                begin
                                begin
                                        o[7:0] = a[7:0] - b[7:0];
                                        o[7:0] = a[7:0] - b[7:0];
                                        o[15:8] = a[15:8] - b[15:8];
                                        o[15:8] = a[15:8] - b[15:8];
Line 1096... Line 1063...
                                        o[39:32] = a[39:32] - b[39:32];
                                        o[39:32] = a[39:32] - b[39:32];
                                        o[47:40] = a[47:40] - b[47:40];
                                        o[47:40] = a[47:40] - b[47:40];
                                        o[55:48] = a[55:48] - b[55:48];
                                        o[55:48] = a[55:48] - b[55:48];
                                        o[63:56] = a[63:56] - b[63:56];
                                        o[63:56] = a[63:56] - b[63:56];
                                end
                                end
                        3'd1,3'd5:
                        3'd5:
                                begin
                                begin
                                        o[15:0] = a[15:0] - b[15:0];
                                        o[15:0] = a[15:0] - b[15:0];
                                        o[31:16] = a[31:16] - b[31:16];
                                        o[31:16] = a[31:16] - b[31:16];
                                        o[47:32] = a[47:32] - b[47:32];
                                        o[47:32] = a[47:32] - b[47:32];
                                        o[63:48] = a[63:48] - b[63:48];
                                        o[63:48] = a[63:48] - b[63:48];
                                end
                                end
                        3'd2,3'd6:
                        3'd6:
                                begin
                                begin
                                        o[31:0] = a[31:0] - b[31:0];
                                        o[31:0] = a[31:0] - b[31:0];
                                        o[63:32] = a[63:32] - b[63:32];
                                        o[63:32] = a[63:32] - b[63:32];
                                end
                                end
                    default:
                    default:
                        begin
                        begin
                                o[63:0] = a - b;
                                o = a - b;
                        end
                        end
                    endcase
                    endcase
`else
`else
                        o = a - b;
                        o = a - b;
`endif
`endif
Line 1158... Line 1125...
                                        //o[63:44] = PTR;
                                        //o[63:44] = PTR;
                                        end
                                        end
            `MIN:
            `MIN:
`ifdef SIMD
`ifdef SIMD
          case(sz)
          case(sz)
                        3'd0:
                        3'd0:   o = BIG ? ($signed(a[7:0]) < $signed(b[7:0]) ? {{56{a[7]}},a[7:0]} : {{56{b[7]}},b[7:0]}) : 64'hCCCCCCCCCCCCCCCC;
                                begin
                        3'd1:   o = BIG ? ($signed(a[15:0]) < $signed(b[15:0]) ? {{48{a[15]}},a[15:0]} : {{48{b[15]}},b[15:0]}) : 64'hCCCCCCCCCCCCCCCC;
                                o[7:0] = BIG ? ($signed(a[7:0]) < $signed(b[7:0]) ? a[7:0] : b[7:0]) : 8'hCC;
                        3'd2:   o = BIG ? ($signed(a[31:0]) < $signed(b[31:0]) ? {{32{a[31]}},a[31:0]} : {{32{b[31]}},b[31:0]}) : 64'hCCCCCCCCCCCCCCCC;
                                o[63:8] = BIG ? t[63:8] : 56'hCCCCCCCCCCCCCC;
                                        3'd3:   o = BIG ? ($signed(a) < $signed(b) ? a : b) : 64'hCCCCCCCCCCCCCCCC;
                                end
 
                        3'd1:
 
                                begin
 
                                o[15:0] = BIG ? ($signed(a[15:0]) < $signed(b[15:0]) ? a[15:0] : b[15:0]) : 16'hCCCC;
 
                                o[63:16] = BIG ? t[63:16] : 48'hCCCCCCCCCCCC;
 
                                end
 
                        3'd2:
 
                                begin
 
                                o[31:0] = BIG ? ($signed(a[31:0]) < $signed(b[31:0]) ? a[31:0] : b[31:0]) : 32'hCCCCCCCC;
 
                                o[63:32] = BIG ? t[63:32] : 32'hCCCCCCCC;
 
                                end
 
                                        3'd3:
 
                                                begin
 
                                o = BIG ? ($signed(a) < $signed(b) ? a : b) : 64'hCCCCCCCCCCCCCCCC;
 
                                end
 
                        3'd4:
                        3'd4:
                                begin
                                begin
                                o[7:0] = BIG ? ($signed(a[7:0]) < $signed(b[7:0]) ? a[7:0] : b[7:0]) : 8'hCC;
                                o[7:0] = BIG ? ($signed(a[7:0]) < $signed(b[7:0]) ? a[7:0] : b[7:0]) : 8'hCC;
                                o[15:8] = BIG ? ($signed(a[15:8]) < $signed(b[15:8]) ? a[15:8] : b[15:8]) : 64'hCCCCCCCCCCCCCCCC;
                                o[15:8] = BIG ? ($signed(a[15:8]) < $signed(b[15:8]) ? a[15:8] : b[15:8]) : 64'hCCCCCCCCCCCCCCCC;
                                o[23:16] = BIG ? ($signed(a[23:16]) < $signed(b[23:16]) ? a[23:16] : b[23:16]) : 64'hCCCCCCCCCCCCCCCC;
                                o[23:16] = BIG ? ($signed(a[23:16]) < $signed(b[23:16]) ? a[23:16] : b[23:16]) : 64'hCCCCCCCCCCCCCCCC;
Line 1211... Line 1163...
                                o = BIG ? ($signed(a) < $signed(b) ? a : b) : 64'hCCCCCCCCCCCCCCCC;
                                o = BIG ? ($signed(a) < $signed(b) ? a : b) : 64'hCCCCCCCCCCCCCCCC;
`endif
`endif
            `MAX:
            `MAX:
`ifdef SIMD
`ifdef SIMD
                                case(sz)
                                case(sz)
                                3'd0,3'd4:
                                3'd0:   o = BIG ? ($signed(a[7:0]) > $signed(b[7:0]) ? {{56{a[7]}},a[7:0]} : {{56{b[7]}},b[7:0]}) : 64'hCCCCCCCCCCCCCCCC;
 
                                3'd1:   o = BIG ? ($signed(a[15:0]) > $signed(b[15:0]) ? {{48{a[15]}},a[15:0]} : {{48{b[15]}},b[15:0]}) : 64'hCCCCCCCCCCCCCCCC;
 
                                3'd2:   o = BIG ? ($signed(a[31:0]) > $signed(b[31:0]) ? {{32{a[31]}},a[31:0]} : {{32{b[31]}},b[31:0]}) : 64'hCCCCCCCCCCCCCCCC;
 
                                3'd3:   o = BIG ? ($signed(a) > $signed(b) ? a : b) : 64'hCCCCCCCCCCCCCCCC;
 
                                3'd4:
                                        begin
                                        begin
                                        o[7:0] = BIG ? ($signed(a[7:0]) > $signed(b[7:0]) ? a[7:0] : b[7:0]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[7:0] = BIG ? ($signed(a[7:0]) > $signed(b[7:0]) ? a[7:0] : b[7:0]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[15:8] = BIG ? ($signed(a[15:8]) > $signed(b[15:8]) ? a[15:8] : b[15:8]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[15:8] = BIG ? ($signed(a[15:8]) > $signed(b[15:8]) ? a[15:8] : b[15:8]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[23:16] = BIG ? ($signed(a[23:16]) > $signed(b[23:16]) ? a[23:16] : b[23:16]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[23:16] = BIG ? ($signed(a[23:16]) > $signed(b[23:16]) ? a[23:16] : b[23:16]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[31:24] = BIG ? ($signed(a[31:24]) > $signed(b[31:24]) ? a[31:24] : b[31:24]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[31:24] = BIG ? ($signed(a[31:24]) > $signed(b[31:24]) ? a[31:24] : b[31:24]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[39:32] = BIG ? ($signed(a[39:32]) > $signed(b[39:32]) ? a[39:32] : b[39:32]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[39:32] = BIG ? ($signed(a[39:32]) > $signed(b[39:32]) ? a[39:32] : b[39:32]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[47:40] = BIG ? ($signed(a[47:40]) > $signed(b[47:40]) ? a[47:40] : b[47:40]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[47:40] = BIG ? ($signed(a[47:40]) > $signed(b[47:40]) ? a[47:40] : b[47:40]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[55:48] = BIG ? ($signed(a[55:48]) > $signed(b[55:48]) ? a[55:48] : b[55:48]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[55:48] = BIG ? ($signed(a[55:48]) > $signed(b[55:48]) ? a[55:48] : b[55:48]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[63:56] = BIG ? ($signed(a[63:56]) > $signed(b[63:56]) ? a[63:56] : b[63:56]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[63:56] = BIG ? ($signed(a[63:56]) > $signed(b[63:56]) ? a[63:56] : b[63:56]) : 64'hCCCCCCCCCCCCCCCC;
                                        end
                                        end
                                3'd1,3'd5:
                                3'd5:
                                        begin
                                        begin
                                        o[15:0] = BIG ? ($signed(a[15:0]) > $signed(b[15:0]) ? a[15:0] : b[15:0]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[15:0] = BIG ? ($signed(a[15:0]) > $signed(b[15:0]) ? a[15:0] : b[15:0]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[32:16] = BIG ? ($signed(a[32:16]) > $signed(b[32:16]) ? a[32:16] : b[32:16]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[32:16] = BIG ? ($signed(a[32:16]) > $signed(b[32:16]) ? a[32:16] : b[32:16]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[47:32] = BIG ? ($signed(a[47:32]) > $signed(b[47:32]) ? a[47:32] : b[47:32]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[47:32] = BIG ? ($signed(a[47:32]) > $signed(b[47:32]) ? a[47:32] : b[47:32]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[63:48] = BIG ? ($signed(a[63:48]) > $signed(b[63:48]) ? a[63:48] : b[63:48]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[63:48] = BIG ? ($signed(a[63:48]) > $signed(b[63:48]) ? a[63:48] : b[63:48]) : 64'hCCCCCCCCCCCCCCCC;
                                        end
                                        end
                                3'd2,3'd6:
                                3'd6:
                                        begin
                                        begin
                                        o[31:0] = BIG ? ($signed(a[31:0]) > $signed(b[31:0]) ? a[31:0] : b[31:0]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[31:0] = BIG ? ($signed(a[31:0]) > $signed(b[31:0]) ? a[31:0] : b[31:0]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[63:32] = BIG ? ($signed(a[63:32]) > $signed(b[63:32]) ? a[63:32] : b[63:32]) : 64'hCCCCCCCCCCCCCCCC;
                                        o[63:32] = BIG ? ($signed(a[63:32]) > $signed(b[63:32]) ? a[63:32] : b[63:32]) : 64'hCCCCCCCCCCCCCCCC;
                                        end
                                        end
                                        3'd3,3'd7:
                                                3'd7:
                                                begin
                                                begin
                                        o[63:0] = BIG ? ($signed(a) > $signed(b) ? a : b) : 64'hCCCCCCCCCCCCCCCC;
                                        o[63:0] = BIG ? ($signed(a) > $signed(b) ? a : b) : 64'hCCCCCCCCCCCCCCCC;
                                        end
                                        end
                                endcase
                                endcase
`else
`else
Line 1262... Line 1218...
                                `RTSGT: o = as > bs;
                                `RTSGT: o = as > bs;
                                `RTSEQ: o = as==bs;
                                `RTSEQ: o = as==bs;
                                `RTSNE: o = as!=bs;
                                `RTSNE: o = as!=bs;
                                endcase
                                endcase
            */
            */
            `TLB:               o = BIG ? tlbo : 64'hDEADDEADDEADDEAD;
 
            default:    o[63:0] = 64'hDEADDEADDEADDEAD;
            default:    o[63:0] = 64'hDEADDEADDEADDEAD;
            endcase
            endcase
`MEMNDX:
`MEMNDX:
        if (instr[7:6]==2'b10) begin
        if (instr[7:6]==2'b10) begin
                if (instr[31])
                if (instr[31])
Line 1508... Line 1463...
                done <= div_done;
                done <= div_done;
        else if (IsShiftAndOp(instr) & BIG)
        else if (IsShiftAndOp(instr) & BIG)
                done <= sao_done;
                done <= sao_done;
        else if (shift)
        else if (shift)
                done <= adrDone;
                done <= adrDone;
        else if (tlb & BIG)
 
                done <= tlb_done;
 
        else
        else
                done <= TRUE;
                done <= TRUE;
end
end
 
 
// Generate idle signal
// Generate idle signal
Line 1533... Line 1486...
                idle <= div_idle;
                idle <= div_idle;
        else if (IsShiftAndOp(instr) & BIG)
        else if (IsShiftAndOp(instr) & BIG)
                idle <= sao_idle;
                idle <= sao_idle;
        else if (shift)
        else if (shift)
                idle <= adrIdle;
                idle <= adrIdle;
        else if (tlb & BIG)
 
                idle <= tlb_idle;
 
        else
        else
                idle <= TRUE;
                idle <= TRUE;
end
end
 
 
function fnOverflow;
function fnOverflow;
Line 1663... Line 1614...
                else if (usa < {ro[50:0],13'd0} && store && dl!=2'b00)
                else if (usa < {ro[50:0],13'd0} && store && dl!=2'b00)
                        exc <= `FLT_WRV;
                        exc <= `FLT_WRV;
                else
                else
`endif
`endif
                        casez(b[2:0])
                        casez(b[2:0])
                        3'b100:         exc <= o[2:0]!=3'b0 ? `FLT_NONE : `FLT_NONE;     // LW / SW
                3'b100:         exc <= (o[2:0]!=3'b0) ? `FLT_NONE : `FLT_NONE;   // LW / SW
                        3'b?10:         exc <= o[1:0]!=2'b0 ? `FLT_ALN : `FLT_NONE;      // LH / LHU / SH
                3'b?10:         exc <= (o[1:0]!=2'b0) ? `FLT_NONE : `FLT_NONE;   // LH / LHU / SH
                        default:        exc <= o[  0] ? `FLT_ALN : `FLT_NONE;    // LC / LCU / SC
                default:        exc <= o[  0] ? `FLT_NONE : `FLT_NONE;   // LC / LCU / SC
                        endcase
                        endcase
        end
        end
`LWR,`SWC,`CAS,`CACHE:
`LWR,`SWC,`CAS,`CACHE:
        begin
        begin
`ifdef SUPPORT_BBMS
`ifdef SUPPORT_BBMS
Line 1711... Line 1662...
  3'd0:   o[63:0] = $signed(a[7:0]) == $signed(b[7:0]);
  3'd0:   o[63:0] = $signed(a[7:0]) == $signed(b[7:0]);
  3'd1:   o[63:0] = $signed(a[15:0]) == $signed(b[15:0]);
  3'd1:   o[63:0] = $signed(a[15:0]) == $signed(b[15:0]);
  3'd2:   o[63:0] = $signed(a[31:0]) == $signed(b[31:0]);
  3'd2:   o[63:0] = $signed(a[31:0]) == $signed(b[31:0]);
  3'd3:   o[63:0] = $signed(a) == $signed(b);
  3'd3:   o[63:0] = $signed(a) == $signed(b);
  3'd4:         o[63:0] = {
  3'd4:         o[63:0] = {
                                                        7'h0,$signed(a[7:0]) == $signed(b[7:0]),
                                                        7'h0,$signed(a[63:56]) == $signed(b[63:56]),
                                                        7'h0,$signed(a[15:8]) == $signed(b[15:8]),
 
                                                        7'h0,$signed(a[23:16]) == $signed(b[23:16]),
 
                                                        7'h0,$signed(a[31:24]) == $signed(b[31:24]),
 
                                                        7'h0,$signed(a[39:32]) == $signed(b[39:32]),
 
                                                        7'h0,$signed(a[47:40]) == $signed(b[47:40]),
 
                                                        7'h0,$signed(a[55:48]) == $signed(b[55:48]),
                                                        7'h0,$signed(a[55:48]) == $signed(b[55:48]),
                                                        7'h0,$signed(a[63:56]) == $signed(b[63:56])
                                                        7'h0,$signed(a[47:40]) == $signed(b[47:40]),
 
                                                        7'h0,$signed(a[39:32]) == $signed(b[39:32]),
 
                                                        7'h0,$signed(a[31:24]) == $signed(b[31:24]),
 
                                                        7'h0,$signed(a[23:16]) == $signed(b[23:16]),
 
                                                        7'h0,$signed(a[15:8]) == $signed(b[15:8]),
 
                                                        7'h0,$signed(a[7:0]) == $signed(b[7:0])
                                                        };
                                                        };
  3'd5:         o[63:0] = {
  3'd5:         o[63:0] = {
                                                        15'h0,$signed(a[15:0]) == $signed(b[15:0]),
                                                        15'h0,$signed(a[63:48]) == $signed(b[63:48]),
                                                        15'h0,$signed(a[31:16]) == $signed(b[31:16]),
 
                                                        15'h0,$signed(a[47:32]) == $signed(b[47:32]),
                                                        15'h0,$signed(a[47:32]) == $signed(b[47:32]),
                                                        15'h0,$signed(a[63:48]) == $signed(b[63:48])
                                                        15'h0,$signed(a[31:16]) == $signed(b[31:16]),
 
                                                        15'h0,$signed(a[15:0]) == $signed(b[15:0])
                                                        };
                                                        };
  3'd6:         o[63:0] = {
  3'd6:         o[63:0] = {
                                                        31'h0,$signed(a[31:0]) == $signed(b[31:0]),
                                                        31'h0,$signed(a[63:32]) == $signed(b[63:32]),
                                                        31'h0,$signed(a[63:32]) == $signed(b[63:32])
                                                        31'h0,$signed(a[31:0]) == $signed(b[31:0])
                                                        };
                                                        };
        3'd7:           o[63:0] = $signed(a[63:0]) == $signed(b[63:0]);
        3'd7:           o[63:0] = $signed(a[63:0]) == $signed(b[63:0]);
  endcase
  endcase
`else
`else
        o = $signed(a) == $signed(b);
        o = $signed(a) == $signed(b);
Line 1752... Line 1703...
  3'd0:   o[63:0] = $signed(a[7:0]) < $signed(b[7:0]);
  3'd0:   o[63:0] = $signed(a[7:0]) < $signed(b[7:0]);
  3'd1:   o[63:0] = $signed(a[15:0]) < $signed(b[15:0]);
  3'd1:   o[63:0] = $signed(a[15:0]) < $signed(b[15:0]);
  3'd2:   o[63:0] = $signed(a[31:0]) < $signed(b[31:0]);
  3'd2:   o[63:0] = $signed(a[31:0]) < $signed(b[31:0]);
  3'd3:   o[63:0] = $signed(a) < $signed(b);
  3'd3:   o[63:0] = $signed(a) < $signed(b);
  3'd4:         o[63:0] = {
  3'd4:         o[63:0] = {
                                                        7'h0,$signed(a[7:0]) < $signed(b[7:0]),
                                                        7'h0,$signed(a[63:56]) < $signed(b[63:56]),
                                                        7'h0,$signed(a[15:8]) < $signed(b[15:8]),
 
                                                        7'h0,$signed(a[23:16]) < $signed(b[23:16]),
 
                                                        7'h0,$signed(a[31:24]) < $signed(b[31:24]),
 
                                                        7'h0,$signed(a[39:32]) < $signed(b[39:32]),
 
                                                        7'h0,$signed(a[47:40]) < $signed(b[47:40]),
 
                                                        7'h0,$signed(a[55:48]) < $signed(b[55:48]),
                                                        7'h0,$signed(a[55:48]) < $signed(b[55:48]),
                                                        7'h0,$signed(a[63:56]) < $signed(b[63:56])
                                                        7'h0,$signed(a[47:40]) < $signed(b[47:40]),
 
                                                        7'h0,$signed(a[39:32]) < $signed(b[39:32]),
 
                                                        7'h0,$signed(a[31:24]) < $signed(b[31:24]),
 
                                                        7'h0,$signed(a[23:16]) < $signed(b[23:16]),
 
                                                        7'h0,$signed(a[15:8]) < $signed(b[15:8]),
 
                                                        7'h0,$signed(a[7:0]) < $signed(b[7:0])
                                                        };
                                                        };
  3'd5:         o[63:0] = {
  3'd5:         o[63:0] = {
                                                        15'h0,$signed(a[15:0]) < $signed(b[15:0]),
                                                        15'h0,$signed(a[63:48]) < $signed(b[63:48]),
                                                        15'h0,$signed(a[31:16]) < $signed(b[31:16]),
 
                                                        15'h0,$signed(a[47:32]) < $signed(b[47:32]),
                                                        15'h0,$signed(a[47:32]) < $signed(b[47:32]),
                                                        15'h0,$signed(a[63:48]) < $signed(b[63:48])
                                                        15'h0,$signed(a[31:16]) < $signed(b[31:16]),
 
                                                        15'h0,$signed(a[15:0]) < $signed(b[15:0])
                                                        };
                                                        };
  3'd6:         o[63:0] = {
  3'd6:         o[63:0] = {
                                                        31'h0,$signed(a[31:0]) < $signed(b[31:0]),
                                                        31'h0,$signed(a[63:32]) < $signed(b[63:32]),
                                                        31'h0,$signed(a[63:32]) < $signed(b[63:32])
                                                        31'h0,$signed(a[31:0]) < $signed(b[31:0])
                                                        };
                                                        };
        3'd7:           o[63:0] = $signed(a[63:0]) < $signed(b[63:0]);
        3'd7:           o[63:0] = $signed(a[63:0]) < $signed(b[63:0]);
  endcase
  endcase
`else
`else
        o[63:0] = $signed(a[63:0]) < $signed(b[63:0]);
        o[63:0] = $signed(a[63:0]) < $signed(b[63:0]);
Line 1793... Line 1744...
  3'd0:   o[63:0] = $signed(a[7:0]) <= $signed(b[7:0]);
  3'd0:   o[63:0] = $signed(a[7:0]) <= $signed(b[7:0]);
  3'd1:   o[63:0] = $signed(a[15:0]) <= $signed(b[15:0]);
  3'd1:   o[63:0] = $signed(a[15:0]) <= $signed(b[15:0]);
  3'd2:   o[63:0] = $signed(a[31:0]) <= $signed(b[31:0]);
  3'd2:   o[63:0] = $signed(a[31:0]) <= $signed(b[31:0]);
  3'd3:   o[63:0] = $signed(a) <= $signed(b);
  3'd3:   o[63:0] = $signed(a) <= $signed(b);
  3'd4:         o[63:0] = {
  3'd4:         o[63:0] = {
                                                        7'h0,$signed(a[7:0]) <= $signed(b[7:0]),
                                                        7'h0,$signed(a[63:56]) <= $signed(b[63:56]),
                                                        7'h0,$signed(a[15:8]) <= $signed(b[15:8]),
 
                                                        7'h0,$signed(a[23:16]) <= $signed(b[23:16]),
 
                                                        7'h0,$signed(a[31:24]) <= $signed(b[31:24]),
 
                                                        7'h0,$signed(a[39:32]) <= $signed(b[39:32]),
 
                                                        7'h0,$signed(a[47:40]) <= $signed(b[47:40]),
 
                                                        7'h0,$signed(a[55:48]) <= $signed(b[55:48]),
                                                        7'h0,$signed(a[55:48]) <= $signed(b[55:48]),
                                                        7'h0,$signed(a[63:56]) <= $signed(b[63:56])
                                                        7'h0,$signed(a[47:40]) <= $signed(b[47:40]),
 
                                                        7'h0,$signed(a[39:32]) <= $signed(b[39:32]),
 
                                                        7'h0,$signed(a[31:24]) <= $signed(b[31:24]),
 
                                                        7'h0,$signed(a[23:16]) <= $signed(b[23:16]),
 
                                                        7'h0,$signed(a[15:8]) <= $signed(b[15:8]),
 
                                                        7'h0,$signed(a[7:0]) <= $signed(b[7:0])
                                                        };
                                                        };
  3'd5:         o[63:0] = {
  3'd5:         o[63:0] = {
                                                        15'h0,$signed(a[15:0]) <= $signed(b[15:0]),
                                                        15'h0,$signed(a[63:48]) <= $signed(b[63:48]),
                                                        15'h0,$signed(a[31:16]) <= $signed(b[31:16]),
 
                                                        15'h0,$signed(a[47:32]) <= $signed(b[47:32]),
                                                        15'h0,$signed(a[47:32]) <= $signed(b[47:32]),
                                                        15'h0,$signed(a[63:48]) <= $signed(b[63:48])
                                                        15'h0,$signed(a[31:16]) <= $signed(b[31:16]),
 
                                                        15'h0,$signed(a[15:0]) <= $signed(b[15:0])
                                                        };
                                                        };
  3'd6:         o[63:0] = {
  3'd6:         o[63:0] = {
                                                        31'h0,$signed(a[31:0]) <= $signed(b[31:0]),
                                                        31'h0,$signed(a[63:32]) <= $signed(b[63:32]),
                                                        31'h0,$signed(a[63:32]) <= $signed(b[63:32])
                                                        31'h0,$signed(a[31:0]) <= $signed(b[31:0])
                                                        };
                                                        };
        3'd7:           o[63:0] = $signed(a[63:0]) <= $signed(b[63:0]);
        3'd7:           o[63:0] = $signed(a[63:0]) <= $signed(b[63:0]);
  endcase
  endcase
`else
`else
        o = $signed(a) <= $signed(b);
        o = $signed(a) <= $signed(b);
Line 1829... Line 1780...
input [63:0] b;
input [63:0] b;
output [63:0] o;
output [63:0] o;
begin
begin
`ifdef SIMD
`ifdef SIMD
        case(sz[2:0])
        case(sz[2:0])
  3'd4,3'd0:            o = {
        3'd0:           o = (a[7:0]) < (b[7:0]);
                                                        7'h0,(a[7:0]) < (b[7:0]),
        3'd1:           o = (a[15:0]) < (b[15:0]);
                                                        7'h0,(a[15:8]) < (b[15:8]),
        3'd2:           o = (a[31:0]) < (b[31:0]);
                                                        7'h0,(a[23:16]) < (b[23:16]),
  3'd4:         o = {
                                                        7'h0,(a[31:24]) < (b[31:24]),
                                        7'h0,(a[63:56]) < (b[63:56]),
                                                        7'h0,(a[39:32]) < (b[39:32]),
 
                                                        7'h0,(a[47:40]) < (b[47:40]),
 
                                                        7'h0,(a[55:48]) < (b[55:48]),
                                                        7'h0,(a[55:48]) < (b[55:48]),
                                                        7'h0,(a[63:56]) < (b[63:56])
                                        7'h0,(a[47:40]) < (b[47:40]),
 
                                        7'h0,(a[39:32]) < (b[39:32]),
 
                                        7'h0,(a[31:24]) < (b[31:24]),
 
                                        7'h0,(a[23:16]) < (b[23:16]),
 
                                        7'h0,(a[15:8]) < (b[15:8]),
 
                                        7'h0,(a[7:0]) < (b[7:0])
                                                        };
                                                        };
  3'd5,3'd1:            o = {
  3'd5:         o = {
                                                        15'h0,(a[15:0]) < (b[15:0]),
                                15'h0,(a[63:48]) < (b[63:48]),
                                                        15'h0,(a[31:16]) < (b[31:16]),
 
                                                        15'h0,(a[47:32]) < (b[47:32]),
                                                        15'h0,(a[47:32]) < (b[47:32]),
                                                        15'h0,(a[63:48]) < (b[63:48])
                                15'h0,(a[31:16]) < (b[31:16]),
 
                                15'h0,(a[15:0]) < (b[15:0])
                                                        };
                                                        };
  3'd6,3'd2:            o = {
  3'd6:         o = {
                                                        31'h0,(a[31:0]) < (b[31:0]),
                                31'h0,(a[63:32]) < (b[63:32]),
                                                        31'h0,(a[63:32]) < (b[63:32])
                                31'h0,(a[31:0]) < (b[31:0])
                                                        };
                                                        };
        3'd7,3'd3:              o = (a[63:0]) < (b[63:0]);
        3'd7,3'd3:              o = (a[63:0]) < (b[63:0]);
  endcase
  endcase
`else
`else
        o = (a) < (b);
        o = (a) < (b);
Line 1866... Line 1820...
input [63:0] b;
input [63:0] b;
output [63:0] o;
output [63:0] o;
begin
begin
`ifdef SIMD
`ifdef SIMD
        case(sz[2:0])
        case(sz[2:0])
  3'd0:   o[63:0] = (a[7:0]) <= (b[7:0]);
        3'd0:           o = (a[7:0]) <= (b[7:0]);
  3'd1:   o[63:0] = (a[15:0]) <= (b[15:0]);
        3'd1:           o = (a[15:0]) <= (b[15:0]);
  3'd2:   o[63:0] = (a[31:0]) <= (b[31:0]);
        3'd2:           o = (a[31:0]) <= (b[31:0]);
  3'd3:   o[63:0] = (a) <= (b);
  3'd4:         o = {
  3'd4:         o[63:0] = {
                                        7'h0,(a[63:56]) <= (b[63:56]),
                                                        7'h0,(a[7:0]) <= (b[7:0]),
 
                                                        7'h0,(a[15:8]) <= (b[15:8]),
 
                                                        7'h0,(a[23:16]) <= (b[23:16]),
 
                                                        7'h0,(a[31:24]) <= (b[31:24]),
 
                                                        7'h0,(a[39:32]) <= (b[39:32]),
 
                                                        7'h0,(a[47:40]) <= (b[47:40]),
 
                                                        7'h0,(a[55:48]) <= (b[55:48]),
                                                        7'h0,(a[55:48]) <= (b[55:48]),
                                                        7'h0,(a[63:56]) <= (b[63:56])
                                        7'h0,(a[47:40]) <= (b[47:40]),
 
                                        7'h0,(a[39:32]) <= (b[39:32]),
 
                                        7'h0,(a[31:24]) <= (b[31:24]),
 
                                        7'h0,(a[23:16]) <= (b[23:16]),
 
                                        7'h0,(a[15:8]) <= (b[15:8]),
 
                                        7'h0,(a[7:0]) <= (b[7:0])
                                                        };
                                                        };
  3'd5:         o[63:0] = {
  3'd5:         o = {
                                                        15'h0,(a[15:0]) <= (b[15:0]),
                                15'h0,(a[63:48]) <= (b[63:48]),
                                                        15'h0,(a[31:16]) <= (b[31:16]),
 
                                                        15'h0,(a[47:32]) <= (b[47:32]),
                                                        15'h0,(a[47:32]) <= (b[47:32]),
                                                        15'h0,(a[63:48]) <= (b[63:48])
                                15'h0,(a[31:16]) <= (b[31:16]),
 
                                15'h0,(a[15:0]) <= (b[15:0])
                                                        };
                                                        };
  3'd6:         o[63:0] = {
  3'd6:         o = {
                                                        31'h0,(a[31:0]) <= (b[31:0]),
                                31'h0,(a[63:32]) <= (b[63:32]),
                                                        31'h0,(a[63:32]) <= (b[63:32])
                                31'h0,(a[31:0]) <= (b[31:0])
                                                        };
                                                        };
        3'd7:           o[63:0] = (a[63:0]) <= (b[63:0]);
        3'd7,3'd3:              o = (a[63:0]) <= (b[63:0]);
  endcase
  endcase
`else
`else
        o[63:0] = (a[63:0]) <= (b[63:0]);
        o[63:0] = (a[63:0]) <= (b[63:0]);
`endif
`endif
end
end

powered by: WebSVN 2.1.0

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