2012-10-26 186 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