Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

2. Woche: Timingmodelle Synthetisierbares VHDL Aufgaben

Ähnliche Präsentationen


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

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

2 Timingmodellierung

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

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

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

6 Synchrone Schaltungen
D Q Im Praktikum werden wir ausschließlich synchrone Schaltungen verwenden. In synchronen Schaltungen befindet sich in jeder Rückkopplung mindestens ein Flip-Flop. Zumindest innerhalb einer Teilschaltung verwenden alle Flip-Flops das selbe Taktsignal. Dieser Entwurfstil garantiert die Funktion der Schaltung, solange die maximale Signallaufzeit eingehalten wird. Glitches, Unsicherheitsintervalle, etc. müssen nicht beachtet werden.

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

8 D-Flip-Flops (DFF) CLK tcq D Q D Q D CLK Q
Die Änderung der Ausgänge erfolgt erst nach einer Verzögerung tcq nach dem Taktsignal. clock-to-out

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

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

11 Flip-Flops Wir verwenden nur D-Flip-Flops! Vergeßt:
Q Wir verwenden nur D-Flip-Flops! Vergeßt: Latches Master-Slave-Flip-Flops J-K-Flip-Flops Im FPGA gibt es fertige DFFs. Wie sie aufgebaut sind kann uns eigentlich egal sein. Sie sehen garantiert völlig anders aus, als Ihr im Grundstudium gelernt habt. TSPC, rückgekoppelter Inverter, ...

12 Leitungsverzögerungen
a1 o1 a2 & o2 & troute a1 o1 a2 o2 Auch Leiterbahnen führen zu Verzögerungen. Im FPGA sind diese i.d.R. größer als die Gatterlaufzeiten.

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

14 Leitungsverzögerungen
B A a C in D Q & b out d D Q Die Schaltung funktioniert nur, wenn das Signal rechtzeitig bei DFF C ankommt: tcycle ≥ tcq-B+troute-a+tpd-B+trout-b+tsetup-C Die maximale Taktfrequenz der Schaltung ist 1/tcycle Diese Timing-Analyse führt die Entwurfssoftware für uns durch.

15 Rückkopplungen t Sie funktioniert nur zuverlässig, wenn in jeder Rückkopplung ein DFF ist! Erlaubt: Verboten: + D Q +

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

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

18 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)

19 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 FPGA Express aussehen muß, damit bei der Synthese auch das herauskommt, was man geplant hatte Nützlich ist auch der Language Assistant im VHDL Editor Vielleicht erhaltet ihr auch in den Newsgroups comp.lang.vhdl und comp.arch.fpga Hilfe.

20 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.

21 IEEE.std_logic Die IEEE Bibliothek wird immer verwendet
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; Normalerweise sind 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. Um arithmetische Operationen auf std_logic_vector ausführen zu können, brauchen wir noch eine Bibliothek: use IEEE.std_logic_unsigned.all;

22 Parallele Zuweisungen
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.

23 library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED; D-Flip-Flops Zustandsspeicher werden mit D-Flip-Flops gebaut und das geht so: process(clk) if (rising_edge(clk)) then a <= b; end if; end process;

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

25 library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED; Sensitivitätsliste Die Sensitivitätsliste eines Prozesses wird von der Synthese 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;

26 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. Zum Glück verwenden wir im Praktikum einen Simulator, der die synthetisierten Netzlisten, und nicht VHDL simuliert.

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

28 If not rising_edge(clk)
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;

29 Keine asynchronen Rückkopplungen
library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED; Keine asynchronen Rückkopplungen 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

30 library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED; Zustandsreset Die bisher beschriebenen Flip-Flops haben nach einem Reset einen undefinierten Zustand. (In der Regel 0) Bei Pipelining oder Retiming DFFs 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;

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

32 Aufgaben 2. Woche Für alle Aufgaben gelten die folgenden Paramter:
Gatterlaufzeit: tpd = 0.5 ns Leitungsverzögerung: troute = 1.0 ns Flip-Flop Setup: tsetup = 0.8 ns Clock-To-Out: tcq = 1.2 ns

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

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

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

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

37 library IEEE; use IEEE.std_logic entity HEX2LED is port ( HEX: in ST LED: out S ); end HEX2LED; Aufgabe 2.4 Synthetisiert die Schaltung und simuliert sie mit dem Simulator. Beschreibt 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. Ihr könnt mir auch einen Screenshot per mail schicken. Ihr 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.


Herunterladen ppt "2. Woche: Timingmodelle Synthetisierbares VHDL Aufgaben"

Ähnliche Präsentationen


Google-Anzeigen