Я пытаюсь объявить модель памяти 1 МБ, используя массив в Verilog в ModelSim, используя приведенный ниже код. Я также должен иметь адрес 0x80020000 в адресном пространстве.Создание массива в Verilog с использованием ModelSim
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, теперь я получаю внутреннее переполнение размера данных во время компиляции. Почему конечный диапазон памяти отображается как -2146828288 (FFFF FFFF 800A 0000) в ошибке (дополнение 2)?
Все примеры, которые я видел в Интернете, показывают меньшие воспоминания, то есть 256 слов, поэтому рег [7: 0] MEMORY [0: 255]), поэтому я не уверен, есть ли проблема в моей логике или если проблема связана с HW на моей машине. Я использую 32-разрядную версию Modelsim & с 4 ГБ ОЗУ.
Вы действительно хотите сгенерировать 4 ГБ памяти? Возможно, вы перегрузили свой симулятор. У вас есть 64-битная машина и 6+ гб оперативной памяти? – Tim
Я думаю, что VCS может использовать редкие воспоминания через атрибуты. Не уверен в Modelsim. –