$ aleatorio en Verilog parece no funcionar

3

En Verilog, $random genera diferentes entradas aleatorias pero esto no parece funcionar cuando lo intento. Cada vez que uso $random para un registro o entero, debo obtener diferentes valores, pero no es así. Lo probé incluso en el simulador de Modelsim.

enlace

'timescale 1ns/1ns
module tt;
integer kk;

initial
begin
  repeat(5) begin
    kk=$random % 10;
  end
  $monitor("%d",kk);
end
endmodule
    
pregunta Abhi

2 respuestas

5

Si saca los 5 valores aleatorios que genera, verá que obtiene diferentes valores: EDA Playground .

El punto de una semilla es que, dada la misma semilla, puedes generar la misma secuencia. Esto le permite tener pruebas aleatorias, pero cuando falla una instancia, puede agregar la semilla que se usó y volver a ejecutar la misma prueba.

module tt;
  integer kk;
  integer seed = 1; //change this for different sequence
  initial
    begin
      repeat(5) begin
        kk=$random(seed) % 10;
        $display("%d",kk);
      end
    end

endmodule
    
respondido por el pre_randomize
3

Su problema es que está generando 5 valores aleatorios con un retraso de 0, y $monitor solo imprime una línea por intervalo de tiempo cuando uno de sus argumentos cambia. No debe usar $ monitor, excepto en casos de depuración raros.

También te sugiero que uses $urandom en lugar de $random . La semilla para $urandom se puede cambiar en la línea de comandos del simulador sin tener que volver a compilar. Incluso puedes seleccionar una semilla aleatoria para que cada vez que simules, use una nueva semilla aleatoria (en ModelSim: -sv_seed random ). $urandom tiene una estabilidad aleatoria que sería muy difícil de lograr usando $random . La estabilidad aleatoria le permite realizar ciertos cambios en su banco de pruebas y volver a ejecutar la simulación con la misma semilla sin molestar a los números aleatorios generados. Esto hace que la depuración sea mucho más predecible. Consulte la sección 18.14 del IEEE Std 1800-2012 LRM.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas