www.mikrocontroller.net

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


Autor: Alex H. (lightningboy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kim Nagel (kim)
Datum:

Bewertung
0 lesenswert
nicht 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...

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

da kann ich dir leider nix zu sagen :)

Autor: Cheru (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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



Autor: Cheru (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.