Seit
Ende 2005 arbeite ich fest bei der Hitron GmbH und habe nun auch mein MAS Mikroelektronik abgeschlossen.
In meinem Studium zum MAS habe ich mich oft mit FPGAs befasst und sie schätzen
gelernt.
Was sind eigentlich FPGAs
Ein
FPGA
(Field Programmable Gate Array) ist eine programmierbare Logik.
Sozusagen sehr viele Logikbausteine und Latches, welche noch nicht verbunden sind
unter einander und deren Verbindungen sich programmieren lassen.
Ein früher Vorläufer der FPGAs sind die
PALs.
Diese hatten oft je eine AND- und eine OR-Struktur hintereinander sowie Latches am Ausgang, welche man aber überspringen konnte.
Bei den Logikstrukturen und dem Ausgang konnte man einige Verbindungen wählen.
Bei diesen Bausteinen wurden die notwendigen Verbindungen anhand des Datenblattes
"von Hand" ermittelt und dann mittels einer scriptartigen Sprache in ein
Binäres File umgewandelt, welches dann mit einem Eprom-Brenner in das PAL gebrannt wurde.
Da die Programmierung meisst aus einer Art "Sicherungen" bestand, hatte
man pro Baustein nur eine einzige Chance. Funktionierte er dann nicht wie erwartet,
musste man ihn wegwerfen.
FPGAs
enthalten ein tausendfaches der Logik dieser PALs. Das direkte bestimmen
der Verbindungen wäre somit absolut aussichtslos. Auch sind sie nicht mehr so detailiert offen gelegt, wie damals bei den PALs.
FPGAs lassen sich heute mit leistungsfähigen Tools wie beispielsweise Quartus II
mittels einer "Programmiersprache" wie
VHDL
programmieren. Diese Sprache stellt viel mehr zur Verfügung als nur das AND und OR der damaligen PALs.
Der grosse Vorteil dieser Methode besteht darin, dass die Logik dadurch abstrahiert
wird, so dass der Programmierer ein grosses Stück weit
Hardware-unabhängig
wird.
Passt ein Design nicht mehr in einen Baustein, so kann man in der Regel mit wenig
oder gar ohne Anpassungen den Quellcode für einen anderen Baustein kompilieren.
Bevor das Design in den Baustein programmiert wird, kann es
simuliert werden.
Mittels einer Testbench, einer Testsoftware, welche die Umgebung des Designs simuliert,
werden die relevanten Situationen nachgebildet. Die Reaktionen des Designs auf diese
Situationen können dadurch ermittelt und auch
getestet
werden.
Heutige FPGAs haben meisst soviel Logik zur Verfügung, dass ohne weiteres mit
einem Teil davon ein ganzer
(Softcore-)Prozessor
realisiert werden kann.
So lassen sich äusserts flexible und leistungsfähige Designs damit realisieren, da ein Teil davon auch "normale" Software verarbeiten kann.
Die Fähigkeiten diese Prozessors können dann ganz spezifisch auf die zu
bewältigende Aufgabe getrimmt werden, insbesondere können gewisse Aufgaben "in Hardware" erledigt werden, was zu sehr effizienten Lösungen führt.
Auch die Kombination mit einem externen Prozessor kann sinnvoll sein, vorallem
wenn dieser spezielle Funktionen wie A/D- und D/A-Wandler mitbringt, welche kaum in FPGAs zu finden sind.
Diese FPGAs werden, wie es der Name bereits sagt, erst "im Feld", also beispielsweise beim Aufstarten des Gerätes, programmiert.
Dies eröffnet natürlich neue Möglichkeiten: Die Programmierung lässt
sich nachträglich updaten und damit lässt sich sozusagen die Hardware nachträglich noch anpassen.
Da die Programmierung von aussen her erfolgt, birgt dies aber auch Gefahren, da
damit die Programmierung sozusagen offen liegt und von jedermann kopiert werden könnte.
In vielen Designs muss daher auch die Problematik des
Kopierschutzes
beachtet
werden, wozu oft CPLDs benutzt werden.
Die
CPLDs
sind die kleinen Brüder der FPGAs. Sie enthalten das Flash
zur Programmierung bereits und lassen sich in der Regel gegen das Auslesen schützen.
So eignen sie sich unter anderem als Kopierschutz von FPGAs.
Es wird sowohl eine Verschlüsselung im CPLD, wie auch im FPGA realisiert, welche
vom Code her identisch sein können. Diese zwei Verschlüsselungen lässt
man miteinander kommunizieren. Da das CPLD nicht ausgelesen und damit auch nicht
kopiert werden kann, würde dieser Teil der Verschlüsselung bei einer Raubkopie des Gerätes fehlen, was vom FPGA festgestellt werden könnte.
Das FPGA lässt sich zwar anhand des Codes, welcher einprogrammiert wird kopieren,
jedoch kann seine Funktion anhand dieses Codes nicht festgestellt werden. Weigert
sich dieses also beim Fehlen des Kopierschutzes weiter zu arbeiten, wird es für den Raubkopierer wertlos.
|