Перейти к содержанию
    

Вопрос об особенностях архитектуры MAX-II

Этого я с технической точки зрения не понимаю - ключи-то все равно в кристалле есть, ими все межсоединения конфигурируются. Смысл отключать к ним доступ и урезать возможности (т.е. снижать конкурентоспособность) продукта?
Сам долго голову ломал: такая клёвая штука внутренний 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) - проблем не было.

 

Ну, FPGA c тристабильными шинами - это нынче редкость, вон меня поправили, что и в толстых ПЛИСах этого нынче нету. Дороговато получается, видимо.
Не-е-е, тут не в цене дело, Xilinx мотивировала отказ от внутренних BUFT, невозможностью их использования при "больших" частотах. Конкретную границу я там и не нашел, но вроде до 50 МГц еще можно было что-то сделать, а далее - уже проблематично.

 

Распределённая память - штука хорошая, но тоже к месту, и не так уж много случаев, когда без неё не обойтись. К тому же, она тоже не бесплатно даётся - ведь нужно к LUT помимо загрузочного интерфейса, который позволяет в неё писать, приделать оный, который позволит это делать на рантайме. Очевидно, что делать каждую LUT такой слишком расточительно, а немало дизайнов прекрасно обходятся без такой памяти - большие объёмы лежат в блоковой, а где надо мелкие, там и на триггерах можно (хотя это, конечно, транжирство, но, как правило, в ПЛИС достаточно ресурсов, чтобы позволить себе несколько таких блочков памяти).
Поэтому, начина со Spartan-3 возникло разбиение Slice на SliceM (там, где LUT может быть RAM или Shift Register) и SliceL (в которых LUT - это только LUT). В современных ПЛИС Xilinx на один SliceM приходится где-то от 3 до 7 SliceL.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это все (упразднение wired AND и пр.) имеет смысл в больших ПЛИС, с длинными линиями. Там это как-то оправданно, но мы вроде обсуждаем мелкие. Где нет проблем с задержками, а размер кристалла определяется в основном контуром контактных площадок под разварку выводов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это все (упразднение wired AND и пр.) имеет смысл в больших ПЛИС, с длинными линиями. Там это как-то оправданно, но мы вроде обсуждаем мелкие. Где нет проблем с задержками, а размер кристалла определяется в основном контуром контактных площадок под разварку выводов.
Так никто ж и не говорит, что BUFT (даже в виде Wired AND) - это плохо ! BUFT - это очень даже хорошо и удобно - надо только использовать с умом. Но с умом надо вообще всю ПЛИС использовать.

 

В тоже время необходимо учитывать, что в FPGA значительно увеличились плотность, количество элементов и предельная рабочая частота. Т.к. в пределах семейства ПЛИС дешевле иметь однородную структуру и одну предельную рабочую частоту для всех элементов, то все технологические ограничения определяются самыми большими ПЛИС в семействе. А вот эти самые большие ПЛИС перешагнули ту черту, где возможно было эффективно создать BUFT элементы. Поэтому BUFT и покинули FPGA Xilinx.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не-е-е, тут не в цене дело, Xilinx мотивировала отказ от внутренних BUFT, невозможностью их использования при "больших" частотах. Конкретную границу я там и не нашел, но вроде до 50 МГц еще можно было что-то сделать, а далее - уже проблематично.

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

 

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

Да, в стратиксах сделано так же - некоторые ALM - обычные LUT, а некоторые с функцией RAM. Соотношение навскидку не скажу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...