Het timing model in VHDL Wat is het effect van verschillende beschrijvingen op een simulatie? Het event-driven simulatie model Timing model stap voor stap EXNOR als voorbeeld Opdracht
Het event-driven simulatie model Wat is hardware eigenlijk? Een verzameling parallelle processen die met elkaar communiceren bv: P1 P2 P3 P4 a b c x y ENTITY 4_processen IS PORT (a,b,c : in std_logic; x,y : out std_logic); END ENTITY 4_processen; ARCHITECTURE parallel OF 4_processen IS BEGIN P1; P2; P3; P4; END parallel; Processen zijn continue: Hoe kun je dat simuleren als je maar 1 processor in je PC hebt? -> Een proces alleen doorrekenen als 1 of meer van de ingangen is veranderd. (denk aan een geklokte schakeling)
Wat heb je hiervoor nodig om een event-driven model te kunnen simuleren? Een mechanisme (een scheduler) die regelt welk proces aan de beurt is om doorgerekend te worden. Een taal met statements om processen te beschrijven: Parallelle constructies: netwerkstructuren (concurrent statements) Sequentiële constructies: gedragsbeschrijvingen (sequential statements) Golfvorm variabele: signalen die de eigenschap van een niet direct reagerende variabele hebben (sig_a <= sig_b). sig_a krijgt de waarde van sig_b na een delta delay. Delta delay: signalen krijgen hun waarde nooit direct, zelfs zonder after clausule, dus: t <= ‘1’; is eigenlijk t <= ‘1’ after delta delay Een vertraging van delta delay heeft de volgende eigenschappen: Verandert de simulatietijd niet. Toekenning nieuwe waarde nadat de simulatiecyclus binnen een proces geheel doorlopen is. Variabele spelen alleen een rol binnen 1 enkel proces en zijn een hulpmiddel om gedrag vast te leggen.
Timing model stap voor stap Gegeven een architectuur met 4 processen: ENTITY 4_processen IS PORT (a,b : in integer; X : out integer); END ENTITY 4_processen; ARCHITECTURE parallel OF 4_processen IS SIGNAL u,v,w : integer; BEGIN P1: u <= f(a); P2: v <= g(u); P3: w <= h(v) AFTER 5 ns; P4: x <= k(w,b) AFTER 2 ns; END parallel; a b P1 u P2 v P3 w x P4 Op t0 veranderen de signalen a en b van waarde. Wat gebeurt er nu met de signalen u,v,w en x? Ga er hierbij vanuit dat elk proces pas een veranderende uitgangswaarde krijgt als de ingangswaarde veranderd.
Timing model stap voor stap (vervolg) a en b veranderen: u en x worden ge-scheduled. Dus proces P1 en P4 worden getriggerd door a en b, ui en xi worden als een transactie op de tijdas gezet u krijgt nieuwe waarde ui en triggert proces P2 die vi als transactie op de tijdas zet v krijgt nieuwe waarde en triggert proces P3, wi op tijdas signaal x krijgt nieuwe waarde, geen processen getriggerd signaal w krijgt nieuwe waarde, P4 getriggert en xi+1 op tijdas signaal x krijgt nieuwe waarde: xi+1, geen transacties meer Cyclus Tijd Proces u v w x 1 t0 P1, P4 ui-1, {ui,δ} vi-1 wi-1 xi-1, {xi,2 ns} 2 t0 + δ P2 ui vi-1, {vi,δ} 3 t0 + 2δ P3 vi wi-1, {wi,5 ns} 4 t0 + 2 ns - wi-1, {wi,3 ns} xi 5 t0+ 5 ns P4 wi xi, {xi+1,2 ns} 6 t0+ 7 ns xi+1 OPDRACHT: Teken het timingdiagram van a,b,u,v,w en x.
Timing model stap voor stap: voorbeeld Gegeven de architectuur met 4 processen waarvoor geldt: f(a) = a, g(u) = u, h(v) = v AFTER 5ns, k(w,b) = w OR b AFTER 3ns. u a b P1 ENTITY 4_processen IS PORT (a,b : in bit; X : out bit); END ENTITY 4_processen; ARCHITECTURE parallel OF 4_processen IS SIGNAL u,v,w : bit; BEGIN P1: u <= a; P2: v <= u; P3: w <= v AFTER 5 ns; P4: x <= w OR b AFTER 2 ns; END parallel; P2 v P3 w x P4 v u b a w x δ 2δ 2 4 6 8 s = Transactie Transactie: nieuwe signaalwaarde met tijdsaanduiding Event: Transactie die resulteert in verandering van de signaalwaarde.
Opdracht: Schedule de timing van een EXNOR, gegeven de timing van ingangen a en b. De dataflow beschrijving van een EXNOR bestaande uit 5 parallelle signaal toewijzingen: dus 5 concurrent statements: ns δ a b na nb x y f 0.0 (0) 1 ENTITY 5_processen IS PORT (a,b : in bit; f : out bit); END ENTITY 5_processen; ARCHITECTURE parallel OF 5_processen IS SIGNAL na,nb,x,y : bit; BEGIN na <= NOT a AFTER 1.2 ns; nb <= NOT b AFTER 1.2 ns; x <= a AND b AFTER 1.2 ns; y <= na AND nb AFTER 1.2 ns; f <= x OR y AFTER 1.2 ns; END parallel; Elk statement heeft een after clausule dus er zijn geen delta events zonder simulatietijd verhoging! a b na nb x y f 10 20 30 40 50 ns
Opdracht: Schedule de timing van een EXNOR, gegeven de timing van ingangen a en b. De dataflow beschrijving van een EXNOR bestaande uit 5 parallelle signaal toewijzingen: dus 5 concurrent statements: ns δ a b na nb x y f 0.0 (0) 1.2 1 2.4 2 3.6 3 10.0 4 11.2 5 12.4 6 13.6 7 20.0 8 21.2 9 30.0 10 31.2 11 32.4 12 40.0 13 41.2 14 42.4 15 43.6 16 ENTITY 5_processen IS PORT (a,b : in bit; f : out bit); END ENTITY 5_processen; ARCHITECTURE parallel OF 5_processen IS SIGNAL na,nb,x,y : bit; BEGIN na <= NOT a AFTER 1.2 ns; nb <= NOT b AFTER 1.2 ns; x <= a AND b AFTER 1.2 ns; y <= na AND nb AFTER 1.2 ns; f <= x OR y AFTER 1.2 ns; END parallel; Elk statement heeft een after clausule dus er zijn geen delta events zonder simulatietijd verhoging! a b na nb x y f 10 20 30 40 50 ns
Maak de volgende opdrachten in modelsim met de scheduler. Bepaal de simulatieresultaten in tabel vorm voor de onderstaande twee beschrijvingen van een EXNOR: ENTITY exnor IS PORT (a,b : in bit; f : out bit); END ENTITY exnor; ARCHITECTURE parallel OF exnor IS SIGNAL na,nb,x,y : bit; BEGIN na <= NOT a; nb <= NOT b; x <= a AND b; y <= na AND nb; f <= x OR y AFTER 3.6 ns; END parallel; 10 20 30 40 50 ns f y x b a na nb ENTITY exnor IS PORT (a,b : in bit; f : out bit); END ENTITY exnor; ARCHITECTURE sequential OF exnor IS BEGIN VARIABLE na,nb,x,y : bit; PROCESS(a,b) na := NOT a; nb := NOT b; x := a AND b; y := na AND nb; f <= x OR y AFTER 3.6 ns; END PROCESS; END sequential; 10 20 30 40 50 ns f y x b a na nb Er staat op Scholar ook het invulblad EXNOR waarmee je deze opdracht kan doen.
Beschrijving van EXNOR die onjuiste functionele simulatie geeft: De gedrags beschrijving van een EXNOR bestaande uit 5 sequentiele signaal toewijzingen: dus 5 signal assigments binnen 1 proces: ENTITY 1_proces IS PORT (a,b : in bit; f : out bit); END ENTITY 1_proces; ARCHITECTURE sequential OF 1_proces IS SIGNAL na,nb,x,y : bit; BEGIN PROCESS(a,b) na <= NOT a AFTER 1.2 ns; nb <= NOT b AFTER 1.2 ns; x <= a AND b AFTER 1.2 ns; y <= na AND nb AFTER 1.2 ns; f <= x OR y AFTER 1.2 ns; END PROCESS; END sequential; a Levert de volgende timing op b na nb x y f 10 20 30 40 50 ns 1 proces betekent dat bij een verandering van a of b slechts 1 maal de simulatiecyclus doorlopen wordt. Nieuwe waarden voor na, nb, x, y, en f worden berekent met de huidige waarden van a, b, na, nb, x, en y, en pas op de tijdas gezet als het proces getriggerd wordt door a of b. Over het algemeen moet je er voor zorgen dat er binnen een proces geen afhankelijke signaal toewijzingen voor komen. Hoe kun je dit probleem toch verhelpen?
In VHDL zijn 3 typen tijdvertraging toe te passen: Delta event, δ: Impliciete definitie van 0 seconde simulatietijd om timingmodel van signaal te modeleren. AFTER <timing> clausule: Expliciete definitie van de modelering van bepaalde simulatietijd om poortafhankelijke timingmodel te modeleren. Transport delay (sig_c <= TRANSPORT sig_a AFTER 5ns) : waarbij alle signaalveranderingen worden doorgegeven. nadat de transitie {1, 5ns} op de tijdas van de scheduler is gezet zal een volgende transitie die 2 ns later komt, {0, 1ns} , erbij gezet worden. sig_a sig_b sig_c 0 ns 3ns 5ns 8 ns 10 ns sig_a <= ‘1’ after 3 ns, ‘0’ after 2 ns; sig_b <= sig_a after 5 ns; sig_c <= transport sig_a after 5 ns; Wanneer gebruik je TRANSPORT delay?
Conclusies event-driven simulatie. 1. Parallelle (hardware) processen worden alleen doorgerekend als de ingangswaarden veranderen 2. Parallelle taal constructies (concurrent statements)gebruik je om netwerkstructuren te beschrijven → architecture 3. Sequentiële taal constructies (sequentiële statements) gebruik je om gedrag te beschrijven. → process 4. := Directe of variabele toewijzing (doel = waarde) 5. <= Signaal toewijzing (doel = waarde na tijdvertraging) 6. Simulatiecyclus: Ronde waarin alle (getriggerde) processen worden doorgerekend 7. Delta delay, δ: oneindig kleine tijdvertraging waarin de simulatiecyclus helemaal doorlopen moet zijn voordat nieuwe waarden aan signalen kunnen worden toegekend. 8. Er zijn 4 expliciete WAIT statements: - WAIT FOR 2 us; - WAIT UNTIL <boolean expressie>; - WAIT ON < sensitivity list>; - WAIT; 9. Impliciete wait statement: process(a,b) 10. Er zijn 3 soorten tijdvertraging: - Delta delay: toekenning 1 simulatiecyclus later - Inertial delay: ‘after clausule’, modelleren tijdsvertraging van logische poorten - Transport delay: Alle veranderingen, hoe kort dan ook, worden doorgegeven.