Переопределение встроенного метода примера в systemverilog

Мой вопрос заключается в том, создает ли одновременная выборка точки покрытия несколькими потоками (после переопределения встроенного метода выборки) какие-либо побочные эффекты.

Более подробно рассмотрим следующий код:

covergroup p_cg with function sample(bit [1:0] a);
  coverpoint a;
endgroup : p_cg

p_cg cg1 = new;

init cg1.sample(0);
init cg1.sample(1);

Насколько я понимаю, два потока будут конкурировать, чтобы обновить группу покрытия для точки покрытия «а», а метод «образец» будет выполняться для обоих потоков (с использованием отдельных стеков данных). Как вы думаете, это создаст какие-либо побочные эффекты, когда оба потока попытаются обновить группу покрытия/точку покрытия одновременно? (если это так, очевидное решение, конечно, с использованием семафоров).

Привет, Стаст


person Stast    schedule 07.12.2015    source источник


Ответы (3)


Нет. Выборка по своему определению не требует много времени.

person dave_59    schedule 07.12.2015
comment
Это связано с тем, что функция «образец» встроена и выполняется симулятором за один раз или реализована специально? Насколько я понимаю, в принципе, условия гонки могут возникать между двумя функциями, которые выполняются одновременно и имеют, например, несколько блокирующих назначений, которые обращаются к одним и тем же переменным (например, свойствам класса). В приведенном выше примере обе функции, конечно, не будут потреблять время моделирования, однако не может ли переключение контекста между двумя потоками моделирования происходить в любое время, находясь в активной области времени моделирования 0? Спасибо - person Stast; 09.12.2015

Потоки SystemVerilog не похожи на собственные потоки ОС. Они планируются без упреждения. Это означает, что в любой момент времени работает только один поток SV, и он будет продолжать работать до тех пор, пока не вернет управление планировщику потоков (обычно путем трудоемкого действия), который затем передаст управление другому потоку.

Итак, в вашем примере два потока будут иметь атомарный доступ к кавергруппе и ее методу образца. Это означает, что один поток не будет прерван другим, пока он выполняет пример метода группы прикрытия. Не будет чередующегося выполнения с непредсказуемым результатом, как можно было бы ожидать при использовании собственных потоков ОС.

Единственный "побочный эффект", который вы можете ожидать, - это порядок, в котором 2 потока обращаются к кавергруппе. В одном моделировании поток A мог получить доступ к группе покрытия первым, а поток B — вторым, в то время как в другом моделировании все могло быть наоборот. Этот порядок должен быть соотнесен с начальным числом генератора случайных чисел. Таким образом, если вы запустите ту же симуляцию с теми же начальными условиями и с тем же начальным числом, вы должны получить тот же порядок, в котором потоки обращаются к кавергруппе.

person Tiberius P.    schedule 11.10.2016

Нет. Аргумент sample() передается по значению, а не по ссылке. Это не будет иметь никакого побочного эффекта. Основываясь на способе сбора корзины покрытия, порядок выполнения функции выборки в двух потоках также не будет иметь значения, поскольку в конце вы получите один и тот же результат покрытия независимо от того, какая выборка потока была первой.

person hevangel    schedule 13.05.2017