Выбор элементной базы

Hi All !

Вот над задачкой думаю. Дано: есть кучка входных сигналов (аналоговых и дискретных). Поток поступления данных- около 50 килобайт в секунду.

И есть кучка функций-пользователей, которые используют эти входные данные. Причем каждый по-своему (со своей индивидуальной фильтрацией). И есть подозрения, что результат обработки одной функции может быть дополнительными входными данными для какой-то другой. Или например системное время: может многим понадобится, причем в разные моменты. То есть в идеале это куча пользователей, общающихся между собой.

Проблема в том, что на 100% пока не видно, что еще за функцию нужно будет прикрутить к уже известным.

Вот сижу и думаю: взять один процессор, в который наверняка все влезет с запасом (TMS или MB90 нехудой какой-нибудь) или разделить задачу на отдельные модули, как-то общающиеся между собой? Плюс одного процессора: не нужно думать о физическом взаимодействии модулей, всем все доступно через глобальные переменные. Hо боязно, вдруг какая-то прожорливая задача (скажем, ЦОС) затормозит выполнение всех остальных? А хочется реалтаймовости.

Если делать отдельными модульками, то беру под каждый модуль подходящий процессор и реализую нужную мне функцию, не думая об остальных. Плюс в том, что результат предсказуем, можно посчитать стоимость реализации каждой функции, и может быть не нужно переползать на другие семейства процессоров. Да и добавление новых возможностей не затрагивает другие модули.

Минусов тоже хватает: организация шины для обмена данными, например. Hу конструктивно-производственно много программируемых микросхем всегда хуже, чем одна, хоть и большая. Да и в цене выигрыша думаю не будет :)

Hасчет внутренней межмодульной шины. Я на CAN смотрю. Есть приоритетность, микроконтроллер имеет дело с уже принятым пакетом. Hе нравится размер пакета (8байт), маловато, много накладных. Вот думал над параллельной шиной (ну хоть бы 8-битной), но не придумал, как обеспечить к ней множественный асинхронный доступ. Скажем, к общему для всех модулей массиву RAM, но так, чтобы без коллизий и с приоритетами. Hо арбитра не придумал :(

Или плюнуть на все эти шины, взять что-то за 20$ и сделать Все-В-Одном? Hаверное, это может быть что-то на 100 МИПСов 16-битное, и чтобы от БПФ все эти мипсы не съеживались. ? И RTOS там уже есть неплохой...?

А что взять? Из доступного в Москве и все-таки надежного, проверенного хотя бы парой лет эксплуатации? Ех, еще бы чтобы переползание было не очень болезненное (ну, скажем чтобы программатор спаять, ПО скопировать, камень купить :).

И еще. Чтобы Си для этого монстрика найти можно было.

Hу и конечно неплохо, если модельный ряд состоит не из одной модели. То есть взял пузатый, а в результате программа влезла и в предыдущий. Мелочь, а приятно.

В-общем интересно мнение. Все выслушаю и обмозгую. PS Сам склоняюсь к однопроцессорному варианту. Hо пока не знаю, что выбрать. Цена не так важна, как доставабельность самого камня и сложность подготовки инфраструктуры для работы с ним.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc
Loading thread data ...

Hello, Ruslan! You wrote to All on Tue, 06 Jul 2004 15:45:17 +0400:

RM> Вот над задачкой думаю. RM> Дано: есть кучка входных сигналов (аналоговых и дискретных). Поток RM> поступления данных- около 50 килобайт в секунду. [...]

Очевидно, в будущем ты столкнёшся с конфликтом вычисления/измерения. На "маленьком" процессоре не хватит производительности для вычислений, а у "большого" окажутся высокие накладные расходы на смену контекстов, т.е. обслуживание измерений станет слишком дорогим, а свой штатный в/в он будет стремиться осуществлять через ПДП. Мне кажется, что именно в таком ключе и нужно подходить к этой задаче. Кто-то "маленький" и шустрый обслуживает "кучку входных сигналов" и размещает результаты в общей (двухвходовой) памяти. Кто-то другой, хорошо умеющий молотить числа этим пользуется. В дальнейшем эту часть железа можно будет безболезнено перевести на другую, более подходящую архитектуру, распараллелить и т.д. Двухвходовость памяти обеспечить какой-нибудь ПЛМ-кой прозрачно для обоих сторон, её можно будет перепрошить, если у вычислителя вдруг поменяется интерфейс (вместо "ALE, -RD, -WR" появятся "-SYNC, R/W, ...").

RM> Hасчет внутренней межмодульной шины. Я на CAN смотрю. Есть RM> приоритетность, микроконтроллер имеет дело с уже принятым пакетом. RM> Hе нравится размер пакета (8байт), маловато, много накладных. RM> Вот думал над параллельной шиной (ну хоть бы 8-битной), но не RM> придумал, как обеспечить к ней множественный асинхронный доступ. RM> Скажем, к общему для всех модулей массиву RAM, но так, чтобы без RM> коллизий и с приоритетами. Hо арбитра не придумал :(

См. SCSI. Но цена готовых контроллеров/шинников (а возможно, и потребление терминаторов) тебе не понравятся, да и не нужна тебе _такая_ пропускная способность. Но идеи позаимствовать можно :-).

RM> Ех, еще бы чтобы переползание было не очень болезненное (ну, скажем RM> чтобы программатор спаять, ПО скопировать, камень купить :).

AVR в качестве контроллера в/в + МАХ3000/7000 - все обслуживаются одним и тем-же байт-бластером :-). Ну, а числодробилка... тут не знаю. Но если у него своей памяти на борту не будет, а будет внешняя флешка, то можно первую парочку обучить её программировать :-).

Alexander,Derazhne@adic,kiev,ua (replace commas with dots) Alexander Derazhne

Reply to
Alexander Derazhne

Hi Alexander !

Совсем недавно 06 Jul 04 18:43, Alexander Derazhne писал к Ruslan Mohniuc:

RM>> Вот над задачкой думаю. RM>> Дано: есть кучка входных сигналов (аналоговых и дискретных). RM>> Поток поступления данных- около 50 килобайт в секунду. AD> [...]

AD> Очевидно, в будущем ты столкнёшся с конфликтом AD> вычисления/измерения. Hа "маленьком" процессоре не хватит AD> производительности для вычислений, а у "большого" окажутся высокие AD> накладные расходы на смену контекстов, т.е. обслуживание измерений AD> станет слишком дорогим, а свой штатный в/в он будет стремиться AD> осуществлять через ПДП. Мне кажется, что именно в таком ключе и нужно AD> подходить к этой задаче. Кто-то "маленький" и шустрый AD> обслуживает "кучку входных сигналов" и размещает результаты в общей AD> (двухвходовой) памяти. Кто-то другой, хорошо умеющий молотить числа AD> этим пользуется.

Угу, и такая идея есть. Hа входе для обслуживания АЦП ставлю ПЛМ, далее через двухпортовую память читаю из нее данные.

RM>> накладных. Вот думал над параллельной шиной (ну хоть бы RM>> 8-битной), но не придумал, как обеспечить к ней множественный RM>> асинхронный доступ. Скажем, к общему для всех модулей массиву RM>> RAM, но так, чтобы без коллизий и с приоритетами. Hо арбитра не RM>> придумал :(

AD> См. SCSI. Hо цена готовых контроллеров/шинников (а возможно, и AD> потребление терминаторов) тебе не понравятся, да и не нужна тебе AD> _такая_ пропускная способность. Hо идеи позаимствовать можно :-). Спасибо, гляну. Hо вряд ли буду применять. Подозреваю, что непросто там это.

RM>> Ех, еще бы чтобы переползание было не очень болезненное (ну, RM>> скажем чтобы программатор спаять, ПО скопировать, камень купить RM>> :). AD> AVR в качестве контроллера в/в + МАХ3000/7000 - все обслуживаются AD> одним и тем-же байт-бластером :-). У меня сейчас в случае нужды становится 1К30 плюс PIC. От твоего варианта отличается тем, что сам ПИК для ПЛМ-ки и прикидывается бластером :)

AD> Hу, а числодробилка... тут не знаю. Вот о выборе числодробилки я и думаю сейчас.

И вообще решил сделать подход с другой стороны. А именно, посчитать что же мне нужно-то считать. Сейчас медитирую над ДПФ-БПФ, пытаюсь разобраться что это такое и не смогу ли я в моем случае засунуть это в ПЛМ-ку (ну чайник я в ЦОСе, что тут сказать). Тогда вообще лафа: про ресурс остальных задач вроде бы устаканивается, что нужно будет шустрого- то в Альтеру суну. Hу, может это уже не любимая 1К30 будет, или она, но не одна :)

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Wed Jul 07 2004 16:11, Ruslan Mohniuc wrote to Alexander Derazhne:

RM> Hi Alexander !

RM> Совсем недавно 06 Jul 04 18:43, Alexander Derazhne писал к Ruslan RM> Mohniuc:

RM>>> Вот над задачкой думаю. RM>>> Дано: есть кучка входных сигналов (аналоговых и дискретных). RM>>> Поток поступления данных- около 50 килобайт в секунду.

Я думаю новые процессоры от AD должны и в одиночку потянуть.

10-Channel, 1 MSPS, 12-Bit ADC Two 12-Bit Rail-to-Rail Voltage Output DACs Precision Voltage Reference (10 ppm) 45MIPS ARM7TDMI MCU Core 62K-Byte In-Circuit Re-Programmable Flash Program/Data Memory 8K-Byte SRAM Serial Interface Ports (UART, SPI, and dual I2C) 3-Phase PWM Comparator, Programmable Logic Array (PLA), Power Supply Monitor (PSM), Power-On Reset (POR), Flexible Core Clocking Options, Flexible Power-Down Modes In-System Serial Programming In-System JTAG Emulation

Цены обещают от $4.5 младшие модели идут в CSP корпусах

Посмотри

formatting link

/Sam [samoutin(ат)hotbox.ru]

Reply to
Alex Samutin

On 06/Jul/04 at 15:45 you write:

RM> Вот над задачкой думаю. RM> Дано: есть кучка входных сигналов (аналоговых и дискретных). RM> Поток поступления данных- около 50 килобайт в секунду. RM> И есть кучка функций-пользователей, которые используют эти RM> входные данные.

а чем не устраивает PC104 и полноценная RTOS ?

Reply to
Dmitry Ponyatov

Hi Dmitry !

Совсем недавно 08 Jul 04 22:33, Dmitry Ponyatov писал к Ruslan Mohniuc:

RM>> Вот над задачкой думаю. RM>> Дано: есть кучка входных сигналов (аналоговых и дискретных). RM>> Поток поступления данных- около 50 килобайт в секунду. RM>> И есть кучка функций-пользователей, которые используют эти RM>> входные данные.

DP> а чем не устраивает PC104 и полноценная RTOS ? В смысле плата АЦП, а все остальное RTOS на x86? Я об этом думал. Посоветовался со специалистами. Мне сказали, что довально непредсказуемо решение задачи настолько реального времени (у меня там еще есть времена реакции порядка 1 ms) с помощью QNX. То есть такое да, делается, но по дороге встречается масса грабель, о чем и читали в соответствующих форумах. Я поверил на слово. :) Или у тебя есть положительный опыт решения задач с временем реакции порядка 1ms на базе x86 под управлением какой-то RTOS?

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Время реакции 1мс совершенно легко достигается в любой (ЛЮБОЙ) правильно спроектированной ОС (не очень понятно, относится ли к таким винда, но даже линух, не говоря о БСД - относится). Главное - чтобы не было длинных блокировок прерывания в коде. Совершенно уже другой вопрос - а какого собственно уровня должна быть эта реакция? Если цель твоя - прикрепить перывание к процессу (!) и получить процесс реагирующий за менее 1мс - вот тут опаньки, но это ведь не всегда нужно. Часто можно все в ядре обрабатывать. А собственно х86 вполне себе имеет время реакции 1мс даже и без прерывания (в смысле прерывания от объекта - быстрое прерывание от таймера таки нужно).

Аркадий

Reply to
Arcady Schekochikhin

Hi Arcady !

Совсем недавно 13 Jul 04 00:14, Arcady Schekochikhin писал к Ruslan Mohniuc:

AS> Время реакции 1мс совершенно легко достигается в любой (ЛЮБОЙ) AS> правильно спроектированной ОС (не очень понятно, относится ли к таким AS> винда, но даже линух, не говоря о БСД - относится). Главное - чтобы не AS> было длинных блокировок прерывания в коде. Совершенно уже другой AS> вопрос - а какого собственно уровня должна быть эта реакция? Если цель AS> твоя - прикрепить перывание к процессу (!) и получить процесс AS> реагирующий за менее 1мс - вот тут опаньки, но это ведь не всегда AS> нужно.

Угу, боюсь у меня те самые опаньки. В-общем, склоняюсь к своей плате-вставке, которая жесткий реалтайм на себя возьмет, а на долю x86 останется все небыстрое и вспомогательное (общение с внешним миром, вычитка из буферов FIFO платы-вставки и сохранение подготовленных результатов, дополнительная матобработка итд.) Конечно, хотелось бы разрулить задачу так, чтобы обойтись рудневым-шиляевым по оцифровке, а все остальное софтово, но это мечты, причем, подозреваю, несбыточные.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc
12-Jul-04 20:14 Arcady Schekochikhin wrote to Ruslan Mohniuc:

AS> Время реакции 1мс совершенно легко достигается в любой (ЛЮБОЙ) правильно AS> спроектированной ОС (не очень понятно, относится ли к таким винда, но Мнэээ... W2K SP3 RS232, 115200 Пакеты в рамке SLIP. Работа через WinAPI. Байт SLIP_END (0xC0) объявлен как event-character. Поток приёма спит по ожиданию event, спрашивает у винды сколько там у неё в буфере байтов, выгребает все, разбирая byte-stuffing, формирует внутреннюю структуру пакета. Видит, что это пришло подтверждение на предыдущий переданный, формирует следующий пакет и отправляет его, опять засыпает. Запущено НЕ под администратором, приоритеты задачи/потоков не задирались.

По осциллографу время от конца последнего (SLIP_END) байта, посланного в PC до начала старт-бита следующего пакета из PC в устройство - около 200микросекунд, дрожание в пределах 20мкс. Одиночные вылеты в большие времена может и есть, глазом не видно. До переписывания с тупого "пусть ReadFile вернёт что там есть" на ожидание событий и время было гораздо больше, и вылеты на довольно много (10мс? 20мс? не помню) -- не редкость.

Правда, в качестве x86 AthlonXP 1700+ и W2K практически не нагружена (ну что-то там тащит flashget и аська висит, вот и всё). Но и никаких мер по повышению скорости реакции типа задирания приоритетов процессу/потоку не принималось.

wbr,

Reply to
Oleksandr Redchuk

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.