Einführung in Eingebettete Systeme - react.uni-saarland.de fileProzessaktivierungsphase -- Zweiter...

34
Einführung in Eingebettete Systeme Vorlesung 9 Bernd Finkbeiner 10/17/2014 [email protected] Prof. Bernd Finkbeiner, Ph.D. [email protected] 1

Transcript of Einführung in Eingebettete Systeme - react.uni-saarland.de fileProzessaktivierungsphase -- Zweiter...

Einführung in

Eingebettete Systeme

Vorlesung 9 Bernd Finkbeiner 10/17/2014 [email protected]

Prof. Bernd Finkbeiner, Ph.D. [email protected]

1

Letzte Woche: VHDL Simulation

Initialisierung

Ende der Simulation

Zuweisung neuer Signalwerte

Aktualisierungder Zeit

Ausführungvon Prozessen

Reaktivierungvon Prozessen

2

Signalzuweisungsphase – Erster Teil eines Schritts! Jeder Simulationszyklus beginnt damit, dass die Zeit auf

den nächsten Zeitpunkt gestellt wird, an dem Änderungen durchgeführt werden müssen:

! tcurr = tnext ! tnext wurde am Ende der Intitialisierung (oder am Ende

des letzten Zyklus) gesetzt. Es wird geprüft, ob das Ende der Simulation, time’high, erreicht wurde.

! Für alle (s, v, tcurr) in der Transaktionsliste: ! Entferne (s, v, tcurr) von der Transaktionsliste. ! s wird auf Wert v gesetzt.

! Für alle Prozesse pi die auf Signal s warten: ! (pi, tcurr) wird in die Prozessaktivierungsliste eingetragen.

! Analog, falls sich der Wert eines „wait until“-Ausdrucks ändert.

3

Prozessaktivierungsphase -- Zweiter Teil eines Schritts

! Alle Prozesse pi mit Einträgen (pi, tcurr) in der Prozessaktivierungsliste werden reaktiviert.

! Alle aktivierten Prozesse werden „parallel“ (genauer: in beliebiger Ordnung) ausgeführt.

! Signalzuweisungen ! werden in Transaktionsliste gespeichert (nicht sofort ausgeführt!). ! Beispiele:

• s <= a and b; – Sei v die Konjunktion aus dem aktuellen Wert von a und dem

aktuellen Wert von b. – Füge (s, v, tcurr) in die Transaktionsliste ein.

• s <= ´1´ after 10 ns; – Füge (s, ´1´, tcurr + 10 ns) in die Transaktionsliste ein.

! Prozesse werden solange ausgeführt, bis ein „wait“ Befehl erreicht wird.

! Falls pi an einem „wait for“-Befehl hält, dann wird die Prozessaktivierungsliste erweitert: ! Beispiel:

• pi hält bei „wait for 20 ns;“ an • (pi, tcurr + 20 ns) wird in die Prozessaktivierungsliste eingetragen 4

Prozessaktivierungsphase -- Zweiter Teil eines Schritts

! Falls ein Prozess den letzten Befehl erreicht und ! keine sensitivity Liste hat und ! der letzte Befehl kein Wait-Befehl ist,

dann läuft der Prozess solange weiter bis ein wait-Befehl erreicht wird.

! Wenn alle Prozesse angehalten haben, wird die Zeit für den nächsten Zyklus als der früheste der folgenden Zeitpunkte berechnet:

1.time’high (Ende der Simulation). 2.Frühester Zeitpunkt in der Transaktionsliste (falls nicht leer) 3.Frühester Zeitpunkt in der Prozessaktivierungsliste (falls nicht

leer) ! Stop, falls tnext = time’high oder die Transaktions- und

Prozessaktivierungslisten leer sind.

5

Signalzuweisungen

! Syntax:

! signal_assignment ::= target <= [ delay_mechanism ] waveform_element

{ , waveform_element } ! waveform_element ::=

value_expression [ after time_expression ]

! delay_mechanism ::= transport | [ reject time_expression ] inertial

! Beispiel:

! Inpsig <= ´0´, ´1´after 5 ns, ´0´ after 10 ns, ´1´ after 20 ns;

6

Inertial und Transport Delay Model

! Example for signal assignment: outp <= not inp after 10 ns;

outp??

inp

5 10 15 20 25 30 35

outp??

7

Zwei Verzögerungsmodelle in VHDL:

! Inertial delay („träge Verzögerung“) ! Transport delay („nichtträge Verzögerung“)

InverterInput Output

Inertial und Transport Delay Model

! Das Inertial Delay Model modelliert das Phänomen, dass physikalische Gatter kurze Impulse (spikes) an den Eingaben absorbieren.

8

! … ist das default Modell

! Eingabe-Impulse, die kleiner als die spezifizierte Verzögerung sind, werden ignoriert.

InverterInput Output

Output <= NOT input AFTER 10 ns;

Output

Input

5 10 15 20 25 30 35

Inertial Delay Model

9

InverterInput Output

Output <= TRANSPORT NOT input AFTER 10 ns;

Output

Input

5 10 15 20 25 30 35

Transport Delay Model

! muss explizit spezifiziert werden

! überträgt alle Impulse

10

entity DELAY is end DELAY; architecture RTL of DELAY is signal A, B, X, Y: bit; begin p0: process (A, B) begin Y <= A nand B after 10 ns; X <= transport A nand B after 10 ns; end process;

p1: process begin

A <= '0', '1' after 20 ns, '0' after 40 ns, '1' after 60 ns; B <= '0', '1' after 30 ns, '0' after 35 ns, '1' after 50 ns; wait for 80 ns;

end process; end RTL;

0 100 200

ABXY

[ns]

Inertial und Transport Delay Model

11

Semantik des Transport Delay Model

! Signalzuweisungen ändern die Transaktionsliste. ! Bevor eine Transaktion (s, t1, v1) in die Transaktionsliste

eingefügt wird werden alle Transaktionen (s, t2, v2) mit t2 ≥ t1 aus der Liste entfernt.

12

Beispiel für Transport Delay Model

! Transaktionsliste: ! At 5ns:

(outp, 25ns, `0`) ! At 10 ns:

(outp, 22.5ns, `1`), (outp, 25ns, `0`)Entferne (outp, 25ns, `0`)!→ (outp, 22.5ns, `1`)

Inverterinp outp

inv : process(inp) begin

if inp=`1` then outp <= transport `0` after 20 ns;

elsif inp=`0` then outp <= transport `1` after 12.5 ns

end if; end process inv;

outp

inp

5 10 15 20 25 30 35

13

Inertial Delay Model

! Inertial delay absorbiert Impulse an den Eingaben die kürzer als die für die Operation spezifierte Verzögerung sind.

! Alternativ kann die Länge der Impulse die absorbiert werden sollen auch gesondert angegeben werden:

– Impulse kürzer als 3ns sollen absorbiert werden:outp <= reject 3 ns inertial not inp after 10 ns;

– outp <= reject 10 ns inertial not inp after 10 ns; und outp <= not inp after 10 ns; sind äquivalent

14

Semantik

! Regel 1 wie im Transport Delay Modell:Bevor eine Transaktion (s, t1, v1) in die Transaktionsliste eingefügt wird werden alle Transaktionen (s, t2, v2) mit t2 ≥ t1 aus der Liste entfernt.

! Regel 2 entfernt zusätzlich Transaktionen mit Zeiten < t1: ! Sei rt das Zeitlimit für die zu absorbierenden Impulse. ! Transaktionen mit Zeit im Intervall (t1 – rt, t1) werden entfernt. ! Ausnahme:

Falls es im Intervall (t1 – rt, t1) eine oder mehrere Zuweisungen zu s unmittelbar vor (s, t1, v1) gibt, die s ebenfalls den Wert v1 zuweisen, dann bleiben diese Transaktionen erhalten.

15

Beispiel

! Transaktionsliste vor „wait for 15 ns“:(o1, 0ns, `0`), (o1, 5ns, `0`), (o1, 15ns, `1`), (o1, 20ns, `0`), (o1, 25ns, `1`), (o1, 30ns, `1`), (o1, 45ns, `1`), (o1, 50ns, `0`),(o2, 0ns, `0`), (o2, 5ns, `0`), (o2, 15ns, `1`), (o2, 20ns, `0`), (o2, 25ns, `1`), (o2, 30ns, `1`), (o2, 45ns, `1`), (o2, 50ns, `0`)

! Transaktionsliste zum Zeitpunkt der Reaktivierung bei 15ns: (o1, 20ns, `0`), (o1, 25ns, `1`), (o1, 30ns, `1`), (o1, 45ns, `1`), (o1, 50ns, `0`), (o2, 20ns, `0`), (o2, 25ns, `1`), (o2, 30ns, `1`), (o2, 45ns, `1`), (o2, 50ns, `0`)

process begin

o1 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; -- same signal assignment for o2 o2 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; wait for 15 ns; o2 <= reject 22 ns inertial `1` after 25 ns; wait;

end process;

16

Beispiel

! Transaktionsliste zum Zeitpunkt der Reaktivierung bei 15ns: (o1, 20ns, `0`), (o1, 25ns, `1`), (o1, 30ns, `1`), (o1, 45ns, `1`), (o1, 50ns, `0`), (o2, 20ns, `0`), (o2, 25ns, `1`), (o2, 30ns, `1`), (o2, 45ns, `1`), (o2, 50ns, `0`)

! Bei 15ns: ! Füge Transaktion (o2, 40ns, `1`) ein. ! Entferne Transaktionen ≥ 40ns.

! Vorläufige Transaktionsliste:(o1, 20ns, `0`), (o1, 25ns, `1`), (o1, 30ns, `1`), (o1, 45ns, `1`), (o1, 50ns, `0`),(o2, 20ns, `0`), (o2, 25ns, `1`), (o2, 30ns, `1`), (o2, 40ns, `1`)

process begin

o1 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; -- same signal assignment for o2 o2 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; wait for 15 ns; o2 <= reject 22 ns inertial `1` after 25 ns; wait;

end process;

17

process begin

o1 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; -- same signal assignment for o2 o2 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; wait for 15 ns; o2 <= reject 22 ns inertial `1` after 25 ns; wait;

end process;

Beispiel

! Vorläufige Transaktionsliste(o1, 20ns, `0`), (o1, 25ns, `1`), (o1, 30ns, `1`), (o1, 45ns, `1`), (o1, 50ns, `0`), (o2, 20ns, `0`), (o2, 25ns, `1`), (o2, 30ns, `1`), (o2, 40ns, `1`)

! Regel 2: ! (o2, 25ns, `1`), (o2, 30ns, `1`) bleiben erhalten, ! (o2, 20ns, `0`) wird entfernt.

! Resultierende Transaktionsliste:(o1, 20ns, `0`), (o1, 25ns, `1`), (o1, 30ns, `1`), (o1, 45ns, `1`), (o1, 50ns, `0`), (o2, 25ns, `1`), (o2, 30ns, `1`), (o2, 40ns, `1`)

Regel 2: ! Transaktionen für o2 mit Zeit im

Intervall (40ns – 22ns, 40ns) = (18ns, 40ns) werden entfernt.

! Ausnahme: Falls es im Intervall (18ns, 40ns) Transaktionen für o2 unmittelbar vor (o2, 40ns, `1`) gibt, die o2 ebenfalls den Wert `1` zuweisen, dann bleiben diese Transaktionen erhalten.

18

process begin

o1 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; -- same signal assignment for o2 o2 <= transport `0`, `0` after 5ns, `1` after 15 ns, `0` after 20ns, `1` after 25 ns, `1` after 30ns, `1` after 45 ns,

`0` after 50 ns; wait for 15 ns; o2 <= reject 22 ns inertial `1` after 25 ns; wait;

end process;

Beispiel

! Ergebnis:

o1

o2

5 10 15 20 25 30 35 40 45 50 55 19

„Write-Write Konflikt“

! Fall 1: Write-Write Konflikt innerhalb eines Prozesses ! Die zweite Zuweisung überschreibt die

erste. ! Dies ist eine Ausnahme vom Prinzip der

Nebenläufigkeit bei Signalzuweisungen ! Zuweisungen an unterschiedliche Signale

finden nebenläufig statt.

signal s : bit; … p : process begin

… s <= `0`; … s <= `1`; wait for 5 ns;

end process p;

20

„Write-Write Konflikt“

! Fall 2: Write-Write Konflikt zwischen verschiedenen Prozessen

! Der Datentyp kann eine „Funktionswert-Auflösungsfunktion (resolution function)“ zur Verfügung stellen.

• Der Wert für s im aktuellen Schritt wird zunächst für jeden Prozess separat berechnet

• „resolution function“ berechnet aus den verschiedenen Werten das endgültige Resultat.

! Ohne resolution function sind Write-Write Konflikte zwischen verschiedenen Prozessen verboten.

signal s : dt; … s<= v1; … p : process begin

… s <= v2; …

end process p; q : process begin

… s <= v3; …

end process q;

21

Mehrwertige Logik

! Binäre Logik ('0' und '1') ! Mehrwertige Logik unterscheidet

! den logischen Wert (Abstraktion der Signalspannung) und ! die Signalstärke (Abstraktion der Impedanz).

! Elektronische Entwurfssysteme verwenden eine Vielzahl von Wertemengen.

22

Zwei Logikwerte (1 Signalstärke)

! Logikwerte '0' und '1' gleich stark.

! Es gibt keine sinnvolle Auflösungsfunktion für den Fall daß `0` und `1` dem selben Signal zur selben Zeit zugewiesen werden.

23

2 Signalstärken

! In vielen Schaltungen gibt es den Fall, dass Teile des Schaltkreises effektiv vom Rest “abgeklemmt” werden

! Beispiel: Tristate-Ausgänge

! kleinste Signalstärke, ! Signalwert unbekannt ! Logikwert Z

Input = `0 ̀→ Verbindung von A zum Rest des Schaltkreises wird unterbrochen

24

2 Signalstärken

! Dreiwertige Logikmengen {‘Z’, ‘0’, ‘1’} werden oft durch einen vierten Wert X ergänzt: gleiche Signalstärke wie 0 und 1, aber unbekannter Wert.

! Auflösungsfunktion # berechnet das supremum der Werte: #('0','Z')='0'; #('1','Z')='1';

! '0' und '1' sind „stärker“ als 'Z'

1 strength

25

Sieben Signalwerte (3 Signalstärken)

Verarmungstransistor (depletion transistor) stellt eine hochohmige Verbindung zur Versorgungsspannung her→ Neuer Wert 'H', ein schwaches Signal mit Wert '1'. #('H', '0')='0'; #('H,'Z') = 'H'

I

26

Sieben Signalwerte (3 Signalstärken)

! Analog zu H gibt es schwache Signale mit dem Wert ‘0’; repräsentiert durch 'L': #('L', '0')='0'; #('L,'Z') = 'L';

! und schwache Signale mit dem Wert 'X', repräsentiert durch ‘W’: #('L', 'H')='W'; #('L,'W') = 'W';

27

IEEE 1164

! VHDL erlaubt Benutzer-definierte Wertemengen → Jedes Modell könnte unterschiedliche Wertemengen

benutzen (unpraktisch) → Standard IEEE 1164: {'0', '1', 'Z', 'X', 'H', 'L', 'W', 'U', '-'} ! Die ersten sieben Werte wie besprochen. ! 'U': uninitialisiertes Signal; wird vom Simulator benutzt bis

zur ersten Signalzuweisung benutzt; ! '-': spezifiziert “don’t cares”:

! Beispiel: if a /= ‘1’ or b/=‘1’ then f <= a exor b; else f <= ‘-’; ! ‘-’ darf vom Synthesetool durch einen beliebigen Wert ersetzt

werden.

28

Parametrierte Hardware

! Konditionale Instantiierung: if … generate ! Iterative Instantiierung: for … generate ! Parametriertes Design mit generic Parameter.

29

entity SHIFT8 is port ( RSTn, CLK, SI : in std_logic; SO : out std_logic ); end SHIFT8;

Beispiel: 8-bit shift register

30

21

- 41 -BF - ES

Parameterized hardware

� Conditional component instantiation with if … generateconstruct.

� Iterative component instantiation with for … generateconstruct.

� Parameterized design with generic parameters.

- 42 -BF - ES

RSTn

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

CLK

SOSI T(6) T(5) T(4) T(3) T(2) T(1) T(0)

entity SHIFT8 isport ( RSTn, CLK, SI : in std_logic;

SO : out std_logic );end SHIFT8;

Example: 8-bit shift register

architecture RTL1 of SHIFT8 is

begin

end RTL1;

component DFF port ( RSTn, CLK, D: in std_logic; Q : out std_logic ); end component; signal T: std_logic_vector(6 downto 0);

bit7 : DFF port map (RSTn => RSTn, CLK => CLK, D => SI, Q => T(6) ); bit6 : DFF port map (RSTn => RSTn, CLK => CLK, D => T(6), Q => T(5) ); bit5 : DFF port map (RSTn, CLK, T(5), T(4) ); ... bit1 : DFF port map (RSTn, CLK, T(1), T(0) ); bit0 : DFF port map (RSTn, CLK, T(0), SO );

3121

- 41 -BF - ES

Parameterized hardware

� Conditional component instantiation with if … generateconstruct.

� Iterative component instantiation with for … generateconstruct.

� Parameterized design with generic parameters.

- 42 -BF - ES

RSTn

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

CLK

SOSI T(6) T(5) T(4) T(3) T(2) T(1) T(0)

entity SHIFT8 isport ( RSTn, CLK, SI : in std_logic;

SO : out std_logic );end SHIFT8;

Example: 8-bit shift register

architecture RTL2 of SHIFT1024 is

begin

end RTL2;

component DFF port ( RSTn, CLK, D: in std_logic; Q : out std_logic ); end component; signal T: std_logic_vector(1022 downto 0);

g0: for i in 1023 downto 0 generate g1: if (i = 1023) generate bit1023 : DFF port map (RSTn,CLK,SI,T(1022)); end generate; g2: if (i>0) and (i<1023) generate bitm : DFF port map (RSTn,CLK,T(i),T(i-1)); end generate; g3: if (i=0) generate bit0 : DFF port map (RSTn,CLK,T(0),SO); end generate; end generate;

Beispiel: 1024-bit shift register

32

entity SHIFTn is generic ( n : positive); port ( RSTn, CLK, SI : in std_logic; SO : out std_logic ); end SHIFTn;

architecture RTL3 of SHIFTn is

begin

end RTL3;

component DFF port ( RSTn, CLK, D: in std_logic; Q : out std_logic ); end component; signal T: std_logic_vector(n-2 downto 0);

g0: for i in n-1 downto 0 generate g1: if (i = n-1) generate bit_high : DFF port map (RSTn,CLK,SI,T(n-2)); end generate; g2: if (i>0) and (i<n-1) generate bitm : DFF port map (RSTn,CLK,T(i),T(i-1)); end generate; g3: if (i=0) generate bit0 : DFF port map (RSTn,CLK,T(0),SO); end generate; end generate;

Beispiel: n-bit shift register

33

… component SHIFTn is generic ( n : positive); port ( RSTn, CLK, SI : in std_logic; SO : out std_logic ); end component;

Beispiel: n-bit shift register

! Instantiierung

… begin … Shift32comp : SHIFTn generic map (n => 32) port map(RSTn => …, CLK => …, SI => …, SO => …); … end;

34