Guía de escritura de la plataforma de prueba de verificación SystemVerilog Capítulo 7 Subprocesos y comunicación entre subprocesos

7.1 Uso de
Thread Verilog: las declaraciones en begin ... end se ejecutan de manera secuencial, y las declaraciones en fork ... join se ejecutan de manera concurrente.
System Verilog: introduce dos nuevos métodos para crear hilosUse fork ... join_none y fork ... join_any.
Cuando el bloque fork ... join_none llama a la declaración en su bloque, el subproceso padre continúa ejecutándose.
Cuando el bloque fork ... join_any llama a las declaraciones en su bloque, el subproceso padre continúa ejecutándose después de que se completa la primera declaración, y otros subprocesos en pausa también pueden continuar.
Inserte la descripción de la imagen aquí
tenedor ... únete: Después de ejecutar todos los bloques de instrucciones, el procesamiento posterior del bloque puede continuar.
tenedor ... join_any: Cuando se completa la primera instrucción (la ejecución más rápida de todos los procesos), el proceso padre continúa ejecutándose.
tenedor ... join_none: El proceso padre se ejecuta al mismo tiempo.
comenzar ... terminar: Ejecución secuencial, generalmente anidada en una instrucción fork.

Cree un hilo en la clase, use fork ... join_none para comenzar un hilo.
Variables automáticas en subprocesos: utilice variables automáticas en fork ... declaraciones de join_none para guardar copias de variables.
Cuando usa bucles para crear hilos, si no guarda los valores de las variables antes de ingresar a la siguiente ronda de bucles, encontrará un vacío común pero difícil de encontrar. Por lo general, use automático para evitar este problema. Las variables automáticas se pueden declarar en el programa.
Cuando hay varios subprocesos y algunos se ejecutan durante mucho tiempo, useespera tenedorDeclaración de esperar a que finalicen todos los subprocesos secundarios.
inhabilitarLas declaraciones se pueden usar para detener subprocesos en System Verilog.
7.2 Detener hilos
Detener un solo hilo: deshabilitar
== Detener múltiples hilos: deshabilitar fork ==
Use el deshabilitado etiquetado para especificar el proceso que desea detener.
7.3 Comunicación entre hilos
La sincronización del control y el intercambio de datos se denomina comunicación entre subprocesos (IPC). En System Verilog, se pueden usar eventos, lemas y buzones.
7.4 Eventos
En Verilog, el operador @ es sensible al borde, siempre está bloqueado y espera cambios en los eventos. Otros hilos pueden desencadenar eventos a través del operador->.
SystemVerilog presenta la función triggered (), que se puede utilizar para consultar si se ha activado un evento, incluso en el momento actual. El hilo puede esperar el resultado de esta función sin bloquear el operador @.
7.5
Idioma del banner El lenguaje del banner tiene tres operaciones. =Use el nuevo método para crear un semáforo con una sola clave o varias claves, use get para obtener una o más claves y ponga para devolver una o más claves.
Puedes pensar en el semáforo como una clave, y quien tenga la clave tiene derecho a usar el recurso. El semáforo puede considerarse como un mutex, utilizado para lograr el control de acceso al mismo recurso.
Si un hilo no puede obtener la clave, se bloqueará para siempre. Múltiples subprocesos bloqueados se colocarán en cola de una manera primero en entrar, primero en salir (FIFO).
Si solo hay una clave, el primer subproceso solicita dos y el segundo subproceso solicita uno. En este momento, se ignorará el principio FIFO y el segundo subproceso se clasificará antes que el primer subproceso.
Puede devolver más llaves de las que sacó.
semáforo sem; Crear un banner
sem = nuevo (1); Asignar una clave
sem.get (1); Consigue una llave
sem.put (1); Devuelve una llave
try_get (); Obtenga la clave sin ser bloqueada, el retorno 1 significa que hay suficientes claves, el retorno 0 significa que la clave no es suficiente.
7.6 Buzón El buzón en
SystemVerilog resuelve la transferencia entre dos hilos. Desde una perspectiva de hardware, puede verse como un FIFO con fuente y receptor. La fuente coloca los datos en el buzón y el receptor saca los datos del buzón.
El buzón es un objeto y debe instanciarse llamando a la nueva función. Hay un tamaño de parámetro opcional durante la creación de instancias para limitar las entradas en el buzón. Si el tamaño es 0 o no se especifica, el buzón es infinitamente grande y puede contener cualquier cantidad de entradas.
Use la tarea de poner para colocar los datos en el buzón, use get para eliminar los datos. Si el buzón está lleno, put se bloqueará; y si el buzón está vacío, get se bloqueará. La tarea de vistazo puede obtener una copia de los datos en el buzón sin eliminarla.
7.7 Crear un programa de prueba con hilos que puedan comunicarse entre hilos

38 artículos originales publicados · Me gusta 29 · Visitas 10,000+

Supongo que te gusta

Origin blog.csdn.net/weixin_45270982/article/details/95882380
Recomendado
Clasificación