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:
1 | p1:process(DEC_OUT,CLK,ADR_W,D_IN,RST,CLK1,CLK2,CLK3,CLK4,CLK5,CLK6,CLK7,CLK8,CLK9,CLK10,CLK11,CLK12,CLK13,CLK14,CLK15,CLK16,CLK17,CLK18,CLK19,CLK20,CLK21,CLK22,CLK23,CLK24,CLK25,CLK26,CLK27,CLK28,CLK29,CLK30,CLK31,CLK32) |
2 | begin
|
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'event and CLK = '1' and EN ='1') then -- ungewöhnliche Beschreibung eines Clock-Enables |
4 | Q <= D; |
5 | end if; |
6 | if (RST = '1') then |
7 | Q <= (others => '0'); |
8 | end if; |
9 | end process; |
Machs so wie der Rest der Welt:
1 | P1 : process(CLK,RST) |
2 | begin
|
3 | if (RST = '1') then |
4 | Q <= (others => '0'); |
5 | elsif (CLK'event and CLK = '1') |
6 | if and EN ='1' then |
7 | Q <= D; |
8 | end if; |
9 | end if; |
10 | end process; |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.