1 Bit DA-Wandler mit Ausgang Zeitverhalten 1. Ordnung VHDL-AMS

Gast #3310928
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;
Gast #3311944
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!!!
#3311961
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren