2012-06-18 5 views
0

Кто знает, почему это дело заявление не работает:саз SystemVerilog не работает

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, который не показан здесь.

+0

Простой пример, который вы дали работает правильно как в резком, так и в квесте. Вы попробовали простой пример с VCS? Если вы видели другое поведение при работе с отладчиком, это звучит как ошибка инструмента. Как определяется «ширина»? Параметр или что-то еще? – dwikle

+3

Это называется оператором 'if', и я ударил парня, который внес этот код в обзор. –

+0

возможно ли было состояние гонки? –

ответ

3

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

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

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

Один из способов:

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

Или:

if (width === 16) begin 
    // correct code 
end 
+0

Изменение на if-statement заставило его работать. Да, эта проблема происходит с VCS. Однако этот вопрос не является детерминированным. До недавнего времени все отлично работало с этим кодом. –

+1

Я думаю, вы имеете в виду 'default'. 'другие' - это VHDL. –