Forum: FPGA, VHDL & Co. 1 Bit DA-Wandler mit Ausgang Zeitverhalten 1. Ordnung VHDL-AMS


von Niko (Gast)


Lesenswert?

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;

von Gustl B. (-gb-)


Lesenswert?

Ist das hier Zeile 22?

d2a_2TB : d2a_2

Da ist kein ; am Ende.

von K. L. (Gast)


Lesenswert?

Hier scheint es mir in erster Linie um Syntxprobleme zu gehen. Gibt es 
eigentlich kein VHDL-AMS-Forum?

von Niko (Gast)


Lesenswert?

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!!!

von Gustl B. (-gb-)


Lesenswert?

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
Noch kein Account? Hier anmelden.