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

Subversion Repositories parallel_search_for_maximum_weight

[/] [parallel_search_for_maximum_weight/] [trunk/] [src/] [Ripple.vhd] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 atalla
library ieee;
2
use ieee.std_logic_1164.all;
3
use work.basic_size.all;
4
use work.basic_component.all;
5
entity Ripple is
6
GENERIC (cells :  Natural:=8);
7
port(
8
        left_op :       IN std_logic_vector (cells -1  DOWNTO 0);
9
        right_op :      IN std_logic_vector (cells -1  DOWNTO 0);
10
        choose_cur : out std_logic;
11
        found_cur : out std_logic;
12
        choose_sel :    OUT std_logic_vector (cells -1  DOWNTO 0));
13
end entity Ripple;
14
architecture behav of Ripple  is
15
SIGNAL  found_i:         std_logic_vector (cells+1  DOWNTO 0);
16
SIGNAL  choose_i:        std_logic_vector (cells+1  DOWNTO 0);
17
SIGNAL  a:       std_logic_vector (cells  DOWNTO 0);
18
SIGNAL  b:       std_logic_vector (cells  DOWNTO 0);
19
SIGNAL  sel_out:         std_logic_vector (cells  DOWNTO 0);
20
begin
21
 
22
   choose_i(2*((cells+1 )/ 2)) <= '0';
23
   found_i (2*((cells+1 )/ 2))  <= '0';
24
--rename inputs
25
 re_g:IF (cells mod 2) =0 GENERATE
26
    a(cells-1   DOWNTO 0)  <= left_op;
27
    b(cells-1   DOWNTO 0)  <= right_op;
28
END GENERATE re_g;
29
 --PADDING with zero's
30
--- PADDING ODD to EVEN
31
pad_gen : IF (cells mod 2) /=0 GENERATE
32
     a  <= left_op  & '0';
33
     b  <= right_op & '0';
34
END GENERATE pad_gen;
35
 
36
-- Start based on the number of Bits if Even or Odd
37
-- Sure not equal zero 
38
--even_cell :
39
 g_ripple : FOR i In ((cells+1)/2 )  downto 1 generate
40
        BEGIN
41
         carry_cell_NOR_Inst : carry_cell_NOR    PORT MAP (
42
                        a =>a(2*i-1), b=>b(2*i-1),
43
                        choose_prev =>choose_i(2*i ),
44
                        found_prev  =>found_i(2*i ),
45
                        choose_cur_bar =>choose_i(2*i-1 ),
46
                        found_cur_bar  =>found_i(2*i -1 ));
47
                        --Result Muxing
48
                        sel_out(2*i-1)  <= NOT choose_i(2*i-1);
49
        carry_cell_NAND_Inst : carry_cell_NAND PORT MAP(
50
                        a =>a(2*i -2), b=>b(2*i -2),
51
                        choose_prev_bar =>choose_i(2*i-1),
52
                        found_prev_bar  =>found_i(2*i -1 ),
53
                        choose_cur =>choose_i(2*i  - 2),
54
                        found_cur  =>found_i(2*i  - 2));
55
                        sel_out (2*i  - 2)  <= choose_i(2*i  - 2);
56
        end generate g_ripple;
57
  choose_sel <= sel_out(2*((cells+1)/2)-1  DOWNTO (cells mod 2));
58
  choose_cur <=choose_i(cells mod 2) ;
59
  found_cur <=  found_i(cells mod 2);
60
 
61
end behav;

powered by: WebSVN 2.1.0

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