Abarbeitungsgeschwindigkeit auf dem RT-Controller extrem unterschiedlich
Hallo miteinander!
Ich habe ein VI auf dem FPGA und dem RT-Controller laufen, die miteinander Daten austauschen.
Kurz erklärt: auf dem FPGA-VI wird aus einem Kennfeldausschnitt interpoliert. Reicht der Kennfeldausschnitt nicht mehr aus, fordert das FPGA-VI einen neuen Kennfeldausschnitt an (zu diesem Zweck wird auf dem RT-VI per Referenz ein Cluster auf dem FPGA-VI ausgelesen-sobald der Cluster mit neuen Werten vorliegt, weis das RT-VI bescheid dass es einen neuen Ausschnitt zusammenstellen muss) . Es sendet also Daten an das RT-VI, dieses stellt den neuen Ausschnitt aus einem großen Kennfeld zusammen und schickt das ganze wieder per DMA-FIFO an den FPGA zurück. Das FPGA VI holt sich den Inhalt aus dem DMA-FIFO und schreibt ihn in einen Speicher, um dann mit den neuen Werten munter weiter zu interpolieren.
Jetzt war ich neugierig, wie lange den mein VI auf dem FPGA warten muss, bis das VI auf dem RT-Controller seinen Job gemacht hat und dem FPGA-VI das neu zusammengestellte Kennfeld bereitstellt per DMA-FIFO. Also hab ich mal auf dem FPGA-VI das TICK-COUNT zum Benchmarken verwendet um zu messen wie lange mein FPGA-VI wartet. Mein TickCount umfasst dabei den DMA-FIFO Block (Timeout=-1, dh an dieser Stelle wartet mein FPGA VI solange, bis es die Daten auch tatsächlich erhält und auslesen kann.) und dann noch einen Sequenzteil, in dem die neu empfangenen Daten in einen Speicherbereich auf dem FPGA geschrieben werden.
Das der RT-Controller im Vergleich zum FPGA tierisch langsam ist, war mir schon klar. (FPGA 1Tick=25 ns || RT-System 25 Micorsekunden ResponseTime als Optimum! sprich Faktor 1000 Geschwindigkeitsunterschied!) Was ich mir allerdings nicht erklären kann: Die Zeit, die mein FPGA-VI nach einer Anforderung an das RT-VI wartet variiert extrem, obwohl auf dem RT-VI jedesmal das gleiche abläuft! Im Optimalfall hat mein FPGA-VI nur 200000ticks ~ 5 ms warten müssen bis das RT-VI geantwortet hat, im bisher schlimmsten entdeckten Fall waren es 3,2 Mio Ticks ~ 80 ms. Wieso variiert das so stark, obwohl auf dem RT-VI jedesmal haargenau die gleichen Prozeduren ablaufen? Den bei jeder Anforderung vom FPGA-VI erstellt das RT-VI einen neuen Kennfeldausschnitt und packt ihn in den FIFO DMA. Danach macht es solange nichts bis eine neue Anforderung kommt. Das VI auf dem RT ist zudem "ungebremst", sprich es ist ein keiner Timed-Loop sondern läuft mit maximaler Geschwindigkeit. Es laufen auch keine anderen VIs auf dem RT-Controller, die Rechenzeit beanspruchen könnten.
Hat jemand eine Erklärung? Idee?
Grüße
Stefan
Hardware: cRio 9074 mit NI 9401
|