SystemVerilog отключает свойство обложки после попадания

У меня есть несколько укрытий, которые, как я ожидаю, будут срабатывать довольно часто, и я вижу, что они начинают влиять на производительность моей симуляции, потому что срабатывают слишком часто. Я не хочу удалять их, потому что я хочу убедиться, что я все еще нажимаю на эти свойства, но мне все равно, сколько раз я нажимаю на них. Есть ли способ отключить свойство покрытия после того, как оно попало один раз, чтобы оно не мешало производительности моделирования?

B2BReq : cover property ( 
  @(posedge CLK iff !RESET)
  Intf.ReqValid ##1 Intf.ReqValid
);

Я думаю о чем-то вроде этого:

bit cov_disable;
B2BReq : cover property ( 
  @(posedge CLK iff !RESET) disable iff(cov_disable)
  Intf.ReqValid ##1 Intf.ReqValid |=> cov_disable = 1
);

Но это неправильный синтаксис. Есть ли способ добиться чего-то подобного?


person Melandru's Square    schedule 14.05.2021    source источник


Ответы (1)


Некоторые инструменты автоматически отключают директиву обложки, когда она достигает определенного предела. Я знаю, что в Questa по умолчанию отключается после 1 удара.

Кроме того, вы можете получить лучшее моделирование производительности, что вы хотите, с простым следствием

B2BReq : cover property ( 
  @(posedge CLK iff !RESET)
  Intf.ReqValid |-> ##1 Intf.ReqValid;
);

Кстати, синтаксис, который вы искали, был

bit cov_disable;
B2BReq : cover property ( 
  @(posedge CLK iff !RESET) disable iff(cov_disable)
  Intf.ReqValid ##1 Intf.ReqValid |=> (1,cov_disable = 1);
);
person dave_59    schedule 14.05.2021
comment
Я получаю сообщение об ошибке компиляции, когда пытаюсь назначить глобальную переменную из свойства покрытия. В списке элементов соответствия могут быть назначены только локальные переменные. Можно ли установить такой глобальный флаг внутри свойства обложки? - person Melandru's Square; 15.05.2021
comment
Откуда вы знаете, что это является причиной ваших проблем с производительностью? Вы попробовали мое первое предложение? - person dave_59; 15.05.2021
comment
Я использую средство просмотра покрытия Questa, чтобы увидеть пиковое время памяти директив покрытия, и оно находится в верхней части списка. Я попробовал предложенное вами изменение и не вижу никакой разницы в пиковом времени памяти. - person Melandru's Square; 17.05.2021
comment
Я думаю, это моя проблема. Пиковое время памяти — это просто время симуляции, при котором была достигнута пиковая память, а не время, затраченное на выделение/освобождение памяти для этого покрытия. - person Melandru's Square; 17.05.2021