LabVIEWForum.de
Simulation FPGA VI - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW FPGA (/Forum-LabVIEW-FPGA)
+---- Thema: Simulation FPGA VI (/Thread-Simulation-FPGA-VI)



Simulation FPGA VI - Werner - 13.07.2009 21:01

Hallo,
ich versuche zur Zeit die Eingänge eines FPGA-VIs mit einem anderen "normalen" VI zu simulieren. Das funktioniert auch bisher recht gut. Doch nun habe ich seltsame Effekte bei der Simulation eines Ports. Der Port wird vom FPGA VI an zwei(!) verschiedenen Stellen ausgelesen. An einer Stelle werden die höherwertigen vier Bits verwendet und an anderer die niederwertigen. Über mein Simulations-VI sollen nun die beiden Nibble unabhängig voneinander hochgezählt werden. Wenn das Maximum erreicht ist soll wieder zum Minimum gesprungen werden usw.(In diesem Fall 0-7). Ich habe hier aber leider den Effekt, dass die beiden Werte, vor allem zu Beginn der Simulation, einen Wert überspringen. (Dies liegt wohl am Simulations VI, da man dort über globale Variablen schon den verlorenen Schritt sehen kann.) Dieser Fehler tritt seltsamerweise nicht auf, wenn ich den Port im FPGA VI nur einmal auslese. Das Simulations VI habe ich teilweise als Bild angehangen. Die wichtigsten Informationen müssten enthalten sein. Ich hoffe jemand kann mir einen Tipp geben.
Gruß
Werner


Simulation FPGA VI - cb - 14.07.2009 07:49

so wie das aussieht hast du dir eine astreine Race Condition gebautSmile

Versuch mal deinen Code so umzustricken dass du die Globalen Variablen durch eine While-Schleife und Schieberegister ersetzt, damit bekommst du so eine Race-Condition schnell wieder weg. Wenn du willst dass die While-Schleife nur einmal durchlaufen wird: einfach eine True-Konstante an das Conditional Terminal anklemmen (Stop if True)


Simulation FPGA VI - Werner - 14.07.2009 12:13

Ich sehe (noch) nicht, dass es eine Race Condition ist. Nach meinem Verständnis wird doch jedes Mal, wenn das FPGA VI den Port lesen will, das Simulations VI aufgerufen und dort in die entsprechende Case Struktur gesprungen. Bei einer Race Condition braucht man doch zwei unabhängige Threads die auf eine Variable zugreifen. In diesem Fall wir nur in einem VI und somit nur in einem Thread die Variable gelesen, inkrementiert (wahlweise dekrementiert ) und dann wieder geschrieben. Oder wird für jedes Auslesen des Ports vom FPGA VI eine Instanz des Simulations VI erzeugt? Wenn dem so wäre, wüsste ich aber auch nicht wie eine while Schleife da helfen sollte, und vor allem wo ich diese hinbauen sollte. Würde ich sie in die innerste Case Struktur setzen und somit den bisherigen Algorithmus mit den globale Variablen ersetzen, würden mir die Schritte doch noch viel eher weglaufen, da die while-Schleife dann ja immer läuft und der Wert nicht nur pro Aufruf erhöht wird.
Generell ist mir der Simulationsvorgang noch nicht ganz klar. Kennt jemand eine gute (Online-)Hilfe, ein gutes Buch oder eine Quelle wo man Beispiele hierzu finden kann? Das Tutorial von LabVIEW ist zwar nicht schlecht aber viel zu kurz.
Danke


Simulation FPGA VI - cb - 14.07.2009 12:53

ist der Screen-Shot, den du da verlinkt hast ein Ausschnitt aus dem Simulations-VI?

ich würd mich nicht all zu sehr auf den Simulatur verlassen und stattdessen das VI in der Applikations-Instanz "mein Computer" laufen lassen und die IOs durch Controls/Indicators ersetzen ... da kannst auch die "Lampe" anmachen und sehen was passiert ...


Simulation FPGA VI - Werner - 14.07.2009 18:30

Ja, das ist ein Ausschnitt aus dem Simulations VI.
Die "Lösung" die IOs durch Controls/Indicators zu ersetzen wird wohl eher eine meiner letzten sein. Eine Andere Applikation konfiguriert das FPGA über u.a. einen FIFO den müsste ich ja dann auch noch abändern. Es muss doch mit dem Simulator möglich sein...


Simulation FPGA VI - cb - 15.07.2009 06:45

' schrieb:Es muss doch mit dem Simulator möglich sein...

keine Ahnung. Ich benutz den nie - hab's mal probiert, hat nicht richtig funktioniert und seit dem verwende ich die Methode wie oben geschrieben. Den DMA-Teil kannst du mit eine Disable Struktur ausblenden, und ggf. separat auf dem cRIO testen. Wenn du wissen willst ob den FPGA-Code funktioniert ist es wirklich das einfachste du läßt das auf "mein Computer" laufen und machst die "Lampe" an ...


Simulation FPGA VI - cb - 15.07.2009 09:46

naja, vielleicht schenkst du ja den Kollegen von LAVA mehr GlaubenWink

Crosspost: http://lavag.org/topic/10450-fpga-simulati...ort/#entry62185


Grüße
CB


Simulation FPGA VI - Werner - 15.07.2009 20:31

Naja, man versucht halt so viele Meinungen wie möglich zu bekommen :-)
Mein komplettes Simulations VI und einen Workaround, der für mich akzeptabel ist, habe ich gerade da beschrieben.
Falls ich auf noch mehr Probleme mit der Simulation stoße, schwenke ich evtl. wirklich auf deine Lösung "mein Computer" um...
Danke für die Hilfe!!!!