Das würde ich auch sagen. Denn der Prozess Volladierer wird neu
berechnet, wenn sich die Ursprungssignale ändern. Und das passiert
gleichzeitig mit der Berechnung des Wertes von temp, denn dessen
Concurrent-Zuweisung könnte auch in einen Prozess geschrieben werden:
1 | Verkettung : process (X,Y,Cin)
|
2 | begin
|
3 | temp <= X & Y & Cin; -- Verkettung der Eingangssignale zu einem Vektor
|
4 | end process;
|
5 |
|
6 | Volladdierer : process (X,Y,Cin)
|
7 | begin
|
8 | case temp is
|
9 | when "000" => Cout <= '0'; S <='0';
|
10 | when "001" => Cout <= '0'; S <='1';
|
11 | when "010" => Cout <= '0'; S <='1';
|
12 | when "011" => Cout <= '1'; S <='0';
|
13 | when "100" => Cout <= '0'; S <='1';
|
14 | when "101" => Cout <= '1'; S <='0';
|
15 | when "110" => Cout <= '1'; S <='0';
|
16 | when others => Cout <= '1'; S <='1';
|
17 | end case;
|
18 | end process Volladdierer;
|
Das ist funktional genau gleich wie die ursprüngliche Beschreibung,
jetzt werden aber die zeitlichen Abläufe klarer: wenn sich z.B. X
ändert, werden beide Prozess gleichzeitig neu berechnet. Der Volladierer
nimmt aber den alten Wert von temp für seine Berechnungen.
Ein klarer Fall einer falschen, unvollständigen Sensitivliste :-o
Am einfachsten wäre eine Verkettung im Prozess:
1 | Volladdierer : process (X,Y,Cin)
|
2 | begin
|
3 | case X & Y & Cin is -- Verkettung der Eingangssignale zu einem Vektor
|
4 | :
|
5 | :
|