2017-10-17 3 views
0

Ich verstehe, dass dies eine ziemlich häufige Frage ist. Ungeachtet dessen, dass ich durch Foren gegangen bin, konnte ich keine zufriedenstellende Antwort finden, warum ich den folgenden CT-Fehler für den gegebenen VHDL-Code erhalte. Kannst du mir bitte helfen?Objekt wird verwendet, aber nicht deklariert

VHDL-Code

library IEEE; 
use IEEE.std_logic_1164.all; 
entity design is 
port(clk:IN std_logic; 
reset:IN std_logic; 
A:IN std_logic; 
B:IN std_logic; 
Q:OUT std_logic); 
end design; 

architecture behave of design is 
--signal R0,R1,R2,R3,R4:std_logic; 
begin 
process(clk,reset) 
variable R0,R1,R2,R3,R4:std_logic; 
begin 
if (reset='1') then 
R0:='0'; 
R1:='0'; 
R2:='0'; 
R3:='0'; 
R4:='0'; 
elsif falling_edge(clk) then 
R0:=R4; 
R1:=R0 xor A; 
R2:=R1 xor B; 
R3:=R2; 
R4:=R2 xor R3; 
end if; 
end process; 
Q<=R4;  -- ERROR POINTED HERE 
end behave; 

Fehler: -

Error (10482): VHDL error at design.vhd(31): object "R4" is used but not declared 

Gibt es eine richtige Art und Weise Variable Port zuzuweisen, dass ich vermisst habe?

+0

IEEE Std 1076-2008 12.2 Umfang der Deklarationen "* Der Gültigkeitsbereich einer Deklaration, mit Ausnahme eines Architekturkörpers, erstreckt sich vom Anfang der Deklaration bis zum Ende der unmittelbar schließenden Deklarationsregion; ..." 12.3 Sichtbarkeit "... Eine Deklaration ist nur innerhalb eines bestimmten Teils ihres Geltungsbereichs sichtbar; dieser Teil beginnt am Ende der Deklaration ... *" "* ... Eine Deklaration soll direkt in einem bestimmten Teil von ihr unmittelbarer Anwendungsbereich, dieser Teil erstreckt sich bis zum Ende des unmittelbaren Geltungsbereiches der Deklaration ... * " – user1155120

+0

12.1 Deklarative Region" * ... Eine einzelne deklarative Region wird gebildet durch den Text von jedem der folgenden: ... h) Eine Prozessaussage ... * " – user1155120

Antwort

2

R4 wird in der deklarativen Region für Ihren Prozess als Variable deklariert. Es ist außerhalb deines Prozesses nicht sichtbar, also gibt dein Werkzeug dir den Fehler, den du gabst. Wenn Sie die Zeile Q<=R4; in Ihrem Prozess nach der end if; verschieben, sollte der Fehler verschwinden, da die Variable zu diesem Zeitpunkt noch sichtbar ist.

Mit dem gesagt, ich glaube nicht, dass Ihr Code tun wird, was Sie denken, dass es wird. Ich sehe, dass Sie angefangen haben, signal für R1 usw. zu verwenden. Sie sollten wahrscheinlich vermeiden, ein variable zu verwenden, bis Sie ein gutes Verständnis der Unterschiede zwischen einem Signal und einer Variablen haben. Es gibt andere bestehende Fragen, die das ansprechen.

+0

yup @scary_jeff, ich habe gerade durch Versuch und Irrtum getestet, um zu sehen, was für eine Schaltung ich bekomme. Danke. –

+0

@SaiKamat Was scary_jeff bedeutet, ist, dass es hier keine Schaltung gibt, da es sich auf eine konstante '0' reduziert, weil A xor A = 0 ist. –

0

R4 ist eine Variable, wie Sie in Ihrem Code deklariert haben. Es kann nicht außerhalb der endif-Anweisung verwendet werden. Deshalb gibt Ihnen das Gerät eine Fehler-Massage. Um diesen Fehler zu beheben, können Sie R4 erneut außerhalb des Q < = R4 und in der endif-Anweisung deklarieren.

Verwandte Themen