Threads, événements, mailboxes et sémaphores
Faire travailler plusieurs parties du testbench en parallèle et choisir le bon mécanisme de synchronisation.
Plusieurs activités en même temps
Un testbench doit souvent générer des commandes, surveiller des réponses et gérer un timeout en parallèle. fork...join lance plusieurs threads.
fork
drive_requests();
monitor_responses();
watch_timeout();
joinjoin attend tous les threads. join_any reprend dès que l'un se termine. join_none reprend immédiatement et laisse les threads continuer. Avec join_any, il faut souvent arrêter proprement les autres branches, par exemple avec disable fork, afin de ne pas laisser un timeout ou un driver tourner après la fin du test.
Les variables locales automatiques évitent qu'une boucle partage involontairement la même valeur entre threads.
for (int port = 0; port < 4; port++) begin
automatic