Abo
  • Services:
Anzeige
FPGA
FPGA (Bild: Christer Weinigel)

Reverse Engineering: Was ein FPGA-Baustein steuert

FPGA
FPGA (Bild: Christer Weinigel)

Den Mikrocontroller eines Oszilloskops zu analysieren, hält Fallstricke bereit. Noch schwieriger wird es bei einem verbauten FPGA. Vor allem, wenn die Entwickler eine unerwartete Idee hatten.

Es ist mir in den vorherigen drei Teilen der Artikelserie bisher gelungen, Linux auf einem Oszilloskop zu installieren und eine ganze Reihe von Pins des Mikrocontrollers und ihre Funktion herauszufinden. Doch auf der Hauptplatine des Oszilloskops befindet sich noch ein FPGA, der wahrscheinlich genauso wichtig ist. Deshalb wil ich im vierten Teil herausfinden, welche Funktionen dessen Pins haben. Im Gegensatz zum Mikrocontroller kann ich auf dem FPGA aber nicht einfach ein paar einfache Programme laufen lassen.

Anzeige

Ich habe die GPIO-Pins des SoC analysiert, indem ich sie als Eingang konfiguriert und dann an den verschiedensten Stellen auf der Platine ein Signal angelegt habe. Ein selbstgeschriebener Linux-Treiber hat mir dann den zugehörigen Pin angezeigt. Mit der gleichen Methode will ich jetzt auch die Pins des FPGA analysieren. Der FPGA im Oszilloskop ist ein Xilinx Spartan 6 XC6SLX9.

  • Der FPGA sitzt rechts unten (Bild: Christer Weinigel)
Der FPGA sitzt rechts unten (Bild: Christer Weinigel)

Er hat einen integrierten Speichercontroller in der Pin-Bank 3, die sich im obigen Bild am oberen Rand des FPGA befindet. Der Speichercontroller ist hoffentlich mit dem Hynix-DDR2-Speicher direkt oberhalb des FPGA verbunden. Die Pin-Bank 2 ist auf der linken Seite des FPGA und wahrscheinlich über die Widerstände mit dem SoC verbunden. Die Pin-Bank 1 befindet sich unten, viele Leiterbahnen verlaufen von dort zu den Analog-Digital-Konvertern (ADC). Die Pin-Reihe 0 liegt rechts und deren Verwendung ist nicht direkt ersichtlich. Aber das herauszufinden, ist schließlich die Idee hinter dem Reverse Engineering.

Wie die FPGA-Programmierung funktioniert

Ein FPGA ist ein programmierbarer Logikbaustein. Abhängig vom Blickwinkel hat ein FPGA entweder überhaupt nichts mit der Programmierung zu tun und ist einfach ein Stück rekonfigurierbare Hardware oder es ist ein programmierbares Ding, das mit einer sehr ungewöhnlichen Programmiersprache funktioniert.

Die Logikgatter des FPGA können direkt konfiguriert und Logikschaltungen mit AND-, OR- XOR-Gatter, Invertern, Latches und Flip-Flops aufgebaut werden. Üblicherweise wird aber eine Hardware-Beschreibungssprache (HDL) verwendet, wie zum Beispiel Verilog oder VHDL. Diese Sprachen werden auch als Registertransferebene (RTL) bezeichnet, sie abstrahieren die Abläufe in Form von Signalübertragungen zwischen Registern und logischen Operationen mit den Signalen dazwischen.

Ich habe schon früher mit Verilog herumgespielt, allerdings bin ich damit nie richtig warm geworden. Für einen Softie wie mich, also jemanden, der aus der Software-Ecke kommt, hat sich Verilog immer sehr primitiv angefühlt. Die Syntax ist ein wenig von C inspiriert, aber es ist noch systemnäher als C. Zum Beispiel hat Verilog kein Sprachenkonstrukt wie Struct. Schon einmal probiert, in C zu programmieren, ohne zusammengehörige Variablen in einem Struct zusammenfassen zu können und stattdessen jede Variable einzeln einer Funktion als Argument zu übergeben? Es gibt Verilog-Module, die Hunderte von Signalen als Argumente erwarten!

Es ist allerdings möglich, mehrere Signale in einen einzelnen großen Bitvektor zu packen. Aber das entspräche dem Verpacken eines Struct in einem Integer-Array von Hand, um es nach der Übergabe an die C-Funktion wieder von Hand zu entpacken. Das ist eine eher schmerzhafte Angelegenheit.

Systemverilog, eine Erweiterung von Verilog, soll solche Probleme lösen. Aber viele Herstellerwerkzeuge wie das kostenlose Xilinx SE von Spartan unterstützen es nicht. VHDL ist umfangreicher, es hat mit dem Entity-Konstrukt eine Entsprechung zum Struct-Konzept von C. Allerdings bin ich mit VHDL nie zurechtgekommen. Die Syntax erinnert mich an ADA und ich mag es einfach nicht.

Mit einer Hochsprache Hardware beschreiben

Da Verilog eher primitiv aufgebaut ist, haben viele bereits Werkzeuge entwickelt, um Verilog aus anderen Sprachen zu erzeugen. Vor einigen Jahren bin ich über MyHDL gestolpert, das Verilog oder VHDL aus Python-Code erzeugt. Es sah sehr interessant aus und ich wollte es schon immer einmal ausprobieren.

Ich stieß dabei auch auf Rhea. Dabei handelt es sich um eine Handvoll nützlicher Bibliotheken für MyHDL, es enthält auch eine Reihe von Build-Skripten für viele verschiedene FPGAs.

Jede Menge neue Spielzeuge, um herumzuspielen und zu lernen.

Hello World 

eye home zur Startseite
Lasse Bierstrom 26. Nov 2016

Einsynchronisieren ist quasi im hello World für FPGA's mit drin. Alles andere ist (bis...

Themenstart

Lasse Bierstrom 26. Nov 2016

Wenn es um Oszilloskope geht wird idR kräftig in der Trickkiste gerührt. Schneller...

Themenstart

x-beliebig 25. Nov 2016

wir haben die Erfahrung gemacht, dass es Softwareleute gibt, die durchaus meinen, man...

Themenstart

tunnelblick 25. Nov 2016

was vielen nicht klar ist: ein fpga ist inhärent echtzeitfähig.

Themenstart

tunnelblick 25. Nov 2016

das ist so nicht ganz richtig. die synthese verwandet hdl-code in eine netzliste. diese...

Themenstart

Kommentieren



Anzeige

Stellenmarkt
  1. Securiton GmbH Alarm- und Sicherheitssysteme, Achern
  2. Bosch Software Innovations GmbH, Waiblingen
  3. Ashampoo Systems GmbH & Co. KG, Oldenburg
  4. über Ratbacher GmbH, Köln


Anzeige
Top-Angebote
  1. Gratis-Zugaben, Game-Gutscheine oder Cashbacks beim Kauf ausgewählter ASUS-Produkte
  2. (heute u. a. LG OLED-TVs u. PC-Zubehör reduziert)

Folgen Sie uns
       


  1. Online-Hundefutter

    150.000 Euro Strafe wegen unerlaubter Telefonwerbung

  2. Huawei

    Vectoring mit 300 MBit/s wird in Deutschland angewandt

  3. The Dash

    Bragi bekommt Bluetooth-Probleme nicht in den Griff

  4. Bugs in Encase

    Mit dem Forensik-Tool die Polizei hacken

  5. Autonomes Fahren

    Verbraucherschützer fordern "Algorithmen-TÜV"

  6. The Last Guardian im Test

    Gassi gehen mit einem computergesteuerten Riesenbiest

  7. E-Sport

    Cheats und Bots in Südkorea offenbar gesetzlich verboten

  8. Videocodecs

    Netflix nutzt VP9-Codec für Offlinemodus

  9. Kosmobits im Test

    Tausch den Spielecontroller gegen einen Mikrocontroller!

  10. Open Data

    Daten für den Schweizer Verkehr werden frei veröffentlicht



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Oculus Touch im Test: Tolle Tracking-Controller für begrenzte Roomscale-Erfahrung
Oculus Touch im Test
Tolle Tracking-Controller für begrenzte Roomscale-Erfahrung
  1. Microsoft Oculus Rift bekommt Kinomodus für Xbox One
  2. Gestensteuerung Oculus Touch erscheint im Dezember für 200 Euro
  3. Facebook Oculus zeigt drahtloses VR-Headset mit integriertem Tracking

Canon EOS 5D Mark IV im Test: Grundsolides Arbeitstier mit einer Portion Extravaganz
Canon EOS 5D Mark IV im Test
Grundsolides Arbeitstier mit einer Portion Extravaganz
  1. Video Youtube spielt Livestreams in 4K ab
  2. Ausgabegeräte Youtube unterstützt Videos mit High Dynamic Range
  3. Canon EOS M5 Canons neue Systemkamera hat einen integrierten Sucher

Named Data Networking: NDN soll das Internet revolutionieren
Named Data Networking
NDN soll das Internet revolutionieren
  1. Geheime Überwachung Der Kanarienvogel von Riseup singt nicht mehr
  2. Bundesförderung Bundesländer lassen beim Breitbandausbau Milliarden liegen
  3. Internet Protocol Der Adresskollaps von IPv4 kann verzögert werden

  1. Re: Und dann ist es vorbei ...

    Tomek_ | 16:46

  2. Re: Bullshit!

    martin28 | 16:45

  3. Klar, und der TÜV prüft dann Millionen Zeilen AI...

    Sinnfrei | 16:38

  4. Re: OT: Oneplus One

    Häxler | 16:37

  5. Re: Einsatzmöglichkeiten?

    TheUnichi | 16:37


  1. 16:42

  2. 15:05

  3. 14:54

  4. 14:50

  5. 14:14

  6. 14:00

  7. 13:56

  8. 13:30


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel