Gast
#1717679
Hallo,
ich habe mal eine frage zu FOR Schleifen (unterer Code). Ich weiß das
diese parallele Hardware erzeugen. Nehmen wie mal an ina wäre hex"11"
und die innere Schleife ist NICHT vorhanden, dann ist mit steigender
Taktflanke user_array(1) bis (7) = hex"11", dass ist mir klar. Nimmt man
jetzt die innere Schleife dazu, wurde ich vermuten das die erste '1'
durch das erste Arrayelement duchgeschoben wird, also
user_array(0)=b"00010001", dann b"00010011", dann b"00010111" ... und so
weiter bis alles eins ist. Das geschieht mit jedem Element und am end,
also mit der ersten steigenden Taktflanke sind mein Arrayelemente alle
'1'.
Dies ist aber nicht der Fall laut Simulation ist im ersten Takt
user_array(0) = b"00000001" im zweiten b"00000011" und so weiter, bis
nach acht takten alles eins ist. Wieso finde ich in der Simulation bei
diesem konstrukt einen Takt wieder? Und warum ist im ersten Takt
user_array b"00000001" und nicht wenigstens b"00010001"? Das zeigt mir
das ich die Abläufe noch nicht ganz verstanden hab, vielleicht könnt ihr
mir ja etwas auf die Sprünge helfen was da genau abläuft.
type array_size is array (0 to 7) of std_logic_vector(7 downto 0);
sgnal user_array : array_size := (others => (others => '0'));
begin
process
begin
wait until rising_edge(clk);
if (rst = '1') then
user_array <= (others => (others => '0'));
else
for i in 0 to 7 loop
user_array(i) <= ina;
for j in 0 to 6 loop
user_array(i)(j+1) <= user_array(i)(j);
end loop;
end loop;
end if;
end process;
Gruß,
matzunami