Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Многовходовый MUX в Спартане
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Delsian
На шину данных из FPGA в процессор выдается содержимое различных регистров, это всякие регистры состояний, управления и т.п., т.е. во внутреннюю память они не ложатся. Сейчас это сделано через Case, получился такой себе немаленький мультиплексор, просто пожирающий ячейки FPGA. Хотелось бы как-то сэкономить, вот я и прикидываю, как это красивее описать в VHDL?
Мысль крутится в сторону объединения всех выходов через OR, и неиспользуемые запрещать, чтобы 0 был на выходе. Но при этом надо, чтобы регистры управления продолжали выдавать сигналы... И сэкономлю ли я что-то при этом?

Короче, сумбурно получилось, но возможно кто-то меня понял и знает, как это правильно реализовать?
dmitry-tomsk
Цитата(Delsian @ Mar 9 2005, 16:07)
На шину данных из FPGA в процессор выдается содержимое различных регистров, это всякие регистры состояний, управления и т.п., т.е. во внутреннюю память они не ложатся. Сейчас это сделано через Case, получился такой себе немаленький мультиплексор, просто пожирающий ячейки FPGA. Хотелось бы как-то сэкономить, вот я и прикидываю, как это красивее описать в VHDL?
Мысль крутится в сторону объединения всех выходов через OR, и  неиспользуемые запрещать, чтобы 0  был на выходе. Но при этом надо, чтобы регистры управления продолжали выдавать сигналы... И сэкономлю ли я что-то при этом?

Короче, сумбурно получилось, но возможно кто-то меня понял и знает, как это правильно реализовать?
*

Можно попробовать мультиплексор на tristate логике:

mux_gen : FOR i IN mux_length-1 DOWNTO 0 GENERATE
data_bus <= mux_in(i*8+7 DOWNTO i*8) WHEN sel_bin(i) = '1' ELSE (OTHERS => 'Z');
END GENERATE mux_gen;
ASN
Я делаю так. Сначала объявляю константу BUS_PASSIVE, затем везде её использую, где надо объединять выходы блоков.
Блок объединения - через case. В зависимости от сигнала BUS_PASSIVE синтезатор Leonardo делает либо mux, либо, tristate, либо or логику.
Кажется так smile.gif.
andrew_b
Цитата(dmitry-tomsk @ Mar 9 2005, 17:15)
Можно попробовать мультиплексор на tristate логике:


Не указано, какой именно спартан. В третьем спартане AFAIK нет тристабильных буферов внутри. "Вот уроды!"
Вообще если мультеплексор сильно развесистый, то тут уже не о красоте кода приходится думать, а о том как в таймингах шины уместиться.

Если интерфейс синхронный, можно разбить большой мультиплексор на несколько более мелких и запайплайнить это дело, а в проце или контроллере (или что там у вас) немного увеличить latency команды чтения.
belena7
Naskol'ko ya znayu, u Spartana u Altera Cyclon i tonu podobnoe vnutri vse odno net tristate i on etot MUX po LUT rastashit. Dlya timinga lu4she ispol'zovat' megafunction ili CoreGen i flooplaner dlya ego placementa
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.