1. Вводная инфа. Есть небольшой проект, типа "glue logick+register block". Первоначально разрабатывался под ПЛИС с архитектурой CPLD (экономились триггера, а не многовходовая логика). По ряду причин нужно его перенести на Altera MAX-II. У которого архитектура, насколько я понимаю, представляет собой "быстрозагружаемую" FPGA (LUT+flip-flop). На что напоролись - очень много ресурсов стали съедать многовходовые мультиплексоры шин данных. "Не лезет". При менее чем паре сотен триггеров - дизайн съедает намного больше тысячи LE. Выходов из положения напрашивалось два - заменить мультиплексоры на шину с тремя состояниями или - регистровые блоки выполнить в виде небольших асинхронных двухпортовых ОЗУ.
Насколько я знаю, мелкие ОЗУ должны очень эффективно реализовываться из LUT (которая и представляет собой не что иное, как небольшое ОЗУ).
Однако проверка обоих вариантов на небольшом тест-проекте очень сильно озадачила - эффекта от замены mux на двухпортовку или шину практически никакого. Возможно, на бОльшем проекте разница появится, но перед переделкой хочется получить совет от тех, кто сталкивался с подобной проблемой.
2. Собственно вопрос: как в MAX-II лучше всего выполнять регистровые блоки с доступом от двух шин ?
3. Попутный вопрос: Правильно ли я понимаю, судя по результатам фиттинга, что или аппаратура этих ПЛИС, или Quartus "не умеет" использовать LUT как распределенную память ? (если так, то это выглядит очень странно - Xilinx умеет, Lattice - тоже).
|