Параллакс пропеллер - Parallax Propeller

Параллакс пропеллер в двухрядный корпус

В Parallax P8X32A Пропеллер это многоядерный процессор параллельно компьютерная архитектура микроконтроллер чип с восемью 32-битный компьютер с сокращенным набором команд (RISC) центральное процессорное устройство (CPU) ядер.[1][2] Представленный в 2006 году, он разработан и продается компанией Parallax, Inc.

Микроконтроллер Propeller, Propeller язык ассемблера, и спин устный переводчик были разработаны соучредителем и президентом Parallax Чипом Грейси. Вращение язык программирования и Инструмент пропеллера интегрированная среда развития (IDE) были разработаны Чипом Грейси и инженером-программистом Parallax Джеффом Мартином.

6 августа 2014 г. Parallax Inc. выпустила все оборудование и инструменты Propeller 1 P8X32A как оборудование с открытым исходным кодом и программного обеспечения под Стандартная общественная лицензия GNU (GPL) 3.0. Это включало Verilog код, верхний уровень язык описания оборудования (HDL), интерпретатор Spin, инструменты программирования и компиляторы PropellerIDE и SimpleIDE.[3]

Многоядерная архитектура

Каждое из восьми 32-битных ядер (называемых винтик) имеет центральное процессорное устройство (CPU), который имеет доступ к 512 32-битным длинным слова (2 КБ ) инструкций и данных. Самомодифицирующийся код возможно и используется внутри компании, например, как загрузчик перезаписывается интерпретатором вращения. Подпрограммы в Spin (объектно-ориентированный высокоуровневый код) используют механизм возврата-вызова, требующий использования вызова куча. Код сборки (PASM, низкоуровневый) не требует стека вызовов. Доступ к общей памяти (32 КБ оперативная память (БАРАН); 32 КБ только для чтения памяти (ROM)) управляется через циклическое планирование внутренним компьютерный автобус контролер назвал центр. Каждый винтик также имеет доступ к двум выделенным аппаратным счетчикам и специальному видеогенератор для использования при генерации сигналов синхронизации для линии с чередованием фаз (PAL ), Национальный комитет по телевизионной системе (NTSC ), Видеографическая матрица (VGA), сервомеханизм -control и другие.[4]

Управление скоростью и мощностью

Пропеллер может быть синхронизированный с использованием либо внутреннего генератора на кристалле (что обеспечивает меньшее общее количество деталей, но жертвует некоторой точностью и тепловой стабильность) или внешний кварцевый генератор или же керамический резонатор (обеспечение более высокой максимальной скорости с большей точностью при более высокой общей стоимости). Только внешний генератор может работать через встроенный чип. ФАПЧ (PLL) множитель часов, который может быть установлен на 1x, 2x, 4x, 8x или 16x.

Как частота встроенного генератора (если используется), так и значение множителя ФАПЧ могут быть изменены во время работы. При правильном использовании это может повысить энергоэффективность; например, множитель ФАПЧ может быть уменьшен до долгого нет операции ожидание необходимо для целей синхронизации, а затем увеличивается, в результате чего процессор потребляет меньше энергии. Однако полезность этого метода ограничена ситуациями, когда никакой другой процессор не выполняет код, зависящий от времени (или тщательно спроектирован так, чтобы справляться с изменением), поскольку эффективная тактовая частота является общей для всех процессоров.

Эффективная тактовая частота колеблется от 32 кГц до 80 МГц (с точными значениями, доступными для динамического управления, в зависимости от используемой конфигурации, как описано выше). При работе на частоте 80 МГц фирменная интерпретация Вращение язык программирования выполняет приблизительно 80 000 токенов инструкций в секунду на каждом ядре, что дает 8 умноженных на 80 000 для 640 000 высокоуровневых инструкций в секунду. Для выполнения большинства команд машинного языка требуется 4 тактовых цикла, в результате чего получается 20 миллионов команд. инструкций в секунду (MIPS) на винт, или всего 160 MIPS для 8-звездочного гребного винта.

Энергопотребление можно снизить, снизив тактовую частоту до необходимого уровня, отключив ненужные шестеренки (которые затем потребляют мало энергии) и перенастроив контакты ввода-вывода, которые не нужны или которые можно безопасно разместить в высокоомный государственный (трехсторонний ) в качестве входных данных. Пины можно перенастроить динамически, но, опять же, изменение применяется ко всем винтикам, поэтому синхронизация важна для определенных проектов. Некоторая защита доступна для ситуаций, когда одно ядро ​​пытается использовать вывод как выход, а другое пытается использовать его как вход; это объясняется в техническом справочном руководстве Parallax.

Встроенная периферия

Каждый Cog имеет доступ к некоторому выделенному аппаратному обеспечению счетчика таймера и специальному генератору сигналов синхронизации, предназначенному для упрощения конструкции каскадов вывода видео, таких как композитный PAL или же NTSC дисплеи (включая модуляция для трансляции) и Видеографическая матрица (VGA) мониторы. Таким образом, Parallax делает доступным образец кода, который может генерировать видеосигналы (текст и графику с несколько низким разрешением) с использованием минимального количества деталей, состоящих из Propeller, кварцевого генератора и нескольких резисторов, чтобы сформировать грубый цифро-аналоговый преобразователь (ЦАП). Частота генератора важна, поскольку возможность коррекции оборудования синхронизации видео ограничена тактовой частотой. Можно использовать несколько процессоров параллельно для генерации одного видеосигнала. В более общем смысле, оборудование синхронизации может использоваться для реализации различных широтно-импульсная модуляция (ШИМ) синхронизирующие сигналы.

Расширения ROM

Помимо интерпретатора Spin и загрузчик, встроенное ПЗУ предоставляет некоторые данные, которые могут быть полезны для определенного звука, видео или математика Приложения:

  • растровое изображение шрифт предоставляется, подходит для типичных приложений генерации символов (но не настраивается);
  • а логарифм таблица (база 2, 2048 записей);
  • ан антилогарифм таблица (база 2, 2048 записей); и
  • таблица синусов (16 бит, 2049 записей, представляющих первый квадрант, углы от 0 до π / 2; остальные три квадранта создаются из той же таблицы).

Математические расширения призваны помочь компенсировать отсутствие блок с плавающей запятой, и более примитивные недостающие операции, такие как умножение и деление (это маскируется в Spin, но является пределом для язык ассемблера рутины). Однако Propeller - это 32-битный процессор, и эти таблицы могут иметь недостаточную точность для более точного использования.

Встроенный интерпретатор байт-кода Spin

Спин - это многозадачность высокий уровень язык компьютерного программирования сделано Параллакс Чип Грейси, который также разработал Propeller микроконтроллер на которой он работает, для своей линейки микроконтроллеров Propeller.[5]

Спин-код написан на Propeller Tool, платформе разработки программного обеспечения с графическим интерфейсом, написанной для Windows XP.[6] Этот компилятор преобразует код Spin в байткоды которые могут быть загружены (с помощью того же инструмента) в основную оперативную память 32 КБ и, при необходимости, I²C ботинок электрически стираемая программируемая постоянная память (EEPROM ) микросхемы Propeller. После загрузки воздушного винта интерпретатор байт-кода копируется из встроенного ПЗУ в 2 КБ ОЗУ первичного COG. Затем этот COG начнет интерпретацию байт-кодов в основной 32 КБ RAM. Более чем одна копия интерпретатора байт-кода может работать в других COG, поэтому несколько Spin-кодов потоки могут работать одновременно. В программе Spin-кода программы ассемблерного кода могут быть в соответствии вставлен. Эти программы ассемблера затем будут работать на своих собственных COG.

Нравиться Python, Spin использует пробелы в отступах, а не Фигурные скобки или же ключевые слова, чтобы разграничить блоки.

Интерпретатор Propeller для его проприетарного многопоточный Компьютерный язык Spin - это байт-код устный переводчик. Этот интерпретатор декодирует строки инструкций, по одной инструкции на байт, из пользовательского кода, который был отредактирован, скомпилирован и загружен в Propeller из специального интегрированная среда развития (IDE). Эта IDE, которую называет Parallax Инструмент Propeller, предназначен для использования под Майкрософт Виндоус Операционная система.

Язык Spin - это язык программирования высокого уровня. Поскольку он интерпретируется программно, он работает медленнее, чем чистая сборка Propeller, но может быть более компактной: коды операций сборки Propeller имеют длину 32 бита; Директивы Spin имеют длину 8 бит, за которыми может следовать ряд 8-битных байтов, чтобы указать, как работает эта директива. Отжим также позволяет избежать значительных сегментация памяти проблемы, которые необходимо учитывать для кода сборки.

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

Синтаксис

Синтаксис Spin можно разделить на блоки, которые содержат:

  • VAR - глобальные переменные
  • ПРОТИВ - программные константы
  • ПАБ - код публичной подпрограммы
  • PRI - код частной подпрограммы
  • OBJ - код для объектов
  • DAT - предопределенные данные, резервирование памяти и ассемблерный код

Примеры ключевых слов

  • перезагрузка: вызывает перезагрузку микроконтроллера
  • waitcnt: подождите, пока системный счетчик станет равным или превысит указанное значение
  • waitvid: ожидает (видео) события синхронизации перед выводом (видео) данных на контакты ввода / вывода
  • coginit: запускает процессор для новой задачи

Пример программы

Пример программы (как в Инструмент пропеллера editor), который выдает текущий системный счетчик каждые 3 000 000 циклов, а затем отключается другим процессором после 40 000 000 циклов:

Пример SPIN program.png

Parallax Propeller постепенно накапливает программные библиотеки, которые дают ему возможности, аналогичные более старым Parallax. БАЗОВЫЙ штамп товар; однако нет единого списка, который PBASIC у объектов теперь есть эквиваленты Spin.

В шутку высказывается мнение, что «Если бы два языка встретились в баре - Fortran и BASIC - девять месяцев спустя, можно было бы найти Spin». Это относится к форматированию пробельных символов FORTRAN и основанной на ключевых словах операции BASIC.

Пакет и ввод / вывод

Первоначальная версия микросхемы (называемая P8X32A) предоставляет один 32-битный порт в 40-контактном 0,6 дюйма. двухрядный корпус (DIP), 44-контактный LQFP, или же Пакет Quad Flat без проводов (QFN) технология поверхностного монтажа упаковка. Из 40 доступных контактов 32 используются для ввода / вывода, четыре - для питания и заземления, два - для внешнего кристалла (если используется), один - для включения отключение электричества и обнаружение обесточивания, и одно для сброса.

Все восемь ядер могут получить доступ к 32-битному порту (обозначенному "A"; в настоящее время "B" нет). Для предотвращения конфликтов ввода-вывода используется специальный механизм управления, если одно ядро ​​пытается использовать вывод ввода-вывода в качестве вывода, а другое пытается использовать его как ввод. Любой из этих выводов может использоваться для методов вывода с синхронизацией или широтно-импульсной модуляцией, описанных выше.

Parallax заявила, что ожидает, что более поздние версии Propeller будут предлагать больше контактов ввода / вывода и / или больше памяти.[7]

Виртуальные устройства ввода-вывода

Снимок экрана демонстрации графики, созданной Parallax для демонстрации видеотеки NTSC

Разработчики Propeller разработали его на основе концепции «виртуальных устройств ввода-вывода». Например, Комплект для разработки игр HYDRA, (компьютерная система, разработанная для любителей, чтобы научиться разрабатывать видеоигры в ретро-стиле) использует встроенный генератор символов и логику поддержки видео для создания виртуальный графический процессор -генератор, который выводит цветные изображения VGA, цветные изображения, совместимые с PAL / NTSC, или транслирует RF видео + аудио в программном обеспечении.[8]

Показанный здесь снимок экрана был сделан с помощью программного обеспечения. драйвер виртуального дисплея который отправляет пиксельные данные по последовательному каналу на ПК.[9]

Доступны программные библиотеки для реализации нескольких устройств ввода-вывода, начиная от простых UART и последовательных интерфейсов ввода-вывода, таких как последовательные интерфейсы мыши и клавиатуры, совместимые с SPI, I²C и PS / 2, драйверы двигателей для роботизированных систем, интерфейсы MIDI и контроллеры ЖК-дисплея.[10]

Выделенные ядра вместо прерываний

Философия конструкции Propeller заключается в том, что жесткий режим реального времени многоядерная архитектура устраняет необходимость в выделенных прерывать оборудование и поддержка в сборке. В традиционной архитектуре ЦП внешние линии прерываний подаются на встроенный контроллер прерываний и обслуживаются одним или несколькими процедуры обслуживания прерываний. Когда происходит прерывание, контроллер прерывания приостанавливает нормальную обработку ЦП и сохраняет внутреннее состояние (обычно в стеке), а затем направляет его в назначенную процедуру обслуживания прерывания. После обработки прерывания служебная программа выполняет вернуться из прерывания инструкция, которая восстанавливает внутреннее состояние и возобновляет обработку ЦП.

Чтобы быстро обработать внешний сигнал на Propeller, любая из 32 линий ввода / вывода сконфигурирована как вход. Затем процессор настраивается для ожидания перехода (положительного или отрицательного фронта) на этом входе с использованием одной из двух схем счетчика, доступных для каждого процессора. В ожидании сигнала винтик работает в режиме пониженного энергопотребления, по сути, в спящем режиме. Расширяя эту технику, можно настроить Propeller на восемь независимых прерывать строки с практически нулевой задержкой обработки. В качестве альтернативы, одна линия может использоваться для сигнализации прерывания, а затем могут быть прочитаны дополнительные входные строки, чтобы определить характер события. На код, работающий в других ядрах, процессор обработки прерываний не влияет. В отличие от традиционной многозадачной однопроцессорной архитектуры прерываний, время отклика сигнала остается предсказуемый,[11] и действительно используя термин прерывать в этом контексте может возникнуть путаница, так как эту функцию правильнее рассматривать как опрос с нулевым временем цикла.

Механизм загрузки

При включении, Отключение обнаружения, программного сброса или внешнего аппаратного сброса, Propeller загрузит машинный код загрузка подпрограмму из внутреннего ПЗУ в оперативную память своего первого (основного) процессора и выполните ее. Этот код подражает ан I²C интерфейс в программном обеспечении, временно используя два контакта ввода-вывода для необходимых последовательных часов и сигналов данных для загрузки кода пользователя из внешнего I2C EEPROM.

Одновременно он имитирует Серийный порт, используя два других контакта ввода / вывода, которые можно использовать для загрузки программного обеспечения непосредственно в RAM (и, возможно, во внешнюю EEPROM). Если Propeller не видит команд из последовательного порта, он загружает программу пользователя (код входа которой должен быть записан в Spin, как описано выше) из последовательного EEPROM в основное ОЗУ 32 КБ. После этого он загружает интерпретатор Spin из своего встроенного ПЗУ в выделенное ОЗУ своего первого процессора, перезаписывая большую часть загрузчика.

Независимо от того, как загружена пользовательская программа, выполнение начинается с интерпретации исходного пользователя. байт-код с интерпретатором Spin, работающим в основном процессоре. После запуска этого начального кода вращения приложение может включить любой неиспользуемый процессор, чтобы запустить новый нить, и / или начать язык ассемблера рутины.

Внешняя постоянная память

Пропеллер загружается из внешнего серийника EEPROM; как только последовательность загрузки завершится, к этому устройству можно будет обращаться как к внешнему периферийному устройству.[12]

Реализации на других языках

Помимо Spin и низкоуровневого ассемблера Propeller, на него был перенесен ряд других языков.

Компилятор C

Parallax поддерживает Propeller-GCC, который является портом Коллекция компиляторов GNU (GCC) компилятор для языков программирования C и C ++, для пропеллера[13] (ветка release_1_0). Компилятор C и библиотека C соответствуют стандарту ANSI C. Компилятор C ++ совместим с ANSI-C99. Полный C ++ поддерживается с внешней памятью. Программа SimpleIDE[14] предоставляет пользователям простой способ писать программы, не требуя make-файлы. В 2013 году Parallax включил библиотеки Propeller-GCC и Simple Libraries в серию учебных пособий Propeller-C Learn.[15] Propeller-GCC активно поддерживается. Propeller-GCC и SimpleIDE - это официально поддерживаемые программные продукты Parallax.

Компилятор ImageCraft ICCV7 для Propeller C отмечен как устаревшее.[16]

Доступен бесплатный компилятор ANSI C под названием Catalina.[17] Он основан на LCC. Каталина активно поддерживается.

BASIC компилятор

PropBASIC - это БАЗОВЫЙ язык программирования для микроконтроллера Parallax Propeller.[18] PropBASIC требует Brad's Spin Tool (BST), кросс-платформенный набор инструментов для разработки с Parallax Propeller. По состоянию на август 2015 года BST работает на i386-linux-gtk2, PowerPC-darwin (Mac OS X 10.4–10.6), i386-darwin (Mac OS X 10.4–10.6) и i386-Win32 (Windows 95 через Windows 7 ).

Форт на пропеллере

Существует как минимум шесть различных версий Четвертый, обе коммерческий и программное обеспечение с открытым исходным кодом, доступный для Propeller.

PropForth

Бесплатная версия, которая широко разрабатывается и поддерживается сообществом, - это PropForth.[19] Он адаптирован к архитектуре опоры и обязательно отклоняется от любого общего стандарта в отношении архитектурной уникальности в соответствии с концепцией Forth.

Помимо интерпретатора Forth, PropForth предоставляет множество функций, которые используют возможности чипа. Связанный ввод / вывод относится к методу связывания потока с процессом, позволяя одному процессу связываться с другим на лету, прозрачно для приложения. Это может уменьшить или устранить необходимость отладки оборудования или Совместная группа действий по тестированию (JTAG) интерфейс во многих случаях. Многоканальный синхронный последовательный порт (MCS) относится к синхронной последовательной связи между чипами опоры. 96-битные пакеты посылаются непрерывно между двумя зубами, результатом является то, что приложения см дополнительных ресурсов (+6 винтиков для каждой опоры чипа добавленного) с небольшим количеством или без влияния на пропускной способности для хорошо построенного приложения.

LogicAnalyzer относится к пакету расширения, который реализует программный логический анализатор. EEPROMfilesystem и SDfilesystem - это расширения, которые реализуют элементарное хранилище с использованием EEPROM и SD flash.

PagedAssembler относится к пакету оптимизаций, которые позволяют заменять ассемблерные подпрограммы (и выгружать их путем перезаписи) на лету, обеспечивая практически неограниченный размер приложения. Выполнение сценария позволяет загружать расширения «на лету», позволяя исходному тексту программы соответствовать размеру носителя.

Пропеллер и Java

В настоящее время предпринимаются попытки запустить Виртуальная машина Java (JVM) на Propeller. Компилятор, отладчик и эмулятор находятся в стадии разработки.[20]

Компилятор и среда выполнения Паскаля

Большое подмножество Паскаль реализуется компилятором и интерпретатором на основе машина p-кода Система P4.[21]

Графическое программирование

Снимок экрана редактора релейной диаграммы PICoPLC

PICo Программируемый логический контроллер (PLC, PICoPLC) поддерживает вывод на процессор Propeller. Программа создана в графическом интерфейсе лестничная логика редактор, и результирующий код испускается как источник Spin. PICoPLC также поддерживает P8X32 с функцией создания-моделирования-запуска. Никаких ограничений на целевое оборудование, так как частота генератора и выводы ввода-вывода свободно настраиваются в редакторе релейной логики. Веб-сайт разработчика PICoPLC ([2] ).

Будущие версии

По состоянию на 2014 г., Parallax строит новый пропеллер[22] с шестеренками, каждый из которых будет работать со скоростью около 200 MIPS, в то время как нынешние шестеренки Propeller работают со скоростью около 20 MIPS. Повышенная производительность будет результатом увеличения максимальной тактовой частоты до 200 МГц (с 80 МГц) и архитектуры, которая конвейерно обрабатывает инструкции, выполняя в среднем почти одну инструкцию за тактовый цикл (примерно в десять раз больше).[7]

Рекомендации

  1. ^ makezine.com В архиве 2008-06-25 на Wayback Machine
  2. ^ makezine.com
  3. ^ Грейси, Кен (2014). "Propeller 1 с открытым исходным кодом". Parallax Inc. Parallax Inc. Получено 4 февраля 2017. Propeller 1 (P8X32A) теперь является полностью открытым многоядерным микроконтроллером, включая все оборудование и инструменты ... Propeller 1 может быть самым открытым чипом в своем классе.
  4. ^ "electronicdesign.com". Архивировано из оригинал на 2007-10-14. Получено 2008-10-10.
  5. ^ Дэвид А. Сканлан, Мартин А. Хебель. «Программирование восьмиядерного пропеллерного чипа» Журнал компьютерных наук в колледжах, Том 23, Выпуск 1, октябрь 2007 г.
  6. ^ propeller.wikispaces.com
  7. ^ а б Форумы о параллаксе В архиве 2010-09-24 на Wayback Machine
  8. ^ selmaware.com В архиве 2008-12-21 на Wayback Machine; выделенная плата видеогенератора с пропеллером
  9. ^ программное обеспечение для захвата экрана
  10. ^ parallax.com; библиотека программного обеспечения для обмена объектами пропеллера
  11. ^ пропеллер wikispaces.com В архиве 2010-09-21 на Wayback Machine
  12. ^ circuitcellar.com В архиве 2008-07-06 на Wayback Machine
  13. ^ PropGCC в Google Code
  14. ^ SimpleIDE
  15. ^ Система обучения Propeller C
  16. ^ parallax.com
  17. ^ Catalina - компилятор C для Propeller В архиве 2010-09-24 на Wayback Machine
  18. ^ [1]
  19. ^ google.com; Propforth
  20. ^ Программирование Propeller на Java
  21. ^ http://propeller.wikispaces.com/Programming+in+Pascal
  22. ^ parallax.com

внешняя ссылка