2014-12-24 41 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分配)。 –

相关问题