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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [beta_1.1/] [rtl/] [Collaterals/] [Module_ArithmeticComparison.v] - Diff between revs 40 and 58

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 40 Rev 58
`timescale 1ns / 1ps
`timescale 1ns / 1ps
`include "aDefinitions.v"
`include "aDefinitions.v"
 
 
//------------------------------------------------------------------
//------------------------------------------------------------------
module ArithmeticComparison
module ArithmeticComparison
(
(
        input wire                                      Clock,
        input wire                                      Clock,
        input wire[`WIDTH-1:0]   X,Y,
        input wire[`WIDTH-1:0]   X,Y,
        input wire[2:0]                  iOperation,
        input wire[2:0]                  iOperation,
        input wire                                      iInputReady,
        input wire                                      iInputReady,
        output reg                                      OutputReady,
        output reg                                      OutputReady,
        output reg                                      Result
        output reg                                      Result
);
);
 
 
 
 
wire [`WIDTH-1:0] wX,wY;
wire [`WIDTH-1:0] wX,wY;
wire SignX,SignY;
wire SignX,SignY;
reg rGreaterThan;
reg rGreaterThan;
wire wUGt,wULT,wEQ;
wire wUGt,wULT,wEQ;
 
 
assign SignX = (X == 0) ? 0: X[31];
assign SignX = (X == 0) ? 0: X[31];
assign SignY = (Y == 0) ? 0: Y[31];
assign SignY = (Y == 0) ? 0: Y[31];
 
 
assign wX = ( SignX ) ? ~X + 1'b1 : X;
assign wX = ( SignX ) ? ~X + 1'b1 : X;
assign wY = ( SignY ) ? ~Y + 1'b1 : Y;
assign wY = ( SignY ) ? ~Y + 1'b1 : Y;
 
 
assign wUGt = wX > wY;
assign wUGt = wX > wY;
assign wULT = wX < wY;
assign wULT = wX < wY;
assign wEQ = wX == wY;
assign wEQ = wX == wY;
 
 
always @ ( * )
always @ ( * )
begin
begin
        case ( {SignX,SignY} )
        case ( {SignX,SignY} )
                //Greater than test ( X > Y )
                //Greater than test ( X > Y )
                2'b00: rGreaterThan = wUGt;             //both numbers positive
                2'b00: rGreaterThan = wUGt;             //both numbers positive
                2'b01: rGreaterThan = 1;                        //X positive, y negative        
                2'b01: rGreaterThan = 1;                        //X positive, y negative        
                2'b10: rGreaterThan = 0;                 //X negative, y positive
                2'b10: rGreaterThan = 0;                 //X negative, y positive
                2'b11: rGreaterThan = wULT;             //X negative, y negative
                2'b11: rGreaterThan = wULT;             //X negative, y negative
        endcase
        endcase
end
end
 
 
always @ ( posedge Clock )
always @ ( posedge Clock )
begin
begin
 
 
if (iInputReady)
if (iInputReady)
begin
begin
        case ( iOperation )
        case ( iOperation )
                3'b000: Result = rGreaterThan;                  //X > Y
                3'b000: Result = rGreaterThan;                  //X > Y
                3'b001: Result = ~rGreaterThan;                 //X < Y
                3'b001: Result = ~rGreaterThan;                 //X < Y
                3'b010: Result = wEQ;                                           //X == Y
                3'b010: Result = wEQ;                                           //X == Y
                3'b011: Result = ~wEQ;                                          //X != Y
                3'b011: Result = ~wEQ;                                          //X != Y
                3'b100: Result = rGreaterThan || wEQ;   // X >= Y
                3'b100: Result = rGreaterThan || wEQ;   // X >= Y
                3'b101: Result = ~rGreaterThan || wEQ; // X <= Y
                3'b101: Result = ~rGreaterThan || wEQ; // X <= Y
                default: Result = 0;
                default: Result = 0;
        endcase
        endcase
                OutputReady = 1;
                OutputReady = 1;
end
end
else
else
                OutputReady = 0;
                OutputReady = 0;
end
end
 
 
 
 
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

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