1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
|
% !TEX root = dt-slides-dt.tex
\section{Synchronisation}
\begin{frame}
\frametitle{Synchronisation}
\center
\Huge Synchronisation
\vspace{1cm}
\large Wie man asynchrone Signale einsynchronisiert
\end{frame}
\begin{frame}
\frametitle{Synchronisation}
\center
\Huge Was passiert wenn die Eingänge einer synchronen Schaltung asynchron sind?
\vspace{1cm}
\large
\end{frame}
\begin{frame}
\frametitle{Synchrone Schaltung mit primären Eingängen}
\hspace{2cm}
\begin{tikzpicture}[circuit logic IEC, circuit ee IEC]
\draw (0,0) node[shape=ff, anchor=D] (r0) {};
\draw (r0.R) -- ++(down:1) node[anchor=north] {rst\_n};
\draw (r0.CLK) -- ++(left:0.25) -- ++(down:1) node[contact] (cclk) {} -- ++(down:0.5) node[anchor=north] {clk};
\draw (r0.D) -- node[above] (d) {d}++(left:1) node[cloud, anchor=east, draw=black, minimum width = 3 cm, minimum height = 2 cm] (zfl) {ZFL};
\draw (r0.Q) -- node[above] (q) {q} ++(right:1) node[contact] (c1) {} -- ++(right:1) node[cloud, anchor=west, draw=black, minimum width = 3 cm, minimum height = 2 cm] (al) {AL};
\draw (zfl.west) -- node[above] {pi} ++(left:1) node[shape=ff,anchor = Q,draw=blue] (piff) {};
\draw[draw=blue] (piff.CLK) -- ++(left:0.25) |- (cclk);
\draw (al.east) -- ++(right:1) node[anchor = west] (po) {po};
\draw (c1) -- ++(up:2) -| (zfl.north);
\draw (zfl) -- ++(135:2) node[anchor=south] {Zustandsfolgelogik};
\draw (al) -- ++(55:2) node[anchor=south] {Ausgangslogik};
\draw (r0) -- ++(105:1) node[anchor=south] {Zustandsspeicher};
\draw (q) -- ++(30:2) node[anchor=south] {aktueller Zustand};
\draw (d) -- ++(-130:2.5) node[anchor=north] {Folgezustand};
\end{tikzpicture}
\vspace{1cm}
\begin{itemize}
\item Bisher immer stillschweigend angenommen, dass die primären Eingänge pi auch aus einem Flipflop kommen
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Beispiel: Automat}
\begin{tikzpicture}[state/.style=state with output,>=latex, auto]
\node[state,initial] (sA) {A (01)\nodepart{lower} 0};
\node[state] (sB) [right = 3 cm of sA] {B (10)\nodepart{lower} 1};
\path[->]
(sA) edge[bend left] node[above] {$x=1$} (sB)
(sA) edge[loop above] node[above] {$x=0$} (sA)
(sB) edge[bend left] node[below] {} (sA)
;
\node[state] [right = 3cm of sB] (example) {Zustand \nodepart{lower} y};
\path[->] (example) edge node{$x$} ++(45:2cm);
\end{tikzpicture}
\begin{tikztimingtable}
clk & 2L25{CC}\\
rst\_n & 7L42H \\
x & 12L10H10L \\
state & 14D{A}2D{B}2D{A}2D{B}2D{A}2D{B}20D{A} \\
y & 14L2H2L2H2L2H20L \\
\extracode
\begin{pgfonlayer}{background}
\begin{scope}[semitransparent ,semithick]
\vertlines[black]{2,4,...,48}
\horlines{2,3,...,3}
\end{scope}
\end{pgfonlayer}
\end{tikztimingtable}
\vspace{5mm}
\begin{itemize}
\item Als Beispiel für das Problem von asynchronen Signalen ein einfacher Automat.
\item Der Automat hat zwei Zustände und einen Eingang x.
\item Im Timingdiagramm oben ist das Eingangssignal x synchron.
\item Wenn das Eingangssignal x = 0 ist, dann bleibt der Automat im Zustand A. Der Ausgang ist 0.
\item Wenn das Eingangssignal x = 1 ist, dann wechselt der Automat mit jedem Takt zwischen den Zuständen A und B. Der Ausgang wechselt in jedem Takt zwischen 0 und 1.
\item Der Automat wird als one-hot Maschine implementiert.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Automat in One-Hot Kodierung}
\begin{minipage}{0.45\textwidth}
\scalebox{0.7}{
\begin{tikzpicture}[state/.style=state with output,>=latex, auto]
\node[state,initial] (sA) {A (01)\nodepart{lower} 0};
\node[state] (sB) [right = 3 cm of sA] {B (10)\nodepart{lower} 1};
\path[->]
(sA) edge[bend left] node[above] {$x=1$} (sB)
(sA) edge[loop above] node[above] {$x=0$} (sA)
(sB) edge[bend left] node[below] {} (sA)
;
\end{tikzpicture}}%scalebox
\end{minipage}
\begin{minipage}{0.45\textwidth}
\scalebox{0.7}{
\begin{tikzpicture}[state/.style=state with output,>=latex, auto]
\node[state,initial] (sA) {A (01)\nodepart{lower} 0};
\node[state] (sB) [right = 3 cm of sA] {B (10)\nodepart{lower} 1};
\node[state] (s00) [below = 1 cm of sA] {00 \nodepart{lower} 0};
\node[state] (s11) [right = 3 cm of s00] {11 \nodepart{lower} 1};
\path[->]
(sA) edge[bend left] node[above] {$x=1$} (sB)
(sA) edge[loop above] node[above] {$x=0$} (sA)
(sB) edge[bend left] node[below] {} (sA)
(s00) edge[bend left] (sA)
(s11) edge[bend left] node[above] {$x=0$} (sA)
(s11) edge[loop above] node[above] {$x=1$} (s11)
;
\end{tikzpicture}}%scalebox
\end{minipage}
\vspace{5mm}
\begin{minipage}{0.35\textwidth}
\begin{tabular}{cc|c}
Eing. & akt.ZS & FolgeZS \\\hline
x & $q_1q_0$ & $d_1d_0$ \\\hline
0 & 01 & 01 \\
0 & 10 & 01 \\
1 & 01 & 10 \\
1 & 10 & 01 \\
\end{tabular}
\end{minipage}
\begin{minipage}{0.25\textwidth}
\begin{align*}
d_1 &= x \cdot q_0 \\
d_0 &= \overline{x \cdot \overline{q_1} \cdot q_0} \\
y &= q_1
\end{align*}
\end{minipage}
\begin{minipage}{0.35\textwidth}
Vollständige Zustandsfolgetabelle
\begin{tabular}{cc|c}
Eing. & akt.ZS & FolgeZS \\\hline
x & $q_1q_0$ & $d_1d_0$ \\\hline
0 & 00 & 01 \\
0 & 01 & 01 \\
0 & 10 & 01 \\
0 & 11 & 01 \\
1 & 00 & 01 \\
1 & 01 & 10 \\
1 & 10 & 01 \\
1 & 11 & 11 \\
\end{tabular}
\end{minipage}
\end{frame}
\begin{frame}
\frametitle{Schaltung mit Timing: Bei der Taktflanke: $d_1$ neu und $d_0$ noch alt!!!}
\begin{minipage}{0.25\textwidth}
\begin{align*}
d_1 &= x \cdot q_0 \\
d_0 &= \overline{x \cdot \overline{q_1} \cdot q_0} \\
y &= q_1\\
\\
t_p &= 10 ns \\
t_{CQ} &= 10 ns \\
t_{per,clk} &= 100 ns \\
\end{align*}
\end{minipage}
\begin{minipage}{0.7\textwidth}
\scalebox{0.9}{
\begin{circuitikz}
\ctikzset{tripoles/european not symbol=ieee circle}
\ctikzset{flipflops/scale=0.5}
% Flipflops
\draw (0,0) node[flipflop D,
flipflop def={tu=S, nu=1}, anchor = pin 1] (r0) {r0};
\draw (0,3) node[flipflop D,
flipflop def={td=R, nd=1}, anchor = pin 1] (r1) {r1};
% ZFL
\draw (r0.pin 1) -- node[above] {$d_0$}++(left:0.5) node[european not port, anchor=out] (g2) {};
\draw (g2.in 1) -- node[above] {a} ++(left:0.5) node[european and port,anchor=out] (g1) {};
\draw (g1.bin 2) node[ocirc, left] {};
\draw (g1.in 1 |- r1.pin 1) node[circ] (c0) {} -- node[above] {$d_1$}(r1.pin 1);
\draw (c0) -- ++(left:0.5) node[european and port, anchor=out] (g0) {};
\draw (c0) -- (g1.in 1);
\draw (g1.in 2) node[anchor=east] {$q_1$};
\draw (g0.in 1) node[anchor=east] {x};
\draw (g0.in 2) node[anchor=east] {$q_0$};
%Ausgänge
\draw (r0.pin 6) -- ++(right:1) node[anchor=west] {$q_0$};
\draw (r1.pin 6) -- node[above] {$q_1$} ++(right:1) node[anchor=west] {y};
%clk
\draw (r0.pin 3) node[circ] (cclk) {} -- ++(down:1) node[anchor=north] (clk) {clk};
\draw (r1.pin 3) -- (cclk);
%reset
\draw (r1.down) -- ++(down:1) node[circ] (creset) {} -- (r0.up);
\draw (clk.north) ++(right:1.5) node[anchor=north] (rst) {rst\_n};
\draw (creset) -| (rst);
\end{circuitikz}}
\end{minipage}
\begin{tikztimingtable}
clk & 3{10C10C}\\
x & 26L34H \\
$d_1$ & 28L32H\\
a & 30L4H26L\\
$d_0$ & 32H4L24H \\
$q_1$ & 32L28H \\
$q_0$ & 60H\\
\extracode
\begin{pgfonlayer}{background}
\begin{scope}[semitransparent ,semithick]
\vertlines[black]{2,4,...,48}
\horlines{2,3,...,3}
\end{scope}
\end{pgfonlayer}
\end{tikztimingtable}
\end{frame}
\begin{frame}
\frametitle{Problem: x ist asynchron. Keine Relation zum Taktsignal. }
\begin{block}{x ist asynchron und hat deshalb keine Relation zum Taktsignal}
Das asynchrone Eingangssignal x kann sich irgendwann ändern.
\end{block}
\begin{block}{Unterschiedliche Verzögerungszeiten vom Eingang x zu den D Eingängen}
Durch unterschiedliche Verzögerungszeiten vom Eingang x zu den D Eingängen der Flipflops, kann es passieren, dass manche Eingänge noch den alten Wert der Zustandsfolgelogik sehen und einige schon den neuen Wert.
\end{block}
\begin{block}{Zustandsfolgelogik als Wahrheitstabelle ist dann nicht gültig!!!}
Jetzt muss also das Timing der Schaltung berücksichtigt werden und die Darstellung der Zustandsfolgelogik als Wahrheitstabelle funktioniert nicht mehr. Damit ist der ganze Automatengraph nicht mehr gültig.
\end{block}
\begin{alertblock}{Asynchrone Signale - Viel Freude damit...}
Das Verhalten des asynchronen Signale kann im Simulator nicht simuliert werden. Das Timing der Schaltung ist bei der RTL Simulation nicht berücksichtigt und der Zeitpunkt der Änderung ist beliebig. Diese Schaltungskonstellation mit einem asynchronen Eingang, der durch kombinatorische Logik an mehrere D Eingänge geht muss vermieden werden.
\end{alertblock}
\end{frame}
\begin{frame}
\frametitle{Tritt ja nur selten auf }
\begin{block}{Nur im Intervall von schnellen und langsamen Pfaden}
Das Problem tritt nur auf, wenn die Taktflanke dann kommt, wenn schon mindestens ein D Eingang den neuen und mindestens ein Eingang noch den alten Wert von der Zustandsfolgelogik haben. Es kommt also auf die Unterschiede in der Verzögerungszeit an.
\end{block}
\begin{block}{Vielleicht kann man die Verzögerungszeiten ja ähnlich lang machen?}
Angenommen man könnte die Verzögerungszeiten der unterschiedlichen Pfade fast gleich lang machen. Sagen wir 10 ns Taktperiodendauer (= 100 MHz Taktfrequenz) und 1 ps Laufzeitunterschiede. Das Signal am Eingang soll sich im Durchschnitt alle 1000 Takte einmal ändern. 1 ps von 10 ns sind 1/10000 der Taktperiode.
\end{block}
\begin{block}{Statistik...}
Wenn sich das Eingangssignal ändert, dann ist die Chance 1/10000, dass es zu einem Problem kommt, weil die Taktflanke sich genau in dem 1 ps Intervall ändert. Alle 1000 Takte ändert sich das Eingangssignal. Das sind dann also nur noch 100MHz/1000 = 100000 Versuche pro Sekunde, das Intervall zu treffen. Das Problem tritt also 10 mal pro Sekunde auf.
\end{block}
\begin{alertblock}{Asynchrone Signale - Viel Freude damit...}
Nein. Geht nicht.
\end{alertblock}
\end{frame}
\begin{frame}
\frametitle{Gegenmaßnahmen: Synchronisationsflipflop}
\begin{minipage}{0.7\textwidth}
\scalebox{0.9}{
\begin{circuitikz}
\ctikzset{tripoles/european not symbol=ieee circle}
\ctikzset{flipflops/scale=0.5}
% Flipflops
\draw (0,0) node[flipflop D,
flipflop def={tu=S, nu=1}, anchor = pin 1] (r0) {r0};
\draw (0,3) node[flipflop D,
flipflop def={td=R, nd=1}, anchor = pin 1] (r1) {r1};
% ZFL
\draw (r0.pin 1) -- node[above] {$d_0$}++(left:0.5) node[european not port, anchor=out] (g2) {};
\draw (g2.in 1) -- node[above] {a} ++(left:0.5) node[european and port,anchor=out] (g1) {};
\draw (g1.bin 2) node[ocirc, left] {};
\draw (g1.in 1 |- r1.pin 1) node[circ] (c0) {} -- node[above] {$d_1$}(r1.pin 1);
\draw (c0) -- ++(left:0.5) node[european and port, anchor=out] (g0) {};
\draw (c0) -- (g1.in 1);
% Eingänge
\draw (g1.in 2) node[anchor=east] {$q_1$};
\draw (g0.in 2) node[anchor=east] {$q_0$};
% Synchflipflop
\draw (g0.in 1) -- node[above] {x\_sync} ++(left:1) node[flipflop D,
flipflop def={td=R, nd=1}, anchor = pin 6] (rs) {rs};
\draw (rs.pin 1) -- ++(left:0.5) node[anchor=east] {x};
\draw (rs.pin 3) |- (r0.pin 3);
%Ausgänge
\draw (r0.pin 6) -- ++(right:1) node[anchor=west] {$q_0$};
\draw (r1.pin 6) -- node[above] {$q_1$} ++(right:1) node[anchor=west] {y};
%clk
\draw (r0.pin 3) node[circ] (cclk) {} -- ++(down:1) node[anchor=north] (clk) {clk};
\draw (r1.pin 3) -- (cclk);
%reset
\draw (r1.down) -- ++(down:1) node[circ] (creset) {} -- (r0.up);
\draw (clk.north) ++(right:1.5) node[anchor=north] (rst) {rst\_n};
\draw (creset) -| (rst);
\end{circuitikz}}
\end{minipage}
\begin{block}{Synchronisationsflipflop}
Das Synchronisationsflipflop synchronisiert das asynchrone Eingangssignal x ein. Der Ausgang kann sich nur synchron ändern. Das asynchrone Signal darf nur zu einem einzigen Flipflop an den D Eingang gehen.
\end{block}
\begin{alertblock}{Setup- und Holdverletzungen}
Das eine Flipflop ist schon eine Riesenverbesserung. Aber was passiert, wenn das Signal x sich um die Taktflanke ändert und es zu Setup-/Holdverletzungen kommt????
\end{alertblock}
\end{frame}
\begin{frame}
\frametitle{Setup- und Holdverletzungen}
\scalebox{1.3}{
\begin{tikztimingtable}
$clk$ & 2C9{4C}\\
$rst_n$ & 4L34H \\
$d$ & 13H9L5H5L6H \\
$q$ & 11L8H8L13X \\
\extracode
\begin{pgfonlayer}{background}
\draw[fill=red!30!white,draw=none] (7,2) rectangle (10,-7);
\draw[fill=orange!30!white,draw=none] (10,2) rectangle (12,-7);
\draw[fill=red!30!white,draw=none] (15,2) rectangle (18,-7);
\draw[fill=orange!30!white,draw=none] (18,2) rectangle (20,-7);
\draw[fill=red!30!white,draw=none] (23,2) rectangle (26,-7);
\draw[fill=orange!30!white,draw=none] (26,2) rectangle (28,-7);
\draw[fill=red!30!white,draw=none] (31,2) rectangle (34,-7);
\draw[fill=orange!30!white,draw=none] (34,2) rectangle (36,-7);
\begin{scope}[semitransparent,semithick]
\vertlines[gray]{1, 2, 3, ..., 38}
\horlines[lightgray]{1,2,3,4}
\end{scope}
\draw (10, 2.2) node[anchor=south] {1};
\draw (18, 2.2) node[anchor=south] {2};
\draw (26, 2.2) node[anchor=south] {3};
\draw (34, 2.2) node[anchor=south] {4};
\draw[thin] (2, 1) -- (2,2.2);
\draw[thin] (10, 1) -- (10,2.2);
\draw[<->,thin] (15,2) -- (18,2) node[pos=0.5,above] {\tiny{$t_s$}};
\draw[thin] (15, 1) -- (15,2.2);
\draw[thin] (18, 1) -- (18,2.2);
\draw[<->,thin] (18,2) -- (20,2) node[pos=0.5,above] {\tiny{$t_h$}};
\draw[thin] (20, 1) -- (20,2.2);
\end{pgfonlayer}
\end{tikztimingtable}
}%Scalebox
\begin{block}{Leichte Verletzungen}
Leichte Setup- oder Holdverletzungen bedeuten, dass das Signal am D Eingang sich zwar innerhalb der Setup- und Holdzeit ändert, aber noch nicht "sehr nah" an der Taktflanke. Bei leichten Timingverletzungen wird ein Flipflop langsamer, d.h. das Clock to Outputdelay $t_{CQ}$ wird größer als im Datenblatt angegeben und in der Timingverifikation angenommen. Dann stimmt die Timingverifikation nicht mehr und es kann Probleme bei den nachfolgenden Flipflops geben.
\end{block}
\begin{block}{Metastabiler Zustand}
Wenn sich das Signal am D-Eingang in der Nähe der Taktflanke ändert, dann kann das Flipflop in einen "metastabilen Zustand" gehen. Das Ausgangssignal ist dann nicht mehr High oder Low, sondern nimmt einen Mittelwert ein. Irgendwann kippt das Flipflop dann nach High oder Low. Diese Zeit "irgendwann" lässt sich nicht genau bestimmen und ist wahrscheinlichkeitsverteilt, d.h. sehr selten dauert es sehr lange und häufig kippt das Flipflop schon nach kurzer Zeit zurück.
\end{block}
\begin{alertblock}{Und jetzt?}
\end{alertblock}
\end{frame}
\begin{frame}
\frametitle{Metastabiler Zustand}
\includegraphics[width=\textwidth]{sync/metastable}
\begin{block}{Metastabiler Zustand}
Messungen zum Metastabilen Zustand. Aus: Chaney and Molnar, Anomalous Behaviour of Synchronizer and Arbiter Circuits, IEEE Transactions on Computers, April 1973
\end{block}
\begin{alertblock}{Und jetzt?}
\end{alertblock}
\end{frame}
\begin{frame}
\frametitle{Synchronisationskette aus zwei bis drei Flipflops}
\begin{minipage}{0.7\textwidth}
\scalebox{0.9}{
\begin{circuitikz}
\ctikzset{tripoles/european not symbol=ieee circle}
\ctikzset{flipflops/scale=0.5}
% Flipflops
\draw (0,0) node[flipflop D,
flipflop def={tu=S, nu=1}, anchor = pin 1] (r0) {r0};
\draw (0,3) node[flipflop D,
flipflop def={td=R, nd=1}, anchor = pin 1] (r1) {r1};
% ZFL
\draw (r0.pin 1) -- node[above] {$d_0$}++(left:0.5) node[european not port, anchor=out] (g2) {};
\draw (g2.in 1) -- node[above] {a} ++(left:0.5) node[european and port,anchor=out] (g1) {};
\draw (g1.bin 2) node[ocirc, left] {};
\draw (g1.in 1 |- r1.pin 1) node[circ] (c0) {} -- node[above] {$d_1$}(r1.pin 1);
\draw (c0) -- ++(left:0.5) node[european and port, anchor=out] (g0) {};
\draw (c0) -- (g1.in 1);
% Eingänge
\draw (g1.in 2) node[anchor=east] {$q_1$};
\draw (g0.in 2) node[anchor=east] {$q_0$};
% Synchflipflop
\draw (g0.in 1) -- node[above] {x\_sync} ++(left:1) node[flipflop D,
flipflop def={td=R, nd=1}, anchor = pin 6] (rs) {rs};
\draw (rs.pin 1) -- node[above] {x\_sync1} ++(left:1) node[flipflop D,
flipflop def={td=R, nd=1}, anchor = pin 6] (rs1) {rs1};
\draw (rs.pin 3) |- (r0.pin 3);
\draw (rs1.pin 1) -- ++(left:0.5) node[anchor=east] {x};
\draw (rs.pin 3 |- r0.pin 3) node[circ] (cclks) {};
\draw (rs1.pin 3) |- (cclks);
%Ausgänge
\draw (r0.pin 6) -- ++(right:1) node[anchor=west] {$q_0$};
\draw (r1.pin 6) -- node[above] {$q_1$} ++(right:1) node[anchor=west] {y};
%clk
\draw (r0.pin 3) node[circ] (cclk) {} -- ++(down:1) node[anchor=north] (clk) {clk};
\draw (r1.pin 3) -- (cclk);
%reset
\draw (r1.down) -- ++(down:1) node[circ] (creset) {} -- (r0.up);
\draw (clk.north) ++(right:1.5) node[anchor=north] (rst) {rst\_n};
\draw (creset) -| (rst);
\end{circuitikz}}
\end{minipage}
\begin{block}{Synchronisationskette aus zwei bis drei Flipflops}
Setup- und Holdverletzungen lassen sich am ersten Flipflop der Kette nicht vermeiden. Die Wahrscheinlichkeit am zweiten Flipflop ist allerdings schon sehr viel geringen. Durch eine Kette von zwei bis drei Flipflops lassen sich Timingprobleme an den synchronen Flipflops in der Schaltung vermeiden.
\end{block}
\end{frame}
\begin{frame}
\frametitle{Synchronisation von parallelen Datenbussen}
\vspace{6cm}
\begin{block}{Bei parallelen Bussen nicht alle Datenleitungen einzeln synchronisieren}
Bei parallelen Datenbussen darf man nicht alle Datenleitungen einzeln synchronisieren, da vielleicht eine Synchronisationskette einen alten und andere einen neuen Wert hat. Man braucht eine einzelne Leitung, die synchronisiert wird und die Datenleitung dürfen sich nicht ändern, bis die Synchronisation abgeschlossen ist.
\end{block}
\end{frame}
|