2012-06-18 63 views
0

任何人都知道爲什麼這個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語句中,此處未顯示。

+0

你給工作正常的簡單示例在Incisive和Questa。您是否嘗試過使用VCS的簡單示例?如果在使用調試器運行時看到不同的行爲,這聽起來像是一個工具錯誤。 'width'是如何定義的?一個參數或別的東西? – 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語句使其工作。是的,VCS出現了這個問題。但是,這個問題不是確定性的。直到最近,這些代碼都能正常工作。 –

+1

我認爲你的意思是'預設'。 'others'是VHDL。 – 2012-06-20 02:31:19