以下のコードを使用して、ModelSim で Verilog の配列を使用して 1MB メモリ モデルを宣言しようとしています。また、アドレス空間内にアドレス 0x80020000 が必要です。
parameter MEM_START = 32'h7FFA_0000;
parameter MEM_END = 32'h800A_0000;
reg [7:0] MEMORY [MEM_START:MEM_END];
上記のコードは正常にコンパイルされますが、シミュレートしようとすると次のエラーが発生します。
# Loading project.memoryModule
# ** Fatal: (vsim-3419) Array with element size 2 and index range 2147090432 downto -2146828288 is too large.
# Time: 0 ns Iteration: 0 Instance: Project/memoryModule.v
# FATAL ERROR while loading design
# Error loading design
ただし、メモリ インデックスを 7FEF_FFFF から 7FFF_FFFF (これも 1 MB である必要があります) に初期化すると、すべて問題なく、シミュレーションで割り当てられたメモリを確認できます。範囲を 7FEF_FFFF から 8000_0000 に変更すると、コンパイル中に内部データ サイズのオーバーフローが発生します。メモリの最後の範囲がエラー (2 の補数) で -2146828288 (FFFF FFFF 800A 0000) と表示されるのはなぜですか?
私がオンラインで見たすべての例は、より小さなメモリを示しています。つまり、256 ワード (reg [7:0] MEMORY [0:255]) であるため、ロジックに問題があるのか、それとも問題が関連しているのかはわかりません。私のマシンのハードウェア。32 ビット バージョンの Modelsim を使用しており、4 GB の RAM を搭載しています。