Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использовать или нет ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Kitsok
Добрый день!

Использую AT91SAM7S256 для некого устройства ввода-вывода, он-же мега-джойстик wink.gif

Для организации опроса 128 кнопок и вывода на 128 светодиодов, пришлось нагородить матрицу с опросом, т.е. дешифратор сборный, 4 входа, 16 линий выхода (строки), и мультиплексор 8->1 (столбцы).

Входы мультиплексор подтянуты к питанию, на пересечении стоят развязанные диодами кнопки. По строками последовательно бегает логический ноль, соответственно, на мультиплексоре перебираются последовательно все каналы, выход идет на контроллер, если на выходе нолик, то в данном положении кнопка нажата. В общем, по-моему, весьма классическая схема. Итого - 3 корпуса стандартной логики.

Когда задумался о выводе, то тут я решаю так - использую 8 защелок с выборкой в одном корпусе (74HC259), выбор защелки внутри осуществляется теми-же линиями (3), которые идут на мультиплексор, а Latch Enable идет с дешифратора, ввод данных общий на всех и идет на контроллер.

Получается, что на вывод мне нужно 16 корпусов.

Вот тут и вопрос - а не красивее ли использовать для организации всей матрицы (и ввода и вывода) ПЛИС? Но с ПЛИСами я дела никогда не имел, поэтому не очень представляю, как с ними обращаться.

Посоветуйте пожалуйста, следует ли копать в этом направлении (количество входов-выходов - 128 с нагрузочной способностью минимум 10мА + к этому 8+16, итого - 152 ноги, ну и 10 ног в сторону контроллера, итого - 162 ноги), либо стоит не заморачиваться и ставить корпуса?

Заранее спасибо и сорри, если оффтоп.
Doka
вариантов много.. опять же о быстордействии ничего не написали (хотя если это human interface, то оно не столь критично).

вообще по суммарной нагрузке надо и на плис буффера ставить.
насчет выхода: если делать на МК, то как вариант рассмотрите цепочку из sn74hc595 (а если взять sn74ls595, то сразу можно led драйвить)
mse
Цитата(Kitsok @ Jan 27 2007, 11:47) *
Получается, что на вывод мне нужно 16 корпусов.
Вот тут и вопрос - а не красивее ли использовать для организации всей матрицы (и ввода и вывода) ПЛИС?

ИМХО, нет. Проще поискать многоразрядных сдвиговых регистров, зацепить их друг за другом и простреливать по сериальному каналу. Для светодиодов - само то. А 128 кномпочек лучше всего разбить на группы по 16 шт(чтобы сделать возможными многокнопочные комбинаццыи и уменьшить вероятность получения видимости нажатия кнопки, путём некоей комбинаццыи) и завести на 8 каналов АЦП. Ну резюков килоомных жменька буит. Зато никаких мультиплексеров. и кучи линий в одну точку.
Хотя...6-7 баксов за ЦПЛДышку какую...но я бы не стал.
AlexMad
Чтобы не городить новую ветку, задам вопрос здесь. Есть сходная задача, но с другими параметрами, опрос 32 ил 64 (еще не решил) линий и выдача на управление 32 линий. Вобщем, все как у предыдущего оратора, тока не светодиоды и кнопки, а логический анализатор. Прблема в том, что все это надо делать очень синхронно по времени, на частотах до 100 мегагорцев, может, в последствии и выше, частота ограничивается только тем, что и на сотне плату тяжело будет развести, в тз я заложил намного меньше, но надо стремиться к лучшему smile.gif. Просто вывод в порт контроллера я не уверен, что смогу сделать синхронным, с ПЛИС не работал вообще и слабо представляю что это такое.
Вобщем вопрос: реально ли на плис сделать буфер FIFO, работающий на этих скоростях, и если да, то какие плисы посоветуете для этого?
Doka
Цитата(AlexMad @ Jan 27 2007, 13:06) *
Вобщем, все как у предыдущего оратора, тока не светодиоды и кнопки, а логический анализатор. Прблема в том, что все это надо делать очень синхронно по времени, на частотах до 100 мегагерц, может, в последствии и выше, частота ограничивается только тем, что и на сотне плату тяжело будет развести, в тз я заложил намного меньше, но надо стремиться к лучшему smile.gif.
ПЛИС, однозначно.

Цитата(AlexMad @ Jan 27 2007, 13:06) *
Вобщем вопрос: реально ли на плис сделать буфер FIFO, работающий на этих скоростях, и если да, то какие плисы посоветуете для этого?
реально. Посмотрите например семейство Spartan-3E от Xilinx либо эквивалент от Altera.
Boris_TS
2 Kitsok
К сожалению могу прокомментировать только касательно ПЛИС Xilinx.

Судя по примененному семейству логики 74HCxxx, выходы MC 5 вольтовые, в семействах ПЛИС Xilinx существует только 3 не очень дорогие семейства ПЛИС нормально переживающих 5 вольт на входе: XPLA3 (CoolRunner - CPLD), XC9500 (CPLD) и Spartan2 (FPGA).

Предпологаю, что ПЛИС типа CPLD будут наиболее интнресны, т.к. они несут прошивку во внутренней Flash памяти, FPGA - необходимо с чего-то загрузить, что в имеющемся случае несколько неудобно.

С XC9500 я не работал, т.к. появились более новые и могучие XPLA3.

Если брать XPLA3, то судя по количеству используемых ног, понадобиться как минимум XCR3265XL-PQ208 (265 логических ячеек, корпус PQ208 (164 I/O ноги), питание 3.3V).
Ножка XPLA3 выдает 8mA (в принципе можно вытянуть и 10mA - ПЛИС на это рассчитана). Но если нагрузить все 128 светодиодных ног, то получается суммарный ток от 1.024 А и до 1.28 А - что весьма не мало (теоретически XPLA3 должна с этим справиться, но сам не пробовал так мучать ПЛИС). Касательно выходов: обычно для питания светодиодов используется OpenDrain, но в XCR3265 c ними проблема - специально выденного режима OpenDrain для I/O ноги в XPLA3 нет, а независимых управлений 3 состоянием ног для XCR3265 только 64 + 1 - поэтому при применении данного семейства такую схемотехнику применить невозможно.

Если брать Spartan2, то самая маленькая ПЛИС с необходимым числом ног - это XC2S30-5PQ208 (имеющая 42096 байт прошивки, котою еще необходимо в нее загрузить). С выходами никаких проблем нет, то 24мА каждый, управление третьим состоянием для каждого выхода независимое. Но и стоит она не мало.

Если систему можно перевести на питание 3.3 Вольта, то можно рассмотреть возможность применения CoolRunner2 (что будет из ПЛИС Xilinx будет наилучшим вариантом), если же система не имеет такой возможности, то я думаю, что оптимальным будет применение либо Altera MAX3000 (CPLD, I/O ног типа OpenDrain может быть сколько угодно), либо те самые 74HCxxx.


2 AlexMad
Цитата(AlexMad @ Jan 27 2007, 13:06) *
Вобщем вопрос: реально ли на плис сделать буфер FIFO, работающий на этих скоростях, и если да, то какие плисы посоветуете для этого?


Необходимо указать стандарт сигналов и минимальное количество памяти для работы устройства - от этого зависит рекомендуемые ПЛИС, но то, что это должна быть FPGA - сомнений нет.
AlexMad
Цитата
Необходимо указать стандарт сигналов и минимальное количество памяти для работы устройства - от этого зависит рекомендуемые ПЛИС, но то, что это должна быть FPGA - сомнений нет.

По сигналам:выход будет управлять быстродействующими ключами, уровни логические 3.3 или 5 вольт, входа будут принимать сигнал с оконных компараторов, уровни теже.
Память... тут вопрос сложный, устройство являет собой тестер микросхем, количество памяти в буфере ФИФО будет определять сколько циклов можно задать во входной функции, и сколько можно записать. Ответ чем больше, тем лучше smile.gif при одном мегабайте памяти на частоте 100 мегагерц можно тестировать непрерывно элемент по восьми ногам в течении 1 сотой секунды, если, конечно, не зациклить по кругу... Учитывая, что этот прибор пойдет не для нормоконтроля, может этого и хватит, но всегда хочется большегоsmile.gif
Stanislav
Для управления светодиодами рекомендую использовать специальные М/С драйверов, например, MBI5025 от Macroblock (есть ещё у TI, Toshiba, Maxim, etc). Такой драйвер даёт стабильный ток в диоды, имеет аж 16 выходов и требует только один резистор. Драйверы можно включать последовательно, с теоретически неограниченным общим количеством выводов, и загружать по SPI.
Kitsok
Спасибо за ответы!

Уточняю - вся схема 3.3 вольта, вроде 74hc (не HCT) работает от 2 до 5, поэтому никаких подводных камней не ожидаю.

Насчет сдвигового регистра я как-то не задумывался, идея красивая, буду читать даташыты.

mse
Я не понял, вы имеете в виду организовать также и ввод сдвиговым регистром? Что-то мне подсказывает, что быстродействие у такой схемы будет не очень. Ааааа, понял. Нет, так я делать точно не буду wink.gif Во-первых, АЦП используются и так (8 осей wink.gif), а во вторых, мне такая схема кажется ненадежной. А если с температурой резисторы поплывут?

Да, кстати, о быстродействии. Померять пока не удосужился, но опрос всей матрицы (128+128) происходит каждую миллисекунду. Надеюсь, дойдут руки и померяю хотя-бы ширину импульса на Latch Enable.

Хотя идея со сдвиговым регистром мне очень и очень нравится.
Kitsok
Цитата(Stanislav @ Jan 27 2007, 14:22) *
Для управления светодиодами рекомендую использовать специальные М/С драйверов, например, MBI5025 от Macroblock (есть ещё у TI, Toshiba, Maxim, etc). Такой драйвер даёт стабильный ток в диоды, имеет аж 16 выходов и требует только один резистор. Драйверы можно включать последовательно, с теоретически неограниченным общим количеством выводов, и загружать по SPI.


Хм.. А не подскажете что-нибудь более доставабельное, чем MBI5025? И еще я не понял, как их каскадировать. Т.е. по крайней мере LE должно идти к каждому корпусу, SDO-SDI - это понятно, CLK у всеъ одно, так?
mse
Цитата(Kitsok @ Jan 27 2007, 14:39) *
а во вторых, мне такая схема кажется ненадежной. А если с температурой резисторы поплывут?

;О) резисторы стоят между "+" и G. Кнопкой коммутируется напруга из узла на вход АЦП. И плыть будут синхронно.
Если жалко каналов АЦП, то можно коммутировать МУХом каким...Но это уже изврат. А вся прелесть в том, что нет сканирования
Doka
Цитата(Kitsok @ Jan 27 2007, 14:39) *
Насчет сдвигового регистра я как-то не задумывался, идея красивая, буду читать даташиты.

вот вам аппнот в качестве подспорья:
<<открыть в новом окне>>


Цитата(Kitsok @ Jan 27 2007, 14:39) *
Нет, так я делать точно не буду wink.gif Во-первых, АЦП используются и так (8 осей wink.gif), а во вторых, мне такая схема кажется ненадежной.

на самом деле довольно элегантное решение. рекомендую
Boris_TS
2 AlexMad

Память ранних ПЛИС (Virtex/Spatran2) рассчитана на небольшие FIFO (есть 2 порта в каждом блока ОЗУ, каждый может записывать или читать данные незавичимо от соседнего; но этой памяти для вашего проекта будет мало). Память более новых ПЛИС (Virtex2/Spartan3) - это уже могучий высокоскоростной кеш (с 1 битом четности, на каждые 8 бит данных). ПЛИС с мегабитом ОЗУ явно проектировались для реализации в себе группы высокопроизводительных вычислительных устройств, поэтому в таких ПЛИС имеется непомерное количество логических ячеек (которые врядли понадобятся при такой задачи, если эти ячейки, конечно, не превратить в мелко-блочное ОЗУ).

Я бы посоветовал для создания токого устройства подыскать быстродействующее ОЗУ с возможностью конвеерного чтения/записи (статическое или динамическое - какое больше понравиться) и взять ПЛИС (Startan-3) с относительно небольшим количеством ОЗУ (столько, чтобы хватило на все необходимые FIFO), а не на хранение всей тестирющей последовательноти и полученых результатов. Наверное это будет оптимально по цене относительно нужного объема ОЗУ.

Посмотрите описание всего семейства Spartan-3 и решите по соотношению цена/объем ОЗУ - какое схемотехническое решение лучше применить.
http://direct.xilinx.com/bvdocs/userguides/ug331.pdf (Spartan-3 Generation FPGA User Guide)

P.S.
Для задач ввода данных с "большими" скоростями я использую 2 ОЗУ'ки в одну из них пишет ПЛИС, из другой (тоже через ПЛИС) данных читает потребитель. При полном вычитывании данных потребителем из одной ОЗУ'ки, ПЛИС начинает писать данные в свободнцю ОЗУ'шку, а занятую может начинать читать потребитель.
Kitsok
Цитата(Doka @ Jan 27 2007, 15:14) *
Цитата(Kitsok @ Jan 27 2007, 14:39) *
Насчет сдвигового регистра я как-то не задумывался, идея красивая, буду читать даташиты.

вот вам аппнот в качестве подспорья:
<<открыть в новом окне>>


Вот это ДА! wink.gif Спасибо за наводку, буду пытаться въезжать wink.gif


Цитата
Цитата(Kitsok @ Jan 27 2007, 14:39) *
Нет, так я делать точно не буду wink.gif Во-первых, АЦП используются и так (8 осей wink.gif), а во вторых, мне такая схема кажется ненадежной.

на самом деле довольно элегантное решение. рекомендую


Ну никак, заняты оси....

P.S. Сейчас воткнул (предварительно попалив предохранитель wink.gif) осцилоскоп, самый короткий импульс у меня - 2.5 мкс, т.е. 400 мГц. Странно, я ожидал ощутимо больших частот.
mse
Цитата(Kitsok @ Jan 27 2007, 17:29) *
P.S. Сейчас воткнул (предварительно попалив предохранитель wink.gif) осцилоскоп, самый короткий импульс у меня - 2.5 мкс, т.е. 400 мГц. Странно, я ожидал ощутимо больших частот.

Не вкурил. У САМа СПИ, например, фурычит на МЦЛК/2...Вы что, портами врукопашную машете?
Kitsok
Цитата(mse @ Jan 27 2007, 18:23) *
Не вкурил. У САМа СПИ, например, фурычит на МЦЛК/2...Вы что, портами врукопашную машете?


Не, я не на SPI мерял, а на порту, который к дешифратору и муксу подключен, а там я руками машу.
К SPI боязно подступать, хотя к TWI еще страшнее wink.gif
Stanislav
Цитата(Kitsok @ Jan 27 2007, 14:56) *
Хм.. А не подскажете что-нибудь более доставабельное, чем MBI5025? И еще я не понял, как их каскадировать. Т.е. по крайней мере LE должно идти к каждому корпусу, SDO-SDI - это понятно, CLK у всеъ одно, так?
Там всё просто. Почитайте даташит, пожалуйста, и разберитесь в работе микросхемы..
Kitsok
Цитата(Stanislav @ Jan 28 2007, 06:40) *
Там всё просто. Почитайте даташит, пожалуйста, и разберитесь в работе микросхемы..


Да вроде разобрался, но не уверен.
Правильно ли я понимаю, что во время загрузки, скажем, двух каскадированных регистров числом 10101010...10, при OE поставленном на землю, младший разряд первого в каскаде регистра будет по мере загрузки мигать с частотой CLK?
EvgenyNik
http://www.altera.com/literature/an/an426.pdf
Здесь, кроме типового включения сканирования "столбцы-строки", они привели опрос клавиатуры через АЦП и даже методику, превращающую ПЛИС в АЦП с вычислением - какая клавиша нажата.
---
Можно сделать и так:
ПЛИС ---> декодер 4-16 ---> 16 столбцов клавиатуры/ 8 строк ---> приоритетный шифратор 8-3 ---> ПЛИС
Итого: 7 выводов на опрос 128-контактной клавиатуры и решение проблемы токовой нагрузки.
Это просто идея, наличия подобных ИМС на рынке я не проверял (декодер 4-16 то точно есть).
Kitsok
Цитата(Евгений Николаев @ Jan 29 2007, 14:47) *
http://www.altera.com/literature/an/an426.pdf
Здесь, кроме типового включения сканирования "столбцы-строки", они привели опрос клавиатуры через АЦП и даже методику, превращающую ПЛИС в АЦП с вычислением - какая клавиша нажата.
---
Можно сделать и так:
ПЛИС ---> декодер 4-16 ---> 16 столбцов клавиатуры/ 8 строк ---> приоритетный шифратор 8-3 ---> ПЛИС
Итого: 7 выводов на опрос 128-контактной клавиатуры и решение проблемы токовой нагрузки.
Это просто идея, наличия подобных ИМС на рынке я не проверял (декодер 4-16 то точно есть).


Да, есть и 8->3 приоритетный, и 4->16, хоть он и редок. Буду почитать, спасибо!
EvgenyNik
Кстати, если к светодиодам не предъявляются какие-то особые требования, то с ними можно поступить примерно также - динамическая индикация. Есть светодиоды, которые от 1мА постоянного тока светят также, как АЛ307 от 10мА.
Stanislav
Цитата(Kitsok @ Jan 28 2007, 10:44) *
Да вроде разобрался, но не уверен.
Правильно ли я понимаю, что во время загрузки, скажем, двух каскадированных регистров числом 10101010...10, при OE поставленном на землю, младший разряд первого в каскаде регистра будет по мере загрузки мигать с частотой CLK?
Нет, не правильно.
Переписывание из регистра сдвига в выходной регистр происходит по сигналу LE. Загрузив новыми данными всю "колбасу", достаточно подать единственный импульс на соотв. входы микросхем, и информация на выходах одновременно изменится.
Kitsok
Цитата(Stanislav @ Jan 29 2007, 16:56) *
Нет, не правильно.
Переписывание из регистра сдвига в выходной регистр происходит по сигналу LE. Загрузив новыми данными всю "колбасу", достаточно подать единственный импульс на соотв. входы микросхем, и информация на выходах одновременно изменится.


Спасибо большое, на стенде все оказалось предельно просто, все работает как и задумано.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.