Hallo Zusammen, ich werde demnächst ein Referat zum Thema FPGA halten und möchte dabei einen Vergleich zu einer CPU machen. Konkret würde ich gerne ein Beispiel zeigen wie ein FPGA eine bestimmte Aufgabe löst, und wie der Prozessor diese Aufgabe lösen würde. Ich habe hierfür ein Beispiel(siehe Anhang) im Internet gefunden. Frage 1: Ist das so in etwa richtig? Kann man sagen das ein Compiler für z.b. eine RISC CPU diese 12 Befehle generiert und diese dann von der CPU abgearbeitet werden. Frage 2: Bei der FPGA Schaltung steht dabei das es 2 Schritte für diese Operation braucht. Was soll den hier genau 2 Schritte bedeuten? Eine Addieroperation allein braucht ja schon mehrere Schritte. Da sind ja auch viele Gatter vorhanden. Frage 3: kann man das ganze vielleicht grob in Zahlen ausdrücken? Ich würde gerne aufzeigen wie schnell das in etwa eine CPU mit 1GHz lösen würde. und Wie schnell ein FPGA mit z.b. 100Mhz. Kann ich hergehen und sagen das eine CPU mit Piplining für jeden Befehl genau einen Taktzyklus braucht? D.h. 12*1ns = 12 ns Bei dem FPGA könnte ich mir ja die Schaltung in einem Entwicklungstool aufbauen und mir die Laufzeit durchrechnen lassen. Oder geht das auch am grob am Papier? Danke sehr Gruß Florian
Florian schrieb: > Kann man sagen das ein Compiler für z.b. eine RISC CPU diese 12 Befehle > generiert und diese dann von der CPU abgearbeitet werden. Für diese spezielle RISC-CPU in deinem Beispiel ist das so. > Bei der FPGA Schaltung steht dabei das es 2 Schritte für diese Operation > braucht. Was soll den hier genau 2 Schritte bedeuten? Da sind 2 grundlegende Logikelemente in dem Schaltplan. Tatsächlich wird dies Logik in einem FPGA aber natürlich in 1 LUT mit 4 Eingängen und 1 Ausgang gepackt und damit ist das real nur 1 Schritt. > Bei dem FPGA könnte ich mir ja die Schaltung in einem Entwicklungstool > aufbauen und mir die Laufzeit durchrechnen lassen. Oder geht das auch am > grob am Papier? In der Realität nicht mehr. > Frage 3: kann man das ganze vielleicht grob in Zahlen ausdrücken? Ich > würde gerne aufzeigen wie schnell das in etwa eine CPU mit 1GHz lösen > würde. Keine CPU macht was mit 1GHz. Sondern bestenfalls der innerste Rechnerkern der CPU läuft damit. Aber weil du erst noch die Befehle und die Daten aus dem Speicher holen musst, dauert das alles viel länger. > Kann ich hergehen und sagen das eine CPU mit Piplining für jeden Befehl > genau einen Taktzyklus braucht? D.h. 12*1ns = 12 ns Die Zahlen sind beliebig. Du musst etwas vergleichen, was gleich teuer und gleich groß ist: ein FPGA für 3€ und einen µC für 3€. Dann kannst du die Performance ansatzweise vergleichen. Wenn du aber ein FPGA für 5€ (=100MHz) mit einem Prozessor samt Pipapo für 50€ vergleichst, dann kannst du auch das Wetter in Absurdistan mit der Farbe von Grünkohl vergleichen. > und Wie schnell ein FPGA mit z.b. 100Mhz. Das braucht weniger als 10ns für die Aufgabe. Sonst könnt es die Setup-Zeit für das nächste Flipflop nicht einhalten. Real sind die Durchlaufzeiten durch LUTs im huntert-ps Bereich. Dazu kommt das Routing usw...
:
Bearbeitet durch Moderator
Moin, Der Unterschied zwischen FPGA und CPU wird wohl deutlicher, wenn du das Beispiel nicht mit einzelnen Variablen machst, sondern jeweils mit Arrays von z.b. jeweils 16 Eintraegen. Die CPU muss dann halt 16mal hintereinander mit den verschiedenen Arrayeintraegen rechnen, waehrend im FPGA "einfach" 16 Instanzen der fuer die Berechnung benoetigten LUTs nebeneinander rumliegen und gleichzeitig rechnen koennen. Die CPU braucht also grob 16x laenger fuer's Array, im FPGA kann man's "in die Flaeche komponieren", wenns pressiert und es bleibt dann genauso schnell - solange das parallele Design noch ins FPGA passt. Gruss WK
Hallo, Danke für die Antworten. ich hab das mal in Xilinx Vivado für den Zybo (xc7z010clg400-1) nachgebaut. Allerdings mit einem Multiplizierer statt einem Subtrahierer.
1 | entity test is |
2 | Port ( |
3 | a : in unsigned(15 downto 0); |
4 | b : in unsigned(15 downto 0); |
5 | c : in unsigned(15 downto 0); |
6 | d : in unsigned(15 downto 0); |
7 | z : out unsigned(33 downto 0); |
8 | clk : in std_logic |
9 | );
|
10 | end test; |
11 | |
12 | architecture Behavioral of test is |
13 | |
14 | signal a_s : unsigned(15 downto 0); |
15 | signal b_s : unsigned(15 downto 0); |
16 | signal c_s : unsigned(15 downto 0); |
17 | signal d_s : unsigned(15 downto 0); |
18 | signal z_s : unsigned(33 downto 0); |
19 | signal x_s : unsigned(16 downto 0); |
20 | signal y_s : unsigned(16 downto 0); |
21 | |
22 | begin
|
23 | |
24 | x_s <= ('0' & a_s) + ('0' & b_s); |
25 | y_s <= ('0' & c_s) + ('0' & d_s); |
26 | z_s <= x_s * y_s; |
27 | |
28 | regs : process(clk) |
29 | begin
|
30 | if rising_edge(clk) then |
31 | a_s <= a; |
32 | b_s <= b; |
33 | c_s <= c; |
34 | d_s <= d; |
35 | z <= z_s; |
36 | end if; |
37 | end process; |
38 | |
39 | end Behavioral; |
Das was rausgekommen ist, sieht man im Anhang. Es wurde dafür ein DSP Slice verwendet. Zu sehen ist der kritische Pfad. Als total Delay wurde hier 3,2 ns angegeben. Diesen Wert würde ich gern gegenüber einem Mikrocontroller der z.b. mit 1Ghz läuft stellen? Wie mache ich das am besten? Es muss nicht ganz genau sein. Grob würde mir schon reichen :) Danke sehr
Ein fairer Vergleich zwischen FPGA und CPU ist auf diese Weise kaum möglich. z.B. verwendet dein CPU-Programm LOAD-Operationen zum Laden der Operanden aus dem Speicher. Aber woher bekommt der FPGA seine Daten? Fairerweise musst du voraussetzen, dass bei beiden die Operanden bereits in Registern liegen und die Ergebnisse nur in Registern gespeichert werden. Für halbwegs brauchbare Performancevergleiche wirst du dich zumindest auf einen speziellen CPU- Typ festlegen müssen, alleine schon wegen der Speicheranbindung (Stichwort Harvard-Architektur). Da würde sich z.B. die RISC-V CPU anbieten, die vollständig offengelegt ist. Wenn du für dein Problem ein RISC-V Maschinenprogramm schreibst und gleichzeitig zeigst, wie das FPGA-Design aussieht, kannst du sehr schön demonstrieren, wo die Vorteile/Nachteile liegen. FPGA haben immer die Nase vorn, wenn es um feingranulare Parallelität geht, z.B. bei einer Skalarmultiplikation (fairerweise mit Integer-Vektoren,die vollständig in die 32 RISC-V-Register passen). Geht es dagegen um Steuerungsaufgaben mit vielen if/else-Entscheidungen und Variablen, würde man eher eine CPU nehmen. Ebenso bei nicht-parallelisierbaren Algorithmen mit vielen Floating-Point-Operationen. Dein Beispiel-Design oben lässt sich wohl auf den meisten aktuellen FPGA in einem einzigen Takt berechnen, und wenn nicht, dann in einer zweistufigen Pipeline. Wenn du von 100MHz ausgehst, bekommst Du 100Mio Ergbnisse pro Sekunde, vorausgesetzt, du kannst den FPGA pro Sekunde mit 400Mio Operanden füttern. Jetzt kannst du mal überlegen, welche Perfromance ein RISC-V mit 4-stufiger Pipeline bei 100MHz bringen würde, und wie hoch man ihn takten müsste, damit er genau so schnell ist wie der FPGA. Für einen aktuellen AMD-RYZEN Prozessor verglichen mit einem Xilinx-Virtex-Ultrascale-II-Monstrum dürften sich dann ähnliche Vergleichswerte ergeben.
Dergute W. schrieb: > Die CPU braucht also grob 16x laenger fuer's Array Wobei diese Zahl 16 ein für dieses Beispiel beliebig gewählter Wert ist und nichts direkt mit den 16 Werten im Array zu tun hat. In der Praxis kann die CPU auch 160 mal länger brauchen, wenn grad ein Cache Miss war und erst noch das komplette Array in den CPU-Speicher geladen werden muss... ;-) Florian schrieb: > ich werde demnächst ein Referat zum Thema FPGA halten und möchte dabei > einen Vergleich zu einer CPU machen. Weil ein allgemeiner Vergleich einer CPU mit einem FPGA immer hinkt, solltest du da eher eine diskret aufgebaute Schaltung mit einer ins FPGA gepackte Logik vergleichen. Denn die Logik, die aus einer Rechnung wie der obigen wirklich gemacht wird, sieht für 8-Bit signed Werte real so aus wie im Screenshot. Da ist wie in deinem Beispiel nichts mit "2 Schritten" zu erkennen, sondern da sind zwischen Ein- und Ausgang einige LUT und Multiplexer beteiligt. Florian schrieb: > Diesen Wert würde ich gern gegenüber einem Mikrocontroller der z.b. mit > 1Ghz läuft stellen? Wie mache ich das am besten? Es geht in dieser Liga nicht, ohne dass du irgendwelche Randbedingungen annimmst. Denn GHz Prozessoren erreichen das GHz eben nur in den internen Pipelines. Für einen Vergleich musst du also alles vergleichen von Quelle bis Ziel, also von dem Zeitpunkt, wo die Eingangsdaten im Speicher stehen bis zu dem Augenblick, wo das Ergebnis im Speicher steht. Aber auch das ist Sand in die Augen gestreut, denn währen der Buscontroller die Daten in den Speicher legt, macht die CPU ja schon lange wieder was anderes. Und es läuft eben auch dort vieles parallel.
:
Bearbeitet durch Moderator
Man könnte meinen dass es im Kern um einen Vergleich zwischen linearen und parallelen Prozessen geht. Und da wird eine Aufgabe die man parallelisieren kann tendenziell auf einem FPGA schneller ablaufen. Wenn der FPGA klein ist, also wenig Fläche für parallele Prozesse hat, dann wird eine sehr schnelle CPU mit linearer Berechnung tendenziell trotzdem schneller sein. Um CPU vs. FPGA zu beurteilen muss man die Menge der Aufgabenstellungen definieren. Denn es wird keinen deutlichen Sieger für eine beliebige Aufgabenstellung geben. Berechnungen die sich nicht (gut) parallelisieren lassen, laufen auf einem FPGA auch nicht besonders schnell. Wobei die Eigenschaften linear und parallel auch nicht immer für CPU und FPGA gelten. Eine CPU mit mehreren Kernen parallelisiert auch Aufgaben oder es gibt bestimmte Module in der CPU die bestimmte Berechnungen auch parallel ausführt, wenn auch nicht in dem Ausmaß wie es ein FPGA theoretisch kann. Umgekehrt können in realen Berechnungen auch in einem FPGA lineare Prozesse zwingend sein die das Gesamtergebnis ausbremsen können.
All die Punkte die hier aufgefuehrt werden sind richtig, helfen aber nicht wirklich weiter. Jetzt gehen wir aber mal einen Schritt zurueck und sehen das dort ein "Referat" gehalten wird. Was ist also die Zielgruppe? Klingt nach Oberstufe/Richtung Abitur. Hat das Publikum etwas Hintergrundwissen oder hoeren die zum ersten Mal von FPGAs? Zum ersten mal von Digitallogik? Zum ersten mal von Maschinenbefehlen? Doch im Studium? Ich wuerde sagen du bist auf einem guten Weg und vergleichst die richtigen Baustellen. Seriell gegen parallel ist das Argument. Stelle das gut verstaendlich dar. Sei dir bewusst das du die Rahmenbedingungen nicht 100% vergleichen kannst. Es passiert zuviel in der Mikroarchitektur um CPU-Zyklen 1:1 mit der Gaterlauf vergleichen zu koennen. Verstecke das nicht, lass dich aber auch nicht von zuvielen unnoetigen Details von dem eigentlich Vergleich abhalten.
ok, danke für eure Hilfe. Dann werde ich speziell diesen Vergleich etwas überdenken. ;)
Florian schrieb: > ich werde demnächst ein Referat zum Thema FPGA halten und möchte dabei > einen Vergleich zu einer CPU machen. > Konkret würde ich gerne ein Beispiel zeigen wie ein FPGA eine bestimmte > Aufgabe löst, und wie der Prozessor diese Aufgabe lösen würde. Dir ist aber hoffentlich bewußt, daß ein derartiger Vergleich extrem hinkend ist. Also eine CPU ist eine Inkarnation der Turing-Maschine, also eines Gebildes, was seriell Befehle liest und ausführt - während ein FPGA eine Tüte voller Logik-Gatter ist, denen man erst durch eine sinnvolle Verschaltung eben dieser Gatter eine gewünschte Funktion gibt. Das ist ein wesentlicher Unterschied, der eigentlich jeglichen Vergleich verbietet. Und: Ein FPGA kann durchaus auch eine CPU sein, denn eine CPU ist ebenfalls nur eine Konstruktion aus Logik-Gattern. Also: Ein FPGA löst keine Aufgabe - sondern derjenige, der die Gatter des FPGA in sinnvoller Weise miteinander verschaltet, löst damit Aufgaben. Eine CPU hingegen löst Aufgaben, denn sie nimmt (eben als Turing-Maschine) Befehle entgegen und führt sie aus. Das beinhaltet einen wesentlichen Unterschied: Die Formulierung der Aufgabe besteht beim FPGA in der inneren Verschaltung der Gatter - während sie bei der CPU von außen herangeführt wird, indem man der CPU unterschiedliche Befehle zu lesen gibt. Für unterschiedliche Aufgaben muß ein FPGA innerlich umprogrammiert werden. Die CPU hingegen bleibt innerlich gleich, die Aufgaben werden ihr seriell von außen zugeführt. Und noch ein Wort zu Geschwindigkeiten: Eine CPU ist üblicherweise ein getaktetes System und damit ist die Befehlsausführung an den angelegten Takt gebunden. Die Verschaltung der Gatter im FPGA kann ebenfalls ein getaktetes System sein (ist es in den meisten Fällen auch) - aber das ist nicht zwingend, denn man kann mit Logik-Gattern auch ungetaktete Fnktionalität herstellen. Dann hängt die Geschwindigkeit von den Durchlaufszeiten der Gatter ab und da diese je nach Komplexität variieren, ergibt das Glitches. W.S.
Clemens schrieb: > Was ist also die Zielgruppe? > Klingt nach Oberstufe/Richtung Abitur. Eine Primitiv-Erklärung, was ein FPGA ist: Beitrag "Re: Modernes "Z80 Klein-Computer"-Analogon für Jugendliche/Kinder?"
Ich habe das im Seminar immer am Beispiel eines Taschenrechners erklärt, wenn es kurz und knapp für Laien sein sollte: Hardware: CPU: Chip fest verdrahteten Funktionen, die vom Hersteller definiert wurden FPGA: Chip mit frei vom Entwickler festlegbaren Funktionen Daraus ergibt sich zwangsläufig: Software: CPU: Das Programm ist eine Rechenvorschrift, konkret ein Ablauf, damit der universelle Rechner genau die richtige Rechnung durchführt (so, wie sie eine Person eintippen würde) FPGA: Das Programm ist eine Bauvorschrift, damit eine Software aus universellen Elementen einen abgespeckten Taschenrechner für die gewünschte Rechnung zusammensetzen kann (so, wie es eine Person zusammenlöten würde) Alternativ dazu das ebenfalls von mir gebrachte Roboterbeispiel, um einmal zu abstrahieren und CPU / FPGA als etwas Produktives aufzufassen: Eine Vorschrift wie C oder SPS ist expliziter Ablauf, der einen Roboter dazu bringt, ein Auto zusammenzusetzen. Eine Vorschrift wie VHDL ist die Bauanleitung für den Roboter. Die Abläufe für das Zusammensetzen des Autos sind implizit gegeben.
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.