Как мы можем включить многопоточность в UVM. Находятся ли потоки в испытательном стенде UVM, расширенные компоненты UVM, последовательности и методы между разветвлением и соединением? Насколько я искал, такой многопоточный тестовый стенд вряд ли повлияет на ускорение времени моделирования или повышение производительности, если только дизайн не разделен на несколько ядер оборудования. Это так?
Многопоточность в UVM
Ответы (2)
Многопоточность в контексте SystemVerilog/UVM не имеет ничего общего с многоядерным оборудованием. Хотя поставщики EDA обеспечивают многоядерную поддержку, это не то, что вы можете контролировать посредством кодирования.
Также взгляните на этот вопрос: запуск фаз UVM на нескольких ядрах а>.
На заметку:
Моделирование HDL по своей природе является многопоточным, потому что вы должны захватывать обновления сигналов, которые происходят параллельно. SystemVerilog также позволяет пользователю создавать свои собственные параллельные потоки выполнения, используя семейство конструкций fork...join
. Сама UVM активно использует эту функцию, например, для параллельного запуска последовательностей и фаз выполнения всех компонентов. Конечно, вы также можете использовать fork...join
в своем собственном коде, чтобы запускать свои собственные параллельные потоки, если вам нужно.
Еще одно замечание: я думаю, что терминология для запуска подобных потоков в SV - это "запуск параллельных процессов".
Для меня и вопрос, и ответ показывают замешательство. Ахлават, кажется, задает два вопроса:
(1) разве испытательный стенд UVM не является многопоточным по своей природе? а также
(2) если нет, можно ли ввести многопоточность в испытательный стенд UVM?
Я думаю, что ответ на вопрос № 1 сбивает с толку, потому что я думаю, что утверждение о том, что HDL-моделирование является многопоточным по своей природе, неверно. Моделирование HDL пытается смоделировать параллелизм в конструкции оборудования, где все различные электронные компоненты работают параллельно; но он не использует многопоточность для моделирования этого. Вместо этого симуляторы HDL (которые, конечно же, сами являются программами) являются, по крайней мере, традиционно, однопоточными программами. Вполне возможно смоделировать эффекты параллелизма в однопоточной программе, и именно это и делают симуляторы HDL. Моделирование параллелизма, то есть создание иллюзии того, что вещи происходят одновременно, — это не то же самое, что вещи, происходящие на самом деле в одно и то же время.
Многопоточность означает разбиение данной программы на несколько программ, которые могут выполняться одновременно. Теперь от операционной системы зависит, действительно ли они работают одновременно.
А операционная система, в свою очередь, ограничена архитектурой процессора и памяти машины.
- На многоядерном компьютере вполне вероятно, что разные потоки будут выполняться на одном ядре.
- На одноядерном компьютере, где ядро старомодного типа без возможности размещать внутри себя несколько потоков, многопоточности фактически не будет, скорее будут переключаться разные потоки как переключение контекста.
Что ж, теперь, когда все сказанное, один аспект данного ответа был точным, а именно то, что конструкции fork-join, которые не являются частью UVM как таковой, а скорее Verilog и System Verilog, позволяют, по сути, , укажите операционной системе, что вы хотите, чтобы определенный код в вашей тестовой среде выполнялся в отдельных потоках. Но это не свойство библиотеки UVM, а конструкция Verilog/System Verilog.