2012-10-26 177 views
1

当我初始化数组sbox时,出现语法错误。请帮助我。初始化Verilog中的数组错误

reg [7:0] sbox[15:0]; 
sbox = '{ 
8'h63, 8'h7c, 8'h77, 8'h7b, 
8'hf2, 8'h6b, 8'h6f, 8'hc5, 
8'h30, 8'h01, 8'h67, 8'h2b, 
8'hfe, 8'hd7, 8'hab, 8'h76 
}; 

这实际上是sbox。错误它是表示:

near "=": syntax error, unexpected '=', expecting IDENTIFIER or TYPE_IDENTIFIER

我用ModelSim仿真

+0

你会屈尊透露你说的那些语法错误实际上是**说**? –

+0

我只和VHDL一起工作了很短时间(甚至没有使用数组),但一般来说:数组中最后一个'''',''; * * *可能是你的罪魁祸首。 – dualed

+0

@HenningMakholm靠近“=”:语法错误,意外的'=',期待IDENTIFIER或TYPE_IDENTIFIER 这是它显示的错误 – nbsrujan

回答

4

您使用的数组赋值语法是唯一在SystemVerilog有效,而不是Verilog

所以你的编译器需要支持这个,你需要告诉编译器该文件是SystemVerilog。大多数编译器(包括modelsim)将基于扩展名假定文件类型,例如, .v == Verilog.sv == SystemVerilog,而其他人需要一个开关。

另外,从toolic回答指出,你需要放置在initial块分配,或者你可以声明与分配相结合,这样的:

reg [7:0] sbox[15:0] = '{ 
     8'h63, 8'h7c, 8'h77, 8'h7b, 
     8'hf2, 8'h6b, 8'h6f, 8'hc5, 
     8'h30, 8'h01, 8'h67, 8'h2b, 
     8'hfe, 8'hd7, 8'hab, 8'h76 
}; 
0

分配应该是一个initialalways块内:

module tb; 

reg [7:0] sbox[15:0]; 

initial begin 
    sbox = '{ 
     8'h63, 8'h7c, 8'h77, 8'h7b, 
     8'hf2, 8'h6b, 8'h6f, 8'hc5, 
     8'h30, 8'h01, 8'h67, 8'h2b, 
     8'hfe, 8'hd7, 8'hab, 8'h76 
    }; 
end 

endmodule 
+0

是的我也试过这个,但无法获得代码编译。 Iam得到这些错误错误:(vlog-2110)非法引用内存“sbox”。 **错误:非法LHS的分配。 – nbsrujan

+0

此语法适用于使用2种不同模拟器(VCS和Incisive)的语法。也许你的模拟器不支持这种合法的语法。或者,也许你需要使用特殊的模拟器选项来接受语法。阅读你的模拟器文档。 – toolic

+0

我的模拟器是modelsim – nbsrujan