2017-03-10 5 views
0

Ich bin ein Neuling Benutzer von VHDL.VHDL Fehler in für generieren

Ich habe einen Fehler in diesem Code:

library IEEE; 

use IEEE.STD_LOGIC_1164.ALL; 

entity AandB is 

Port (a : in STD_LOGIC_vector(31 downto 0); 

     b : in STD_LOGIC_vector(31 downto 0); 

salida : out STD_LOGIC_vector(31 downto 0) 

     ); 

end AandB; 

architecture Behavioral of AandB is 

begin 

for i in 0 to 31 loop 

    salida(i) <= a(i) and b(i); 

end loop; 

end Behavioral; 

der Fehler ist dies:

ERROR:HDLCompiler:806 - Line 43: Syntax error near "for". 

ERROR:HDLCompiler:69 - Line 45: <i> is not declared. 

ERROR:HDLCompiler:806 - Line 47: Syntax error near "generate". 

ERROR:HDLCompiler:854 - Line 39: Unit <behavioral> ignored due to previous errors. 

ich für den Code eingeben gesucht here`first 3 Fehler. Habe nicht bemerkt, was der Syntaxfehler für die "for" -Anweisung ist; Es wird angenommen, dass dies innerhalb der Schleife indirekt erklärt wird; Ich weiß nichts über den Fehler in "generate".

Einige Hilfe?

+0

Für ... Schleifen Sei nicht außerhalb eines Prozesses. For ... Generate Statements können, müssen aber (a) mit einem Label beginnen und (b) das Wort Generate irgendwo haben. Das Verwenden einer For-Schleife außerhalb eines Prozesses hat den Compiler überzeugt, dass Sie eine (unterbrochene) For ... Generate-Anweisung verwenden, die sie verwirrend macht. –

+0

Zusätzlich zu Jim, der Ihnen die Syntax einer generate-Anweisung zeigt, die zu einer Blockanweisung mit 32 Blöcken mit 32 Prozessen führt, könnten Sie auch eine simultane simple Zuweisung verwenden: 'salida <= a und b '; was zu einem Prozess führt. Sie könnten Ihre for-Schleife auch in eine Prozessanweisung einfügen und den gleichen Effekt erhalten. – user1155120

+0

Ich bin mir nicht sicher, ob der TS weiß, was 'generate' ist. Könnte sein, dass wir auch erklären sollten, wie eine 'Prozess'-Anweisung funktioniert. – JHBonarius

Antwort

0
ThirtyTwoAnd: for i in 0 to 31 generate 

    salida(i) <= a(i) and b(i); 

end generate ThirtyTwoAnd; 
+1

Jims Antwort bietet zwei Dinge. Eine generate-Anweisung muss eine Bezeichnung haben, und eine generate-Anweisung verwendet das reservierte Wort generate und not loop. – user1155120

0

Was Jim sagte, kann sogar vereinfacht werden. ieee.std_logic_1164 definiert tatsächlich:

FUNCTION "and" (l,r : std_logic_vector) RETURN std_logic_vector; 

So könnte man in diesem Fall gleich lange Vektoren schreiben gerade:

salida <= "and"(a, b); 

Aber gerade dies wird auch funktionieren:

salida <= a and b;