FPGA Praktikum WS2000/2001
1.Woche:OrganisationSynthetisierbares VHDL
Gliederung
1. Organisation 2. Die Xilinx Foundation Software 3. Synthetisierbares VHDL 4. Aufgaben für die erste Woche
1. Organisation des Praktikums
Adressen
Kolja Sulimma [email protected] Raum 309 798-23359
Till Jahnke [email protected] 798-24275
Homepage http://www.em.informatik.uni-frankfurt.de/~prak/
Das Praktikum
Zuordnung: 4 SWS PT3 (P5, P6)
Treffen:Mittwochs, 14:00 c.t.Raum 308Georg-Voigt-Straße 16
Schein: Semesterprojekt
Ablauf
Acht wöchentliche Aufgaben Dabei wird Schritt für Schritt ein Computerspiel mit
VGA-Grafik, Tastatursteuerung und Sound gebaut.
Danach acht Wochen Arbeit an einem Semesterprojekt
Kurzvortrag über das Projekt
Inhalt
Wir fangen erst mit ein paar Trockenübungen und Vorträgen an und werden dann im Laufe der Zeit immer mehr mit der Hardware spielen. Eigenschaften von FPGAs Wie entwickelt man effiziente Schaltungen für FPGAs? Wie kriege ich meine perfekt simulierte Schaltung tatsächlich
zum laufen? Wie steuere ich echte Hardware an?
Monitor? Tastatur? Lautsprecher? Fernbedienung? Glasfaserlink?
Arbeitsbedingungen
Zwei reservierte Praktikumsrechner stehen im Diplomandenraum der Entwurfsmethodik Mars und Twix
Acht weitere Rechner in den Fischerräumen Kirke, Kreon, ...
Ihr könnt die Software mit nach Hause nehmen Anforderungen: Pentium 166 mit 64 MB RAM
Es gibt nur sechs Experimentierplatinen
Arbeitsbedingungen
Till wird zu festen Zeiten im Diplomandenraum anwesend sein. Vorläufig mittwochs nach dem Treffen.
Sonst: Fragen per email an Till Die Aufgaben werden Mittwochs gestellt. Sie müssen spätestens am folgenden Dienstag
abgegeben werden. per email an [email protected]
Teamarbeit
Da es zu wenige Experimentierplatinen gibt müßt ihr ab der 4. Woche in Teams arbeiten
Einigt euch bitte frühzeitig, wie ihr das organisieren wollt
2. Die Xilinx Foundation Software
Xilinx Foundation
Die Xilinx Foundation Software erfüllt für uns die folgenden Aufgaben: VHDL Editor Synthese Simulation Technologieabbildung Timinganalyse Erstellung des Konfigurationsbitstreams
Xilinx Foundation
Auf der Praktikumshomepage findet ihr eine Anleitung für die Installation der Software.
Zu diesem Zweck bekommt ihr alle eine Installations CD. Eine Update CD folgt später.
Als Aufgabe für die erste Woche sollt Ihr euch mit dieser Software vertraut machen, und sicher stellen, daß die Software einwandfrei funktioniert.
3. Synthetisierbares VHDL
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
Synthetisierbares VHDL
Manche VHDL Konstrukte können die heutigen Synthesewerkzeuge nicht in Hardware Umwandeln. Sie dienen nur der Entwicklung von Verhaltensmodellen.
Da wir VHDL verwenden wollen, um konkrete Schaltungen zu generieren, müssen wir uns mit bestimmten Beschränkungen abfinden.
Einige dieser Einschränkungen sind allgemein gültig, andere sind spezifisch für das von uns verwendete Tool. (Synopsys FPGA Express)
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
Quellen
Ihr solltet euch den in der Linkliste aufgeführten „VHDL Synthesis Guide“ anschauen
Er enthält detaillierte Informationen darüber, wie VHDL für Foundation aussehen muß, damit bei der Synthese auch das herauskommt, was man geplant hatte
Nützlich ist auch der Language Assistant im VHDL Editor
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
VHDL Praxis
Ich gehe davon aus, daß Ihr im „Grundpraktikum Technische Informatik“ bereits VHDL benutzt habt.
Die folgenden Folien erklären die wichtigsten Punkte, die beim Entwickeln von VHDL für Synopsys FPGA Express beachtet werden müssen.
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
IEEE.std_logic
Die IEEE Bibliothek wird immer verwendet library IEEE;use IEEE.std_logic_1164.all;
Alle Signale sind vom Typ std_logic SIGNAL xyz: std_logic := '1';
Variablen werden nur in Ausnahmefällen verwendet. Bei Signalen ist es leichter einen Zusammenhang zwischen VHDL und Syntheseergebnis herzustellen.
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
Parallele Zuweisungen
Signalzuweisungen verhalten sich anders als Variablen in einem Programm.
Was macht der folgende Prozess?process(clk) if (rising_edge(clk)) then a <= b; b <= a; end if;end process;
a und b werden vertauscht, da Signalzuweisungen infinitesimal verzögert ausgeführt werden.
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
D-Flip-Flops
Vergeßt Latches, JK-Flips, etc. Zustandsspeicher werden mit D-Flip-Flops gebaut
und das geht so: process(clk) if (rising_edge(clk)) then a <= b; end if;end process;
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
Sensitivitätsliste
Die Sensitivitätsliste wird ignoriert. Der folgende Prozess liefert zwar eine
Fehlermeldung oder Warnung, funktioniert aber einwandfrei process if (rising_edge(clk)) then a <= b; end if;end process;
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
Sensitivitätsliste
Insbesonder kann man die Sensitivitätsliste nicht benutzen, um Funktionalität zu beschreiben.
Der folgende Prozess generiert kein Flip-Flop process(clk) a <= b;end process;
Er verhält sich jedoch in einem VHDL Simulator eventuell wie ein Flip-Flop.
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
DFF Enable
Synopsis versteht keine if Anweisungen, die sowohl von einer Flanke als auch von einem Signalpegel abhängen.
Das folgende Konstrukt ist unzulässig: if (rising_edge(clk) and enable=‘1‘)then a <= b;end if;
Ein Flip-Flop mit Enable sieht stattdessen so aus if (rising_edge(clk)) then if (enable=‘1‘) then a <= b; end if;end if;
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
If not rising_edge(clk) Schreibt man if rising_edge(CLK) ... dann ist ein zugehöriges else
ungültig, da die Synthese keine Schaltung erzeugen kann, die ein Signal immer zuweist, außer bei der steigenden Flanke.
Die Synthese akzeptiert das else auch dann nicht, wenn danach statements kommen, die die Synthese ermöglichen würden, wie z.B. im folgenden Beispiel: if rising_edge(CLK) then
a<=b;else if falling_edge(CLK) then a<= c;end if;
Statt dessen kann man das else einfach weglassen: if rising_edge(CLK) then
a<=b;end if;if falling_edge(CLK) then a<=c;end if;
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
Keine asynchronen Rückkopplungen
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
Asynchrone Rückkopplungen werden zwar korrekt synthetisiert, machen aber nur Ärger. Race conditions Ungenaue Timinganalyse ....
Deshalb sollten ausschließlich synchrone Schaltungen verwendet werden. In jeder Rückkopplung muß mindestens ein Flip-Flop
sein Möglichst nur ein globaler Takt
Zustandsreset
Die bisher beschriebenen Flip-Flops haben nach einem Reset einen undefinierten Zustand. (In der Regel 0)
Bei Pipelining oder Retiming Flip-Flops spielt das keine Rolle
Bei endlichen Automaten ist es jedoch wichtig, daß sie nach dem Reset im Startzustand sind. Am einfachsten verwendet man dazu ein explizites Reset Signal:
if (reset=‘1‘) then a <= ‘1‘;else if (rising_edge(clk)) then a <= b;end if;
library IEEE;use IEEE.std_logic
entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;
4. Aufgaben
Aufgabe 1.1: Accounts
Logt euch auf einem Praktikumsrechner mit eurem neuen Account ein
Paßwort: frosch Ändert das Paßwort und merkt es euch
Aufgabe 1.2: Anmeldung
Schickt eine Mail an [email protected] Vor- und Nachname Geburtsdatum Matrikelnummer Emailadresse Praktikumsaccount
Aufgabe 1.3: Software
Arbeitet die „Multimedia QuickStart Presentation“ durch Start->Programme->Xilinx Foundation Series 3.1i-> Die Informationen über den Schaltplaneditor könnt Ihr
ignorieren Verwendet XC4010XL-PQ84 Chips anstelle der im
Beispiel verwendeten Spartan XCS05
Wer seinen eigenen Rechner benutzen will sollte das Tutorial auf diesem durchgehen
fertig
Noch etwas?Fragen?