FPGA: Pseudo Random Generator (PRNG) von Prof. Dr

Transcrição

FPGA: Pseudo Random Generator (PRNG) von Prof. Dr
Praktikum
Digitaltechnik
FPGA: Pseudo Random Generator (PRNG)
von Prof. Dr.-Ing. Dirk Rabe
Gruppe:
Teilnehmer:
Benutzte Geräte:
Vortestat:
Testat:
1
1
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
1 Einleitung und Überblick
Einleitung und Überblick
Dieser Versuch behandelt drei Themen:
1)
Den Logikanalysator als Messgerät zur Schaltungsanalyse (z.B. Fehleranalyse).
2)
Den Pseudo-Random-Generator (PRNG).
3)
Den Entwurf des PRNG als Repräsentant sequentieller Schaltungen mit VHDL.
Teile dieser Versuchsanleitung entstammen der Versuchsanleitung von Prof. Dr.-Ing. Ingo H.
Karlowsky. Verglichen mit dem bei Herrn Karlowsky durchgeführten Laborversuch wird hier
der Fokus auf die Hardwarerealisierung in einem FPGA gelegt.
V 1.0.1 / 2009-04-29
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
2
2
Der Logikanalysator
Logikanalysatoren sind ein sehr nützliches Hilfsmittel bei der Erprobung und Analyse digitaler
Schaltungen. Im Unterschied zu Oszilloskopen sollen sie nicht die Kurvenform der Eingangssignale möglichst authentisch wiedergeben, sondern den zeitlichen Ablauf von Binärsignalen.
Mehrere Binärsignale können als Zahlen dargestellt werden (binär, oktal oder hexadezimal).
Die aufzunehmenden Daten werden typischerweise fortlaufend in Speichern abgespeichert.
Ähnlich wie bei Oszilloskopen können Trigger definiert werden. Die Triggerbedingungen können jedoch wesentlich komplizierter gestaltet werden. Da die Signale fortlaufend gespeichert
werden, ist auch die Historie der Signale darstellbar. Bei Fehleranalysen wird beispielsweise
auf eine Fehlerbedingung getriggert und dann anschließend analysiert wie es zu diesem Fehler
gekommen ist. Hierzu ist die Historie von besonderer Bedeutung.
Die Anzahl der Pins digitaler Schaltungen kann mehrere hundert betragen (z.B. hat das auf
dem Experimentierboard DE2 verwendete FPGA 475 Pins). Die Anzahl der Signale, die
gleichzeitig aufgezeichnet werden können hängt vom Logikanalysator (und damit den
Anschaffungskosten) ab (neben weiteren Parametern wie die maximale Abtastrate und die
Speichertiefe).
Die im Versuch verwendeten Geräte sind eine Kombination aus Oszilloskopen und einfachen
Logikanalysatoren. Professionelle Logikanalysatoren weisen typischerweise wesentlich
umfangreichere Trigger- und Verarbeitungsmöglichkeiten auf.
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.0.1 / 2009-04-29
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Der Pseudo Random Number Generator (PRNG)
3
3
Der Pseudo Random Number Generator (PRNG)
3.1 Einleitung
Sehr häufig werden in der Technik Zufallszahlen benötigt (z.B. zur Untersuchung von dynamischen Systemen, zum Testen vom RAM-Speichern, für kryptographische Verfahren, ...).
Solche Generatoren lassen sich sehr gut mit rückgekoppelten Schieberegistern (LFSR†) aufbauen. Im folgenden werden 2 prinzipielle Realisierungen unterschieden: Fibonacci- und
Galois-LFSRs .
3.1.1
Fibonacci-LFSR
Abbildung 1 zeigt den Hardwareaufbau eines 4 Bit Fibonacci-LFSRs und die 24-1=15 Bitmuster, die sich durch Taktung des rückgekoppelten Schieberegisters ergeben.
1010
0101
1011
1101
0110
1110
1 3 4
1100
1111
1 0 0 0
1001
0111
0010
0011
0001
1000
0100
Abbildung 1: Sequenz eines 4-Bit Fibonacci-LFSRs (linear Feedback Shift Registers)
Mit jedem Clock(Takt)-Impuls wird der gesamte Inhalt des Schieberegisters um eine Stelle
nach rechts verschoben (Multiplikation mit 2). Das Exklusiv-Oder-Verknüpfte Signal wird
dabei in die Bitposition 1 (SL-Eingang) rückgekoppelt. Der Inhalt der Bitposition 4 (MSB)
geht dabei verloren. Auf diese Weise entsteht mit jedem Taktimpuls ein neues Bitmuster im
Schieberegister. Erst nach 24 - 1 = 15 Taktimpulsen wiederholt sich die ursprüngliche Bitkombination (Pseudo-Zufallszahlen). Für längere Schieberegister mit geeigneter Rückkoppelung
erhöht sich die Anzahl der Bitkombinationen entsprechend (2n-1).
3.1.2
Galois-LFSR
Abbildung 2 zeigt den Hardwareaufbau eines 4 Bit Galois-LFSRs und die 24-1=15 Bitmuster,
die sich durch Taktung des rückgekoppelten Schieberegisters ergeben.
Der Unterschied zum Fibonacci-LFSR liegt in der Art der Rückkopplung. Das am weitesten
rechts befindliche Register wird hier über ein EXOR-Gatter mit Schiebewerten verknüpft. Der
Wert des Schieberegisters 4 wird hier mit dem Schieberegister 1 EXOR-verknüpft und mit der
nächsten steigenden Flanke in das Register 3 übernommen.
†
LFSR: Linear Feedback Shift Register - also auf Deutsch: linear rückgekoppeltes Schieberegister
V 1.0.1 / 2009-04-29
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.2 Optimale Rückkopplung eines Schieberegisters
4
4 3 1
0111
1110
0
0101
1111
0 0 1
P=x4 + x3 + 1
1010
1011
1101
1001
1000
0011
0100
0110
0010
0001
1100
Abbildung 2: Sequenz eines 4-Bit Galois-LFSRs (linear Feedback Shift Registers)
Auch hier entsteht mit jedem Taktimpuls ein neues Bitmuster im Schieberegister. Erst nach 24
- 1 = 15 Taktimpulsen wiederholt sich die ursprüngliche Bitkombination (Pseudo-Zufallszahlen). Für längere Schieberegister mit geeigneter Rückkoppelung erhöht sich die Anzahl der
Bitkombinationen entsprechend (2n-1).
3.2 Optimale Rückkopplung eines Schieberegisters
Die Darstellung in diesem Abschnitt gilt sowohl für das Fibonacci- als auch für das GaloisLFSR.
Für die gewählte Struktur des LFSRs (Linear Feedback Shift Register - linear rückgekoppeltes
Schieberegister) mit maximaler Periodizität gibt es 2 mögliche Bitfolgesequenzen:
• eine Bitfolgesequenz der Länge 2n-1 (siehe Abb. 1),
• eine Bitfolgesequenz der Länge 1: sämtliche Bits sind ‚0‘.
Den Nullzustand muss man in jedem Fall vermeiden, wenn man ein LFSR mit maximaler Periodizität haben möchte. Bei der Realisierung mit Flipflops sollten damit nicht alle Flipsflops
den Reset-Zustand 0 haben.
Der Zustand des Schieberegisters (also das Bitmuster sämtlicher Register zum aktuellen Zeitpunkt) ist nicht als Pseudozufallszahl zu betrachten. Lediglich das Eingangsbit ist als Zufallsbit zu betrachten. In der Fibonacci-Realisierung wird das Bit von der ersten Position nämlich
einfach bis zur letzten Position des Schieberegisters propagiert. Kennt man also zum Zeitpunkt
t das in den Registern gespeicherte Bitmuster, so wird zum Zeitpunkt t+1 (also nach der nächsten steigenden Taktflanke) dieses Muster lediglich um eine Position weiter geschoben. Dabei
fällt der Wert des höchstwertigen Registers heraus und das niederwertigste Bit wird aus der
Modulo-2-Verknüpfung (EXOR) anderer Register gebildet.
Nun stellt sich die Frage welche Bits man per EXOR zurück koppeln muß, um ein LFSR mit
maximaler Periodizität zu erhalten. Dies kann man mathematisch berechnen (Z-Transformation) oder aus Tabellen entnehmen. Die Rückkoppelungen werden mit einem Rückkopplungspolynom beschrieben. Dies ist in Abbildung 3 für ein 16-Bit Fibonacci-LFSR und in
Abbildung 4 für ein 16-Bit Galois-LFSR mit einer Periodizität von 216-1=65535 beschrieben.
Die ‚1‘ im Polynom kennzeichnet beim Fibonacci-LFSR die Rückkopplung auf das 1.Bit und
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.0.1 / 2009-04-29
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Der Pseudo Random Number Generator (PRNG)
5
beim Galois-LFSR die Rückkopplung vom 1.Bit. Es ist zu beachten, dass die Numerierung der
Bits in den beiden LFSRs unterschiedlich ist.
1 11 13 14 16
1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
P=x16+x14+x13+x11+1
Abbildung 3: 16-Bit-Fibonacci-LFSR maximaler Periodizität und das zugehörige Rückkopplungspolynom P
16 14 13 11 1 0
0
0 1
1
0 0 0 1 0 0 0 1 0 0 0
P=x16+x14+x13+x11+1
Abbildung 4: 16-Bit-Galois-LFSR maximaler Periodizität und das zugehörige Rückkopplungspolynom P
In Tabelle 1 sind für mehrere LFSR-Längen (n) die Rückkoppelungspolynome angegeben, die
eine maximale Periodizität ergeben.
Rückkoppelungspolynom
Periodenlänge
2n − 1
n
4
x4 + x3 + 1
15
5
x5 + x3 + 1
31
6
x6 + x5 + 1
63
7
x7 + x6 + 1
127
8
x8 + x6 + x5 + x4 + 1
255
9
x9 + x5 + 1
511
10
x10 + x7 + 1
1023
Tabelle 1: Rückkoppelungspolynome, die ein LFSR maximaler Periodizität liefern
V 1.0.1 / 2009-04-29
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.2 Optimale Rückkopplung eines Schieberegisters
Rückkoppelungspolynom
6
Periodenlänge
2n − 1
n
11
x11 + x9 + 1
2047
12
x12 + x11 + x10 + x4 + 1
4095
13
x13 + x12 + x11 + x8 + 1
8191
14
x14 + x13 + x12 + x2 + 1
16383
15
x15 + x14 + 1
32767
16
x16 + x14 + x13 + x11 + 1
65535
17
x17 + x14 + 1
131071
18
x18 + x11 + 1
262143
19
x19 + x18 + x17 + x14 + 1
524287
Tabelle 1: Rückkoppelungspolynome, die ein LFSR maximaler Periodizität liefern
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.0.1 / 2009-04-29
7
4
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4 Beschreibung sequentieller Schaltungen in VHDL
Beschreibung sequentieller Schaltungen in VHDL
Im Gegensatz zu den bisher verwendeten kombinatorischen Schaltungen haben sequentielle
Schaltungen ein Gedächtnis (vergleiche auch Automaten). Das Herzstück dieser sequentiellen
Schaltungen sind speichernde Schaltungselemente. Als speichernde Schaltungselemente werden typischerweise taktflankengesteuerte Flipflops verwendet. Es stellt sich nun die Frage wie
man das Verhalten von Flipflops in VHDL beschreiben kann.
Flipflops werden im architecture-body in einem Prozess beschrieben. In Abbildung 5 ist ein DFlipflop mit asynchronem Reset beschrieben. In der Sensitivity-Liste ist das Taktsignal clk und
das Signal für den asynchronen Reset (rst_n) beschrieben. D.h., dass Änderungen am Eingang
d nicht zu einer Neubewertung vom Ausgangssignal q führt. Wenn das Signal rst_n ‚0‘ ist, so
wird der Ausgang q auf ‚0‘ gehalten. Sollte rst_n von ‚1‘ auf ‚0‘ wechseln so wird unabhängig
vom Takt der Ausgang unmittelbar auf ‚0‘ gesetzt. Ist rst_n=‘1‘ so wird bei jeder steigenden
Taktflanke der Eingang D übernommen (elsif clk‘event and clk=‘1‘ - also Signalwechsel an
clk und der neue Wert soll ‚1‘ sein). In dem Bereich zwischen diesem elsif und dem „end if“
wird hier nur d auf q zugewiesen. In diesem Bereich können auch komplexere Ausdrücke stehen. Bei Automaten könnte hier z.B. der Folgezustand kodiert werden. Außerdem können hier
auch mehrere Bits - wie z.B. Vektoren - zugewiesen werden. Beim PRNG kann hier nun die
Schiebefunktion und die Rückkopplung beschrieben werden.
Abbildung 5: Verhaltensbeschreibung eines taktflankengesteuerten D-Flipflops
V 1.0.1 / 2009-04-29
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.2 Optimale Rückkopplung eines Schieberegisters
8
Auf einzelne Bits eines Signals vom Typ std_ulogic_vector kann durch Angabe der Bit-Position oder des Bit-Bereichs zugegriffen werden. Dies soll durch folgendes Beispiel erklärt werden. Das Signal mysig sei hierbei vom Typ std_ulogic_vector(1 to 10).
mysequentialproc : process...
...
begin
...
elsif clk‘event and clk=‘1‘
mysig(3 to 8) <= mysig(1 to 6); -- schieben um 2 Bit-Positionen
mysig(2) <= mysig(3) xor mysig(2); -- xor-Verknüpfung des alten Werts vom mysig(2) und mysig(3)
end if;
end process mysequentialproc;
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.0.1 / 2009-04-29
9
5
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
5 Aufgabenstellung
Aufgabenstellung
Es soll ein PRNG in VHDL realisiert werden.
5.1 Vorbereitung (vor dem Praktikumstermin)
Die Antworten sind auf dem Ausdruck handschriftlich zu ergänzen.
1)
Wie lautet ein Polynom P1, das ein 5-Bit-LFSR mit maximaler Periodizität liefert?
2)
Skizzieren Sie die Struktur des Fibonacci- und Galois-LFSR, das dieses Polynom P1 verwendet.
3)
Skizzieren Sie die Struktur des Fibonacci- und Galois-LFSR, das das Polynom
P2=x5+x1+1 verwendet.
4)
Was passiert wenn Sie bei der Verwendung des Polynoms P1 mit der Bitfolgenkombination „00000“ starten?
V 1.0.1 / 2009-04-29
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
5.1 Vorbereitung (vor dem Praktikumstermin)
5)
10
Vervollständigen Sie in der folgenden Tabelle die Bitfolgenkombination für die Fibonacci- und Galois-LFSRs, die das Polynom P2 verwenden.
Fibonacci-LFSR
Nr.
Galois-LFSR
1
2
3
4
5
5
4
3
2
1
1
1
1
1
1
1
1
1
1
1
1
2
0
1
1
1
1
1
1
1
1
0
3
1
0
1
1
1
0
1
1
1
1
4
0
1
0
1
1
1
0
1
1
0
10
0
1
1
0
0
1
1
0
0
0
11
0
0
1
1
0
0
1
1
0
0
12
0
0
0
1
1
0
0
1
1
0
15
0
0
1
0
0
0
1
0
0
0
16
0
0
0
1
0
0
0
1
0
0
17
0
0
0
0
1
0
0
0
1
0
18
1
0
0
0
0
0
0
0
0
1
1
1
1
1
0
1
1
1
0
1
5
6
7
8
9
13
14
19
20
21
22
23
Tabelle 2: Bitfolge für 5-Bit Fibonacci- und Galois-LFSRs bei Verwendung des Polynoms P2
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.0.1 / 2009-04-29
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
5 Aufgabenstellung
11
6)
Ermitteln Sie eine weitere Bitfolge-Sequenz, die nicht in der vorherigen Aufgabe enthalten ist und nicht mit „00000“ beginnt. Tragen Sie diese Sequenz in die folgende Tabelle
ein.
Fibonacci-LFSR
Nr.
1
2
3
4
Galois-LFSR
5
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
Tabelle 3: weitere Bitfolge für 5-Bit Fibonacci- und Galois-LFSRs bei Verwendung des
Polynoms P2
7)
Folgender VHDL-Prozess soll das sequentielle Verhalten des PRNGs beschreiben. Ergänzen Sie den VHDL-Code an den durch Unterstreichung gekennzeichneten Stellen.
-- type
: sequential
-- inputs : clk_i, res_n_i
-- outputs: prng_reg
prng_p: process (___________, ___________)
begin -- process prng_p
if _____________ then
-- asynchronous reset (active low)
prng_reg <= ( others => '___' );
elsif ______________________________________ then
-- prng_reg <= ...
end if;
end process prng_p;
V 1.0.1 / 2009-04-29
-- rising clock edge
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
5.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung
12
5.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und
Erprobung
8)
Wählen Sie zunächst eine Schieberegisterlänge von 5 Bits.
8.a)
Editieren Sie die Dateien prng.vhd und prng_core.vhd! Versuchen Sie zunächst den
Aufbau des VHDL-Codes zu verstehen!
Hinweis: Über den generischen Parameter reg_width_g können Sie in der entity prng
die Schieberegisterbreite anpassen (Anmerkung: der generische Parameter
reg_width_g in der entity reg_core wird automatisch in der Instanziierung überschrieben).
8.b)
Passen Sie - falls nötig - zunächst in der Datei prng.vhd die Schieberegisterbreite an die
Aufgabenstellung an!
8.c)
Ergänzen Sie die architecture, die das Verhalten von prng.vhd beschreibt! Verwenden
Sie ein Rückkopplungspolynom, so dass ein LFSR mit maximaler Periodizität entsteht
(siehe Aufgabenvorbereitung Punkt 1)! Die Wahl des LFSR-Typs (Fibonacci oder
Galois) wird von der Praktikumsbetreuung für jede Gruppe festgelegt.
8.d)
Stellen Sie sicher, dass in der Top-Level-Architecture der Druckschalter 0 als Takt verwendet wird.
8.e)
Erproben Sie die VHDL-Implementierung auf dem DE2-Board! Überprüfen Sie die
Periodizität des LFSRs.
8.f)
Ändern Sie das Rückkopplungspolynom wie folgt:
- P=x5+x1+1 (vergleiche Versuchsvorbereitung Polynom P2)
- Überprüfen Sie die Periodizität und protokollieren Sie die Bitfolgen bzw. vergleichen
Sie die Sequenz mit Ihren Erwartungswerten aus der Aufgabenvorbereitung!
- Ändern Sie die den Reset-Wert des Schieberegisters, auf eine Bit-Kombination, die
Sie bei diesem Polynom nicht erreichen konnten und die nicht „00000“ ist! Überprüfen
Sie hier die Periodizität und protokollieren Sie die Bitfolgen bzw. vergleichen Sie die
Sequenz mit Ihren Erwartungswerten aus der Aufgabenvorbereitung!
9)
Ändern Sie den VHDL-Code wie folgt:
- Schieberegister mit 15 Flipflops (Rückkopplungspolynom ändern!)
- Verwendung eines auf dem DE2-Board generierten 27MHz Clock
9.a)
Implementieren Sie die Hardware auf das FPGA!
9.b)
Beobachten Sie das Verhalten mit dem Logikanalysator!
9.c)
Triggern Sie auf eine beliebige 15-Bit-Kombination! Welches ist das Vorgänger- und
das Nachfolger-Bitmuster?
Hinweise: Das Pin-Map-File muss die benötigten Pins enthalten!
5.3 Ergänzende Frage zur VHDL-Kodierung im Protokoll
10) Erklären Sie die Verwendung der generischen Parameter in der Entity und bei der Instanziierung (Stichworte Default-Werte und Überschreibung bei...)?
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.0.1 / 2009-04-29
13
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
5 Aufgabenstellung
5.4 Hinweise zum Protokoll
Folgende Punkte müssen im Protokoll enthalten sein:
• Dokumentation des Source-Codes
• Antworten zur Frage in Abschnitt 5.3
• Dokumentation des Logikanalysatorbilds
V 1.0.1 / 2009-04-29
FPGA-Einführung und Hardwareentwurf mit VHDL