roboforum.ru

Технический форум по робототехнике.

Parallax Propeller

Parallax Propeller

blindman » 26 сен 2009, 12:02

Контроллер Parallax Propeller выпускается довольно давно, однако проектов с его использованием пока не особо много. "Буржуи" что-то делают, а в бывшем СССР как-то не густо. А ведь этот чип во многом уникален.

Этот топик создаётся с целью дать начальную информацию по Propeller, а также обсудить возможные применения в нашем хобби. Здесь я сделаю небольшой обзор архитектуры и возможностей контроллера, а также его недостатков (коих немало). Кто заинтересуется - можно почитать мануал. Существует и перевод на русский язык, правда немного устаревший, сделанный ребятами из украинской Инженерной Группы 6-Lab.

Так в чём же уникальность Parallax Propeller? А в том, что в его состав входят 8 идентичных 32-разрядных процессоров! Тактовая частота может достигать 80 МГц. Большинство инструкций выполняются за 4 такта, что даёт до 20 MIPS. Умножим это на число процессоров - получим 160 MIPS. Неплохо, да? ;)

Имеются 32 цифровых линии ввода-вывода. Каждая линия отдельно может использоваться как вход или выход.

С каждым процессором связаны 2 КиБ ОЗУ, организованного как 512 32-битных слов, и 2 таймера. Каждый таймер может использовать до 2 линий ввода-вывода (одна как вход, одна как выход). Процессор не может обращаться к ОЗУ, принадлежащему другому процессору.

Общее адресное пространство, к которому могут обращаться все процессоры, имеет размер 64 КиБ. Нижние 32 КиБ соответствуют ОЗУ, верхние 32 КиБ - ПЗУ. В ПЗУ содержатся различные таблицы, которые могут быть полезны при написании программ - знакогенератор (базовая латиница и набор символов Latin-1), таблицы синусов, логарифмов и антилогарифмов, а также начальный загрузчик и интерпретатор языка высокого уровня Spin.

Доступ к общему адресному пространству осуществляется с помощью специального устройства - концентратора (hub). Концентратор выделяет для каждого процессора "окно" длительностью 2 такта. Цикл работы концентратора равен 16 тактам. Инструкция, обращающаяся к общему адресному пространству выполняется от 7 до 22 тактов, в зависимости от того насколько отстоит момент начала выполнения инструкции от "окна", выделенного текущему процессору. Это гарантирует, что разные процессоры не смогут обращаться к одному и тому же адресу общей памяти одновременно. Концентратор также обеспечивает доступ к аппаратно реализованным мутексам, которых имеется 8 штук.

После сброса, запускается процессор №0, который выполняет программу начального загрузчика. Загрузчик в течение некоторого времени ожидает команды от компьютера через последовательный интерфейс. Таким образом, можно загрузить программу в ОЗУ или внешнее ПЗУ, подключённое к контроллеру, и потом запустить её. Если же команда от компьютера не поступила, загрузчик проверяет наличие внешнего ПЗУ. Если ПЗУ не обнаружено, контроллер останавливается. Иначе, содержимое внешнего ПЗУ копируется в ОЗУ, и начинается выполнение загруженной программы.

Для программирования Propeller используются 2 основных языка - Spin и Propeller Assembler. Spin является языком высокого уровня, интерпретатор которого содержится во внутреннем ПЗУ контроллера. После загрузки всегда выполняется программа на Spin, которая может, если необходимо, запустить ассемблерную программу. Для Propeller существует также компилятор C (разработка компании ImageCraft).

Отдельного внимания заслуживают таймеры-счётчики. Каждый таймер состоит из 2 регистров (не считая управляющих регистров) - регистр частоты и регистр фазы. При возникновении определённого условия, содержимое регистра частоты прибавляется к содержимому регистра фазы. Условия могут быть различными, например наличие определённого логического уровня на линии ввода/вывода, фронт или спад на линии ввода/вывода, равенство или неравенство логических уровней на 2 линиях ввода/вывода. Также, определённые состояния регистра фазы могут вызывать изменения состояния линии вывода. Всего существует 32 режима работы таймера. Многообразие режимов работы таймеров позволяет реализовать различные генераторы импульсов, счётчики, измерители частоты, периода, скважности, ШИМ-модуляторы, синтезаторы звука и т.п. Добавив всего 1 резистор и 2 конденсатора, можно реализовать дельта-сигма АЦП от 1220 SPS при разрешении 16 бит до 5000000 SPS при разрешении 4 бит. Существуют режимы таймеров, которые с соответствующей программной поддержкой позволяют генерировать видеосигнал.

Теперь о недостатках.

Первое, на что обратят внимание те, кто привык работать с микроконтроллерами - отсутствие устройств ввода-вывода. Ни привычных UART, ни SPI, ни I2C, ни АЦП. Интересно, что при начальной загрузке используются UART для общения с хостом и I2C для доступа к внешнему ПЗУ. Неужели эти интерфейсы реализованы в загрузчик программно? А если аппаратно - почему было не разрешить доступ к ним из пользовательской программы?

Второе - программа на ассемблере должна быть расположена в ОЗУ процессора, на котором она исполняется. Это значит, что ассемблерная программа не может быть длинней 1984 байт (старшие 64 байта используются для доступа к портам, таймерам и т.д.) - а это всего 496 команд. Причём в этих же 1984 байтах должны располагаться локальные переменные. Регистров процессора как таковых нет - их функции могут исполнять любые ячейки памяти, принадлежащей процессору.

Третье - непонятно, почему доступ к встроенному ПЗУ осуществляется через концентратор. С ОЗУ понятно, а вот из ПЗУ можно было чтение сделать напрямую.

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

Несмотря на эти недостатки, чип всё же довольно интересный. На нём можно делать довольно продвинутые вещи. Например, игровая консоль Hydra. Или АМ-приёмник, состоящий из чипа Propeller, десятка внешних компонентов и пары десятков строк кода.

Добавлено спустя 31 минуту 21 секунду:
Тема про Propeller уже поднималась на форуме viewtopic.php?f=2&t=3231&hilit=propeller#p40804
Но энтузиазма не вызвала.

Re: Parallax Propeller

avr123.nm.ru » 26 сен 2009, 14:32

Чем прошивать пропеллер ? Помоему PROTEUS моделирует Parallax Propeller.

Re: Parallax Propeller

blindman » 26 сен 2009, 14:50

Прошивается через последовательный порт компьютера, с помощью бесплатной программы Propeller Tool.

Добавлено спустя 2 минуты 49 секунд:
Кстати, сам пропеллер не прошивается - программа загружается или в ОЗУ, или во внешнее ПЗУ
Вложения
PropSerial.png
Подключение к последовательному порту ПК
PropPlug.png
Подключение к USB
PropConnection.png
Схема подключения

Re: Parallax Propeller

avr123.nm.ru » 26 сен 2009, 15:00

Наверно надо что-то самому на нем сделать чтобы понять его пропеллерную архитектуру.

Re: Parallax Propeller

Duhas » 26 сен 2009, 15:18

основная фича по идее - параллельные вычисления... ну и ацп и тд в нем вроде имеетсо ?я уже позабыл... как-то читал про него..

Re: Parallax Propeller

blindman » 26 сен 2009, 15:21

Дык прочитай ещё раз. Всё есть в первом посте. Там же и ссылки на доки

Re: Parallax Propeller

EdGull » 26 сен 2009, 15:25

а чем он лучше например восьми мег48-24МГц соединенных допустим по SPI?

Re: Parallax Propeller

avr123.nm.ru » 26 сен 2009, 15:30

Ну хотябы одним корпусом вместо 8 :D но тут наверно не лучше хуже, а просто он другой.

Re: Parallax Propeller

blindman » 26 сен 2009, 15:34

8 8-разрядных процессоров в 8 корпусах или 8 32-разрядных в одном - есть разница? А 32 бита через SPI между двумя процессорами за 275 нс получится передать? А в пропеллере именно за это время слово пишется в общую память - и то в наихудшем случае. Лучше-хуже, чёрное белое. Он не лучше и не хуже. Он другой. И как уже совершенно правильно заметили, чтобы понять, надо что-нибудь на нём сделать

Re: Parallax Propeller

EdGull » 26 сен 2009, 16:24

ок, а если восемь арм7 на одной платке? :)

Добавлено спустя 4 минуты 16 секунд:
на 72МГц

Re: Parallax Propeller

blindman » 26 сен 2009, 16:49

Эд, чо за провокации? Скажи прямо, к чему ты клонишь?

Re: Parallax Propeller

EdGull » 26 сен 2009, 16:58

да никаких провакаций.
тупо непонятно где можно применить такой тип мк.
ну восемь мк в одном корпусе и чё?
я могу собрать на одной махонькой платке тоже восем армов, только помоему они намного круче будут.
можно описать что очычно собирают на этих пропеллерах и почему это нельзя собрать на распространненых Мк например на арм7?

Re: Parallax Propeller

blindman » 26 сен 2009, 17:16

Ну во первых восемь корпусов против одного - уже что-то. А если начать отвечать на твой вопрос "почему", можно скатиться в обычный флейм - лучше/хуже. Посмотреть что делают на них можно например в результатах контеста 2008 года http://www.parallax.com/tabid/699/Default.aspx

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

Я понимаю, что чип необычный, и понять сразу его не получится. Короче, вопрос "чем лучше" считаю здесь неуместным.

Re: Parallax Propeller

avr123.nm.ru » 26 сен 2009, 18:40

EdGull писал(а): я могу собрать на одной махонькой платке тоже восем армов, только помоему они намного круче будут.
Наверно и подороже.

Re: Parallax Propeller

Angel71 » 27 сен 2009, 22:24

blindman, а в сторону SEAforth 40C18 не посматривал? :oops: немного дороже и менее достовабельный, но тоже очень неплохой спецфический камушек
Последний раз редактировалось Angel71 27 сен 2009, 22:53, всего редактировалось 1 раз.


Rambler\'s Top100 Mail.ru counter