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

Subversion Repositories fluid_core_2

[/] [fluid_core_2/] [trunk/] [rtl/] [int_ALU.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 azmathmoos
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
//// Copyright (C) 2014-2015 Azmath Moosa                         ////
4
////                                                              ////
5
//// This source file may be used and distributed without         ////
6
//// restriction provided that this copyright statement is not    ////
7
//// removed from the file and that any derivative work contains  ////
8
//// the original copyright notice and the associated disclaimer. ////
9
////                                                              ////
10
//// This source file is free software; you can redistribute it   ////
11
//// and/or modify it under the terms of the GNU Lesser General   ////
12
//// Public License as published by the Free Software Foundation; ////
13
//// either version 3 of the License, or (at your option) any     ////
14
//// later version.                                               ////
15
////                                                              ////
16
//// This source is distributed in the hope that it will be       ////
17
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
18
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
19
//// PURPOSE.  See the GNU Lesser General Public License for more ////
20
//// details.                                                     ////
21
////                                                              ////
22
//// You should have received a copy of the GNU Lesser General    ////
23
//// Public License along with this source; if not, download it   ////
24
//// from http://www.opencores.org/lgpl.shtml                     ////
25
////                                                              ////
26
//////////////////////////////////////////////////////////////////////
27
`timescale 1ns / 1ps
28
`include "Configuration.v"
29
 
30
module int_ALU(
31
        input [0:`mod_sel_msb] Module,
32
        input [0:`operation_msb] Operation,
33
        input [0:`dpw] OP1,
34
        input [0:`dpw] OP2,
35
        output [0:`dpw] Result,
36
        output [0:3] Flag,
37
        input [0:3] prev_Flag
38
    );
39
 
40
        wire en;
41
        assign en = (Module==`int_ALU);
42
 
43
        wire [0:`dpw] OP1_;
44
        assign OP1_ = (~OP1 + `dpw'b01);
45
 
46
        reg [0:`dpw] result_buff;
47
        reg C,Z,S,O;
48
         //----[C|Z|S|O]------// 
49
 
50
        initial begin
51
                {C,Z,S,O} = {0,0,0,0};
52
                result_buff = 0;
53
        end
54
        always@(*) begin
55
 
56
                if (en) begin
57
                        case (Operation)
58
                        `ADD: {C,result_buff} <= OP1 + OP2;
59
                        `SUB: {C,result_buff} <= OP2 + OP1_;
60
                        `ADC: {C,result_buff} <= OP1 + OP2 + prev_Flag[0];
61
                        `SBC: {C,result_buff} <= OP2 + OP1_ + prev_Flag[0];
62
                        `AND: result_buff <= OP1 & OP2;
63
                        `OR:    result_buff <= OP1 | OP2;
64
                        `XOR: result_buff <= OP1 ^ OP2;
65
                        endcase
66
 
67
                        S <= result_buff[0];
68
                        O <= OP1_[0]^OP2[0]^result_buff[0]^C;
69
                        Z <= result_buff == 0;
70
 
71
                end
72
        end
73
 
74
        assign Result = en ? result_buff : 'bz;
75
        assign Flag = {C,Z,S,O};
76
endmodule

powered by: WebSVN 2.1.0

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