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,
- Declarar y crear el uvm_barrier
- Establecer el proceso para estar esperando
- 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