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

FPGA Praktikum SS2000 2. Woche: Timingmodelle Synthetisierbares VHDL Aufgaben

Embed Size (px)

Citation preview

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

FPGA Praktikum SS2000

2. Woche:TimingmodelleSynthetisierbares VHDLAufgaben

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

Timingmodellierung

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

Durchlaufverzögerunga

b& o

a

o

tpd

Logikgatter schalten erst nach einer gewissen Durchlauf-verzögerung tpd auf einen gültigen Wert

t

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

Durchlaufverzögerung

&a

bo

tpd

Logikgatter schalten erst nach einer gewissen Durchlauf-verzögerung tpd auf einen gültigen Wert

Der Ausgang kann sich auch schon früher ändern

t0

a

o

t

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

Durchlaufverzögerung

&a

bo

tpd

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

a

o

t

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

Synchrone Schaltungen 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.

D Q

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

D-Flip-Flops (DFF)

Nur bei einer steigenden Flanke von CLK werden die Eingangsdaten an die Ausgänge übernommen.

if rising_edge(clk) thenq <= d;

end if;

D Q

D

CLK

CLK

Q

D Q

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

D-Flip-Flops (DFF)

Die Änderung der Ausgänge erfolgt erst nach einer Verzögerung tcq nach dem Taktsignal.

clock-to-out

D Q

D

tcqCLK

CLK

Q

D Q

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

D-Flip-Flops (DFF)

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.

D Q

Dtsetup

CLK

CLK

Q

D Q

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

D-Flip-Flops (DFF)

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

D Q

D

CLK

CLK

Q

thold

D Q

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

Flip-Flops 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, ...

D Q

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

Leitungsverzögerungen

Auch Leiterbahnen führen zu Verzögerungen. Im FPGA sind diese i.d.R. größer als die Gatterlaufzeiten.

&o1a1

&o2

a2

a1

troute

o1

a2

o2

t

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

Leitungsverzögerungen

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) thena <= in;out <= a and d;

end if; Nicht vergessen: Alle „<=“ Zuweisungen laufen gleichzeitig.

& baD QD Q

A BC

din out

t

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

Leitungsverzögerungen

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.

& baD QD Q

A BC

din out

t

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

Rückkopplungen Sie funktioniert nur zuverlässig, wenn in jeder Rückkopplung

ein DFF ist! Erlaubt:

Verboten:

D Q+

+

t

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

Kritischer Pfad

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.

& &o2

&

t

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

Synthetisierbares VHDL

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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;

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

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.

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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;

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

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;

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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;

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

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;

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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.

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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;

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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.

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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;

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

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;

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

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

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

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;

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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

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

Aufgabe 2.1

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 email

& baD QC

din

& c D QD

BAout

t

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

Aufgabe 2.2

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 email

& baD QC

din

& c D QD

BAout

D Qt

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

Aufgabe 2.3 Verwendet den VHDL Wizard, um eine Schaltung

mit folgendem Interface zu bauen:

clk

ina (7 downto 0)

inb (7 downto 0)

enableresetcommand (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;

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

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 email ab.

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;

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

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.

library IEEE;use IEEE.std_logic

entity HEX2LED is port ( HEX: in ST LED: out S );end HEX2LED;