Nehmen wir an, ich habe zum Beispiel dieses Design:
library ieee;
use ieee.std_logic_1164.all;
entity adder is
port(x : in std_logic_vector(3 downto 0);
y : in std_logic_vector(3 downto 0);
z : out std_logic_vector(4 downto 0));
end entity adder;
architecture rtl of adder is
signal c : std_logic_vector(3 downto 0);
begin
adder_gen : for i in 0 to 4 generate
half_adder_gen : if i = 0 generate
z(i) <= x(i) xor y(i);
c(i) <= (x(i) and y(i));
end generate half_adder_gen;
full_adder_gen : if 0 < i and i < 4 generate
z(i) <= x(i) xor y(i) xor c(i-1);
c(i) <= (x(i) and y(i)) or ((x(i) or y(i)) and c(i-1));
end generate full_adder_gen;
overflow_gen : if i = 4 generate
z(i) <= c(i-1);
end generate overflow_gen;
end generate;
end architecture rtl;
Wenn ich ein Design wie dieses ausführe, sehe ich normalerweise in der Wellenform, dass sich ALLE Bits des Ausgangs sofort ändern, sobald sich auch die Eingangsbits ändern. Dieses Verhalten ist jedoch nicht das, was ich in diesem Fall erwarte. Ich würde erwarten, dass sich die Ausgabebits y(4) ... y(0)
ändern, wenn der Wert von c(i)
bekannt ist, aber ein solches Bit hängt von ab c(i-1)
und so weiter ... Gibt es etwas, das ich nicht verstehe?
user_1818839