Kann mir jemand helfen bei meinem VHDL-AMS D2A-Wandler und sagen, warum ein Fehler in Zeile 22 auftritt (unerwartete Eingabe 'Begin')? Dieser Programmteil soll Eingangssignale geben! LIBRARY DISCIPLINES; USE DISCIPLINES.ELECTROMAGNETIC_SYSTEM.ALL; entity d2a_2 is generic (Rout : real := 1_000.0; tau : real := 0.001); port (SIGNAL input : IN BIT; terminal outp, outm : electrical); end entity d2a_2; architecture behavioral of d2a_2 is quantity Vout ACROSS Iout THROUGH outp to outm; begin BREAK ON input; --Erzwingt die Berechnung eines analogen Arbeitspunktes IF input = '0' USE Vout + tau * Vout'dot == 5.0 + Rout * Iout; ELSE Vout + tau * Vout'dot == Rout * Iout; END USE; End; begin --Fehler: unerwartete Eingabe 'BEGIN' d2a_2TB : d2a_2 input <= "0", "1" after 40 ns, "0" after 80 ns, "1" after 120 ns; end;
Ist das hier Zeile 22? d2a_2TB : d2a_2 Da ist kein ; am Ende.
Hier scheint es mir in erster Linie um Syntxprobleme zu gehen. Gibt es eigentlich kein VHDL-AMS-Forum?
Vielen Dank für den Hinweis Gustl! Zeile 22 ist die davor mit "begin". Leider hilft das auch nicht. Wenn man alles ausklammert scheint es zu funktionieren, doch dann gibts keine Signale mehr zum Anregen :( --begin --Fehler: unerwartete Eingabe 'BEGIN' --d2a_2TB : d2a_2; --input <= "0", "1" after 40 ns, "0" after 80 ns, "1" after 120 ns; --end; Kennt sich denn niemand mit VHDL-hAMSter aus? Vielen Dank auch für Deine Hilfe, Klaus! Toller Beitrag!!!
Ach so, ja ... du hast 2 mal "begin" drinnen, das darf so nicht. So sollte das Grundgerüst aussehen:
1 | library IEEE; |
2 | |
3 | entity NAME is |
4 | Port ( CLK : in STD_LOGIC; |
5 | A : in STD_LOGIC; |
6 | B : out STD_LOGIC); |
7 | end NAME; |
8 | |
9 | architecture Behavioral of NAME is |
10 | |
11 | begin
|
12 | |
13 | process begin |
14 | wait until rising_edge(CLK); |
15 | B <= not A; |
16 | end process; |
17 | |
18 | end Behavioral; |
Also wenn du keine Prozesse verwendest, dann hast du einmal begin und einmal end. Verwendest du Prozesse, dann hast du in jedem Prozess noch einmal ein begin und ein end. Bei dir
1 | entity d2a_2 is |
2 | |
3 | end entity d2a_2; |
4 | |
5 | architecture behavioral of d2a_2 is |
6 | |
7 | begin
|
8 | |
9 | End; |
10 | |
11 | begin --Fehler: unerwartete Eingabe 'BEGIN' |
12 | |
13 | end; |
Also ich habe keine Ahnung mit dem If USE und END USE, aber es fehlt(?) ein "end behavioral" und das "begin" bei dem der Fehler auftritt, das steht alleine, also ich würde das mit process schreiben. Wobei das ist bei dir sowieso komisch: Das erste END schließt vielleicht schon, ich weiß nicht ob das "behavioral" wichtig ist, dein architecture ab. Und dann ein neues Begin würde also ausserhalb liegen. Versuch es doch mal so:
1 | LIBRARY DISCIPLINES; |
2 | USE DISCIPLINES.ELECTROMAGNETIC_SYSTEM.ALL; |
3 | |
4 | entity d2a_2 is |
5 | generic (Rout : real := 1_000.0; tau : real := 0.001); |
6 | port (SIGNAL input : IN BIT; |
7 | terminal outp, outm : electrical); |
8 | end entity d2a_2; |
9 | |
10 | architecture behavioral of d2a_2 is |
11 | quantity Vout ACROSS Iout THROUGH outp to outm; |
12 | begin
|
13 | |
14 | BREAK ON input; --Erzwingt die Berechnung eines analogen Arbeitspunktes |
15 | d2a_2TB : d2a_2 |
16 | input <= "0", "1" after 40 ns, "0" after 80 ns, "1" after 120 ns; |
17 | |
18 | IF input = '0' USE |
19 | Vout + tau * Vout'dot == 5.0 + Rout * Iout; |
20 | ELSE
|
21 | Vout + tau * Vout'dot == Rout * Iout; |
22 | END USE; |
23 | |
24 | end; |
Ich habe das mal umgeordnet, oben nach dem Begin steht zunächst das ganze was einfach so "läuft" und drunter dann dieses mit USE das ich nicht kenne.
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.