INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Timing Probleme cRIO



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

12.06.2014, 10:01
Beitrag #1

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
Timing Probleme cRIO
Hallo!

Ich habe ein paar Probleme mit einem VI das auf dem FPGA des CompactRIO läuft...
Das VI im Anhang funktioniert momentan. Wenn ich jedoch beispielsweise nur die Variable "Frequenz" in der While-Schleife rechts oben durch das Element "Nach Festkomma" in den Datentyp Fixedpoint umwandeln möchte kommt es beim kompilieren zu einem Fehler (Timing Error). Wenn ich dann auf den "Investigate Timing Violation" Button drücke um mir anzeigen zu lassen wo der Fehler auftritt wird eine Multiplikationsstelle in der ersten While-Schleife (die große) angezeigt....

Des weitern habe ich in jeder While-Schleife mal einen Timer eingebaut um die zu überprüfen wie lange die Berechnungen in den jeweiligen Schleifen brauchen. Dabei ist rausgekommen, dass die erste Schleife weniger als eine µSekunde braucht, die 2. Schleife ca. 1 µSekunde und die 3. Schleife (die mit den Analogausgaben) ca. 5µSekunden.

Deshalb verstehe ich nicht warum in der Schleife, die die wenigste Zeit in Anspruch nimmt ein Timing-Fehler angezeigt wird. Wobei die Änderung, die diesen Timing-Fehler auslöst in einer anderen Schleife vorgenommen wurde....HuhHuh

Ich hoffe irgendjemand kann mir da mal weiterhelfen... Ich habe auch schon im Internet bzw. in den LabVIEW Tutorials gelesen was man tun kann um FPGA-VI´s vom Timing her sauberer zu programmieren (siehe pipelining...), jedoch geht es mir zunächst um das Verständnis...

Gruß
Stefan


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2014, 10:29
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timing Probleme cRIO
Erst einmal eine Rückfrage: Welches cRIO? Und was für ein AO Modul verwendest du?

Dann das hier, was soll das, Draht weiterführen und gut ist?
   

Zum Austausch von Daten zwischen mehreren Loops im FPGA werden globale Variablen empfohlen und nicht Elemente auf dem FP inkl. lokaler Variablen.

Den Loop-Timer verwendest du auch nicht wie empfohlen (häufiger Fehler). Der sollte in den ersten Schritt einer Flat-Sequence.

Führe mal diese Änderungen aus, und wenn es dann weiter Ärger gibt, bitte VI hochladen. Ich habe keine Lust, den Screenshot nachzuprogrammieren.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2014, 16:34 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2014 16:39 von n4f3ts.)
Beitrag #3

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
RE: Timing Probleme cRIO
Hallo,

Erst einmal danke für die schnelle Rückmeldung!
Ich verwende ein Ni-cRio 9074 mit dem analogen Ausgangsmodul NI9263.

Ok das mit den beiden lokalen Variablen ist in diesem VI wirklich Schwachsinn... Das VI wird später noch Erweitert, dann werden diese erst benötigt...

Dass man globale Variablen für den Austausch von Werten benutzt wusste ich nicht.

Ich habe soeben folgende PDF-Datei gefunden: ftp://ftp.ni.com/pub/branches/germany/vi...w_fpga.pdf Darin steht, dass ein Timing-Error aus diesem Grund kommt: "Wenn die gesamte Abarbeitung eines Pfads mehr als einen Taktzyklus benötigt, schlägt die Kompilierung fehl."

Als Lösung dieses Problems wird das Pipelining oder die Benutzung von zeit gesteuerten Schleifen angegeben. Das werde ich morgen mal ausprobieren. Wobei ich hier die Lösung mit zeit gesteuerten Schleifen vorziehen möchte, da ich sowieso mit einer bestimmten Taktfrequenz (momentan 20kHz also einer Schrittweite von 50µs) arbeiten möchte. Also hat das FPGA theoretisch 50µs Zeit um alle Berechnungen durchzuführen, wenn es schneller ist wird halt der Rest gewartet. Das sollte ja auch kein Problem sein, da die Schleife 1 weniger als 1µs braucht...

Jetzt habe ich jedoch noch folgende Frage: In der oben genannten PDF-Datei wird bei verschiedenen Beispielen die Auslastung des FPGA angegeben. Das würde mich bei meinem Projekt auch interessieren, da ich verschiedene Lösungen für ein Problem erarbeitet habe. Kann mir vielleicht jemand sagen wie man die FPGA Auslastung ermitteln kann?

Gruß
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2014, 16:56
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timing Probleme cRIO
Deine Aussage mit dem Abarbeitungspfad gilt für Single Cylce Timed Loops (SCTL), die verwendest du ja gar nicht. Das kann es jetzt nicht sein. Was spukt denn die Info "Investigate Timing Violation" aus?

Dann muss ich dich gleich enttäuschen, eine 20 kHz Derived FPGA Clock wirst du beim 9074 nicht hinbekommen. Die Base-Clock ist 40 MHz, der größte mögliche Teiler ist 16, somit kommst du auf minimal 2,4 MHz.

Auslastung FPGA bezieht sich immer auf die Resourcen, diese Information bekommst du am Ende des Kompilier-Vorgangs. Wenn der Bitfile am Ende in den FPGA passt und läuft, dann ist alles gut. Im Gegensatz zu einem "normalen" Computer gibt es sowas wie CPU oder RAM Auslastung nicht.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2014, 17:35
Beitrag #5

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
RE: Timing Probleme cRIO
Morgen werde ich mal einen Screenshot vom "Investigate Timing Violation" posten bei einem VI wo ein Timing-Error auftritt.

Zitat:Die Base-Clock ist 40 MHz, der größte mögliche Teiler ist 16, somit kommst du auf minimal 2,4 MHz.
Ok, dann muss ich wohl mit Pipelining arbeiten wenn es nicht anders geht...
Noch einmal zum Verständnis: Ist es so, dass das FPGA mehr Zeit zum rechnen hat wenn ich eine zeitgesteuerte Schleife mit 2,4MHz verwende? Oder habe ich hier schon einen Denkfehler?

Zitat:Auslastung FPGA bezieht sich immer auf die Resourcen, diese Information bekommst du am Ende des Kompilier-Vorgangs.
OK muss ich morgen mal beim kompilieren drauf achten!

Noch was zu deinem ersten Post Jens:
Ich hatte heute Mittag mal die beiden "unnötigen" Variablen weggelassen und alles direkt mit dem Schieberegister verbunden. Die Folge war wieder ein Timing-Error...
Morgen lade ich mal das VI hoch, dann wird die Diagnose denke ich einfacher.

Gruß und Danke!
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2014, 18:03
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timing Probleme cRIO
(12.06.2014 17:35 )n4f3ts schrieb:  Ok, dann muss ich wohl mit Pipelining arbeiten wenn es nicht anders geht...
Noch einmal zum Verständnis: Ist es so, dass das FPGA mehr Zeit zum rechnen hat wenn ich eine zeitgesteuerte Schleife mit 2,4MHz verwende? Oder habe ich hier schon einen Denkfehler?
Irgendwie ja. Du willst doch auf nur auf 20 kHz kommen. Wir reden hier immer noch vom Mega-Hertz Bereich einer SCTL.
Indirekt hast du Recht, in einer SCTL mit 20/10/5/2,5 etc Mhz kann der Compiler einen längeren Pfad im FPGA anlegen, das kann man interpretieren als FPGA hat mehr Zeit.

Versteife dich aktuell nicht so auf das Pipelining, solange du nicht die wahre Ursache für den Compile-Error herausgefunden hast. Ich hatte schon mal geschrieben, Timing-Violation macht als Fehlermeldung eigentlich keinen Sinn, da du bisher keine SCTL verwendest. Ich denke, da läuft was anderes schief.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
13.06.2014, 09:07
Beitrag #7

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
RE: Timing Probleme cRIO
Hallo,

Im Anhang habe ich jetzt mal 2 VI´s hochgeladen.
Die beiden VI´s unterscheiden sich lediglich dadurch, dass zwei lokale Variablen entfernt wurden und die Verbindung direkt zum Schieberegister durchgezogen wurde (wie es im 2. Post empfohlen wurde). Diese Version geht nicht es kommt ein Timing-Error. Die andere Version funktioniert.

Des weitern habe ich mal ein Screenshot vom "Investigate Timing Violation" gemacht:
   


Gruß
Stefan


Angehängte Datei(en) Thumbnail(s)
   

12.0 .vi  Variante_2_v2.vi (Größe: 80,37 KB / Downloads: 233)

12.0 .vi  Variante_2_v3.vi (Größe: 80,35 KB / Downloads: 221)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.06.2014, 07:37
Beitrag #8

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
RE: Timing Probleme cRIO
ich würde das komplett anders aufbauen:

1. die AOs bekommen ihre Daten von einem DMA-FIFO, der über einen Interrupt mit dem RT-VI synchronisiert ist
2. die Erzeugung der Waveforms wird auf dem RT-Device gerechnet und anschließend in den DMA-FIFO geschoben

Multilpikationen und Divisionen auf dem FPGA sind eher ungünstig, weil diese Operationen mehrere Clock-Cycles brauchen. Bei deinem Timing-Problem kommt vermutlich alles zusammen: du hast u.A. eine Multiplikation mit Saturation im Pfad und dann noch Zugriffe auf lokale Variablen - vermutlich mit Arbitration, das kostet alles Tics und irgendwann kommt halt das Loop-Timing nicht mehr hinterher ...

viele Grüße
cb

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.06.2014, 08:59
Beitrag #9

n4f3ts Offline
LVF-User
*


Beiträge: 30
Registriert seit: May 2014

LabVIEW 2014, 2015
2014
DE


Deutschland
RE: Timing Probleme cRIO
Zitat:ich würde das komplett anders aufbauen:

1. die AOs bekommen ihre Daten von einem DMA-FIFO, der über einen Interrupt mit dem RT-VI synchronisiert ist
2. die Erzeugung der Waveforms wird auf dem RT-Device gerechnet und anschließend in den DMA-FIFO geschoben
ok das werde ich mal versuchen, ist mein erstes Programmier-Projekt mit LabVIEW sowie mit dem CompactRIO. Dachte eigentlich nicht das das FPGA schon Problem mit solch einem kleinen Programm bekommt... Wenn ich mir vorstelle dass das erst ca. 10-20% des endgültigen Programms ist... Blink

Zitat:Multiplikation mit Saturation
Ist der Überlaufmodus "Umbruch" günstiger für das FPGA? Wenn ja, kann ich das ja umstellen das wurde nämlich unbewusst so eingestellt...

Zitat:Zugriffe auf lokale Variablen - vermutlich mit Arbitration
Versuche ich dann auch noch auf globale Variablen umzustellen. Was ist Arbitration?



Gruß
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.06.2014, 11:52
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timing Probleme cRIO
Ich habe gestern mal versucht, deine Bsp-VIs zu kompilieren. Auch ich bekomme Timing-Violations, und wenn man sich dann schrittweise durch die Fehlermeldungen durchklickt kommt man auch auf die Ursache: Das sind die "normalen" LabVIEW-Multiplikationen deiner Fixed-Point-Daten in der mittleren Schleife. Der Compiler muss diese Multiplikation inkl. Zwischenspeicherung der Aus- und Eingänge innerhalb eines Ticks erledigen, schafft das aber nicht.

Du könntest jetzt folgendes versuchen:
- Verwendung der High-Troughput Multiplikation
- Pipelining vor und nach den Multiplikationen, um dem Compiler die Möglichkeit zu geben, zusätzlich Register zur Speicherung in der Nähe der Multiplizierer anzulegen.
- Die Fixed-Point-Datenlängen abändern.

Wenn du mit den Berechnungen im FPGA bleiben willst, dann Schleife 1 & 2 zusammenlegen. Die sind aktuell nicht synchronisiert, dein per lokaler Variable weitergegebener Sinus und Cosinus passen vom Zeitablauf nicht zu Schleife 2.

--

Arbitration: Wenn du im FPGA auf eine Shared Resource zugreifst (z.B. in 2 parallelen Schleifen dieselbe lokale Variable schreibst), dann muss durch einen Schiedsrichter/Entscheider sichergestellt werden, dass das nicht aus Versehen gleichzeitig passiert. Das kostet natürlich Zeit und Resourcen im FPGA.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Timing von CAN-Nachrichten auf cRIO-9014/9112 und 9853 bjoerne 16 16.958 12.05.2015 13:57
Letzter Beitrag: bjoerne
  Labview FPGA Probleme mit Timing chefweb 8 9.481 20.10.2010 15:59
Letzter Beitrag: Matze

Gehe zu: