Paso de simulación pero la emulación falla

-1

He aprendido que a veces el código fpga puede funcionar correctamente en la simulación, pero fallará al emular.

Pero no pude encontrar ningún escenario de ejemplo en el que la simulación pase, pero la emulación falla. Cualquiera que conozca ese tipo de escenarios, por favor, ayuda ..

¡Gracias!

ps:
Quise decir behavioral test como simulación y post-route test como emulación.

    
pregunta Ramesh-X

2 respuestas

1

Lo que estás haciendo no es una emulación, no uses ese término para confundir a la gente.

Esto es todo simulación, primero del VHDL de comportamiento directamente desde su editor de texto, luego del modelo cronometrado en VHDL producido por ISE durante la síntesis. El modelo cronometrado estará lleno de VHDL que incluye declaraciones de demora y términos de demora para simular las demoras de tiempo del circuito final.

La emulación utiliza un circuito que es diferente al circuito final previsto, pero se comporta de manera similar para ser útil en la prueba o el desarrollo. Eso es difícil y algo muy diferente. La simulación de ModelSim no supera los 100 ms de su tiempo virtual en 100 ms. Es una simulación.

Con respecto a su pregunta sobre el comportamiento de su VHDL de pre-síntesis y el modelo de tiempo de VHDL posterior a la síntesis ...

En su VHDL de comportamiento, puede escribir y simular muchas cosas que no se pueden convertir en un circuito lógico. También puede escribir cosas que se pueden convertir en un circuito lógico pero que no son útiles ni buenas. Muchas personas escriben VHDL de 'lista de deseos' que hacen lo que quieren en el entorno de lenguaje puro del simulador, y luego descubren que no se puede convertir en un circuito útil o en el circuito que ellos desean. Diseñar lógica digital en VHDL significa contemplar un circuito digital práctico, a veces bastante amplio, y luego escribir VHDL que implementa ese circuito.

Por ejemplo, durante la síntesis, la herramienta de software de síntesis eliminará todo lo que no resulte en una salida porque no se requieren circuitos para implementarla. Por ejemplo:

  entity NOWT is
    port(
      RST : in  std_logic;
      CLK : in  std_logic
      RES : out std_logic
    );
  end entity NOWT;

architecture RTL of NOWT is
  signal t : std_logic;
begin

  Toggle : process(RST, CLK) is
  begin
    if (RST = '1') then
      t  <=  '0';

    elsif rising_edge(CLK) then
      t  <=  not t;

    end if;
  end process Toggle;

end architecture RTL;

En la simulación bajo un banco de pruebas que ejercita RST y CLK, se puede ver que la señal 't' se invierte en cada flanco ascendente de CLK después de una RST adecuada.

El archivo de programación y el modelo cronometrado VHDL a partir de la síntesis no contendrán circuitos. No se activan salidas.

Qué buscar cuando el VHDL conductual de detección de fallas que no produce el circuito correcto es un tema en sí mismo. He visto algunos terribles, como:

  if rising_edge(START) then
    a  <=  1;
  elsif rising_edge(STOP) then
    a  <=  2;
  elsif falling_edge(ABORT) then
    a  <=  3;
  end if;

El único elemento lógico activado por flanco que tiene un FPGA / CPLD es un registro, con una única entrada de reloj activada por flanco. Entonces, si esto se sintetiza, la herramienta de síntesis intentará hacer que este circuito esté fuera de las LUT, es decir, de las puertas AND, OR, XOR y NOT. También te advertirá sobre ello porque es de mal diseño. Esto es solo escribir una 'lista de deseos' de funciones en lugar de considerar qué circuito lógico digital puede hacer el trabajo requerido.

    
respondido por el TonyM
0

Si su RTL no incluye retrasos de tiempo explícitos para asignaciones de registros no bloqueantes que tengan en cuenta la causalidad de la relación reloj-datos, algo como

stateB < = # 0.1 stateA;

entonces la simulación posterior a la ruta (y la prueba real) definitivamente fallará.

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas