>> c <= b when a='1' else 'Z';
> Kann man hier nicht den else 'Z' Zweig weglassen?
Genau der else-Zweig sorgt dafür, dass die Richtung umgeschaltet wird
und verhindert, dass ein Speicherelement eingebaut wird.
Was ergäbe diese Zeile:
Der letzte Zustand von b würde in c gespeichert, wenn a='0' wäre.
Das ist ein klassisches Latch.
> kann sich hinter a auch was anderes als ein Bit stehen?
Der Vergleich a='1' kann auch ein Vektor-Vergleich (vekt="00110") sein,
oder eine Zahl (int_zahl=10002) oder sonst irgendwas...
Der Vergleich muß (genau wie bei einer if-Abfrage) true oder false
zurückgeben.
>Wie muß ich mir das sequentielle ablaufen ohne Takt vorstellen?
Das ist im Prozess kein Ablaufen von oben nach unten. Der Prozess wird
einmal komplett durch gemacht, und alle Werte gleichzeitig zugewiesen.
Ich kann also:
1 | process (a, b, c)
|
2 | begin
|
3 | if a = '0' then
|
4 | b <= 'Z'
|
5 | c <= b;
|
6 | else
|
7 | b <= c;
|
8 | c <= 'Z';
|
9 | end if;
|
10 | end process;
|
ohne jede Funktionsänderung auch so schreiben:
1 | process (a, b, c)
|
2 | begin
|
3 | if a = '0' then
|
4 | c <= b; --+
|
5 | b <= 'Z' --+ getauscht
|
6 | else
|
7 | c <= 'Z'; --+
|
8 | b <= c; --+
|
9 | end if;
|
10 | end process;
|