Задача класса ведет себя неправильно, если в задаче существует блокирующее блокирование, когда несколько экземпляров - PullRequest
0 голосов
/ 26 октября 2018

Я отлаживал загадочную ошибку в моем коде системного журнала в течение нескольких недель.Мой коллега помог мне и обнаружил, что оператор disable block_name вызывает странное поведение.

Мой поиск дал следующий комментарий от Дэйва: «Как убить поток из нескольких запущенных потоков и ждатьвсе потоки для завершения "(Mentor Verification Academy)

Одна вещь, с которой вы должны быть осторожны, это если вы пытаетесь переместить этот код в класс, и существует несколько экземпляров этого класса,Оператор disable уничтожает все потоки с именем Th3.

Это объясняет, почему мой код systemverilog неправильно себя вел.

Но я сейчас не знаю, почему стандарт systemverilog определяет этот путь.Есть ли причина, по которой стандарт был определен таким образом?Поскольку задача в классе неявно объявлена ​​как автоматическая, я предполагал , каждый экземпляр полностью независим.

1 Ответ

0 голосов
/ 26 октября 2018

Такое поведение исходит от Verilog и должно оставаться таким для обратной совместимости.Оператор disable можно использовать вне области действия отключаемого объекта, и нет синтаксиса для указания конкретного экземпляра области действия.

Ситуация связана с объявлением статической переменной внутри именованной области.блок или задача.Имя области, которое вы используете для доступа к этой статической переменной, равно static

...