Параллакс пропеллер

редактировать
Пропеллер Parallax в двухрядном корпусе Пропеллер Parallax в TQFP

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

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

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

СОДЕРЖАНИЕ
  • 1 Многоядерная архитектура
  • 2 Управление скоростью и мощностью
  • 3 Встроенные периферийные устройства
  • 4 расширения ROM
  • 5 Встроенный интерпретатор байт-кода Spin
    • 5.1 Синтаксис
    • 5.2 Примеры ключевых слов
    • 5.3 Пример программы
  • 6 Пакет и ввод / вывод
  • 7 виртуальных устройств ввода / вывода
  • 8 выделенных ядер вместо прерываний
  • 9 Механизм загрузки
  • 10 Внешняя постоянная память
  • 11 Реализации на других языках
    • 11.1 компилятор C
    • 11.2 BASIC компилятор
    • 11.3 Forth на пропеллере
      • 11.3.1 PropForth
    • 11.4 Propeller и Java
    • 11.5 Компилятор и среда выполнения Pascal
  • 12 Графическое программирование
  • 13 Будущие версии
  • 14 Ссылки
  • 15 Внешние ссылки
Многоядерная архитектура

Каждое из восьми 32-битных ядер (называемых Cog) имеет центральный процессор (ЦП), который имеет доступ к 512 32-битным длинным словам (2  КБ ) инструкций и данных. Самомодифицирующийся код возможен и используется внутри, например, когда загрузчик перезаписывает себя интерпретатором Spin. Подпрограммы в Spin (объектно-ориентированный высокоуровневый код) используют механизм возврата-вызова, требующий использования стека вызовов. Код сборки (PASM, низкоуровневый) не требует стека вызовов. Доступ к разделяемой памяти (32 КБ оперативной памяти (RAM); 32 КБ постоянной памяти (ROM)) управляется посредством циклического планирования внутренним контроллером компьютерной шины, называемым концентратором. Каждый Cog также имеет доступ к двум выделенным аппаратным счетчикам и специальному видеогенератору для использования при генерации сигналов синхронизации для PAL, NTSC, VGA, управления сервомеханизмом и других.

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

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

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

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

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

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

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

Расширения ROM

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

  • VAR - глобальные переменные
  • CON - программные константы
  • PUB - код публичной подпрограммы
  • PRI - код частной подпрограммы
  • OBJ - код для объектов
  • DAT - предопределенные данные, резервирование памяти и ассемблерный код

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

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

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

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

Пример SPIN program.png

Parallax Propeller постепенно накапливает программные библиотеки, которые дают ему возможности, аналогичные более раннему продукту Parallax BASIC Stamp ; однако нет единого списка, какие средства PBASIC теперь имеют эквиваленты Spin.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Propeller загружается из внешнего последовательного EEPROM ; после завершения последовательности загрузки к этому устройству можно будет получить доступ как к внешнему периферийному устройству.

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

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

Компилятор C

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

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

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

БЕЙСИК-компилятор

PropBASIC - это язык программирования BASIC для микроконтроллера Parallax Propeller. 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 доступно как минимум шесть различных версий Forth, как коммерческих, так и с открытым исходным кодом.

PropForth

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

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

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

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

Пропеллер и Java

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

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

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

Графическое программирование
Снимок экрана редактора релейной диаграммы PICoPLC

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

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

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

использованная литература
внешние ссылки
Последняя правка сделана 2023-04-21 06:36:29
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте