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

Subversion Repositories distributed_intelligence

[/] [distributed_intelligence/] [trunk/] [SRC/] [ALU.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 leoel
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: Léo Germond
4
-- 
5
-- Create Date:    14:12:50 11/04/2009 
6
-- Design Name: 
7
-- Module Name:    ALU - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: 
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library IEEE;
21
use IEEE.STD_LOGIC_1164.ALL;
22
use IEEE.NUMERIC_STD.ALL;
23
use work.ALU_INT.all;
24
---- Uncomment the following library declaration if instantiating
25
---- any Xilinx primitives in this code.
26
--library UNISIM;
27
--use UNISIM.VComponents.all;
28
 
29
 
30
entity ALU is
31
   Port ( data1 : in  STD_LOGIC_VECTOR (15 downto 0);
32
          data2 : in  STD_LOGIC_VECTOR (15 downto 0);
33
          dataA : out  STD_LOGIC_VECTOR (15 downto 0);
34
          op : in  ALU_OPCODE;
35
                         overflow: out STD_LOGIC );
36
end ALU;
37
 
38
architecture Behavioral of ALU is
39
 
40
        signal preA                             : STD_LOGIC_VECTOR(15 downto 0);
41
        signal rdecal_in                : STD_LOGIC_VECTOR(15 downto 0);
42
        signal rdecal_out               : STD_LOGIC_VECTOR(15 downto 0);
43
        signal decal                    : STD_LOGIC_VECTOR(15 downto 0);
44
        signal decal_l                  : STD_LOGIC;
45
 
46
        signal signed_op                : STD_LOGIC;
47
        signal sub_op                   : std_logic;
48
        signal sum                              : STD_LOGIC_VECTOR(15 downto 0);
49
 
50
        component rdecal_x16
51
                port ( data                     : in STD_LOGIC_VECTOR(15 downto 0);
52
                                 decal_lvl      : in STD_LOGIC_VECTOR(3 downto 0);
53
                                 decal          : out STD_LOGIC_VECTOR(15 downto 0));
54
        end component;
55
 
56
        component inverser_x16
57
                port (  data            : in STD_LOGIC_VECTOR(15 downto 0);
58
                                        inverse : in STD_LOGIC;
59
                                        data_out        : out STD_LOGIC_VECTOR(15 downto 0));
60
        end component;
61
 
62
        COMPONENT add_sub_x16
63
        PORT(
64
                dataA : IN std_logic_vector(15 downto 0);
65
                dataB : IN std_logic_vector(15 downto 0);
66
                is_signed : IN std_logic;
67
                is_sub : IN std_logic;
68
                sum : OUT std_logic_vector(15 downto 0);
69
                overflow : OUT std_logic
70
                );
71
        END COMPONENT;
72
 
73
 
74
begin
75
        dataA <= preA;
76
 
77
 
78
        id1 : inverser_x16 port map(    data => data1,
79
                                                                                        inverse => decal_l,
80
                                                                                        data_out => rdecal_in);
81
 
82
        d1: rdecal_x16 port map(        data => rdecal_in,
83
                                                                                decal_lvl => data2(3 downto 0),
84
                                                                                decal => rdecal_out);
85
 
86
        id2 : inverser_x16 port map(    data => rdecal_out,
87
                                                                                        inverse => decal_l,
88
                                                                                        data_out => decal);
89
 
90
        summator: add_sub_x16 PORT MAP(
91
                dataA => data1,
92
                dataB => data2,
93
                sum => sum,
94
                is_signed => signed_op,
95
                is_sub => sub_op,
96
                overflow => overflow
97
        );
98
 
99
        makeOp: process(op, data1, data2, decal, sum)
100
        begin
101
                decal_l <= '-';
102
 
103
                sub_op <= '-';
104
                signed_op <= '-';
105
 
106
                -- Logic op
107
                case op is
108
                --bXOR, bAND, , SADD, UADD, SSUB, USUB, LSHIFT, RSHIFT
109
                when bOR => -- OR
110
                        preA <= data1 OR data2;
111
                when bAND => -- AND
112
                        preA <= data1 AND data2;
113
                when bXOR => -- XOR
114
                        preA <= data1 XOR data2;
115
                when bNOT =>
116
                        preA <= NOT data1 ;
117
 
118
                -- Shifting op
119
                when RSHIFT => -- RSHIFT
120
                        preA <= decal;
121
                        decal_l <= '0';
122
                when LSHIFT => -- LSHIFT
123
                        preA <= decal;
124
                        decal_l <= '1';
125
 
126
                -- Signed op
127
                when SADD => -- SADD signed ADD
128
                        signed_op <= '1';
129
                        sub_op <= '0';
130
                        preA <= sum;
131
                when SSUB => -- SSUB signed SUB da = d1 - d2
132
                        signed_op <= '1';
133
                        sub_op <= '1';
134
                        preA <= sum;
135
                -- Unsigned op
136
                when UADD => -- UADD unsigned ADD
137
                        signed_op <= '0';
138
                        sub_op <= '0';
139
                        preA <= sum;
140
                when USUB => -- USUB unsigned SUB da = d1 - d2
141
                        signed_op <= '0';
142
                        sub_op <= '1';
143
                        preA <= sum;
144
                when others => -- NOP
145
                        preA <= (others => '-');
146
                end case;
147
        end process;
148
end Behavioral;
149
 

powered by: WebSVN 2.1.0

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