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

Subversion Repositories raytrac

[/] [raytrac/] [trunk/] [adder.vhd] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 jguarin200
library ieee;
2
use ieee.std_logic_1164.all;
3
use work.arithpack.all;
4
entity adder is
5
        generic (
6
                w : integer := 9;
7
                carry_logic : string := "CLA";
8
                substractor_selector : string := "YES"
9
        );
10
 
11
        port (
12
                a,b     : in std_logic_vector(w-1 downto 0);
13
                s,ci    : in std_logic;
14
                result  : out std_logic_vector(w-1 downto 0);
15
                cout    : out std_logic
16
        );
17
end adder;
18
 
19
 
20
architecture adder_arch of adder is
21
 
22
        signal sa,p,g:  std_logic_vector(w-1 downto 0);
23
        signal sCarry:  std_logic_vector(w downto 1);
24
 
25
 
26
begin
27
        -- Usual Structural Model / wether or not CLA/RCA is used and wether or not add/sub selector is used, this port is always instanced --
28
 
29
        result(0)<= a(0) xor b(0) xor ci;
30
        wide_adder:
31
        if (w>1) generate
32
                wide_adder_generate_loop:
33
                for i in 1 to w-1 generate
34
                        result(i) <= a(i) xor b(i) xor sCarry(i);
35
                end generate wide_adder_generate_loop;
36
        end generate wide_adder;
37
        cout <= sCarry(w);
38
        g<= sa and b;
39
        p<= sa or b;
40
 
41
 
42
        -- Conditional Instantiation / Adder Substraction Logic --
43
 
44
        adder_sub_logic :       -- adder substractor logic
45
        if substractor_selector = "YES" generate
46
                a_xor_s:
47
                for i in 0 to w-1 generate
48
                        sa(i) <= a(i) xor s;
49
                end generate a_xor_s;
50
        end generate adder_sub_Logic;
51
 
52
        add_logic:      -- just adder.
53
        if substractor_selector = "NO" generate
54
                sa <= a;
55
        end generate add_logic;
56
 
57
 
58
 
59
        -- Conditional Instantiation / RCA/CLA Logical Blocks Generation --
60
        rca_logic_block_instancing:     -- Ripple Carry Adder
61
        if carry_logic="RCA" generate
62
                rca_x: rca_logic_block
63
                generic map (w=>w)
64
                port map (
65
                        p=>p,
66
                        g=>g,
67
                        cin=>ci,
68
                        c=>sCarry
69
                );
70
        end generate rca_logic_block_instancing;
71
 
72
        cla_logic_block_instancing:     -- Carry Lookahead Adder
73
        if carry_logic="CLA" generate
74
                cla_x: cla_logic_block
75
                generic map (w=>w)
76
                port map (
77
                        p=>p,
78
                        g=>g,
79
                        cin=>ci,
80
                        c=>sCarry
81
                );
82
        end generate cla_logic_block_instancing;
83
 
84
 
85
 
86
 
87
 
88
 
89
 
90
 
91
 
92
 
93
 
94
 
95
end adder_arch;
96
 
97
 

powered by: WebSVN 2.1.0

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