Sumador completo de simulación VHDL, pregunta de tiempo

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;

Por lo general, 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 también cambian los bits de entrada. Sin embargo, este comportamiento no es lo que espero en este caso, esperaría que los bits de salida y(4) ... y(0)cambien cuando c(i)se conoce el valor de, pero ese bit depende de c(i-1)y así sucesivamente... ¿Hay algo que no entiendo?

Para una definición adecuada de "instantáneo". Realice un seguimiento de los ciclos delta individuales para ver qué está pasando realmente. Si bien la respuesta de la simulación de nivel de puerta es correcta, en la práctica rara vez necesitará sims de nivel de puerta, al menos en diseños síncronos en FPGA,

Respuestas (1)

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

Ok, tal vez lo conseguí. El RTL es la simulación lógica, mientras que el nivel de puerta explota las características físicas de las puertas especificadas en la lista de conexiones, ¿verdad?
Sí. Sin embargo, no es el netlist, sino el diseño sintetizado. Además, la simulación RTL es más rápida. Normalmente hago RTL -> cierre de tiempo. El nivel de puerta es útil, si desea canalizar algo. Puedes ver cuales son los retrasos para cada tramo
¿La salida de la síntesis no es la netlist?
La netlist es como un diagrama de circuito de las puertas. El diseño sintetizado en realidad coloca las puertas y le brinda los retrasos de interconexión.
Pensé que la lista de conexiones era una especie de gráfico donde cada nodo tiene propiedades físicas, como resistencia, capacitancia, retraso de propagación, de eso supuse que era posible recuperar la información sobre toda la propagación.
Generalmente, una netlist no tiene ninguna propiedad de hardware. Incluso si lo hiciera, una fuente importante de retrasos es la interconexión entre las puertas. Hay otras complicaciones también. Tal vez una puerta específica no se pueda instalar cerca debido a restricciones, etc. Estas cosas pueden introducir una variabilidad significativa en los tiempos.
¿Puede señalarme algún tutorial sobre cómo configurar correctamente una simulación de nivel de puerta? Cuando lo pruebo, como me mostraste, inicia ModelSim con un error.
Para ello, debe consultar la documentación de las herramientas. Depende de cual sea el error. Mi consejo: pruebe primero con una puerta no simple, es decir, Y <= no A. De esta manera, sabrá que el problema está en la configuración, no en su código, si hay errores.
Comenzó una nueva pregunta con más información: electronics.stackexchange.com/questions/249238/…