Compare pairs of bits between two slv's ?

T

Tony Benham

I've been puzzling how I can write concise vhdl that will basically set a
bit if any pair of bits in two slv's are both hi ?
A sort of pseudo code for what I want to do is as follows
mask : std_logic_vector(7 downto 0) ;
trig : std_logic_vector(7 downto 0) ;
set : std_logic;

set <= '0' ;
for i in 0 to 7
If mask(i) AND trig(i) = '1'
set <= '1' ;
end if ;
end for ;

In english, if any pair of bits in the two slv's are both hi, the set will
be set to one, else zero

I thought about using For-Generate, but I'm puzzled how to apply for this
case ?

Regards
Tony
 
D

David Bishop

This is why we are thinking of putting vector reduction into
VHDL.

Try this:

set := or_reduce (mask and trig);

You will find a copy of "or_reduce" at:
http://www.vhdl.org/vhdlsynth/

This is functionality we also plan to add in 1164 as well.

Tony said:
I've been puzzling how I can write concise vhdl that will basically set a
bit if any pair of bits in two slv's are both hi ?
A sort of pseudo code for what I want to do is as follows
mask : std_logic_vector(7 downto 0) ;
trig : std_logic_vector(7 downto 0) ;
set : std_logic;

set <= '0' ;
for i in 0 to 7
If mask(i) AND trig(i) = '1'
set <= '1' ;
end if ;
end for ;

In english, if any pair of bits in the two slv's are both hi, the set will
be set to one, else zero

I thought about using For-Generate, but I'm puzzled how to apply for this
case ?

Regards
Tony

--
NAME: David W. Bishop INTERNET: (e-mail address removed) ( \ )
US MAIL: Hilton NY A Long time ago, \__\/
PHYSICAL: 43:17:17N 77:47:37W 281' In a Galaxy far, far away... | |
For Supernova info: http://www.RochesterAstronomy.org/snimages/ | |
For VHDL/Synthesis info: http://www.vhdl.org/vhdlsynth _/___\_
All standard disclaimers apply. [_______]
 
V

Valentin Tihomirov

I've just reading an answer to my qustion here
http://www.eda.org/comp.lang.vhdl/FAQ1.html
and encountered Reduction section.

-- this concurrent assignment performs an "or"
-- reduction on "a_vec"
a <= '0' when (a_vec = (a_vec'range => '0')) else '1';

-- while this calculates an "and" reduction
a <= '1' when (a_vec = (a_vec'range => '1')) else '0';

Read there about reducing vectors containing 'X' values.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top