Forum: FPGA, VHDL & Co. Anfänger mit problemen


von Alex H. (lightningboy)


Lesenswert?

Hallo zusammen,
 ich bin neu hier im Forum und hab einstiegsprobleme(Verständnisproblem) 
in
 VHDL ,stehe aber vor 2 problemen.

1) was ist der Genaue unterschied signalen und Variablen und wann 
verwende ich
   was.
2)wie funktioniert das mit dem datenautausch zwischen C++ und VHDL
 (ep00wire und so )

 ich wäre euch echt dankbar wenn mir einer helfen könnt :)

 Gruß Alex

von Kim N. (kim)


Lesenswert?

Hi

> 1) was ist der Genaue unterschied signalen und Variablen und wann
> verwende ich
>    was.

Der Grund, warum man auf ein Signal nur aus einem Prozess aus schreibend 
zugreifen kann ist der, daß es auf Grund der parallelen Ausführung sonst 
zu Konflikten kommen könnte (Ein Prozess möchte das Signal setzen, ein 
anderer zur gleichen Zeit löschen).

Bei shared variables wird der gleichzeitige Zugriff von mehreren 
Prozessen nicht automatisch ausgeschlossen. Um nicht-deterministisches 
Verhalten zu vermeiden ist daher eine mutual exclusion zu realisieren. 
Dies geschieht unter Verwendung von protected types.

Einfacher ist es jedoch mit mehreren Signalen zu arbeiten, auf die 
jeweils nur ein Prozess schreibend zugreifen kann. Alternativ kann auch 
ein Multiplexer verwendet werden, der regelt welcher Prozess gerade 
schreiben darf.

bzw les einfach mal auf nach da werden viele Fehler und Fragen gleich 
beanwortet :)

http://www-i11.informatik.rwth-aachen.de/index.php?id=vhdl_faq#c1041

> 2)wie funktioniert das mit dem datenautausch zwischen C++ und VHDL
>  (ep00wire und so )

da kann ich dir leider nix zu sagen :)

von Cheru (Gast)


Lesenswert?

>Der Grund, warum man auf ein Signal nur aus einem Prozess aus schreibend
>zugreifen kann ist der, daß es auf Grund der parallelen Ausführung sonst
>zu Konflikten kommen könnte (Ein Prozess möchte das Signal setzen, ein
>anderer zur gleichen Zeit löschen).

Nope, das hat mit Signalen nichts zu tun. Es kommt darauf an, ob ein Typ 
resolves oder unresolved ist. Resolved Signals können auch von mehreren 
Prozessen beschrieben werden.

Ein Signal ist keine Variable, sondern bildet physikalisch eine 
Verbindung zwischen verschiedenen Elementen nach.

von Falk B. (falk)


Lesenswert?

@ Kim Nagel

> 1) was ist der Genaue unterschied signalen und Variablen und wann
> verwende ich
>    was.

>Bei shared variables wird der gleichzeitige Zugriff von mehreren

Naja, der OP fragte doch wohl nach normalen Variablen, nicht nach shared 
Variablen.

In einem Prozess werden die Anweisungen vom COMPILER erstmal sequenziell 
durchlaufen, genauso wie in einem C-Programm. Allerdings wird das Ganze 
dann am Ende auf eine einzige logische Verknüfpung zusammengefasst. Und 
hier kommt nun der Unterschied zwischen Signalen und Variablen.

Signale werden immer wieder mit "neuen" Anweisungen überschrieben, die 
alte Anweisung ist damit nicht mehr wirksam.
Variablen verarbeiten auch den bisher zugewiesenen logischen Wert, man 
kann damit quast Logik schritweise aufsammeln, das wir vor allem in 
Schleifen zur Generierung logischer Strukturen benutzt.

Beispiel

-- mit Signal

signal out: std_logic;

process(clk)
begin
  if rising_edge(clk) then
    out <= a and b;
    out <= out and c;
  end if;
end process;

Das Ergbnis ist, dass out den Wert "out and c" zugewiesen bekommt.

--Dagegen mit Variable

process(clk)
variable out: std_logic;
begin
  if rising_edge(clk) then
    out := a and b;
    out := out and c;
  end if;
end process;

Hier ist das Ergbnis für out "a and b and c", also logisch UND mit 3 
Eingängen.

Praktisch verwendet man nahezu immer SIGNALE, vor allem weil den 
Anfängern der Unterschied nicht so wirklich klar ist. Variablen sollten 
nur sparsam verwendet werden, wenn man WIRKLICH weiss was man tut (naja, 
das gilt eigentlich immer ;-)
Die angesprochenen shared variables braucht man für synthesefähigen Code 
gar nicht, bestenfalls für WIRKLICH komplexe Simulationen für Datei Ein- 
und Ausgabe

MfG
Falk



von Cheru (Gast)


Lesenswert?

Oder anders gesagt : Das Signal übernimmst erst seinen Wert nachdem Zeit 
vergangen ist (Auf der Simulationsebene reicht dazu schon unendlich 
kurze Zeit - delta cycle), die Variable übernimmt den Wert sofort.

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.