Использование $ past в утверждениях System Verilog

Я хочу проверить, равно ли текущее значение переменной «1», тогда предыдущее значение переменной должно быть «0». Я использую $ past в утверждениях System Verilog. Здесь я проверяю, если cal_frame_mode = 1, то это предыдущее значение cal_frame_mode = 0. Мой код ниже. Однако я вижу ошибку утверждения. Когда я проверяю сигнал, он ведет себя правильно. Утверждение отмечает 2 часа после первой проверки. Как остановить это утверждение после проверки всего одного такта ?.

property p_NOP_2_RX_CAL;
  @(posedge clk)
  (cal_frame_mode==3'b001) |-> ##2 $past(cal_frame_mode)==3'b000;  
endproperty

assert_nop2cal : assert property(p_NOP_2_RX_CAL);

person Samss77    schedule 01.07.2016    source источник


Ответы (1)


##2 означает подождать два такта. По умолчанию $past смотрит на значение выражения на один такт назад от текущих часов (по умолчанию это часы, определенные в свойстве). Следовательно:

(cal_frame_mode==3'b001) |-> ##2 $past(cal_frame_mode)==3'b000;

Эквивалентно:

(cal_frame_mode==3'b001) |-> ##1 cal_frame_mode==3'b000;

Вы хотите: (cal_frame_mode==3'b001) |-> $past(cal_frame_mode)==3'b000;, но я предполагаю, что причина, по которой у вас был ##2, состоит в том, чтобы отфильтровать cal_frame_mode, равное единице для двух часов. Если это так, то лучшим решением будет добавить $change или !$stable к антецеденту, это то, что проверка выполняется только тогда, когда cal_frame_mode изменился и текущее значение равно единице.

$changed(cal_frame_mode) && (cal_frame_mode==3'b001) |-> $past(cal_frame_mode)==3'b000;

Утверждения задокументированы в IEEE Std 1800-2012 16 Утверждения
16.9.3 Функции выборочного значения подробно описывают $sample, $rose, $fell, $stable, $changed и $past
16.12.6 Описание |-> и |=>

person Greg    schedule 01.07.2016
comment
Спасибо, Грег, это помогло. - person Samss77; 02.07.2016
comment
@ Samss77, спасибо, лучше всего отдать голосование и / или принять ответ. Это также помогает другим людям, задавшим тот же вопрос, найти лучший ответ, не читая и не пытаясь попробовать все отправленные ответы (при условии, что кто-то добавляет ответы). - person Greg; 02.07.2016