Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Welchen Kodierungstyp sollte ich verwenden? Beispiel-FPGA-Anwendungen

Folgen Sie drei Experimenten, die zeigen, wie bestimmt wird, welche Codierung für ein bestimmtes FPGA geeignet ist.

Welchen Kodierungstyp sollte ich für mein FPGA verwenden? Wie ich im vorherigen Artikel besprochen habe, wird dies im Allgemeinen ein Compiler für Sie entscheiden – und ich empfehle Ihnen, sich an die Entscheidungen des Compilers zu halten.

Es ist jedoch wichtig, die Unterschiede zwischen den Codierungsarten zu verstehen und zu verstehen, warum ein Compiler zu einem bestimmten Ergebnis kommen kann. Vor diesem Hintergrund führt Sie dieser Artikel durch ein Experiment, das eine FPGA-Beispielanwendung zeigt und Schritt für Schritt erläutert, welcher Codierungstyp am besten geeignet ist.

Bisher haben wir in dieser Serie besprochen, wie man mit Verilog eine Finite State Machine (FSM) erstellt, den Anfangszustand und wie sich der Speicher auf die FPGA-Codierung auswirkt, und eine allgemeine Übersicht zum Vergleich von Binär- vs. One-Hot- vs. Gray-Codierung .

Das System im Test

Für dieses Experiment wollte ich eine Zustandsmaschine viele Male instanziieren, um die Unterschiede in der resultierenden Hardware zu vergrößern, wenn Binär-, Gray- und One-Hot-Codierungen verwendet werden.

Das System, das ich schließlich gewählt habe, ist Conways Game of Life, ein zellulärer Automat, der das Verhalten lebender Zellen in ihrer Umgebung simuliert, bei der es sich um ein rechteckiges 2D-Array von Zellen handelt. Conways Spiel des Lebens ist eine Simulation der Geburt, Reproduktion und des Sterbens dieser Zellen nach einem einfachen Regelwerk, das jede Zelle befolgt, um zu bestimmen, was im nächsten Zyklus passiert. Jede lebende Zelle kann überleben oder sterben, und jede tote Zelle kann tot bleiben oder lebendig werden. Hier sind die Regeln für jeden Zyklus:

  1. Lebende Zellen mit zwei oder drei lebenden Nachbarn überleben.
  2. Tote Zellen mit drei lebenden Nachbarn werden lebendig.
  3. Alle anderen Zellen sterben oder bleiben tot.

Diese Regeln erzeugen viele interessante Verhaltensweisen und Muster, die in der Informatik umfassend untersucht wurden.

So sieht Conways Spiel des Lebens aus, wenn man eine sogenannte Gosper-Gleitschirmkanone betreibt.

Eine Variation von Conways Spiel des Lebens, bekannt als Bill Gospers Glider Gun. Gif erstellt von Lucas Vieira [CC BY-SA 3.0]

Verilog-Code

Zurück zu unserem Testsystem wurde jede Zelle als Zustandsmaschine mit acht Zuständen entworfen. Zugegeben, die Logik für eine Zelle in Conways Game of Life kann in einem Zyklus aufgelöst werden, aber ich habe mich für eine 8-State-Maschine entschieden, um einen bemerkenswerten Unterschied bei der Verwendung verschiedener Codierungen zu erzielen. Die Zustände werden verwendet, um die lebenden Nachbarn einer Zelle zu zählen.

Der folgende Verilog-Code zeigt die Zellenmodulstruktur für diese Maschinen, einschließlich der ursprünglichen binären Codierung der Zustände.

`define STATE_0 3'b000

`define STATE_1 3'b001

`define STATE_2 3'b010

`define STATE_3 3'b011

`define STATE_4 3'b100

`define STATE_5 3'b101

`define STATE_6 3'b110

`define STATE_7 3'b111

Modul LifeCell(

Clk eingeben,

Nummer eingeben,

Eingabe-Seed,

Eingabe [7:0] Nachbarn,

Ausgabe reg lebendig);

reg [2:0] Zustand;

immer @ (posedge clk)

if (nrst ==0)

Zustand <=`STATE_0;

sonst

Fall (Staat)

`STATE_0:beginnen

// ...

Zustand <=`STATE_1;

Ende

`STATE_1:beginnen

// ...

Zustand <=`STATE_2;

Ende

// ...

`STATE_7:beginnen

// ...

Zustand <=`STATE_1;

Ende

Endfall

Endmodul

Wenn Sie sich den Code genauer ansehen möchten, können Sie sich das Projekt auf GitHub ansehen.

FPGA-Kodierungsimplementierungen

Das System wurde synthetisiert und als Welt von 23x23 Zellen in insgesamt 27 Varianten implementiert:Es wurden drei verschiedene FSMs verwendet, alle mit den drei oben genannten Kodierungen, alle auf drei verschiedenen Ziel-FPGAs.

FSM #1:Originalmodell

Diese Maschine hat einen Anfangszustand, der einmal ausgeführt wird und dann in einem Zyklus die verbleibenden sieben Zustände durchläuft. Dies ist eine fast vollständige Sequenz, daher schien mir die Gray-Kodierung zunächst vielversprechend.

FSM #2:Eine Sequenz

Diese Maschine verhält sich wie ein 3-Bit-Zähler, daher habe ich auch erwartet, dass die Gray-Kodierung die Konkurrenz vernichten würde.

FSM #3:Ein willkürliches Gewirr

Diese Maschine hat den gleichen kritischen Pfad wie FSM #1, aber sie durchläuft einen willkürlichen Pfad, wenn bekannt ist, dass die Anzahl der lebenden Nachbarn 3 überschreitet.

Für dieses willkürliche Zustandsübergangsverhalten habe ich erwartet, dass One-Hot-Encoding die beste Wahl ist.

Zielarchitekturen

Das System wurde für drei Ziel-FPGAs implementiert, wobei das Entwicklungstool ihres Herstellers verwendet wurde:

Ergebnisse vergleichen

Der Vergleich der Leistung von zwei oder mehr Systemen ist schwierig, vor allem, weil das Urteil davon abhängt, welche Metriken wir verwenden und welche Aspekte wir für wichtiger halten als andere. Für dieses Experiment habe ich die folgenden Daten gesammelt, um eine Punktzahl für jede Implementierung zu erstellen:

Für jede Implementierung wurden diese vier Aspekte unter den drei Kodierungen verglichen, so dass ich unter den Kodierungen ein bestes, ein schlechtestes und ein mittleres Ergebnis erhielt:Das Beste erhält seinen positiven Wert, der Schlechteste seinen negativen Wert und der mittlere bekommt 0.

Nachdem ich alle Punktzahlen für jedes Modell addiert habe, habe ich die folgenden Ergebnisse erhalten:

Ergebnistabelle für alle 27 Implementierungen. In jeder Reihe wird die beste Kodierung in Grün, die schlechteste in Rot und die Mitte in Gelb angezeigt, wenn es keine Gleichstände gibt.

Dies scheint darauf hinzudeuten, sich von One-Hot-Codierung fernzuhalten, mit nur zwei Fällen, in denen es gewinnt, von denen einer ein Unentschieden ist. Obwohl ich ursprünglich erwartet hatte, dass One-Hot die beste Kodierung für das FSM-Modell Nr. 3 ist, stellte sich heraus, dass es die schlechteste Kodierung war, ohne dass ein Entwicklungstool es empfiehlt. Trotzdem gibt es Fälle, in denen One-Hot den Rest schlägt, hauptsächlich bei den Frequenz- und Leistungskennzahlen.

Insgesamt scheint die Gray-Kodierung die beste Wahl für dieses spezielle System zu sein.

Wenn wir die Gewinner aus dieser Tabelle extrahieren, erhalten wir Folgendes:

Das Urteil

Auch wenn dieser Vergleich die Gray-Kodierung gegenüber der binären und One-Hot-Kodierung zu bevorzugen scheint, hängen die Ergebnisse stark von den von uns verwendeten Metriken ab, und diese Metriken spiegeln wider, was für uns wichtig ist. In diesem Vergleich hielt ich beispielsweise Frequenz und Leistung für wichtiger als die Nutzung (die Anzahl der Logikelemente und Register im Design). Hätte ich Nutzung über Frequenz und Frequenz über Leistung bewertet, hätte sich sicherlich eine andere Rangfolge ergeben.

Dieser Vergleich sollte keine endgültige Arbeit über die Leistung sein, die durch die Verwendung dieser Kodierungen erzielt wurde. Stattdessen zeigt es das Ranking meiner persönlichen Präferenzen in den von mir verwendeten Architekturen an.

Wenn Sie sich den Code noch einmal ansehen, sich die 27 Implementierungen ansehen oder meine Simulation von Conways Game of Life in Aktion sehen möchten, sehen Sie sich das Projekt auf GitHub an.


Eingebettet

  1. Swissbit:USB-3.1-Stick für industrielle Anwendungen
  2. AAEON:COM Express Typ 6 für anspruchsvolle Anwendungen
  3. So wählen Sie einen Controller aus
  4. Wann sollte ich Bare-Board-Tests verwenden?
  5. Warum Sie eine Netzdrossel verwenden sollten
  6. Wann sollten Sie einen Hammerhai verwenden? Ein Leitfaden
  7. Welche Branchen verwenden Kevlar-Materialien?
  8. Warum sollten Sie eine Remote Expert-Lösung verwenden?
  9. Wissen, welche Aluminiumlegierung zu verwenden ist
  10. Titan vs. Aluminium:Welches Nichteisenmetall sollte verwendet werden