fpga praktikum ss2000 2. woche: timingmodelle synthetisierbares vhdl aufgaben
Post on 06-Apr-2016
221 Views
Preview:
TRANSCRIPT
FPGA Praktikum SS2000
2. Woche:TimingmodelleSynthetisierbares VHDLAufgaben
Timingmodellierung
Durchlaufverzögerunga
b& o
a
o
tpd
Logikgatter schalten erst nach einer gewissen Durchlauf-verzögerung tpd auf einen gültigen Wert
t
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
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
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
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
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
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
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
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
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
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
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
Rückkopplungen Sie funktioniert nur zuverlässig, wenn in jeder Rückkopplung
ein DFF ist! Erlaubt:
Verboten:
D Q+
+
t
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
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 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;
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;
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;
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 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;
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;
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;
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;
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 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;
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;
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
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
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
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;
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;
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;
top related