help to input array

A

ashu

hi friends
i have written a program to search a no. in an arrray & get the result
in form of apulse going high or low,but
given no is compared with only the last value & desired output is not
coming.
my basic problem is to input an array directly to input port.also if
somebody can give some example program or tips about reading & writing
files in vhdl. i m using modelsim.
i have written the code & test bench for the code for refrene.
thanks
ashwani anand

library ieee ;
use ieee.std_logic_1164.all ;
package my is
type arec is array (0 to 49 ) of integer range 0 to 50 ;
type inst is record
ary : arec ;

end record ;
end my ;

library ieee ;
use ieee.std_logic_1164.all ;
use work.my .all ;

entity rec is

port( a : in inst ;
b : in integer range 0 to 55 ;
o : out std_logic );
end rec ;

architecture a of rec is
begin
process (a,b)

-- variable q : integer range 0 to 55 ;
-- variable p : integer range 0 to 50 ;

begin


for i in 0 to 49 loop

-- p := b ;

--q := a.ary(i) ;

if (b = a.ary(i)) then

o <= '1' ;

else

o <= '0' ;

end if ;
end loop ;
end process ;
end a ;

--TEST BENCH


library ieee ;
use ieee.std_logic_1164.all ;

package my is
type arec is array (0 to 49 ) of integer range 0 to 50 ;
type inst is record
ary : arec ;

end record ;
end my ;

library ieee ;
use ieee.std_logic_1164.all ;
use work.my .all ;

entity tb_rec is
end ;

architecture a of tb_rec is


component rec

port ( a : in inst ;
b : in integer range 0 to 50 ;
o : out std_logic );

end component ;

signal o : std_logic ;
signal a : inst ;
signal b : integer range 0 to 55 ;

begin

U1 : rec port map (a =>a,b =>b , o =>o );

process

variable t : integer range 0 to 55;
variable q : integer range 0 to 55;
begin

wait for 10 ns ;
b <= 50 ;
wait for 10 ns ;


t := 1 ;

for i in 0 to 49 loop

a.ary(i) <= t ;

t := t + 1 ;

if (t = 51 ) then

t := 0 ;
wait for 10 ns ;
b <= 52 ;
wait for 10 ns ;

wait for 10 ns ;
b <= 23 ;
wait for 10 ns ;

end if ;
end loop ;


end process ;

end a;

result of this program is a pulse high for 23 & 50 low for 52 but it is
remaning high for 50 only which is last value stored in array.
 
J

jens

The lack of formatting makes it very difficult to read, but it appears
as if the problem comes from the fact that the last signal assignment
in a process wins, so o can only be '1' when b = a.ary(49).

Using a default signal assigment might work...

o <= '0' ;

for i in 0 to 49 loop
if (b = a.ary(i)) then
o <= '1' ;
end if ;
end loop ;

This assumes that a parallel comparison is what is desired, and
hopefully there's a clock outside of this process somewhere that is
clocking the inputs and outputs of this process.
 

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,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top