Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > constants declaration

Reply
Thread Tools

constants declaration

 
 
Benjamin Todd
Guest
Posts: n/a
 
      02-12-2004
does anyone know a quick method of declaring an alternating pattern with a
variable length?

constant FAIL_LOW : std_logic_vector (WATCH_LENGTH-1 downto 0) := (others
=> '0');
-- above is great, you change WATCH_LENGTH and the rest is ok
constant WATCH_STARTUP : std_logic_vector(WATCH_LENGTH-1 downto 0) :=
"10101010";
-- with this you have to make sure you dont forget to re-write the value!

Ben

--
Benjamin Todd
European Organisation for Nuclear Research
Accelerator and Beam -- Control -- Infrastructure Division
CERN, Geneva, Switzerland, CH-1211
Building 864 Room 1 - A24


 
Reply With Quote
 
 
 
 
Tim Hubberstey
Guest
Posts: n/a
 
      02-12-2004
Benjamin Todd wrote:
>
> does anyone know a quick method of declaring an alternating pattern with a
> variable length?
>
> constant FAIL_LOW : std_logic_vector (WATCH_LENGTH-1 downto 0) := (others
> => '0');
> -- above is great, you change WATCH_LENGTH and the rest is ok
> constant WATCH_STARTUP : std_logic_vector(WATCH_LENGTH-1 downto 0) :=
> "10101010";
> -- with this you have to make sure you dont forget to re-write the value!


A general solution is to define a function:

function alternate(size : natural) return std_logic_vector is
variable v_result : std_logic_vector(size-1 downto 0);
begin
for i in 0 to size-1 loop
if ( (i mod 2) = 0 ) then
v_result(i) := '0';
else
v_result(i) := '1';
end if;
end loop;
return v_result;
end alternate;

and use it to initialize your constant:

constant FAIL_LOW : std_logic_vector(WATCH_LENGTH-1 downto 0) :=
alternate(WATCH_LENGTH);

A quick and dirty solution is to define a constant that is as large as
WATCH_LENGTH could ever reasonably be, initialize it with your pattern,
and then take a slice of it to initialize your variable size vector:

constant pattern : std_logic_vector(31 downto 0) :=
"10101010101010101010101010101010";
constant FAIL_LOW : std_logic_vector(WATCH_LENGTH-1 downto 0) :=
pattern(WATCH_LENGTH-1 downto 0);

This may be a bit less typing but has obvious problems if you can't put
an upper bound on WATCH_LENGTH.
--
Tim Hubberstey, P.Eng. . . . . . Hardware/Software Consulting Engineer
Marmot Engineering . . . . . . . VHDL, ASICs, FPGAs, embedded systems
Vancouver, BC, Canada . . . . . . . . . . . http://www.marmot-eng.com
 
Reply With Quote
 
 
 
 
Benjamin Todd
Guest
Posts: n/a
 
      02-15-2004
thanks!

"Tim Hubberstey" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Benjamin Todd wrote:
> >
> > does anyone know a quick method of declaring an alternating pattern with

a
> > variable length?
> >
> > constant FAIL_LOW : std_logic_vector (WATCH_LENGTH-1 downto 0) :=

(others
> > => '0');
> > -- above is great, you change WATCH_LENGTH and the rest is ok
> > constant WATCH_STARTUP : std_logic_vector(WATCH_LENGTH-1 downto 0) :=
> > "10101010";
> > -- with this you have to make sure you dont forget to re-write the

value!
>
> A general solution is to define a function:
>
> function alternate(size : natural) return std_logic_vector is
> variable v_result : std_logic_vector(size-1 downto 0);
> begin
> for i in 0 to size-1 loop
> if ( (i mod 2) = 0 ) then
> v_result(i) := '0';
> else
> v_result(i) := '1';
> end if;
> end loop;
> return v_result;
> end alternate;
>
> and use it to initialize your constant:
>
> constant FAIL_LOW : std_logic_vector(WATCH_LENGTH-1 downto 0) :=
> alternate(WATCH_LENGTH);
>
> A quick and dirty solution is to define a constant that is as large as
> WATCH_LENGTH could ever reasonably be, initialize it with your pattern,
> and then take a slice of it to initialize your variable size vector:
>
> constant pattern : std_logic_vector(31 downto 0) :=
> "10101010101010101010101010101010";
> constant FAIL_LOW : std_logic_vector(WATCH_LENGTH-1 downto 0) :=
> pattern(WATCH_LENGTH-1 downto 0);
>
> This may be a bit less typing but has obvious problems if you can't put
> an upper bound on WATCH_LENGTH.
> --
> Tim Hubberstey, P.Eng. . . . . . Hardware/Software Consulting Engineer
> Marmot Engineering . . . . . . . VHDL, ASICs, FPGAs, embedded systems
> Vancouver, BC, Canada . . . . . . . . . . . http://www.marmot-eng.com



 
Reply With Quote
 
 
 
Reply

Thread Tools

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

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


Similar Threads
Thread Thread Starter Forum Replies Last Post
maxplusII error: a deferred constant declaration without a full declaration is not supported Noah VHDL 5 04-07-2006 02:34 PM
"virtual outside class declaration" and "declaration does not declare anything" kelvSYC C++ 6 05-17-2005 08:58 AM
Function declaration in class declaration Ovidesvideo C++ 4 12-10-2004 06:36 PM
question about accessors and constants and variable declaration locations Flip Java 2 05-25-2004 02:28 PM
Intel C++ 8.0 : declaration hides declaration Alex Vinokur C++ 4 04-05-2004 09:49 PM



Advertisments