Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Пропеллер Parallax в двухрядном корпусе

Параллакса P8X32A пропеллера представляет собой многоядерный процессор параллельной компьютерной архитектуры микроконтроллера чип с восемью 32-битной сокращенным набором команд компьютера (RISC) центральный процессор (CPU) ядер. [1] [2] Представленный в 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. [3]

Многоядерная архитектура [ править ]

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

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

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, кварцевого генератора и нескольких резисторов, чтобы сформировать грубый цифро-аналоговый преобразователь.(ЦАП). Частота генератора важна, так как возможность коррекции оборудования для синхронизации видео ограничена тактовой частотой. Можно использовать несколько процессоров параллельно для генерации одного видеосигнала. В более общем смысле, оборудование синхронизации может использоваться для реализации различных сигналов синхронизации с широтно-импульсной модуляцией (PWM).

Расширения ПЗУ [ править ]

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

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

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

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

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

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

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

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

Пакет и ввод-вывод [ править ]

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

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

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

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

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

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

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

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

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

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

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

Механизм загрузки [ править ]

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

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

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

Внешняя постоянная память [ править ]

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

Реализации на других языках [ править ]

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

Компилятор C [ править ]

Parallax поддерживает Propeller-GCC, который является портом компилятора GNU Compiler Collection (GCC) для языков программирования C и C ++ , для Propeller [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 - это язык программирования BASIC для микроконтроллера 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 ).

Forth on the Propeller [ править ]

Для Propeller доступно как минимум шесть различных версий Forth , как коммерческих, так и с открытым исходным кодом .

PropForth [ править ]

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

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

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

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

Propeller и Java [ править ]

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

Компилятор и среда выполнения Pascal [ править ]

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

Графическое программирование [ править ]

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

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

Будущие версии [ править ]

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

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Официальный сайт Parallax Inc:
  • Wiki с подробной информацией о винте
  • Форум Propeller в Parallax Inc:
  • Сайт бета-версии Propeller GCC
  • Статья на EiED онлайн
  • вторая статья на EiED онлайн
  • Статья на сайте ferret.com.au
  • Список языков программирования, работающих на Propeller
  • Загрузите PICoPLC из APStech [ постоянная мертвая ссылка ]
  • FirstSpin, еженедельная образовательная аудиопрограмма о языке программирования Spin и Propeller, спонсируемая Parallax