Оператор case в SystemVerilog не работает

Кто-нибудь знает, почему этот оператор case не работает:

int width;
width = 8;
case (width === 16)
  1'b0: begin
    // correct code
  end
  1'b1: begin
    // we end up here
  end
endcase

Я использую VCS. Я пробовал запускать это с помощью отладчика DVE, и код работал правильно при работе с отладчиком. Кроме того, этот код вложен в другой оператор case, который здесь не показан.


person Victor Lyuboslavsky    schedule 18.06.2012    source источник
comment
Простой пример, который вы привели, работает как в Incisive, так и в Questa. Вы пробовали простой пример с VCS? Если вы видели другое поведение при работе с отладчиком, это звучит как ошибка инструмента. Как определяется ширина? Параметр или что-то еще?   -  person dwikle    schedule 19.06.2012
comment
Это называется if заявлением, и я бы дал пощечину тому парню, который внес этот код в обзор.   -  person Paul S    schedule 19.06.2012
comment
возможно ли было состояние гонки?   -  person Eric Cope    schedule 02.08.2014


Ответы (1)


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

На некоторых языках возвращаемое значение «0» означает истину, я не уверен, что здесь то же самое.

Но, чтобы избежать этой проблемы, я думаю, что код можно изменить другими способами:

В одну сторону:

case (width)
  16 : begin
  // correct code
  end
  default : begin
  // Other code
  end
endcase

Or:

if (width === 16) begin
    // correct code
end
person Enze Chi    schedule 19.06.2012
comment
Переход на if-оператор заставил его работать. Да, эта проблема возникает с VCS. Однако этот вопрос не детерминирован. До недавнего времени с этим кодом все работало нормально. - person Victor Lyuboslavsky; 19.06.2012
comment
Я думаю, вы имеете в виду default. others - это VHDL. - person ; 20.06.2012