2014-01-30 4 views
1

Мой вопрос: fork ... join_none Конструкция в SV.Практическое использование вилки join_none

Согласно разделу 9.3.2 LRMпараллельных блоков, таблица 9-1- вилки присоединиться опции управления:

Родительский процесс продолжает выполняться одновременно со всеми процессами порождены вилка. Инициализированные процессы не запускаются, пока родительский поток не выполнит команду блокировки.

Использование join_none не дожидаясь завершения любого процесса разветвления и продолжит выполнение неблокирующих операторов. Я пытаюсь подумать о сценарии, в котором во время проектирования/проверки будет использоваться join_none.

Спасибо!

ответ

1

Наиболее распространенное использование fork/join_none в SystemVerilog - это когда вы хотите создать динамическое число параллельных потоков. В тестовом стенде каждый поток может представлять собой одно устройство на шине.

initial 
    begin 
    N = $urandom_range(1,10); 
    for(int j = 1; j <= N; ++j) 
     fork 
     automatic int k = j; // local copy, k, for each value of j 
     start_a_thread(k); 
     join_none 
    end 
2

join_none широко используется в методологиях проверки, таких как UVM. Он используется для создания нескольких потоков параллельно в тестовом банке. Например, его можно использовать для запуска монитора прерываний параллельно с драйвером шины данных.

+1

Thanks. Теперь я понимаю это лучше. – muchagracios

Смежные вопросы