Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FPGA Praktikum SS2000 2. Woche: Timingmodelle Synthetisierbares VHDL Aufgaben.

Ähnliche Präsentationen


Präsentation zum Thema: "FPGA Praktikum SS2000 2. Woche: Timingmodelle Synthetisierbares VHDL Aufgaben."—  Präsentation transkript:

1 FPGA Praktikum SS Woche: Timingmodelle Synthetisierbares VHDL Aufgaben

2 Timingmodellierung

3 Durchlaufverzögerung a b & o a o t pd zLogikgatter schalten erst nach einer gewissen Durchlauf- verzögerung t pd auf einen gültigen Wert t

4 Durchlaufverzögerung & a b o t pd zLogikgatter schalten erst nach einer gewissen Durchlauf- verzögerung t pd auf einen gültigen Wert zDer Ausgang kann sich auch schon früher ändern t0t0 a o t

5 Durchlaufverzögerung & a b o t pd zLogikgatter schalten erst nach einer gewissen Durchlauf- verzögerung t pd auf einen gültigen Wert zAusgang kann sich auch schon früher ändern zAuch Glitches sind möglich a o t

6 Synchrone Schaltungen zIm Praktikum werden wir ausschließlich synchrone Schaltungen verwenden. zIn synchronen Schaltungen befindet sich in jeder Rückkopplung mindestens ein Flip-Flop. zZumindest innerhalb einer Teilschaltung verwenden alle Flip-Flops das selbe Taktsignal. zDieser Entwurfstil garantiert die Funktion der Schaltung, solange die maximale Signallaufzeit eingehalten wird. zGlitches, Unsicherheitsintervalle, etc. müssen nicht beachtet werden. DQ

7 D-Flip-Flops (DFF) zNur bei einer steigenden Flanke von CLK werden die Eingangsdaten an die Ausgänge übernommen. zif rising_edge(clk) then q <= d; end if; DQ D CLK Q DQ

8 D-Flip-Flops (DFF) zDie Änderung der Ausgänge erfolgt erst nach einer Verzögerung t cq nach dem Taktsignal. zclock-to-out DQ D t cq CLK Q DQ

9 D-Flip-Flops (DFF) zDas Eingangssignal muß bereits kurz vor der Taktflanke gültig sein. zDiese Setupzeit wirkt sich wie eine Gatterlaufzeit aus und kann leicht berücksichtigt werden. DQ D t setup CLK Q DQ

10 D-Flip-Flops (DFF) zDas Signal muß auch evtl. nach der Taktflanke eine Zeit unverändert stabil bleiben. zDiese Haltezeit kann zu vielen Komplikationen führen. zDeshalb werden DFFs in der Regel so gebaut, daß t hold =0 yWird erreicht durch Verzögerung des Taktsignals im DFF DQ D CLK Q t hold DQ

11 Flip-Flops zWir verwenden nur D-Flip-Flops! zVergeßt: yLatches yMaster-Slave-Flip-Flops yJ-K-Flip-Flops zIm FPGA gibt es fertige DFFs. yWie sie aufgebaut sind kann uns eigentlich egal sein. ySie sehen garantiert völlig anders aus, als Ihr im Grundstudium gelernt habt. xTSPC, rückgekoppelter Inverter,... DQ

12 Leitungsverzögerungen zAuch Leiterbahnen führen zu Verzögerungen. zIm FPGA sind diese i.d.R. größer als die Gatterlaufzeiten. & o1o1 a1a1 & o2o2 a2a2 a1a1 t route o1o1 a2a2 o2o2 t

13 Leitungsverzögerungen zSo sieht die typische synchrone Schaltung aus: yDFF - Logik - DFF yAlle Flip-Flops verwenden das selbe Taktsignal zWenn DFF A bei einer Taktflanke sein Ausgangssignal ändert, kann DFF C das Resultat bei der nächsten Taktflanke übernehmen. zif rising_edge (clk) then a <= in; out <= a and d; end if; zNicht vergessen: Alle „<=“ Zuweisungen laufen gleichzeitig. & b a DQ DQ A B C d in out t

14 Leitungsverzögerungen zDie Schaltung funktioniert nur, wenn das Signal rechtzeitig bei DFF C ankommt: zt cycle ≥ t cq-B +t route-a +t pd-B +t rout-b +t setup-C zDie maximale Taktfrequenz der Schaltung ist 1/t cycle zDiese Timing-Analyse führt die Entwurfssoftware für uns durch. & b a DQ DQ A B C d in out t

15 Rückkopplungen zSie funktioniert nur zuverlässig, wenn in jeder Rückkopplung ein DFF ist! zErlaubt: zVerboten: DQ + + t

16 Kritischer Pfad zWenn es mehrere Pfade durch eine Schaltung gibt, so bestimmt der Langsamste tatsächlich schaltende Pfad die Schaltungsgeschwindigkeit. (kritischer Pfad) zDie Einfache Bildung des Maximums über alle Pfade der Schaltung nennt man statische Timinganalyse. zDiese Analyse ist pessimistisch, da es Pfade gibt,die nie schalten. & & o2o2 & t

17 Synthetisierbares VHDL library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

18 Synthetisierbares VHDL zManche VHDL Konstrukte können die heutigen Synthesewerkzeuge nicht in Hardware Umwandeln. Sie dienen nur der Entwicklung von Verhaltensmodellen. zDa wir VHDL verwenden wollen, um konkrete Schaltungen zu generieren, müssen wir uns mit bestimmten Beschränkungen abfinden. zEinige 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;

19 Quellen zIhr solltet euch den in der Linkliste aufgeführten „VHDL Synthesis Guide“ anschauenLinkliste zEr enthält detaillierte Informationen darüber, wie VHDL für FPGA Express aussehen muß, damit bei der Synthese auch das herauskommt, was man geplant hatte zNützlich ist auch der Language Assistant im VHDL Editor zVielleicht erhaltet ihr auch in den Newsgroups comp.lang.vhdl und comp.arch.fpga Hilfe. library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

20 VHDL Praxis zIch gehe davon aus, daß Ihr im „Grundpraktikum Technische Informatik“ bereits VHDL benutzt habt. zDie 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;

21 IEEE.std_logic  Die IEEE Bibliothek wird immer verwendet ylibrary IEEE; use IEEE.std_logic_1164.all; zNormalerweise sind Signale sind vom Typ std_logic ySIGNAL xyz: std_logic := '1'; zVariablen werden nur in Ausnahmefällen verwendet. Bei Signalen ist es leichter einen Zusammenhang zwischen VHDL und Syntheseergebnis herzustellen.  Um arithmetische Operationen auf std_logic_vector ausführen zu können, brauchen wir noch eine Bibliothek: yuse IEEE.std_logic_unsigned.all; library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

22 Parallele Zuweisungen zSignalzuweisungen 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; za 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;

23 D-Flip-Flops zZustandsspeicher 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;

24 Ungewünschte Latches zDieser Code erzeugt ein Latch, das evtl. nicht beabsichtigt war: yif a=‘1‘ then result <= b; end if; zWenn a=‘1‘ ist wird result ein Wert zugewiesen, ansonsten behält result seinen alten Wert. zSignalen muß außerhalb von DFF Blöcken i.d.R. immer ein Wert zugewiesen werden. „ELSE“ ist ein gutes Schlüsselwort dazu. library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

25 Sensitivitätsliste zDie Sensitivitätsliste eines Prozesses wird von der Synthese ignoriert. zDer 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;

26 Sensitivitätsliste zInsbesonder kann man die Sensitivitätsliste nicht benutzen, um Funktionalität zu beschreiben. zDer folgende Prozess generiert kein Flip-Flop yprocess(clk) a <= b; end process; zEr verhält sich jedoch in einem VHDL Simulator eventuell wie ein Flip-Flop. zZum Glück verwenden wir im Praktikum einen Simulator, der die synthetisierten Netzlisten, und nicht VHDL simuliert. library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

27 DFF Enable  Synopsis versteht keine if Anweisungen die sowohl von einer Flanke als auch von einem Signalpegel abhängen. zDas folgende Konstrukt ist unzulässig: yif (rising_edge(clk) and enable=‘1‘)then a <= b; end if; zEin 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;

28 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;

29 Keine asynchronen Rückkopplungen library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED; zAsynchrone Rückkopplungen werden zwar korrekt synthetisiert, machen aber nur Ärger. yRace conditions yUngenaue Timinganalyse y.... zDeshalb sollten ausschließlich synchrone Schaltungen verwendet werden. yIn jeder Rückkopplung muß mindestens ein Flip-Flop sein yMöglichst nur ein globaler Takt

30 Zustandsreset zDie bisher beschriebenen Flip-Flops haben nach einem Reset einen undefinierten Zustand. (In der Regel 0) zBei Pipelining oder Retiming DFFs spielt das keine Rolle zBei endlichen Automaten ist es jedoch wichtig, daß sie nach dem Reset im Startzustand sind. Am einfachsten verwendet man dazu ein explizites Reset Signal: zif (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;

31 Teilfelder, Verschiebungen zMan kann komplette Vektoren zuweisen za <= b; zOder Teilvektoren za(5 downto 3) <= b(6 downto 4); zAuch verdreht za(5 downto 3) <= b(4 to 6); zOder aus mehreren Teilen (Konkatenationsoperator &) za(5 downto 2) <= b(4 to 5) & b(5 downto 4); zDann geht eine Multiplikation mit 2 so za(7 downto 0) <= b(6 downto 0) & “0“; library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

32 Aufgaben 2. Woche zFür alle Aufgaben gelten die folgenden Paramter: yGatterlaufzeit: t pd = 0.5 ns yLeitungsverzögerung:t route = 1.0 ns yFlip-Flop Setup:t setup = 0.8 ns yClock-To-Out:t cq = 1.2 ns

33 Aufgabe 2.1 zWas ist die minimale Taktperiode dieser Schaltung? zWie oft kann diese Schaltung neue Werte am Eingang annehmen? zWie lange braucht ein Signal mindestens von in nach out? zBeantwortet diese Fragen per & b a DQ C d in & c DQ D B A out t

34 Aufgabe 2.2 zAn Signal b wird ein zusätzliches DFF eingefügt. zWas ist die minimale Taktperiode dieser Schaltung? zWie oft kann diese Schaltung neue Werte am Eingang annehmen? zWie lange braucht ein Signal mindestens von in nach out? zBeantwortet diese Fragen per & b a DQ C d in & c DQ D B A out DQ t

35 Aufgabe 2.3 zVerwendet den VHDL Wizard, um eine Schaltung mit folgendem Interface zu bauen: clk ina (7 downto 0) inb (7 downto 0) enable reset command (1 downto 0) aus (7 downto 0) library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

36 Aufgabe 2.3 zDie Funktion der Schaltung soll wie folgt sein: zSolange reset=‘1‘ ist, wird der Ausgang asynchron auf 0 gesetzt. zAbhängig von command werden verschiedene Verknüpfungen der Eingänge berechnet: zcommand = “00“: ina | inb (ODER-Verknüpfung) zcommand = “01“: ina & inb (UND-Verknüpfung) zcommand = “10“: ina >> 1 (Rechtsverschiebung, geteilt durch 2) zcommand = “11“: ina << 1 (Linksverschiebung, mal 2) zWenn enable=‘1‘ ist wird das Ergebnis mit der Steigenden Flanke an den Ausgang übernommen. Sonst wird der alte Ausgangswert beibehalten. zGebt den VHDL Code per ab. library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;

37 Aufgabe 2.4 zSynthetisiert die Schaltung und simuliert sie mit dem Simulator. zBeschreibt mit welchen Eingangssignalfolgen (Stimulus) ihr die Schaltung simuliert habt, was ihr dabei an den Ausgängen gesehen habt, und wieso Ihr glaubt, daß die Schaltung damit ausreichend getestet ist. zIhr könnt mir auch einen Screenshot per mail schicken. zIhr könnt den Stimulus von Hand steuern, wie in der Quickstart Presentation erklärt, oder Ihr könnt euch in der Onlinehilfe des Simulator in die Simulationsskripte einlesen, die ich nächste Woche erklären werde. library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED;


Herunterladen ppt "FPGA Praktikum SS2000 2. Woche: Timingmodelle Synthetisierbares VHDL Aufgaben."

Ähnliche Präsentationen


Google-Anzeigen