Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос об особенностях архитектуры MAX-II
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
SIA
1. Вводная инфа.
Есть небольшой проект, типа "glue logick+register block".
Первоначально разрабатывался под ПЛИС с архитектурой CPLD (экономились триггера, а не многовходовая логика).
По ряду причин нужно его перенести на Altera MAX-II.
У которого архитектура, насколько я понимаю, представляет собой "быстрозагружаемую" FPGA (LUT+flip-flop).
На что напоролись - очень много ресурсов стали съедать многовходовые мультиплексоры шин данных.
"Не лезет". При менее чем паре сотен триггеров - дизайн съедает намного больше тысячи LE.
Выходов из положения напрашивалось два
- заменить мультиплексоры на шину с тремя состояниями
или
- регистровые блоки выполнить в виде небольших асинхронных двухпортовых ОЗУ.

Насколько я знаю, мелкие ОЗУ должны очень эффективно реализовываться из LUT (которая и представляет собой не что иное, как небольшое ОЗУ).

Однако проверка обоих вариантов на небольшом тест-проекте очень сильно озадачила - эффекта от замены mux на двухпортовку или шину практически никакого.
Возможно, на бОльшем проекте разница появится, но перед переделкой хочется получить совет от тех, кто сталкивался с подобной проблемой.

2. Собственно вопрос: как в MAX-II лучше всего выполнять регистровые блоки с доступом от двух шин ?

3. Попутный вопрос: Правильно ли я понимаю, судя по результатам фиттинга, что или аппаратура этих ПЛИС, или Quartus "не умеет" использовать LUT как распределенную память ?
(если так, то это выглядит очень странно - Xilinx умеет, Lattice - тоже).
tegumay
прблема в межсоединениях - надо уйти от муксов, скорее всего проще поставить 2хпортовку. мах2 не та плис куда можно многое впихнуть.
SIA
Цитата(tegumay @ Oct 8 2011, 03:18) *
прблема в межсоединениях - надо уйти от муксов, скорее всего проще поставить 2хпортовку. мах2 не та плис куда можно многое впихнуть.

Так пробовали, правда, на маленьком тесте, толку практически не было. Или эффект "пороговый" ?
Подробнее можно ?
dxp
В ПЛИС Altera нету аппаратной поддержки линий с тремя состояниями, кроме как на внешних пинах (т.е. внутри нету), поэтому всякая попытка описать такую логику будет сопровождаться эмуляцией этого на мультиплексорах, что приведёт к громоздкой реализации и кучи предупреждений при синтезе. Лучше так не делать.

Распределённая память в ПЛИС Альтеры встречается, AFAIK, только во "взрослых" ПЛИС семейств Stratix III/IV. В Циклонах и уж тем более максах её нет.

Т.ч. если нужна распределённая память, посмотрите на Спартанцев от Зайлинкса, там есть варианты с встроенной загрузочной флешкой (почти как Макс 2). Правда, внутренних буферов с тремя состояниями вы там тоже не найдёте - Зайлинкс перестал ставить такие буфера в ПЛИС нижней ценовой категории (Спартанцы), начиная со Спартан 3. Они есть в Вёртексах.
SIA
Цитата(dxp @ Oct 8 2011, 10:00) *
В ПЛИС Altera нету аппаратной поддержки линий с тремя состояниями, кроме как на внешних пинах (т.е. внутри нету), поэтому всякая попытка описать такую логику будет сопровождаться эмуляцией этого на мультиплексорах, что приведёт к громоздкой реализации и кучи предупреждений при синтезе. Лучше так не делать.

Распределённая память в ПЛИС Альтеры встречается, AFAIK, только во "взрослых" ПЛИС семейств Stratix III/IV. В Циклонах и уж тем более максах её нет.

Т.ч. если нужна распределённая память, посмотрите на Спартанцев от Зайлинкса, там есть варианты с встроенной загрузочной флешкой (почти как Макс 2). Правда, внутренних буферов с тремя состояниями вы там тоже не найдёте - Зайлинкс перестал ставить такие буфера в ПЛИС нижней ценовой категории (Спартанцы), начиная со Спартан 3. Они есть в Вёртексах.

За информацию спасибо.
Но я правильно понимаю, что на мой вопрос о том, как лучше реализовать требуемое именно на MAX-II ответа нет или он отрицательный?
Boris_TS
Цитата(dxp @ Oct 8 2011, 10:00) *
Правда, внутренних буферов с тремя состояниями вы там тоже не найдёте - Зайлинкс перестал ставить такие буфера в ПЛИС нижней ценовой категории (Спартанцы), начиная со Спартан 3. Они есть в Вёртексах.

Поправлю: оби были в Virtex-2. Начиная с Virtex-4 / Spartan-3 внутренних BUTF не стало !

to SIA: А вместо MAX-II посмотрите на Spartan-3AN - он тоже имеет внутреннюю конфигурационную память - может он подойдёт лучше.
dxp
Цитата(SIA @ Oct 8 2011, 15:38) *
Но я правильно понимаю, что на мой вопрос о том, как лучше реализовать требуемое именно на MAX-II ответа нет или он отрицательный?

Я не очень представляю вашу задачу. С одной стороны вы говорите, что имеется обилие многовходовых мультиплексторов, с другой про шину с тремя состояниями. Если я правильно понимаю, то вы имеете в виду, что у вас есть куча [однотипных] блоков, работающих на общий приёмник, и это тянет неслабый мультиплексор, который вы хотели заменить шиной с тремя состояниями. Если так, то насчёт шины с тремя состояниями ответ отрицательный - если нет аппаратной поддержки внутри (а её нет), то ничего хорошего не получится - будет тоже неслабый мультиплексор, может быть даже ещё хуже, чем описанный явно. Поэтому, если Макс2 не тянет по ресурсам, то ничего не поделать - значит, не подходит он в реализации этой задачи.

Памяти, кстати, в Макс2 тоже нету. Как и триггеров в элементах ввода-вывода. В общем, кастрат это. sm.gif

Посмотрите другие решения. Либо честную FPGA поставить, либо более толстый чип.
SIA
Цитата(dxp @ Oct 8 2011, 14:28) *
Я не очень представляю вашу задачу. С одной стороны вы говорите, что имеется обилие многовходовых мультиплексторов, с другой про шину с тремя состояниями. Если я правильно понимаю, то вы имеете в виду, что у вас есть куча [однотипных] блоков, работающих на общий приёмник, и это тянет неслабый мультиплексор, который вы хотели заменить шиной с тремя состояниями.

Правильно. Блок регистров.
Замена напрашивается или на маленькую память, или на TS шину.
Цитата(dxp @ Oct 8 2011, 14:28) *
Если так, то насчёт шины с тремя состояниями ответ отрицательный - если нет аппаратной поддержки внутри (а её нет), то ничего хорошего не получится - будет тоже неслабый мультиплексор, может быть даже ещё хуже, чем описанный явно. Поэтому, если Макс2 не тянет по ресурсам, то ничего не поделать - значит, не подходит он в реализации этой задачи.
Памяти, кстати, в Макс2 тоже нету. Как и триггеров в элементах ввода-вывода. В общем, кастрат это. sm.gif

Судя по всему, на редкость бестолковый, кстати - когда в ~1000 с гаком LE не влезает дизайн, прототип которого умещался в CPLD с 288 триггерами. Честно говоря, не предполагал такого идиотизма от альтеровских разработчиков - делать FPGA и без поддержки трехстабильных шин, и без конверсии LUT в распределенную память.
Цитата(dxp @ Oct 8 2011, 14:28) *
Посмотрите другие решения. Либо честную FPGA поставить, либо более толстый чип.

Ограничение по размерам корпуса. Нужен TQFP-100 с шагом 0.5, сигнальных выводов не менее 76, BGA ставить нельзя.
Единственное, что я знаю действительно приличное в этом форм-факторе - Lattice MachXO2 1200/2000.
Но это все "на будущее".
Сейчас нужно как-то выкрутиться с имеющимися MAX-II, обкарнывая все, что только можно. Поэтому и спрашиваю, что на этих чипах реализуется эффективно, а что - нет.

Цитата(dxp @ Oct 8 2011, 10:00) *
Т.ч. если нужна распределённая память, посмотрите на Спартанцев от Зайлинкса, там есть варианты с встроенной загрузочной флешкой (почти как Макс 2).

Учтем. Spartan 3AN в рассмотрение включили.
Цитата(dxp @ Oct 8 2011, 10:00) *
Правда, внутренних буферов с тремя состояниями вы там тоже не найдёте - Зайлинкс перестал ставить такие буфера в ПЛИС нижней ценовой категории (Спартанцы), начиная со Спартан 3. Они есть в Вёртексах.

Этого я с технической точки зрения не понимаю - ключи-то все равно в кристалле есть, ими все межсоединения конфигурируются. Смысл отключать к ним доступ и урезать возможности (т.е. снижать конкурентоспособность) продукта?

Цитата(Boris_TS @ Oct 8 2011, 13:16) *
Поправлю: оби были в Virtex-2. Начиная с Virtex-4 / Spartan-3 внутренних BUTF не стало !

to SIA: А вместо MAX-II посмотрите на Spartan-3AN - он тоже имеет внутреннюю конфигурационную память - может он подойдёт лучше.

Спасибо.
dxp
Цитата(SIA @ Oct 8 2011, 18:16) *
Судя по всему, на редкость бестолковый, кстати - когда в ~1000 с гаком LE не влезает дизайн, прототип которого умещался в CPLD с 288 триггерами. Честно говоря, не предполагал такого идиотизма от альтеровских разработчиков - делать FPGA и без поддержки трехстабильных шин, и без конверсии LUT в распределенную память.

Ну, FPGA c тристабильными шинами - это нынче редкость, вон меня поправили, что и в толстых ПЛИСах этого нынче нету. Дороговато получается, видимо. Распределённая память - штука хорошая, но тоже к месту, и не так уж много случаев, когда без неё не обойтись. К тому же, она тоже не безплатно даётся - ведь нужно к LUT помимо загрузочного интерфейса, который позволяет в неё писать, приделать оный, который позволит это делать на рантайме. Очевидно, что делать каждую LUT такой слишком расточительно, а немало дизайнов прекрасно обходятся без такой памяти - большие объёмы лежат в блоковой, а где надо мелкие, там и на триггерах можно (хотя это, конечно, транжирство, но как правило в ПЛИС достаточно ресурсов, чтобы позволить себе несколько таких блочков памяти).

Цитата(SIA @ Oct 8 2011, 18:16) *
Ограничение по размерам корпуса. Нужен TQFP-100 с шагом 0.5, сигнальных выводов не менее 76, BGA ставить нельзя.
Единственное, что я знаю действительно приличное в этом форм-факторе - Lattice MachXO2 1200/2000.

Я бы заюзал обычную FPGA (в таком корпусе их есть полно) - там только загрузчик добавляется (а если есть на плате процессор, то можно и им грузить битстрим). В ней есть просто блоковая память, в которой успешно разместится сколько угодно регистров. Если грузить нечем, а проца нет, то Spartan3N - FPGA со встроенной загрузочной флешью.

Цитата(SIA @ Oct 8 2011, 18:16) *
Но это все "на будущее".
Сейчас нужно как-то выкрутиться с имеющимися MAX-II, обкарнывая все, что только можно. Поэтому и спрашиваю, что на этих чипах реализуется эффективно, а что - нет.

Max II - это в чистом виде Cyclone I, без внутренней памяти, без аппаратных умножителей, без триггеров в I/O элементах со встроенной загрузочной флешью. На нём прилично реализуется обычная логика синхронного дизайна (счётчики, регистры, сумматоры и т.п.), требующая обилия триггеров, но если нужна память или скоростные интерфейсы с внешним миром - это не сюда.
SIA
Spartan 3AN, как и большинство распространенных FPGA, отпадает сразу - минимальный корпус TQ144 (BGA нельзя).
Нужен именно TQ100, собственно, из-за него весь сыр-бор, в TQ144 есть CPLD не то что на 288, а и на 512 триггеров, в которые существующий дизайн влезает с запасом.
За советы и инфу спасибо. Беру тайм-аут.
sazh
Цитата(SIA @ Oct 8 2011, 14:30) *
Нужен TQFP-100 с шагом 0.5, сигнальных выводов не менее 76, BGA ставить нельзя


Если не секрет, почему нельзя?
SIA
Цитата(sazh @ Oct 8 2011, 16:26) *
Если не секрет, почему нельзя?

1. ПЛИС стоит на плате, у которой должна быть толстая медь. Соответственно, проектные нормы - 0.25 мм. А габарит жестко задан, наскребали по долям миллиметра.
2. Надежность в производстве и эксплуатации у BGA все-таки ниже.

Цитата(dxp @ Oct 8 2011, 15:41) *
Max II - это в чистом виде Cyclone I, без внутренней памяти, без аппаратных умножителей, без триггеров в I/O элементах со встроенной загрузочной флешью. На нём прилично реализуется обычная логика синхронного дизайна (счётчики, регистры, сумматоры и т.п.), требующая обилия триггеров, но если нужна память или скоростные интерфейсы с внешним миром - это не сюда.

Кстати, в свое время у меня на MAX-II очень прилично получились bit-serial DSP обработчики.
Последовательные АЛУ на них реализовывались хорошо. Но тут другой случай.
sazh
Цитата(SIA @ Oct 8 2011, 15:41) *
2. Надежность в производстве и эксплуатации у BGA все-таки ниже.


По мне, так с точностью до наоборот.
max5 посмотрите. (там вроде бы не использованные le в память можно).
А вообще странно, что Вам мах 2 не хватило (в сравнении с альтеровскими чистыми cpld).
SIA
Цитата(sazh @ Oct 8 2011, 16:52) *
max5 посмотрите. (там вроде бы не использованные le в память можно).
А вообще странно, что Вам мах 2 не хватило (в сравнении с альтеровскими чистыми cpld).

И мне странно. Было бы понятно - не создавал бы тему.
Спасибо за замечание.
Если в MAX-V действительно можно использовать LUT как память, и эта фича поддержана - то это должно решить проблему, они почти pin-совместимы.
Но экспресс-тест этого не подтвердил, да и в документации указаний не нашлось.
dxp
Цитата(SIA @ Oct 8 2011, 19:41) *
2. Надежность в производстве и эксплуатации у BGA все-таки ниже.

А вот с этим трудно согласиться. Если BGA правильно припаян, это очень надёжное соединение - прикиньте, корпусок микросхемы висит на куче шариков припоя - там зубами не оторвать! С монтажом, конечно, определённые трудности есть, он требует наличия определённого оборудования и умения. Но это реально не так уж сложно, легко паяется на обычной ремонтной станции с термопрофилями. Или в печке. Можно и феном, но это я не отношу к "нормальной" пайке.

Цитата(SIA @ Oct 8 2011, 19:41) *
Кстати, в свое время у меня на MAX-II очень прилично получились bit-serial DSP обработчики.
Последовательные АЛУ на них реализовывались хорошо. Но тут другой случай.

Если на MAX II получалось, значит на любой FPGA ещё лучше получится. sm.gif
Boris_TS
Цитата(SIA @ Oct 8 2011, 15:30) *
Этого я с технической точки зрения не понимаю - ключи-то все равно в кристалле есть, ими все межсоединения конфигурируются. Смысл отключать к ним доступ и урезать возможности (т.е. снижать конкурентоспособность) продукта?
Сам долго голову ломал: такая клёвая штука внутренний BUFT, и на тебе, в Spartan-3/3e/3a исчезли ! - а потом пришло и осознание, почему и зачем это всё исчезло:

Вообще-то никаких BUFT и не было никогда... а был WAND (Wired AND). А если быть еще более точным, то была груда внутренних Open Drain элементов (гордо названных) BUFT, а с обоих концов кристалла (Spartan-2E или Virtex-E) были Pull-up резисторы. Обычно использовался только один Pull-up на группу "BUFT", соответственно, на одной горизонтальной группе long lines можно было организовать не более 2 груп "BUFT".
Вот тут всё самое интересное и вылезло: оказывается если привесить много "BUFT" и, тем самым, сделать длинную линию, то скорость нарастания фронта получалась - отвратительной (слишком большая распределённая ёмкость, и слишком слабая подтяжка). Чтобы хоть как-то это компенсировать для Spartan-2E или Virtex-E был рождён специальный constraint Double, который принудительно заставлял использовать оба Pull-up (при этом использовалась вся горизонтальная группа long lines, вне зависимости от количества реально подключенных "BUFT").

Но даже при всех этих ухищрениях, временные параметры такой линии были слабыми и достаточно тяжело предсказуемыми. Поэтому, при росте размеров кристаллов (в CLB) пришлось отказаться от этих элементов. В виде компенсации мы получили бОльшее количество RAMB, значительно лучшие частотные параметры LUT и FF, аппаратные умножители, а в случае Virtex-4 и Spartan-3A DSP, еще и DSP блоки.

P.S. На Spartan-2/2E и Virtex-E работал с BUFT на 33.(3) МГц (шина PCI) - проблем не было.

Цитата(dxp @ Oct 8 2011, 15:41) *
Ну, FPGA c тристабильными шинами - это нынче редкость, вон меня поправили, что и в толстых ПЛИСах этого нынче нету. Дороговато получается, видимо.
Не-е-е, тут не в цене дело, Xilinx мотивировала отказ от внутренних BUFT, невозможностью их использования при "больших" частотах. Конкретную границу я там и не нашел, но вроде до 50 МГц еще можно было что-то сделать, а далее - уже проблематично.

Цитата(dxp @ Oct 8 2011, 15:41) *
Распределённая память - штука хорошая, но тоже к месту, и не так уж много случаев, когда без неё не обойтись. К тому же, она тоже не бесплатно даётся - ведь нужно к LUT помимо загрузочного интерфейса, который позволяет в неё писать, приделать оный, который позволит это делать на рантайме. Очевидно, что делать каждую LUT такой слишком расточительно, а немало дизайнов прекрасно обходятся без такой памяти - большие объёмы лежат в блоковой, а где надо мелкие, там и на триггерах можно (хотя это, конечно, транжирство, но, как правило, в ПЛИС достаточно ресурсов, чтобы позволить себе несколько таких блочков памяти).
Поэтому, начина со Spartan-3 возникло разбиение Slice на SliceM (там, где LUT может быть RAM или Shift Register) и SliceL (в которых LUT - это только LUT). В современных ПЛИС Xilinx на один SliceM приходится где-то от 3 до 7 SliceL.
SIA
Это все (упразднение wired AND и пр.) имеет смысл в больших ПЛИС, с длинными линиями. Там это как-то оправданно, но мы вроде обсуждаем мелкие. Где нет проблем с задержками, а размер кристалла определяется в основном контуром контактных площадок под разварку выводов.
Boris_TS
Цитата(SIA @ Oct 8 2011, 19:57) *
Это все (упразднение wired AND и пр.) имеет смысл в больших ПЛИС, с длинными линиями. Там это как-то оправданно, но мы вроде обсуждаем мелкие. Где нет проблем с задержками, а размер кристалла определяется в основном контуром контактных площадок под разварку выводов.
Так никто ж и не говорит, что BUFT (даже в виде Wired AND) - это плохо ! BUFT - это очень даже хорошо и удобно - надо только использовать с умом. Но с умом надо вообще всю ПЛИС использовать.

В тоже время необходимо учитывать, что в FPGA значительно увеличились плотность, количество элементов и предельная рабочая частота. Т.к. в пределах семейства ПЛИС дешевле иметь однородную структуру и одну предельную рабочую частоту для всех элементов, то все технологические ограничения определяются самыми большими ПЛИС в семействе. А вот эти самые большие ПЛИС перешагнули ту черту, где возможно было эффективно создать BUFT элементы. Поэтому BUFT и покинули FPGA Xilinx.
dxp
Цитата(Boris_TS @ Oct 8 2011, 22:39) *
Не-е-е, тут не в цене дело, Xilinx мотивировала отказ от внутренних BUFT, невозможностью их использования при "больших" частотах. Конкретную границу я там и не нашел, но вроде до 50 МГц еще можно было что-то сделать, а далее - уже проблематично.

Спасибо за внятное объяснение нюансов построения "тристабильных" шин в ПЛИС фирмы Зайлинкс. По поводу скорости - ну, а что мешает делать не WAND, а честный буфер с отключением? Как в I/O элементах. Понятно, что и такой буфер будет работать не так быстро, как штатные вентили, но всё-таки весьма "развяжет" руки разработчику, и такие буфера не будут ухудшать характеристики в зависимости от количества подключенных устройств. Сильно подозреваю, что тут, всё же, экономика сыграла свою роль - нужны такие буфера очень иногда, а присутствовать будут всегда.

Цитата(Boris_TS @ Oct 8 2011, 22:39) *
Поэтому, начина со Spartan-3 возникло разбиение Slice на SliceM (там, где LUT может быть RAM или Shift Register) и SliceL (в которых LUT - это только LUT). В современных ПЛИС Xilinx на один SliceM приходится где-то от 3 до 7 SliceL.

Да, в стратиксах сделано так же - некоторые ALM - обычные LUT, а некоторые с функцией RAM. Соотношение навскидку не скажу.
Boris_TS
Цитата(dxp @ Oct 9 2011, 16:36) *
По поводу скорости - ну, а что мешает делать не WAND, а честный буфер с отключением? Как в I/O элементах.
Насколько я понимаю, основная причина (хоть и не афишируемая) весьма проста: чтобы не горели ПЛИС, когда буферы входят в конфликт, а в конфликт они будут входить обязательно, из-за асинхронной работы управляющих линий. Из опыта работы с I/O pin - при продолжительных конфликтах очень хорошо поганятся ножки ПЛИС.

Цитата(dxp @ Oct 9 2011, 16:36) *
Понятно, что и такой буфер будет работать не так быстро, как штатные вентили, но всё-таки весьма "развяжет" руки разработчику, и такие буфера не будут ухудшать характеристики в зависимости от количества подключенных устройств.
Согласен, что-нибудь можно было бы придумать (привинтить какие-нибудь ограничивающие резисторы на выходы или еще чего-нибудь), особенно, для "медленных" ПЛИС. Ведь частенько возникает желание на медленную шину навесить кучу медленных клиентов (нихай все они тормозят в одной куче) - вот тут как раз бы эти аля BUFT были бы в самый раз !

С другой стороны, если взять Sparnat-6 или Xilinx-7 семейства - то тут уже правит балом LUT6 - а на нём гораздо приятнее собирать мультиплексор, чем не LUT4. Кстати, за XST было подмечено, что он большие мультиплексоры делает аналогично Wired AND'ам (BUFT) - только на логике быстрого переноса (эдакое Wired OR получается). Возможно, в этом как раз и кроется настоящая причина отмирания пресловутых BUFT.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.