2014-12-24 39 views
0

我已經定義了一個具有三個整數的結構,然後創建了一個結構的動態數組。在後面的代碼,我想增加一些結構的整數值的:SystemVerilog結構的個體變量是否可以用++遞增?

typedef struct { 
    integer tc; 
    integer pass; 
    integer fail; 
} score_t; 

score_t scorecard[]; 
integer tc_count; 

initial 
.... 
scorecard = new[`MAX_TC]; 
.... 
scorecard[tc_count].fail = 0; 
.... 
scorecard[tc_count].fail++; 

然而,當我在Aldec公司的Active-HDL編譯我收到以下錯誤:

Error: VCP2615 ../../../m3_test_load_tb.sv : (283, 33): 
        scorecard[tc_count].fail is not l-value. 

這是語言的限制?我可以分配一個臨時變量來執行增量操作,然後將值放回結構中,但這看起來很笨拙。

+0

+++語法在SystemVerilog中是合法的。確保'tc_count'沒有超出範圍,必須小於'MAX_TC'。這可能會導致錯誤。 – Greg

回答

4

該代碼與modelsim 10.1d編譯。我已經在EDA遊樂場進行了測試。

似乎Aldec公司的工具不喜歡這一行:

scorecard[tc_count].fail++; 

作爲一種變通方法,您可以用替換行:

scorecard[tc_count].fail += 1; 

現在,它與Aldec公司的工具編譯爲好。 http://www.edaplayground.com/x/VpV

+0

謝謝@Coverify。我已經採取了蠻力的方法,並使用'記分卡[tc_count] .fail =記分卡[tc_count] .fail + 1;'這是有效的,但我希望弄清楚我是否在SV中做了非法的事情,只是該工具的一個錯誤。如果我沒有看到任何更明確的內容,我會將其作爲錯誤報告傳遞給Aldec –

+1

這絕對是合法的。如果'記分卡[tc_count] .fail =記分卡[tc_count] .fail + 1;'有效,那麼記分卡[tc_count] .fail'必須是一個左值(一個* lvalue *是一個在LHS分配)。 –

相關問題