我正在尝试使用下面的代码在 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。