Hallo Alle zusammen!
Mein Ziel ist es ein Registerspeicher mit 32 Registern und einer
Adresszuweisung über einen Decoder zuschreiben. Die Ausgabe soll über 2
Multiplexer laufen. Mit dem Register und dem Decoder hatte ich keine
Probleme, allerdings erhalte ich verschieden Fehlermeldungen, mit denen
ich nichts anfangen kann:
60 if (DEC_OUT(0)='1') then
61 if (REG_WRITE='1') then
62 reg1:entity work.reg(behaviour)
63 port map(D=>D_IN,CLK=>CLK1, RST=>RST,EN=>CLK,Q=>D_OUT)
64 end if;
65 end if;
** Error: C:\Dokumente und Einstellungen\regf.vhd(63): near "end":
expecting ';'
278 if (DEC_OUT(31)='1') then
279 if (REG_WRITE='1') then
280 reg32:entity work.reg(behaviour)
281 port map(D=>D_IN,CLK=>CLK32, RST=>RST,EN=>CLK,Q=>D_OUT)
282 end if;
283 end if;
284
285 end process p1;
** Error: C:\Dokumente und Einstellungen\regf.vhd(284): near "process":
expecting IF
und noch weitere Fehlermeldungen, die wahrscheinlich auf diesen Fehlern
aufbauen. Es wäre super, wenn mir jemand erklären könnte, was das
Problem ist.
MFG vio
Violat schrieb:> ** Error: C:\Dokumente und Einstellungen\regf.vhd(63): near "end":> expecting ';'
Du musst die Fehlermeldung nur richtig bis zum Ende lesen
Tom
Ja, schon klar. Er erwarten in der Nähe von "end" ein Semikolon, aber
wenn ich eins setze, wird der ganze Ausdruck zum Illegal sequential
Statement. Mir ist unklar, wo der Fehler sein soll. Die Zuweisung und
die Syntax müsste so doch eigentlich korrekt sein.
Violat schrieb:> Die Zuweisung und die Syntax müsste so doch eigentlich korrekt sein.
Nein. Du kannst nicht die Port Map dynamisch umschalten.
Oder irgendwelche Komponenten dynamisch instatiieren...
> Es wäre super, wenn mir jemand erklären könnte, was das Problem ist.
Was willst du erreichen?
Multiplexer werden anders beschrieben...
Diese Sensitivliste ist in 2 Richtungen sehr extrem verdächtig:
Ich habe noch nie eine sooooooooooo lange Senstivliste gebraucht.
Das deutet auf irgendwas Umständliches hin.
Und vor allem: ich habe noch NIEMALS NICHT 32 TAKTE gebraucht!!!!!!!
(Da kann man gar nicht genug Ausrufezeichen machen!!!!!)
An diesem Design MUSS was faul sein.
Was sind das für Takte?
So wird auf jeden Fall kein Takt beschrieben:
CLK1 <= DEC_OUT(0) and REG_WRITE;
Das ist eigentlich ein stinknormales Clock-Enable. Ein Takt wird nicht
aus Kombinatorik gewonnen. Was, wenn da mal ein Glitch auftritt?
Und jetzt zu dem hier:
1
P1:process(CLK,EN,D,RST)--- überbestimmte Sensitivliste: D ist unnötig, und EN eigentlich auch...
2
begin
3
if(CLK'eventandCLK='1'andEN='1')then-- ungewöhnliche Beschreibung eines Clock-Enables