Go Back   Velocity Reviews > Newsgroups > VHDL
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply

VHDL - how to in INSTANTIATING large number of components?

 
Thread Tools Search this Thread
Old 06-03-2005, 01:30 AM   #1
Default how to in INSTANTIATING large number of components?


Dear all,

Could any one telll me how to change 64 INSTANTIATION (MEMxx) below
into
a for loop?

Yick

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;

entity viterbi is
generic (VITERBI_Q, VITERBI_N, VITERBI_L, VITERBI_NUM_STATES:
integer);
port ( clk : in std_logic;
reset : in std_logic;
receive_symbol0 : in std_logic_vector((VITERBI_Q-1) downto
0);
receive_symbol1 : in std_logic_vector((VITERBI_Q-1) downto
0);
inputting : in std_logic;
input_ready : out std_logic;
symbol : out std_logic
);
end viterbi;

architecture behaviour of viterbi is

constant PATH_METRICE_NUM_BITS : integer := 10;

component butterfly_ACS is
generic (PATH_METRICE_NUM_BITS, Q, ENCODER_N:integer);
port (
clk : in std_logic;
PM0_IN : in signed((PATH_METRICE_NUM_BITS-1) downto 0);
PM1_IN : in signed((PATH_METRICE_NUM_BITS-1) downto 0);
SYM0 : in signed((Q-1) downto 0);
SYM1 : in signed((Q-1) downto 0);
CMD : in std_logic_vector(1 downto 0);
PM0_OUT: out signed((PATH_METRICE_NUM_BITS-1) downto 0);
TBR0 : out std_logic;
PM1_OUT: out signed((PATH_METRICE_NUM_BITS-1) downto 0);
TBR0 : out std_logic;
PM1_OUT: out signed((PATH_METRICE_NUM_BITS-1) downto 0);
TBR1 : out std_logic;
XXX_ZERO_TO_ZERO_XXX_INPUT_0: in std_logic_vector((ENCODER_N-1)
downto 0);
XXX_ZERO_TO_ONE_XXX_INPUT_1 : in std_logic_vector((ENCODER_N-1)
downto 0);
XXX_ONE_TO_ZERO_XXX_INPUT_0 : in std_logic_vector((ENCODER_N-1)
downto 0);
XXX_ONE_TO_ONE_XXX_INPUT_1 : in std_logic_vector((ENCODER_N-1)
downto 0)
);
end component;

component memory_unit is
generic (NUM_BITS: integer := PATH_METRICE_NUM_BITS);
port (
clk : in std_logic;
out_sel : in std_logic;
reset : in std_logic;
input : in std_logic_vector((NUM_BITS-1) downto 0);
output : out std_logic_vector((NUM_BITS-1) downto 0)
);
end component;

component stack is
generic (STACK_SIZE: integer);
port (
clk : in std_logic;
push_pop : in std_logic;
input : in std_logic;
output : out std_logic
);
end component;

type state_t is (
S_READY
);

type PM_TYPE is array (0 to (VITERBI_NUM_STATES-1))
of std_logic_vector((PATH_METRICE_NUM_BITS-1) downto 0);
signal PM_IN, PM_OUT: PM_TYPE;

signal cur_state: state_t;
signal mem_clk: std_logic;
signal mem_sel: std_logic;

begin
process(reset, CLK)
begin
if (RESET='1') then -- asynchronous reset
elsif (CLK'event and CLK='1') then
end if;
end process;

MEM00: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 0),
PM_OUT( 0));
MEM01: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 1),
PM_OUT( 1));
MEM02: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 2),
PM_OUT( 2));
MEM03: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 3),
PM_OUT( 3));
MEM04: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 4),
PM_OUT( 4));
MEM05: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 5),
PM_OUT( 5));
MEM06: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 6),
PM_OUT( 6));
MEM07: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 7),
PM_OUT( 7));
MEM08: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( ,
PM_OUT( );
MEM09: memory_unit port map (mem_clk, mem_sel, reset, PM_IN( 9),
PM_OUT( 9));
MEM10: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(10),
PM_OUT(10));
MEM31: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(31),
PM_OUT(31));
MEM32: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(32),
PM_OUT(32));
MEM33: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(33),
PM_OUT(33));
MEM34: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(34),
PM_OUT(34));
MEM35: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(35),
PM_OUT(35));
MEM36: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(36),
PM_OUT(36));
MEM37: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(37),
PM_OUT(37));
MEM38: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(3,
PM_OUT(3);
MEM39: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(39),
PM_OUT(39));
MEM40: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(40),
PM_OUT(40));
MEM41: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(41),
PM_OUT(41));
MEM42: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(42),
PM_OUT(42));
MEM43: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(43),
PM_OUT(43));
MEM44: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(44),
PM_OUT(44));
MEM45: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(45),
PM_OUT(45));
MEM46: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(46),
PM_OUT(46));
MEM47: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(47),
PM_OUT(47));
MEM48: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(4,
PM_OUT(4);
MEM49: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(49),
PM_OUT(49));
MEM50: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(50),
PM_OUT(50));
MEM51: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(51),
PM_OUT(51));
MEM52: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(52),
PM_OUT(52));
MEM53: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(53),
PM_OUT(53));
MEM54: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(54),
PM_OUT(54));
MEM55: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(55),
PM_OUT(55));
MEM56: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(56),
PM_OUT(56));
MEM57: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(57),
PM_OUT(57));
MEM58: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(5,
PM_OUT(5);
MEM59: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(59),
PM_OUT(59));
MEM60: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(60),
PM_OUT(60));
MEM61: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(61),
PM_OUT(61));
MEM62: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(62),
PM_OUT(62));
MEM63: memory_unit port map (mem_clk, mem_sel, reset, PM_IN(63),
PM_OUT(63));
end behaviour;



nospam
  Reply With Quote
Old 06-03-2005, 06:18 AM   #2
Neo
 
Posts: n/a
Default Re: how to in INSTANTIATING large number of components?
use generate contructof verilog 2001.



Neo
  Reply With Quote
Old 06-03-2005, 07:25 AM   #3
Thomas Reinemann
 
Posts: n/a
Default Re: how to in INSTANTIATING large number of components?
nospam schrieb:
> Dear all,
>
> Could any one telll me how to change 64 INSTANTIATION (MEMxx) below
> into
> a for loop?
>
> Yick
>
> library IEEE;
> use IEEE.STD_LOGIC_1164.all;
> use IEEE.STD_LOGIC_ARITH.all;
>
> entity viterbi is

generic (VITERBI_N, VITERBI_L, VITERBI_NUM_STATES:
> integer);
> port ( clk : in std_logic;
> reset : in std_logic;

receive_symbol0 : in std_logic_vector;
receive_symbol1 : in std_logic_vector
> inputting : in std_logic;
> input_ready : out std_logic;
> symbol : out std_logic
> );
> end viterbi;
>
> architecture behaviour of viterbi is
>
> constant PATH_METRICE_NUM_BITS : integer := 10;

constant VITERBI_Q : integer := receive_symbol0'length;
>
> component butterfly_ACS is
> generic (PATH_METRICE_NUM_BITS, Q, ENCODER_N:integer);
> port (
> clk : in std_logic;
> PM0_IN : in signed((PATH_METRICE_NUM_BITS-1) downto 0);
> PM1_IN : in signed((PATH_METRICE_NUM_BITS-1) downto 0);
> SYM0 : in signed((Q-1) downto 0);
> SYM1 : in signed((Q-1) downto 0);
> CMD : in std_logic_vector(1 downto 0);
> PM0_OUT: out signed((PATH_METRICE_NUM_BITS-1) downto 0);
> TBR0 : out std_logic;
> PM1_OUT: out signed((PATH_METRICE_NUM_BITS-1) downto 0);
> TBR0 : out std_logic;
> PM1_OUT: out signed((PATH_METRICE_NUM_BITS-1) downto 0);
> TBR1 : out std_logic;
> XXX_ZERO_TO_ZERO_XXX_INPUT_0: in std_logic_vector((ENCODER_N-1)
> downto 0);
> XXX_ZERO_TO_ONE_XXX_INPUT_1 : in std_logic_vector((ENCODER_N-1)
> downto 0);
> XXX_ONE_TO_ZERO_XXX_INPUT_0 : in std_logic_vector((ENCODER_N-1)
> downto 0);
> XXX_ONE_TO_ONE_XXX_INPUT_1 : in std_logic_vector((ENCODER_N-1)
> downto 0)
> );
> end component;
>
> component memory_unit is
> generic (NUM_BITS: integer := PATH_METRICE_NUM_BITS);
> port (
> clk : in std_logic;
> out_sel : in std_logic;
> reset : in std_logic;
> input : in std_logic_vector((NUM_BITS-1) downto 0);
> output : out std_logic_vector((NUM_BITS-1) downto 0)
> );
> end component;
>
> component stack is
> generic (STACK_SIZE: integer);
> port (
> clk : in std_logic;
> push_pop : in std_logic;
> input : in std_logic;
> output : out std_logic
> );
> end component;
>
> type state_t is (
> S_READY
> );
>
> type PM_TYPE is array (0 to (VITERBI_NUM_STATES-1))
> of std_logic_vector((PATH_METRICE_NUM_BITS-1) downto 0);
> signal PM_IN, PM_OUT: PM_TYPE;
>
> signal cur_state: state_t;
> signal mem_clk: std_logic;
> signal mem_sel: std_logic;
>
> begin
> process(reset, CLK)
> begin
> if (RESET='1') then -- asynchronous reset
> elsif (CLK'event and CLK='1') then
> end if;
> end process;
>

memo: for i in 0 to PM_IN'length - 1 generate
memory_unit port map (mem_clk, mem_sel, reset, PM_IN(i), PM_OUT(i));
end generate memo;

> end behaviour;
>



Thomas Reinemann
  Reply With Quote
Old 06-04-2005, 01:11 AM   #4
Weng Tianxiang
 
Posts: n/a
Default Re: how to in INSTANTIATING large number of components?
Thomas,
I have the same question as Neo does.

Can you explain the meaning of the following statement:
constant VITERBI_Q : integer := receive_symbol0'length;

The essential of the question is it wants a variable unit name that can
be changed in a 'generate' loop.

Is there any formal semantics or reference to the problem resolution.

Your method doesn't give any relationships with the memory_unit name.

I have a book named "HDL Chip Design" and it doesn't have the semantics
about variable unit name in 'generate' loop.

Weng



Weng Tianxiang
  Reply With Quote
Old 06-06-2005, 07:47 AM   #5
Thomas Reinemann
 
Posts: n/a
Default Re: how to in INSTANTIATING large number of components?
Weng Tianxiang wrote:
> Thomas,
> I have the same question as Neo does.
>
> Can you explain the meaning of the following statement:
> constant VITERBI_Q : integer := receive_symbol0'length;

The original post has an additional generic "VITERBI_Q". Since you can
obtain this information from the signal "receive_symbol0", it isn't
really needed on this place. The entity gets simpler and more flexible
by this.

>
> The essential of the question is it wants a variable unit name that can
> be changed in a 'generate' loop.
>
> Is there any formal semantics or reference to the problem resolution.
>
> Your method doesn't give any relationships with the memory_unit name.
>
> I have a book named "HDL Chip Design" and it doesn't have the semantics
> about variable unit name in 'generate' loop.


Generate statements are evaluated during elaboration. During this stage
only constant values are assumed.
Usually I prefer this range specification. Since the range is linked
obviously to the signal PM_IN. I could use VITERBI_NUM_STATES-1, but
without knowledge of PM_TYPE you couldn't relate it to PM_IN. In fact I
didn't regard PM_IN's type as I wrote the answer. May be it will not
work in this case, since PM_TYPE is an array.

Bye Tom


Thomas Reinemann
  Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
NPD: Free Blu-Ray Players Contributed to Weekly Hardware Lead - Number Misleading. Phil DVD Video 6 01-26-2008 03:49 PM
problem with code for random number generation sandeep_sp7 Hardware 0 04-12-2007 04:59 PM
New releases: World Trade Center, Jackass Number Two & Wicker Man: Updated complete downloadable R1 DVD DB & info lists Doug MacLean DVD Video 0 10-24-2006 06:04 AM
This is incredible! jc_ice DVD Video 1 08-13-2006 10:47 AM
Re: 38,000 U.S. KILLED & WOUNDED IN IRAQ & dvd's JA DVD Video 0 03-06-2005 01:16 AM




SEO by vBSEO 3.3.2 ©2009, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46