Simulador VHDL sumador completo, pregunta de tiempo

1

Digamos que tengo este diseño, por ejemplo:

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;

Generalmente, si ejecuto un diseño como este, lo que veo en la forma de onda es que TODOS los bits de la salida cambian instantáneamente tan pronto como los bits de entrada también cambian. Sin embargo, este comportamiento no es lo que espero en este caso, yo esperaría que los bits de salida y(4) ... y(0) cambien cuando se conozca el valor de c(i) , pero ese bit depende del c(i-1) y así sucesivamente ... ¿Existe? algo que echo de menos entender?

    
pregunta user8469759

1 respuesta

1

Esto es lo que usted esperaría, si ejecuta la, así llamada, simulación RTL. Su cadena de herramientas debe tener una simulación de nivel de puerta, que toma el diseño sintetizado de su dispositivo de destino y le da al simulador los retrasos específicos. Aquí es donde están en Quartus:

    
respondido por el user110971

Lea otras preguntas en las etiquetas