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

Появилась задача мультиплексировать 8 UART со скоростью 1Мбит/с. Внутренне понимаю, что нужна ПЛИС для решения задачи, но поскольку никогда с ними не работал, то оценить под какую можель нужно заложиться не знаю. на другой стороне есть 1 SPI или 2 UART(до 5 Мбит/с). входы мультиплексора необходимо иметь с триггером Шмидта.

Знающие люди - помогите.
Methane
Цитата(drum1987 @ Apr 22 2013, 09:56) *
Добрый день!

Появилась задача мультиплексировать 8 UART со скоростью 1Мбит/с. Внутренне понимаю, что нужна ПЛИС для решения задачи, но поскольку никогда с ними не работал, то оценить под какую можель нужно заложиться не знаю. на другой стороне есть 1 SPI или 2 UART(до 5 Мбит/с). входы мультиплексора необходимо иметь с триггером Шмидта.

Знающие люди - помогите.

А что значит "мультиплексировать"? Если уже есть UART а надо просто подключать к нему 1 из 8 портов, то самая дешевая CPLD подойдет. Хотя я бы взяли чегонить из 74HC
drum1987
Нужно одновременно принимать и передавать во все 8 уартов. Тоесть не просто коммутировать нужный вход с выходом, а делать чтото вроде TDMA.
Methane
Цитата(drum1987 @ Apr 22 2013, 10:14) *
Нужно одновременно принимать и передавать во все 8 уартов. Тоесть не просто коммутировать нужный вход с выходом, а делать чтото вроде TDMA.

На одной и тойже скорости или на разных? Что есть кроме SPI?
drum1987
8 uart каждый на 1 мгц (1Мбит/с). Есть spi или 2 uart
iosifk
Цитата(drum1987 @ Apr 22 2013, 10:56) *
Добрый день!

Появилась задача мультиплексировать 8 UART со скоростью 1Мбит/с. Внутренне понимаю, что нужна ПЛИС для решения задачи, но поскольку никогда с ними не работал, то оценить под какую можель нужно заложиться не знаю. на другой стороне есть 1 SPI или 2 UART(до 5 Мбит/с). входы мультиплексора необходимо иметь с триггером Шмидта.

И это еще не все, как говорят рекламисты...
Если 8 потоков данных на входе и 1 на выходе, то нужно, чтобы все данные со входа пролезли на выход...
А как, если 8х1=8 1Мбит/с, а на выходе есть только 5 ??? Но и это еще не все... Кроме скорости передачи есть еще Стартовые, Стоповые, Паритеты. И их соответственно надо пересчитать "от входа к выходу"...
Как часто на входе общий поток на входе превысит выходной и насколько? Этим же определяется буфер FIFO... И он определит "емкость" кристалла и его стоимость. Либо FIFO надо делать внешнее. И тогда сложность проекта резко увеличится, ибо надо будет либо ставить 8 FIFO, либо делать разборку, какой байт от какого канала записан.
И как получатель потока поймет из какого канала передавался байт?
Methane
Цитата(drum1987 @ Apr 22 2013, 10:24) *
8 uart каждый на 1 мгц (1Мбит/с). Есть spi или 2 uart

Ищите через что еще можно данные передать. Ну там вход, через который можно дернуть за прерывание и шину адресса/данных, это классика. Иначе геморой себе сделаете на пустом месте грандиозный.
iosifk
Цитата(Methane @ Apr 22 2013, 11:38) *
Иначе геморой себе сделаете на пустом месте грандиозный.

Присоединяюсь!
И могу точно сказать, что если что-то сразу кажется некрасивым, как в этом случае, то это значит, что задача поставлена НЕ ВЕРНО!
У Вас что за данные? Это непрерывные потоки видео? Или сбор информации о медленном объекте? А в таком случае, зачем нужны такие скорости? И почему не сделать распределенную обработку? 8 дешевых микроконтроллеров будут дешевле, чем "мультиплексор на ПЛИС"...
Так что начните с "Гайки М3" и постарайтесь пересмотреть задачу....
Victor®
Цитата(iosifk @ Apr 22 2013, 10:48) *
Присоединяюсь!
И могу точно сказать, что если что-то сразу кажется некрасивым, как в этом случае, то это значит, что задача поставлена НЕ ВЕРНО!


Согласен.
Почему бы не посмотреть в сторону RS-485 (c Modbus или Profibus, например)?
drum1987
Пересматривать задачу у меня не получится - она у меня уже есть. Попробую описать ее подробнее:
Есть 8 датчиков, которые срабатывают одновременно и дают N бит со скоростью 1Мбит/с. N~200-400. Задача мультиплексора свести все эти потоки в один с добавлением адреса откуда что пришло.
Запуск осуществляется мультиплексором путем передачи данных в датчики.
На другой стороне есть либо 2 UART, но большей скорости(5Мбит/с), либо SPI (30Мбит/с). UART нужен в режиме RX, TX. Ничего больше не надо.

Датчики конкретные уже есть - у них uart и накрутить туда rs485 или чтото другое я не могу...

MAX14830 по температуре не подходит...надо до 105.
Methane
Цитата(drum1987 @ Apr 22 2013, 10:57) *
Пересматривать задачу у меня не получится - она у меня уже есть. Попробую описать ее подробнее:
Есть 8 датчиков, которые срабатывают одновременно и дают N бит со скоростью 1Мбит/с. N~200-400. Задача мультиплексора свести все эти потоки в один с добавлением адреса откуда что пришло.
Запуск осуществляется мультиплексором путем передачи данных в датчики.
На другой стороне есть либо 2 UART, но большей скорости(5Мбит/с), либо SPI (30Мбит/с).

Датчики конкретные уже есть - у них uart и накрутить туда rs485 или чтото другое я не могу...

Тоесть вам надо сформировать аппаратно запрос со всех датчиков, потом принять все, на одинаковой скорости как я понял, и слить в контроллер? Тогда все проще. Делаете SPI мастер, который будет опрашивать контроллер, и если есть запрос, то формировать свой запрос на датчики. Потом декодировать, и сливать в контроллер уже готовую информацию. Тогда все красиво получится. Если есть SPI с ПДП, как в AVR32UC то вообще замечательно будет.
iosifk
Цитата(drum1987 @ Apr 22 2013, 11:57) *
Пересматривать задачу у меня не получится - она у меня уже есть. Попробую описать ее подробнее:
Есть 8 датчиков, которые срабатывают одновременно и дают N бит со скоростью 1Мбит/с. N~200-400.


Это типичная ошибка "программиста"...
Давайте еще раз и внимательно.
Есть физический объект. Он меняет свои параметры, которые передаются датчикам. Как быстро объект может менять свои параметры? Ну, например температура объекта массой 100 кГ скорее всего не изменится за 10 сек, если только речь не идет о камере сгорания в ракете. Так какой тогда смысл гнать информацию в "центр" на скорости в 1Мбит??? Кто опрашивает датчики и как часто? Или они сами гонят данные в "центр"?
Если информация, поступающая от датчиков имеет локальные алгоритмы обработки, например фильтрация шумов или сравнение с уставкой, то в таком случае делается распределенная обработка, при этом поток данных в "центр" значительно уменьшается. И все разнесенные обработчики подключаются к единому интерфейсу... У меня на сайте есть статья про "Квадригу"...

drum1987
Methane
Именно так мне и нужно, просто нужно оценить какую ПЛИС надо для этого

iosifk
Да чтож вы так то...у меня есть задание 1 Мбит/с я не могу спорить с этим. А там как оно получилось уже не особо важно.
Methane
Цитата(drum1987 @ Apr 22 2013, 11:15) *
Methane
Именно так мне и нужно, просто нужно оценить какую ПЛИС надо для этого

Любая подойдет. Если именно ПЛИС. И на процессор место останется. Вообще вы можете начать писать проект на HDL, потом собрать его для разных ПЛИС, посмотреть сколько ресурсов оно занимает.
_pv
Цитата(drum1987 @ Apr 22 2013, 14:57) *
MAX14830 по температуре не подходит...надо до 105.

с этого и надо было начинать sm.gif
у nxp еще есть spi - uart расцирители SC16IS752, вроде с инустриальными температурами. только там по два уарта.
iosifk
Цитата(_pv @ Apr 22 2013, 12:47) *
с этого и надо было начинать sm.gif

Согласен! Начинать и надо было с этого.
Итак, если датчики работают в режиме "запрос-ответ", то Вам и ПЛИС не нужна.
По входу 2 раза по 4-И они будут работать как "ИЛИ по нулю"...
А по выходу 4 раза по 2-ИЛИ, они будут работать как "И по нулю"...
Итого 2 корпуса логики и к ним преобразователи уровней. А уж логику можно подобрать на требуемую температуру куда как легче, чем CPLD...
drum1987
Дело в том что запрос нужно(крайне желательно) слать одновременно на все. После этого датчики тоже ответят "одновременно"(во всяком случае с наложением точно), так вот эти данные и нужно запихать в один более скоростной порт(SPI) и выдать поочереди
Methane
Цитата(drum1987 @ Apr 22 2013, 14:36) *
Дело в том что запрос нужно(крайне желательно) слать одновременно на все. После этого датчики тоже ответят "одновременно"(во всяком случае с наложением точно), так вот эти данные и нужно запихать в один более скоростной порт(SPI) и выдать поочереди

Ну вот и купите плату с самой дешевой плисиной. Прицепите к ней 8 преобразователей уровня, таких которые RS232 на мегабите потянут. Сформируйте на ней запросный код. Скопом убедитесь что модули отвечают. Той же ПЛИСиной примите данные. С помощью квартуса убидитесь что данные приняты правильно. По SPI перегоните данные в контроллер.
MaslovVG
Цитата(drum1987 @ Apr 22 2013, 15:36) *
Дело в том что запрос нужно(крайне желательно) слать одновременно на все. После этого датчики тоже ответят "одновременно"(во всяком случае с наложением точно), так вот эти данные и нужно запихать в один более скоростной порт(SPI) и выдать поочереди

В таком случае вам нужно реализовать в ПЛИС восемь УАРТ два буфера озу на 8 пакетов каждый, какой нибудь контроллер для упаковки пакетов и еще быстрый канал передачи на верхний уровень.
Если устройство единичное я бы взял одноплатный промышленный РС навесил на него расширители до 8-УАРТ и плясал в этой конфигурации.
Maverick
drum1987
Пауза между передачами будет? Время для перепаковки у Вас будет?
Т.е. вначале все приняли - перепаковали - все передали. И так по кругу, если есть пауза между передачами c host... Какой объем данных Вы получаете?
Или нужен полный реалтайм и перепаковка делается "на проходе"?
drum1987
Цитата(Methane @ Apr 22 2013, 18:41) *
Ну вот и купите плату с самой дешевой плисиной. Прицепите к ней 8 преобразователей уровня, таких которые RS232 на мегабите потянут. Сформируйте на ней запросный код. Скопом убедитесь что модули отвечают. Той же ПЛИСиной примите данные. С помощью квартуса убидитесь что данные приняты правильно. По SPI перегоните данные в контроллер.

Так посоветуйте мне ПЛИС smile3046.gif я именно это и прошу

Цитата(Maverick @ Apr 22 2013, 19:17) *
drum1987
Пауза между передачами будет? Время для перепаковки у Вас будет?
Т.е. вначале все приняли - перепаковали - все передали. И так по кругу, если есть пауза между передачами c host... Какой объем данных Вы получаете?
Или нужен полный реалтайм и перепаковка делается "на проходе"?

Время есть между посылками
Methane
Цитата(drum1987 @ Apr 22 2013, 15:28) *
Так посоветуйте мне ПЛИС smile3046.gif я именно это и прошу


Ну откуда я знаю что в Омске есть, кроме водки медведев и балалаек. Циклон Альтеровский к примеру есть? Судя по потому что вы рассказываете, даже в самый дохлый влезет.
Maverick
Цитата(drum1987 @ Apr 22 2013, 15:28) *
Так посоветуйте мне ПЛИС smile3046.gif я именно это и прошу
Время есть между посылками

Выбирайте любую FPGA, смотрите на количество блочной памяти, она Вам понадобиться для организации буфера (фифо)...
Смотрите циклон у альтеры, или спартан у хилых...
Тут Вам решать цена/сроки покупки/где покупать...
Bad0512
Цитата(drum1987 @ Apr 22 2013, 19:28) *
Время есть между посылками

Каков средний битрейт на каждый канал?
На входе - честный RS232 (с 12-вольтовыми уровнями)? Тогда преобразователи (на такую скорость и температурный диапазон) из RS232 в TTL/CMOS влетят вам в копеечку.
ПЛИС подойдёт почти любая из дешёвых.
maksimp
Вам нужно будет сделать 8 UARTов, результат передавать по SPI. Полудплексный UART - это около 60 ячееек ПЛИС. Ячейка - это триггер плюс входная логика. Полудуплексный - это который передавать и принимать одновременно не умеет. Полнодуплексный, который умеет передавать и принимать одновременно, займёт несколько больше ячеек.
Если полудуплексных вам достаточно, то нужно 60*8=480 ячеек. Запас в 2 раза очень желательно. То есть не менее 1000 ячеек.
Выбирать можно например из семейства max2 от Altera, чтобы не нужно было ставить конфигурационное ПЗУ отдельно.
Тогда EPM1270 подойдёт наверное, а EPM570 не подойдёт.
Но сначала всё равно лучше сделать программу ПЛИС, и только потом плату разводить.
Methane
Цитата(maksimp @ Apr 23 2013, 06:12) *
Выбирать можно например из семейства max2 от Altera, чтобы не нужно было ставить конфигурационное ПЗУ отдельно.

Я бы все же посоветовал начинать с FPGA. Там и ресурсов для всяких анализаторов гораздо больше, и память есть, и кол-во циклов перезаписи не ограниченное.
vladec
У Xilinx, посмотрите, например, XC3S200A-VQ100, в ней же можно также организовать и микроконтроллер на ядре PicoBlaze, все должно поместиться
drum1987
Уровни там 3,3В так что согласовывать уровни не надо...

Спасибо всем за ответы касательно ПЛИС. Сел за изучение спартана (в конторе есть опыт с ксайлинкс).
Methane
Цитата(drum1987 @ Apr 23 2013, 10:10) *
Уровни там 3,3В так что согласовывать уровни не надо...

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