Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FPGA Praktikum WS2000/2001 3.Woche: FPGA Architektur Simulationsskripte Aufgaben.

Ähnliche Präsentationen


Präsentation zum Thema: "FPGA Praktikum WS2000/2001 3.Woche: FPGA Architektur Simulationsskripte Aufgaben."—  Präsentation transkript:

1 FPGA Praktikum WS2000/ Woche: FPGA Architektur Simulationsskripte Aufgaben

2 Architektur der Spartan-II Familie

3 Die Spartan-II Familie zEin Baustein der Spartan-II Familie wird auf der im Praktikum verwendeten Experimentierplatine verwendet. zDie Architektur ist in vielen Punkten sehr typisch für heutige FPGAs. z(fast) identisch: yXilinx Virtex, Virtex-E zähnlich: yActel ProASIC yAltera yAtmel 40K yQuicklogic Eclipse yXilinx XC4000, Spartan, Virtex-II

4 Elemente eines FPGAs zEin FPGA hat vier Hauptkomponenten: yVerdrahtung yLogik yI/O yKonfigurationsspeicher zHinzu kommen manchmal dedizierte Blöcke mit Spezialschaltungen: yRAM yMultiplizierer yProzessoren yPCI Interface zDer Konfigurationsspeicher ist für uns unsichtbar.

5 Struktur eines Spartan-II zMatrix von sogenannten Slices zumrandet von I/O Blöcken (IOBs)

6 Logik: Lookup Table (LUT) zDas Grundelement eines Logikblockes ist eine Lookuptable (LUT, Wertetabelle). zEin LUT ist ein Speicher in dem für jede Eingangskombination der Ausgabewert steht. zFür n Eingänge sind 2 n Einträge erforderlich. zEine Zahl vor der Abkürzung LUT bezeichnet in der Regel die Zahl der Eingänge. yZ.B. 4-LUT, n-LUT 3 x f(x) LUT

7 Größe der LUTs zLUTs sollten mindestens drei Eingänge haben, um Addierer bauen zu können: zAuch der häufig benötigte 2-zu-1 Multiplexer benötigt drei Eingänge LUT a b Carry_in Carry_out Sum

8 Größe der LUTs zAllerdings belegt die Logik nur einen kleinen Teil der Fläche des FPGAs (<1%) zDeshalb ist es Sinnvoll, die LUTs etwas größer zu machen, um die Schaltungstiefe kombinatorischer Schaltungen zu reduzieren. zAber auch nicht zu groß, da die Fläche der LUTs exponentiell wächst. y5-LUTs verwendet ausschließlich Lucent y4-LUTs dominieren den Markt y3-LUTs bei einigen Herstellern

9 LUTs bei Spartan-II zEin Spartan-II Slice enthält zwei 4-LUTs und einen Multiplexer (Mux) zMit dem Mux lassen sich die 4-LUTs z.B. zu einem 5-LUT zusammen schließen. LUT MUX

10 Flip-Flops zFlip-Flops sind sehr wichtige Schaltungselemente zFlip-Flops sind langsam, groß und unzuverlässig, wenn man sie in LUTs realisiert. zEin Spartan-II Slice enthält deshalb zwei D-Flip-Flops LUT DFF MUX

11 Addierer zAddierer sind sehr häufige Schaltungen. zIn der gezeigten CLB Architektur benötigt jedes Bit zwei 4-LUTs zElegante Lösung: 4-LUTs die sich in zwei 3-LUTs aufteilen lassen. zSchnellere Lösung: Spezialhardware für die Carry Chain

12 Carry Chain zSpartan-II enthält eine solche carry chain hinter den LUTs. zSie ist mit 50ps pro Bit erheblich schneller als die anderen Funktionen des FPGAs zDer 2-zu-1 Multiplexer ist in die Carry Logik integriert

13 Speicher zEin 4-LUT ist ein 16x1 ROM. zBei vielen FPGAs kann er auch als RAM konfiguriert werden. zSpartan-II Slice: yein Speicher 32x1 Bit yzwei Speicher 16x1 Bit yein RAM 16x1 mit gleichzeitigem Lesen und Schrieben von getrennten Addressen (Dual Port RAM)

14 Distributed RAM

15 So sieht ein Slice im Datenblatt aus

16 Verdrahtung zDie Verdrahtung macht 90% des FPGAs aus. zIn den meisten synthetisierten Schaltungen macht die Verdrahtung deutlich mehr als die Hälfte des delay aus. zFPGAs werden oft daran gemessen, wie gut sich die Logik ausnutzen läßt. zWichtiger wäre es, zu wissen, wie gut sich die Verdrahtung ausnutzen läßt. Das ist jedoch so gut wie nicht beschreibbar.

17

18

19 Die Daten des XC2S200-PQ208 zSlices:2352 z4-LUTs:4704 zVerteiltes RAM:max 9408 Bytes zBlockRAMs:14 à 4096 Bits = 7kBytes zLogik:ca Gatteräquivalente zFlip-Flops:5292 zI/O:145

20 Simulationsskripte

21 zDie Einzige Dokumentation zur Simulationsskriptsprache die ich finden konnte ist in der Onlinehilfe des Simulators: zEine Liste der Befehle ist im Scripteditor unter: „Simulation Makros Help“ zIm folgenden erläutere ich die wichtigsten Makros

22 Skript: Initial Settings zDie folgenden Zeilen werden für den Anfang der meisten Simulationsskripte sinnvoll sein: zdelete_signals restart stepsize 10 ns zDadurch werden alle Signale aus der Ansicht gelöscht, die Simulation auf den Zeitpunkt 0 gesetzt, alle Signalzuweisungen gelöscht und eine Sinnvolle Schrittweite für die Beschreibung von Wellenformen gesetzt.

23 Skript: Vector definitions zDem Simulator muß mitgeteilt werden, daß er Vektoren nicht als einzelne Signale darstellt, sondern zu einem mehrbittigen Wert zusammenfaßt. Dies geht mit dem „v“ Makro:  v result result[15:0]

24 Skript: Watch List zSignale und Vektoren, die im Waveformviewer angezeigt werden sollen, werden mit „watch“ ausgewählt  watch clk h_out zeichen zKommentarzeilen beginnen mit „|“  | Start der Testvektoren zWertzuweisungen erfolgen mit „assign“ zassign reset 1

25 Skript: Stimulus zPeriodische Signale werden mit „clock“ definiert  clock clk 0 1 zDabei wechseln die aufgelisteten Zustände in dem durch „stepsize“ definierten Zeitintervall zBeispiel mit zwei um 90° verschobenen Taktsignalen: zclock clk clock clk

26 Skript: Stimulus (Fortsetzung) zBeliebige, nicht periodische Wellenformen lassen sich mit „wfm“ beschreiben. Dabei wird jeweils einem Zeitpunkt ein Zustandswechsel zugeordnet:  @40ns=0 zDie Zeitpunkte können auch relativ angegeben werden: zwfm 20ns=1 20ns=0  Das ist nützlich für Wiederhohlungen: (10ns=0 10ns=1)*5 zAußer ns sind auch ps, us, ms und s möglich.

27 Skript: Vektorwerte zVektoren können Werte in verschiedenen Zahlenbasen zugewiesen werden. yBinär (\B), Octal (\O), Decimal (\D) and Hexadecimal (\H) yBeliebige Basis: \2 \3 \16 yStandard ist Binärdarstellung zBeispiele: ywfm ywfm ywfm ywfm

28 Skript: Simulation zUm die Simulation schließlich zu starten verwendet man das „sim“ Kommando zsim 500ns  Oder „cycle“ um für eine bestimmte Anzahl von Taktzyklen zu simulieren. Dabei wird der längste zuvor mit „clock“ definierte Taktzyklus verwendet. zcycle 1  „sim“ und „cycle“ sind auch eine alternative zu „wfm“ zassign operand 101 cycle assign operand 000 cycle

29 Aufgaben 3. Woche

30 Aufgabe 3.1 zFür einen Prozessor wird eine 16-Bit ALU benötigt. zDiese soll in Abhängigkeit vom Eingang „operation“ eine von fünf Operationen ausführen: yAddition ySubtraktion yAnd Not (Löschen von Bits) yOr(Setzen von Bits) yArithmetischer Rechtsschift (Teilung durch zwei, mit Vorzeichen) zStartet ein neues Projekt und schreibt eine ALU die zu der Deklaration auf der nächsten Folie kompatibel ist. zFür die undefinierten Werte von operation solltet Ihr dem Resultat den Wert „ “ zuweisen (Don‘t care). Dann kann die Synthese am besten optimieren.  „ use ieee.std_logic_unsigned.all “ ist für die ALU erforderlich.

31 Aufgabe 3.1  -- A simple arithmetic, logic unit -- operation / result / in_a + in_b / in_a - in_b / in_a &~ in_b / in_a | in_b / in_a / 2 component ALU16 port ( in_a: in STD_LOGIC_VECTOR(15 downto 0); in_b: in STD_LOGIC_VECTOR(15 downto 0); operation: in STD_LOGIC_VECTOR(2 downto 0); result: out STD_LOGIC_VECTOR(15 downto 0)); end component;

32 Aufgabe 3.2 zDer Prozessor braucht außerdem einen Programzähler mit Verzweigungsmöglichkeit. zDer Programmzähler zählt normalerweise in jedem Takt eins weiter. zWenn der Eingang „stop“ gleich ‘1‘ ist, zählt er nicht weiter zWenn der Eingang „jump“ gleich ‘1‘ ist, wird der Programzähler auf den Wert des Eingangs „jump_target“ gesetzt. zBaut eine PCU Entity die mit der Deklaration auf der folgenden Folie kompatibel ist. zDie Entity soll Teil des selben Projektes sein. Sie kann in der selben Datei stehen, oder aber in einer separaten Datei.  „ use ieee.std_logic_unsigned.all “ ist auch hier erforderlich.

33 Aufgabe 3.2 z-- The program counter unit -- usually the PC output is incremented by one on -- every rising edge of clk. -- if stop='1' the PC is not incremented -- if jump='1' the PC is set to the value of the -- jump_target input. component PCU port ( jump_target: in STD_LOGIC_VECTOR(15 downto 0); jump: in STD_LOGIC; stop: in STD_LOGIC; clk: in STD_LOGIC; pc: out STD_LOGIC_VECTOR(15 downto 0)); end component;

34 Aufgabe 3.3 zAufgabe 3.2: Implementierung der PCU yIhr habt eine Schaltung entworfen, synthetisiert und simuliert. Jetzt soll sie auf die Zieltechnologie abgebildet werden. yWählt im Project Manager sicherheitshalber den Menüpunkt „Project->Clear Implementation Data“ und bestätigt. Dies löscht die bisherigen Syntheseergebnisse.

35 Aufgabe 3.3 zWählt PCU als oberstes Hierarchielement für euren Chip (Top Level) zIm Beispiel befinden sich beide Entities in der selben VHDL Datei

36 Aufgabe 3.3 zWählt den richtigen FPGA zFamily: Spartan2 zDevice: 2S200PQ208 zSpeed: -5 zKlickt auf „Run“ zDer Schaltung wird jetzt synthetisiert. Es sollten nur Warnungen, keine Fehler erscheinen

37 Aufgabe 3.3 zDrückt auf den Knopf „Implementation“ zDrückt auf „Run“ zFertig.

38 Aufgabe 3.4 zDer Map Report yDer zweite Schritt des automatisch ausgeführten Implementierungs Toolflows ist die Technologieabbildung. (Map) ySie bildet die von der Synthese generierte Netzliste auf die Bauteile des FPGAs ab. Die Ergebnissen stehen im Map Report. yZum öffnen des Reports geht klickt Ihr auf den „Reports“ Reiter und öffnet den Ordner „Implementation Report Files“. yDoppelklick auf den „Map Report“ öffnet diesen.

39 Aufgabe 3.4 zDer Map Report ist sehr nützlich um: xDie Qualität des Ergebnisses zu beurteilen xMögliche Fehler früh zu erkennen ySchaut euch das Design Summary an: xGibt es Flip-Flops? xWieviele 4-LUTs wurden verwendet? xWieviele IO Blöcke? xStimme diese Ergebnisse mit euren Erwartungen überein? xWas ist der „equivalent gate count“? xGibt es Fehler in Abschnitt 1? xSind die Warnungen in Abschnitt 2 vertretbar? xWurde in Abschnitt 5 unerwartet Logik entfernt? ySchreibt die Antworten an

40 Aufgabe 3.5 zTiming Analyse yDie Xilinx Software analysiert die maximale Taktfrequenz des Designs. Wie hoch ist diese? (Steht im „Post Layout Timing Report“ und im „Implementation Log File“ yDie Software hat außerdem detaillierte informationen über das Timing der Einzelteile der Schaltung generiert. Dadurch läßt sich jetzt eine Timingsimulation durchführen. yStartet den Timingsimulator (Linke Hälfte des „Verification“ Knopfes) ySimuliert ein paar Takte. Die Signale ändern sich jetzt teilweise erst 10ns nach der steigenden Taktflanke.

41 Aufgabe 3.6 zFPGA Editor yUm einen Eindruck davon zu gewinnen, was die Foundation Software mit euren Design angestellt hat, startet den FPGA Editor. (Im Menu Tools->Implementation->FPGA Editor) yIhr seht ein Layout des Chips, in dem Ihr herumscrollen und Zoomen könnt. yMit diesen Knöpfen könnt Ihr verschiedene Teile des Layouts ein- und ausblenden: yBenutzte Slices und IOBs könnt Ihr euch per Doppelklick genauer anschauen.

42 Aufgabe 3.7 zIn den Tipps und Tricks zu dieser Woche findet Ihr die restlichen Dateien, die für den Prozessor benötigt werden. zKopiert sie in das Projektverzeichnis. zSynthetisiert mit „maincpu“ als Top Level. zWie hoch ist die maximale Taktfrequenz? zWieviele 4-Luts, Flip-Flops und BlockRAMs werden verwendet? zDas RAM des Prozessors enthält bereits ein kleines Programm. Simuliert 40 Takte. Was ist der höchste Wert, den der Programmzähler annimmt?


Herunterladen ppt "FPGA Praktikum WS2000/2001 3.Woche: FPGA Architektur Simulationsskripte Aufgaben."

Ähnliche Präsentationen


Google-Anzeigen