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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [icarus_version/] [rtl/] [Module_VectorALU.v] - Diff between revs 174 and 175

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

Rev 174 Rev 175
Line 57... Line 57...
        //Connections to the R Memory
        //Connections to the R Memory
        output wire [`DATA_ROW_WIDTH-1:0]    oTMEMReadAddress,
        output wire [`DATA_ROW_WIDTH-1:0]    oTMEMReadAddress,
        input wire [`DATA_ROW_WIDTH-1:0]     iTMEMReadData,
        input wire [`DATA_ROW_WIDTH-1:0]     iTMEMReadData,
        input wire                           iTMEMDataAvailable,
        input wire                           iTMEMDataAvailable,
        output wire                          oTMEMDataRequest,
        output wire                          oTMEMDataRequest,
 
 
        output reg                                                                                              OutputReady
        output reg                                                                                              OutputReady
 
 
);
);
 
 
 
 
Line 828... Line 827...
        `DEC:           wAddSubB_By = (`LONG_WIDTH'd1 << `SCALE);
        `DEC:           wAddSubB_By = (`LONG_WIDTH'd1 << `SCALE);
        `MOD:           wAddSubB_By = (`LONG_WIDTH'd1 << `SCALE);
        `MOD:           wAddSubB_By = (`LONG_WIDTH'd1 << `SCALE);
        `MAG:           wAddSubB_By = wMultiplicationC_Result;  //C^2
        `MAG:           wAddSubB_By = wMultiplicationC_Result;  //C^2
        `DOT:           wAddSubB_By = wMultiplicationC_Result;  //Az * Bz
        `DOT:           wAddSubB_By = wMultiplicationC_Result;  //Az * Bz
        `CROSS: wAddSubB_By     = wMultiplicationD_Result;
        `CROSS: wAddSubB_By     = wMultiplicationD_Result;
        default:        wAddSubB_By = 32'b0;
 default: wAddSubB_By = `LONG_WIDTH'b0;
        endcase
        endcase
end
end
//--------------------------------------------------------------
//--------------------------------------------------------------
wire [`LONG_WIDTH-1:0] wAddSubC_Result;
wire [`LONG_WIDTH-1:0] wAddSubC_Result;
reg [`LONG_WIDTH-1:0] wAddSubC_Az,wAddSubC_Bz;
reg [`LONG_WIDTH-1:0] wAddSubC_Az,wAddSubC_Bz;
Line 911... Line 910...
        .OutputReady( wSquareRoot_OutputReady ),
        .OutputReady( wSquareRoot_OutputReady ),
        .Result( wSquareRoot_Result )
        .Result( wSquareRoot_Result )
);
);
//------------------------------------------------------
//------------------------------------------------------
 
 
assign wModulus2N_ResultA =  (iChannel_Ax  & wAddSubA_Result );
assign wModulus2N_ResultA =  ({32'b0,iChannel_Ax}  & wAddSubA_Result );
assign wModulus2N_ResultB =  (iChannel_Ay  & wAddSubB_Result );
assign wModulus2N_ResultB =  ({32'b0,iChannel_Ay}  & wAddSubB_Result );
assign wModulus2N_ResultC =  (iChannel_Az  & wAddSubC_Result );
assign wModulus2N_ResultC =  ({32'b0,iChannel_Az}  & wAddSubC_Result );
 
 
 
 
 
 
 
 
 
 
Line 951... Line 950...
        `SETX,`RET:     ResultA  = iChannel_Ax;
        `SETX,`RET:     ResultA  = iChannel_Ax;
   `SETY:                               ResultA  = iChannel_Bx;
   `SETY:                               ResultA  = iChannel_Bx;
        `SETZ:                          ResultA  = iChannel_Bx;
        `SETZ:                          ResultA  = iChannel_Bx;
        `INC,`INCX,`INCY,`INCZ:                                 ResultA = (wAddSubA_Result[63] == 1'b1) ? { 1'b1,wAddSubA_Result[30:0]} : {1'b0,wAddSubA_Result[30:0]};
        `INC,`INCX,`INCY,`INCZ:                                 ResultA = (wAddSubA_Result[63] == 1'b1) ? { 1'b1,wAddSubA_Result[30:0]} : {1'b0,wAddSubA_Result[30:0]};
        `DEC:                                   ResultA = (wAddSubA_Result[63] == 1'b1) ? { 1'b1,wAddSubA_Result[30:0]} : {1'b0,wAddSubA_Result[30:0]};
        `DEC:                                   ResultA = (wAddSubA_Result[63] == 1'b1) ? { 1'b1,wAddSubA_Result[30:0]} : {1'b0,wAddSubA_Result[30:0]};
        `MOD:                                   ResultA =  wModulus2N_ResultA;
 `MOD:     ResultA =  wModulus2N_ResultA[31:0];
        `FRAC:                          ResultA = iChannel_Ax & (`WIDTH'hFFFFFFFF >> (`WIDTH - `SCALE));
        `FRAC:                          ResultA = iChannel_Ax & (`WIDTH'hFFFFFFFF >> (`WIDTH - `SCALE));
        `MULP:                     ResultA = iChannel_Ax;
        `MULP:                     ResultA = iChannel_Ax;
        `NEG:                                   ResultA = ~iChannel_Ax + 1'b1;
        `NEG:                                   ResultA = ~iChannel_Ax + 1'b1;
        `XCHANGEX:                      ResultA  = iChannel_Bx;
        `XCHANGEX:                      ResultA  = iChannel_Bx;
 
 
Line 996... Line 995...
 
 
        `SWIZZLE3D:             ResultB  = wSwizzleOutputY;
        `SWIZZLE3D:             ResultB  = wSwizzleOutputY;
 
 
        `INC,`INCX,`INCY,`INCZ:                                 ResultB = (wAddSubB_Result[63] == 1'b1) ? {1'b1,wAddSubB_Result[30:0]} : {1'b0,wAddSubB_Result[30:0]}; // & 32'h7FFFFFFF;
        `INC,`INCX,`INCY,`INCZ:                                 ResultB = (wAddSubB_Result[63] == 1'b1) ? {1'b1,wAddSubB_Result[30:0]} : {1'b0,wAddSubB_Result[30:0]}; // & 32'h7FFFFFFF;
        `DEC:                                   ResultB = (wAddSubB_Result[63] == 1'b1) ? {1'b1,wAddSubB_Result[30:0]} : {1'b0,wAddSubB_Result[30:0]}; // & 32'h7FFFFFFF;
        `DEC:                                   ResultB = (wAddSubB_Result[63] == 1'b1) ? {1'b1,wAddSubB_Result[30:0]} : {1'b0,wAddSubB_Result[30:0]}; // & 32'h7FFFFFFF;
        `MOD:                                   ResultB =  wModulus2N_ResultB;
 `MOD:     ResultB =  wModulus2N_ResultB[31:0];
        `FRAC:                          ResultB = iChannel_Ay & (`WIDTH'hFFFFFFFF >> (`WIDTH - `SCALE));
        `FRAC:                          ResultB = iChannel_Ay & (`WIDTH'hFFFFFFFF >> (`WIDTH - `SCALE));
        `MULP:                          ResultB = iChannel_Ay;
        `MULP:                          ResultB = iChannel_Ay;
        `NEG:                                   ResultB = ~iChannel_Ay + 1'b1;
        `NEG:                                   ResultB = ~iChannel_Ay + 1'b1;
        `XCHANGEX:                      ResultB = iChannel_Ay;
        `XCHANGEX:                      ResultB = iChannel_Ay;
 
 
Line 1041... Line 1040...
        `SETY:                          ResultC  = iChannel_Bz;         // {Source0[95:64],Source1[95:64],Source0[31:0]}; 
        `SETY:                          ResultC  = iChannel_Bz;         // {Source0[95:64],Source1[95:64],Source0[31:0]}; 
        `SETZ:                          ResultC  = iChannel_Ax;  // {Source0[95:64],Source0[63:32],Source1[95:64]}; 
        `SETZ:                          ResultC  = iChannel_Ax;  // {Source0[95:64],Source0[63:32],Source1[95:64]}; 
 
 
        `INC,`INCX,`INCY,`INCZ:                                 ResultC = (wAddSubC_Result[63] == 1'b1) ? {1'b1,wAddSubC_Result[30:0]} : {1'b0,wAddSubC_Result[30:0]}; //wAddSubC_Result[31:0];// & 32'h7FFFFFFF;
        `INC,`INCX,`INCY,`INCZ:                                 ResultC = (wAddSubC_Result[63] == 1'b1) ? {1'b1,wAddSubC_Result[30:0]} : {1'b0,wAddSubC_Result[30:0]}; //wAddSubC_Result[31:0];// & 32'h7FFFFFFF;
        `DEC:                                   ResultC = (wAddSubC_Result[63] == 1'b1) ? {1'b1,wAddSubC_Result[30:0]} : {1'b0,wAddSubC_Result[30:0]}; //wAddSubC_Result[31:0];// & 32'h7FFFFFFF;
        `DEC:                                   ResultC = (wAddSubC_Result[63] == 1'b1) ? {1'b1,wAddSubC_Result[30:0]} : {1'b0,wAddSubC_Result[30:0]}; //wAddSubC_Result[31:0];// & 32'h7FFFFFFF;
        `MOD:                                   ResultC =  wModulus2N_ResultC;
 `MOD:     ResultC =  wModulus2N_ResultC[31:0];
        `FRAC:                          ResultC = iChannel_Az & (`WIDTH'hFFFFFFFF >> (`WIDTH - `SCALE));
        `FRAC:                          ResultC = iChannel_Az & (`WIDTH'hFFFFFFFF >> (`WIDTH - `SCALE));
        `MULP:                          ResultC = wMultiplicationA_Result[31:0];
        `MULP:                          ResultC = wMultiplicationA_Result[31:0];
        `NEG:                                   ResultC = ~iChannel_Az + 1'b1;
        `NEG:                                   ResultC = ~iChannel_Az + 1'b1;
        `XCHANGEX:                      ResultC = iChannel_Az;
        `XCHANGEX:                      ResultC = iChannel_Az;
        default:
        default:
Line 1108... Line 1107...
        endcase
        endcase
end
end
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//Output ready logic Stuff for Division...
//Output ready logic Stuff for Division...
//Some FFT will hopefully do the trick
//Some FFT will hopefully do the trick
/* verilator lint_off UNOPTFLAT*/
 
wire wDivisionOutputReadyA,wDivisionOutputReadyB,wDivisionOutputReadyC ;
wire wDivisionOutputReadyA,wDivisionOutputReadyB,wDivisionOutputReadyC ;
wire wDivisionOutputReady;
wire wDivisionOutputReady;
/* verilator lint_on UNOPTFLAT*/
 
 
 
 
 
assign wAddSubAOutputReady = wAddSubA_OutputReady;
assign wAddSubAOutputReady = wAddSubA_OutputReady;
assign wAddSubBOutputReady = wAddSubB_OutputReady;
assign wAddSubBOutputReady = wAddSubB_OutputReady;
assign wAddSubCOutputReady = wAddSubC_OutputReady;
assign wAddSubCOutputReady = wAddSubC_OutputReady;
 
 
 
wire wDivA_tmp, wDivB_tmp, wDivC_tmp;
FFT1 FFT_DivisionA
UPCOUNTER_POSEDGE # (1) FFT_DivisionA
  (
  (
   .D(1'b1),
.Clock(Clock),
   .Clock( wDivisionA_OutputReady ),
.Reset(Reset | iInputReady),
   .Reset( iInputReady ),
.Initial(1'b0),
   .Q( wDivisionOutputReadyA )
.Enable(wDivisionA_OutputReady),
 
.Q(wDivA_tmp)
 );
 );
 
 
FFT1 FFT_DivisionB
assign wDivisionOutputReadyA = ((wDivA_tmp | wDivisionA_OutputReady) & ~iInputReady);
 
UPCOUNTER_POSEDGE # (1) FFT_DivisionB
  (
  (
   .D(1'b1),
.Clock(Clock),
   .Clock( wDivisionB_OutputReady ),
.Reset(Reset | iInputReady),
   .Reset( iInputReady ),
.Initial(1'b0),
   .Q( wDivisionOutputReadyB )
.Enable(wDivisionB_OutputReady),
 
.Q(wDivB_tmp)
 );
 );
 
assign wDivisionOutputReadyB = ((wDivB_tmp | wDivisionB_OutputReady) & ~iInputReady);
 
 
 FFT1 FFT_DivisionC
UPCOUNTER_POSEDGE # (1) FFT_DivisionC
  (
  (
   .D(1'b1),
.Clock(Clock),
   .Clock( wDivisionC_OutputReady ),
.Reset(Reset | iInputReady),
   .Reset( iInputReady ),
.Initial(1'b0),
   .Q( wDivisionOutputReadyC )
.Enable(wDivisionC_OutputReady),
 
.Q(wDivC_tmp)
 );
 );
 
assign wDivisionOutputReadyC = ((wDivC_tmp | wDivisionC_OutputReady) & ~iInputReady);
 
/*
 
FFT1 FFT_DivisionA
 
  (
 
   .D(1'b1),
 
   .Clock( wDivisionA_OutputReady ),
 
   .Reset( iInputReady ),
 
   .Q( wDivisionOutputReadyA )
 
 );
 
 
 
FFT1 FFT_DivisionB
 
  (
 
   .D(1'b1),
 
   .Clock( wDivisionB_OutputReady ),
 
   .Reset( iInputReady ),
 
   .Q( wDivisionOutputReadyB )
 
 );
 
 
 
 FFT1 FFT_DivisionC
 
  (
 
   .D(1'b1),
 
   .Clock( wDivisionC_OutputReady ),
 
   .Reset( iInputReady ),
 
   .Q( wDivisionOutputReadyC )
 
 );
 
 */
 assign wDivisionOutputReady =
 assign wDivisionOutputReady =
 ( wDivisionOutputReadyA && wDivisionOutputReadyB && wDivisionOutputReadyC );
 ( wDivisionOutputReadyA && wDivisionOutputReadyB && wDivisionOutputReadyC );
 
 
assign wMultiplicationOutputReadyA = wMultiplicationA_OutputReady;
assign wMultiplicationOutputReadyA = wMultiplicationA_OutputReady;
assign wMultiplicationOutputReadyB = wMultiplicationB_OutputReady;
assign wMultiplicationOutputReadyB = wMultiplicationB_OutputReady;
Line 1274... Line 1303...
        `XCHANGEX: OutputReady = wOutputDelay1Cycle;
        `XCHANGEX: OutputReady = wOutputDelay1Cycle;
 
 
 
 
        default:
        default:
        begin
        begin
                OutputReady =  32'b0;
  OutputReady =  1'b0;
                //`ifdef DEBUG
                //`ifdef DEBUG
                //$display("*** ALU ERROR: iOperation = %d ***",iOperation);
                //$display("*** ALU ERROR: iOperation = %d ***",iOperation);
                //`endif
                //`endif
        end
        end
 
 

powered by: WebSVN 2.1.0

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