[UVM] UVM UVM Barrera de proceso de sincronización de (a)

                                       UVM Barrera

 

     La clase de barrera UVM permite el control de la sincronización entre los procesos.

  • uvm_barrier permite un conjunto de procesos para ser bloqueados hasta que el número deseado de los procesos de llegar a la
  • punto de sincronización
  • Una vez los procesos son liberados después de todo punto de sincronización del proceso de llegar

     Si el umbral se establece en un valor menor que el número de esperando actualmente para los procesos, a continuación, se restablece la barrera y de espera procesos son activados

 

一, La clase uvm_barrier a continuación ha incorporado en los métodos,

  • nuevo
  • set_auto_reset
  • set_threshold
  • get_threshold
  • get_num_waiters
  • wait_for
  • Reiniciar
  • cancelar

二, uvm_barrier métodos

1, nuevo ()

function new (
  string name = "",
  int threshold = 0
)

    Crea un nuevo objeto de barrera.

2, wait_for ()

virtual task wait_for()

    Esta llamada a un método, no espera a procesos suficientes para llegar a la barrera antes de continuar.

 

3, set_threshold ()

virtual function void set_threshold (
  int threshold
)

       El número de procesos que esperar a que se establece por el method.This set_threshold determina cuántos procesos deben estar esperando en la barrera antes de que los procesos pueden proceder.

4, get_threshold ()

virtual function int get_threshold();

       Obtiene el valor umbral de corriente para la barrera.

 

5, get_num_waiters ()

virtual function int get_num_waiters ()

       Devuelve el número de procesos que se están esperando en la barrera.

 

6, reset ()

virtual function void reset (
  bit wakeup = 1
)

       Restablece la barrera. Esto establece el recuento de espalda camarero a cero.

       El umbral no se ha modificado. Después del reinicio, la barrera obligará a los procesos que esperar a que el umbral de nuevo. Si se establece el bit de atención, se activarán los procesos que actualmente están esperando.

 

7, set_auto_reset ()

virtual function void set_auto_reset (
  bit value = 1
)

       Determina si la barrera debe restablecer sí mismo después de que se alcanza el umbral.
       El valor por defecto está activada, por lo que cuando una barrera alcanza su umbral se restablecerá, y los nuevos procesos se bloqueará hasta que el umbral se alcanza de nuevo. Si auto-reset está apagado, entonces una vez que se alcanza el umbral, nuevos procesos pasan a través sin ser bloqueado hasta que la barrera se pone a cero.

8, cancelar ()

virtual function void cancel ()

三, el uso uvm_barrier

      Usando uvm_barrier implica debajo de métodos,

  1. Declarar y crear el uvm_barrier
  2. Establecer el proceso para estar esperando
  3. Llamando al método wait_for () dentro del proceso de

 

Cuatro, ejemplos uvm_barrier

1, utilizando nuevas y wait_for métodos

     El ejemplo muestra a continuación utilizando el uvm_barrier,

  • uvm_barrier se declara con el nombre ba
  • la barrera se crea llamando ba.new () método, el umbral o el número de proceso de espera es un argumento para el nuevo método
  • Este ejemplo tiene 4 procesos con retardo en él, y el método wati_for se llama después del retardo
  • Los estados después de la wait_for conseguirán ejecutado sólo después de los alcances de proceso 3 a wait_for (3 El umbral se han establecido durante la creación de la barrera)
module uvm_barrier_ex;
  uvm_barrier ba;
  
  initial begin
    ba = new("ba",3);
    
    fork
      begin       //process-1
        $display($time," Inside the process-a");
        #20;
        $display($time," process-a completed");
        $display($time," process-a Waiting for barrier");
        ba.wait_for();
        $display($time," process-a after wait_for");
      end
      
      begin       //process-2
        $display($time," Inside the process-b");
        #10;
        $display($time," process-b completed");
        $display($time," process-b Waiting for barrier");
        ba.wait_for();
        $display($time," process-b after wait_for");
      end
      
      begin       //process-3
        $display($time," Inside the process-c");
        #30;
        $display($time," process-c completed");
        $display($time," process-c Waiting for barrier");
        ba.wait_for();
        $display($time," process-c after wait_for");
      end
      
      begin       //process-4
        $display($time," Inside the process-d");
        #5;
        $display($time," process-d completed");
        $display($time," process-d Waiting for barrier");
        ba.wait_for();
        $display($time," process-d after wait_for");
      end
    join
  end
endmodule
  • salida del simulador 
0 Inside the process-a
0 Inside the process-b
0 Inside the process-c
0 Inside the process-d
5 process-d completed
5 process-d Waiting for barrier
10 process-b completed
10 process-b Waiting for barrier
20 process-a completed
20 process-a Waiting for barrier
20 process-d after wait_for
20 process-b after wait_for
20 process-a after wait_for
30 process-c completed
30 process-c Waiting for barrier

 

Ha publicado 185 artículos originales · alabanza 118 won · vistas 40000 +

Supongo que te gusta

Origin blog.csdn.net/gsjthxy/article/details/105253238
Recomendado
Clasificación