Verilog $readmemh занимает слишком много времени для изображения RGB 50x50 пикселей
Я пытаюсь скомпилировать verilog-код для программирования на ПЛИС, где я буду реализовывать приложение VGA. Я использую QuartusII и Altera. Я пытаюсь использовать readmemh правильно для получения изображения пиксель за пикселем.
На данный момент я преобразовал изображение в текст RGB с помощью Matlab. Каждый имеет следующий формат и ничего больше (пример): 03 A0 15 B7 ...
На данный момент я не получаю никаких синтаксических ошибок, однако мне пришлось определить три регистра, каждый из которых имеет 50x50 = 2500 бит, и он компилируется довольно медленно, и я получаю предупреждение "Требования к времени не выполнены".
Когда я хочу использовать файл с лучшим разрешением (640x480 было бы здорово, но, кажется, его ограничения), это значительно хуже. Для получения изображения размером 200x200 пикселей потребовалось 15 минут, а размер файла.sof составляет около 6 МБ.
Разве нет способа использовать readmemh для больших входов?
это то, что я сделал, чтобы прочитать
...
reg [7:0] mem_R[0:2499];
reg [7:0] mem_G[0:2499];
reg [7:0] mem_B[0:2499];
initial begin
...
$readmemh("menuR.txt", mem_R);
$readmemh("menuG.txt", mem_G);
$readmemh("menuB.txt", mem_B);
end
и я получаю к нему доступ следующим образом
if( mem_R[total_current-127510] > 0)
begin
menu_red = 1;
end
1 ответ
Сначала немного предыстории:
Вероятно, вы получаете "требования по времени не соблюдаются" из-за размера изображения - 50x50x8x3 - это достаточное количество бит хранения, более того, если он пытается сохранить их в логике, а не в оперативной памяти.
Размер изображения 640x480 составляет 900 кБ, поэтому только самые большие FPGA смогут хранить их даже в оперативной памяти - например, самый большой Cyclone IV имеет только 810 кБ встроенной памяти. Рассмотрите возможность подключения оперативной памяти вне чипа, если вы собираетесь использовать образ такого размера.
Изображение, которое вы видите при запуске, вероятно, хранится в EPCS - от 2 до 16 МБ флэш-памяти, используемой для загрузки конфигурации по умолчанию при запуске. Он загружает конфигурацию (как программирование через USB) и любую встроенную память. Если вы используете одну из плат Altera серии DE, образ загрузки не сохраняется как 640x480 - он масштабируется до этого разрешения аппаратным обеспечением.
Кроме того, указанные вами 15 минут относятся ко времени компиляции или времени, необходимому для загрузки файла.sof на чип? Обратите внимание, что компиляция HDL не является необоснованной, если вы на это ссылаетесь. Quartus должен не только скомпилировать HDL, но и определить, какие логические элементы ему нужны, где разместить их на чипе и как их соединить. Большие проекты могут занять часы или больше, чтобы построить.
Наконец, что касается вашей проблемы, вы также можете посмотреть файлы.mif (файл инициализации памяти) и / или.hex в сочетании с встроенным IP-ядром оперативной памяти, поскольку они могут лучше соответствовать вашим потребностям. См.: http://quartushelp.altera.com/14.1/master.htm.