Die wesentlichen Unterschiede zwischen H/W-Tasks (ausführbar auf FPGA) und S/W-Tasks (ausführbar auf CPU)

In hybriden Plattformen, die CPU und FPGA enthalten, gibt es einige Modelle für Aufgaben. Zum Beispiel wird in einem Aufgabenmodell berücksichtigt, dass jede Aufgabe entweder auf FPGA oder CPU ausgeführt werden kann (dh es gibt zwei Versionen H/W und S/W für jede Aufgabe). Bei einem anderen Aufgabenmodell müssen jedoch einige Aufgaben nur auf dem FPGA (oder der CPU) ausgeführt werden. Meine sehr wichtige Frage ist, welche Unterschiede genau zwischen Tasks bestehen, dass wir einige von ihnen sowohl auf S/W als auch auf H/W ausführen können oder uns darauf beschränken, sie nur auf einem Verarbeitungselement (nur auf FPGA oder CPU) auszuführen? Gibt es mit diesen Aufgabenmodellen auch eine reale Anwendung in unserer Welt? Danke schön.

FPGAs werden vollständig, daher können Sie alles ausführen, was Sie auf einer CPU ausführen können, obwohl möglicherweise nicht genügend Ressourcen dafür vorhanden sind.
Parallelität. Aufgaben (VHDL-Prozesse) sind von Natur aus parallel. Auf einer CPU führt man sie entweder (a) sequentiell (z. B. unter einem RTOS) auf einem einzelnen Kern aus, oder (b) man braucht eine Mehrkern-CPU, idealerweise mit >= 1 Kern pro Task : mit weniger Kernen, siehe ( A).

Antworten (1)

So ziemlich jede Berechnung, die Sie auf einem FPGA in Hardware durchführen können, können Sie auch auf einer CPU in Software durchführen – so können Simulationstools natürlich Ihr Design simulieren. Ebenso können Sie alles, was Sie auf einer CPU tun können, auch auf einem FPGA tun (selbst wenn dies nur durch den Aufbau einer Soft-CPU geschieht).

Der einzige Unterschied zwischen ihnen ist Zeit und Effizienz. Als kurzes Beispiel können Sie einen CRC-Algorithmus auf einer CPU ausführen, aber es ist fast immer schneller, eine Hardwareimplementierung für die Berechnung zu verwenden, je nach Größe kann dies jedoch mehr Leistung (möglicherweise weniger) und Platz verbrauchen.

Dies kann jedoch nicht gesagt werden, wenn es um die Interaktion mit anderer Hardware geht. Wenn es um die Verbindung mit externen Geräten wie Hochgeschwindigkeits-ADCs/DACs oder PCIe geht, ist das FPGA der König. Bei seriellen und parallelen Hochgeschwindigkeitsschnittstellen ist es unmöglich, eine direkte Schnittstelle zu einer CPU herzustellen, da sie einfach nicht in der Lage ist, die Schnittstellen zu überlasten, es sei denn, sie läuft mit einer unmöglich hohen Geschwindigkeit. (Nebenbei enthält nicht dedizierte Hardware PLLs, aber CPUs mit niedriger Geschwindigkeit können sie durch Big-Banging in der Software beseitigen).

Es gibt einen anderen Fall, in dem das FPGA König ist, und das läuft auf sehr zeitkritische Ereignisse hinaus. Wenn Ihre Haupt-CPU damit beschäftigt ist, Dinge wie eine Benutzeroberfläche oder andere Hardwareteile zu handhaben, kann sie leicht ein Ereignis verpassen oder nicht in der Lage sein, es in Echtzeit zu verarbeiten. Dies könnte beispielsweise sogar ein zeitkritischer Auslöser sein, um mit der Aufzeichnung von Daten von einem ADC zu beginnen oder Daten an einen DAC zu senden. Für diese Art von Fällen würde ein dediziertes FPGA, das auf das Ereignis wartet und es dann sofort behandelt, es ermöglichen, dass die Dinge genau an dem Punkt passieren, an dem sie sollten, selbst wenn die CPU mit vielen anderen Dingen beschäftigt ist.

Es kommt also wirklich auf das Timing kritisch vs. nicht an. Wenn Sie eine Aufgabe haben, die zu einem genauen Zeitpunkt erledigt werden muss, oder eine Schnittstelle, die schneller ist als die CPU verarbeiten kann, oder auch nur eine sehr große Berechnung, die zu viel CPU-Zeit verbrauchen würde, dann ist dedizierte Hardware erforderlich in einem FPGA kann das lösen.