Simulación de Vivado funcionando muy lentamente

Estoy tratando de hacer parpadear un LED en una placa nueva que compré que usa un FPGA Artix-7. Esta es la primera vez que uso Vivado y, por alguna razón, cuando ejecuto una simulación durante 1 segundo, la simulación dibuja la forma de onda muy lentamente y aumenta en pasos de 2 ms. Esto significa que una simulación de 1 segundo me toma hasta 4 minutos para completarla.

La forma en que ejecuto la simulación durante 1 segundo es configurando el cuadro "Ejecutar durante" en la parte superior de Vivado en 1 segundo y luego presionando "Ejecutar todo".

¿Alguien se ha topado con este problema antes o sabe por qué Vivado está simulando tan lentamente?

Aquí está mi código HDL para generar un LED parpadeante de 1 Hz a partir de una señal de reloj de 200 MHz:

module blinking_LED( clk, divided_clk );
input clk;
output divided_clk ;

wire clk;
reg divided_clk = 0;

localparam div_value = 99999999;
//<statements>
// division_value = 200MHz/(2*desired_value) - 1
integer counter_value = 0;
// counter 
always@ (posedge clk)
begin
    if (counter_value == div_value)
        counter_value <= 0;
    else 
        counter_value <= counter_value+1;
end 
// clock divider
always@ (posedge clk)
begin
    if(counter_value == div_value)
        divided_clk <= ~divided_clk;    // Suppose to occur after 0.5sec
    else
        divided_clk <= divided_clk;     // If the counter is not at its limit, do nothing 
end
endmodule

Aquí está el banco de pruebas que estoy usando:

`timescale 1ns/100ps

module blinking_LED_tb;
reg clk ;                   // input
wire divided_clk;           // output 

initial 
begin
    clk = 0;

$stop;
end
//////////////////////////////////////////////////////////////////////
// Clock Driver
//////////////////////////////////////////////////////////////////////
always 
#2.5 clk = ~clk;

//////////////////////////////////////////////////////////////////////
// Instantiate Unit Under Test:  blinking_LED
//////////////////////////////////////////////////////////////////////
blinking_LED blinking_LED_0 (
    // Inputs
    .clk(clk),

    // Outputs
    .divided_clk(divided_clk)

    // Inouts

);

endmodule

Aquí están mis configuraciones de simulación:ingrese la descripción de la imagen aquí

Su período de reloj es de 5 ns (200 MHz). Pero está simulando con pasos de tiempo de 1ns o 100ps... por un segundo. Da un paso atrás y piensa en eso. ¿Realmente necesita 200 millones de estados de datos? Y además de eso, ¿realmente necesita cinco pasos de tiempo por estado de datos?
Eso es bastante bueno para la simulación lógica digital. He tenido simulaciones de 3 segundos que tomaron varias horas, pero por supuesto eso no fue solo parpadear un LED.

Respuestas (2)

Bienvenido al maravilloso mundo de la simulación FPGA. Sí, las simulaciones toman mucho tiempo. Correr durante un segundo completo es mucha simulación.

Un truco que puede hacer es acelerar su frecuencia de parpadeo solo con el fin de simular, digamos a 100 Hz. Entonces podrá verificar que su código oscila correctamente en una simulación de solo 10 ms.

Una vez que funcione, vuelva a cambiar a 1 Hz y ejecute una simulación larga para confirmar que aún funciona. Esto evita tener que ejecutar simulaciones lentas de 1 segundo para depurar su código.

F = 200 MHz o T = 5 ns es el reloj más rápido en su diseño y parece que no tiene ningún evento en su diseño para capturar con una precisión de 100 ps. Puede ejecutar la simulación con una precisión de 500 ps en lugar de 100 ps, ​​ya que su banco de pruebas necesita impulsar los bordes del reloj a 2,5 ns. Esto puede acelerar la simulación. Pero es posible que la diferencia no se note en diseños más simples.

Además, si ya no desea buscar señales internas, sino solo los puertos de nivel superior de un módulo, puede configurar el nivel de depuración en APAGADO en la configuración de elaboración en Vivado. Esto es particularmente útil en la simulación a nivel de sistema donde el diseño es complejo y está seguro de que los submódulos ya no necesitan ser depurados. Puede ejecutar simulaciones muy rápido de esta manera.