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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [icarus_version/] [rtl/] [Module_ArithmeticComparison.v] - Blame information for rev 217

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 158 diegovalve
`timescale 1ns / 1ps
2
`include "aDefinitions.v"
3
 
4
//------------------------------------------------------------------
5
module ArithmeticComparison
6
(
7
        input wire                                      Clock,
8
        input wire[`WIDTH-1:0]   X,Y,
9
        input wire[2:0]                  iOperation,
10
        input wire                                      iInputReady,
11
        output reg                                      OutputReady,
12
        output reg                                      Result
13
);
14
 
15
 
16
wire [`WIDTH-1:0] wX,wY;
17
wire SignX,SignY;
18
reg rGreaterThan;
19
wire wUGt,wULT,wEQ;
20
 
21
assign SignX = (X == 0) ? 0: X[31];
22
assign SignY = (Y == 0) ? 0: Y[31];
23
 
24
assign wX = ( SignX ) ? ~X + 1'b1 : X;
25
assign wY = ( SignY ) ? ~Y + 1'b1 : Y;
26
 
27
assign wUGt = wX > wY;
28
assign wULT = wX < wY;
29
assign wEQ = wX == wY;
30
 
31
always @ ( * )
32
begin
33
        case ( {SignX,SignY} )
34
                //Greater than test ( X > Y )
35
                2'b00: rGreaterThan = wUGt;             //both numbers positive
36
                2'b01: rGreaterThan = 1;                        //X positive, y negative        
37
                2'b10: rGreaterThan = 0;                 //X negative, y positive
38
                2'b11: rGreaterThan = wULT;             //X negative, y negative
39
        endcase
40
end
41
 
42
always @ ( posedge Clock )
43
begin
44
 
45
if (iInputReady)
46
begin
47
        case ( iOperation )
48
                3'b000: Result = rGreaterThan;                  //X > Y
49
                3'b001: Result = ~rGreaterThan;                 //X < Y
50
                3'b010: Result = wEQ;                                           //X == Y
51
                3'b011: Result = ~wEQ;                                          //X != Y
52
                3'b100: Result = rGreaterThan || wEQ;   // X >= Y
53
                3'b101: Result = ~rGreaterThan || wEQ; // X <= Y
54
                default: Result = 0;
55
        endcase
56
                OutputReady = 1;
57
end
58
else
59
                OutputReady = 0;
60
end
61
 
62
 
63
endmodule
64
//---------------------------------------------

powered by: WebSVN 2.1.0

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