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
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 :)
>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.
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.