Me encontré con este problema, mientras que la escritura de un banco de pruebas para un proyecto. He encontrado cómo utilizar $random en verilog, pero por alguna razón no produce resultados extraños para mí. Tengo 2 de 16 bits regs llamado A y B, he probado con número aleatorio entre 0 a 10 cada segundo de salida es un valor que es el valor máximo que puede tener en 16 bits. Me pregunto si alguien más había tenido problema similar y puede ofrecer ayuda.
Gracias

reg[15:0]a;
reg[15:0]b;

 integer seed,i,j;
 initial begin 


   for (i=0; i<6; i=i+1)
    begin
      a=$random%10; 
      #100;
      b=$random%20;
    $display("A %d, B: %d",a,b);    
   end 
$finish;
  • $random, $urandom, $srandom y $urandom_range() son algunas de las tareas del sistema para la generación de números aleatorios. $urandom_range genera números aleatorios en un rango dado. $srandom de semillas específicas de generación de números aleatorios.
InformationsquelleAutor gps | 2015-12-01

1 Comentario

  1. 6

    de salida es un valor que es el valor máximo que puede tener en 16 bits.

    $random produce firmado números aleatorios. Los números negativos se parecen ser los grandes números a la hora de imprimirlo como números sin signo.

    El código que has publicado podrían aparecer algo como el de abajo, y este no se encuentra dentro del rango de 0 a 10.

    A     8, B: 65517
    A 65527, B: 65527
    A     7, B:    17
    A 65535, B: 65522
    A     1, B:     9
    A     8, B:    17
    

    Como una solución, uso $urandom para generar unsigned números aleatorios que esperar entre 0 a 10 y de 0 a 20.

    Aquí es una modificación del código que has publicado

    module test;
       initial begin
          reg[15:0]a;
          reg [15:0] b;
    
          integer    seed,i,j;
          for (i=0; i<6; i=i+1)
            begin
               a=$urandom%10; 
               #100;
               b=$urandom%20;
               $display("A %d, B: %d",a,b);    
            end 
          $finish;
       end
    endmodule
    

    El código anterior podría producir una salida algo como:

    A     8, B:     0
    A     3, B:    10
    A     7, B:    11
    A     6, B:     3
    A     2, B:     7
    A     1, B:    10
    

    Que supongo que es lo que usted espera.

    El código se puede encontrar y ejecutar aquí.

    • Wow, muchas gracias.

Dejar respuesta

Please enter your comment!
Please enter your name here