ZPU (микропроцессор ) - İlyaslar, Mengen

редактировать
Советские / российские зенитные орудия см. ЗПУ.

. ЗПУ - это микропроцессор стековая машина, разработанная норвежской компанией Zylin AS для выполнения контрольного кода в электронных системах, которые включают программируемую логическую матрицу (FPGA).

ZPU - относительно недавний стековый автомат с небольшой экономической нишей, у которого растет число пользователей и реализаций. Он был разработан так, чтобы потребовать очень небольшого количества электронной логики, что делает больше электронной логики доступной для других целей в FPGA. Чтобы его было легко использовать, он имеет порт GNU Compiler Collection. Это значительно упрощает применение, чем процессоры без компиляторов. Жертвуя скоростью в обмен на небольшой размер, он сохраняет промежуточные результаты вычислений в памяти, в стеке с расширением, а не в регистрах.

Zylin Corp. сделала ZPU открытым исходным кодом в 2008 году.

Содержание
  • 1 Использование
  • 2 Особенности конструкции
  • 3 Инструменты и ресурсы
  • 4 Набор инструкций
  • 5 Ссылки
Использование

Многие электронные проекты включают электронную логику в FPGA. Также расточительно иметь микропроцессор, поэтому обычным делом является добавление ЦП к электронной логике в ПЛИС. Часто можно было бы использовать меньшую и менее дорогую ПЛИС, если бы только ЦП использовал меньше ресурсов. Это именно та ситуация, для решения которой был разработан ZPU.

ZPU разработан для решения различных задач системы, которые лучше всего решаются программным обеспечением, например, пользовательским интерфейсом. ZPU очень медленный, но его небольшой размер помогает разместить любой необходимый высокоскоростной алгоритм в FPGA.

Другая проблема заключается в том, что большинство процессоров для FPGA имеют закрытый исходный код и доступны только от конкретного производителя FPGA. Иногда проект должен иметь дизайн, который можно было бы широко распространить в целях проверки безопасности, использования в образовательных целях или по другим причинам. Лицензии на эти проприетарные процессоры могут предотвратить такое использование. ZPU имеет открытый код.

Некоторым проектам нужен код, который должен быть небольшим, но запускаться на ЦП, который по своей сути имеет более крупный код. В качестве альтернативы проекту может быть полезен широкий выбор кода, компиляторов и средств отладки для коллекции компиляторов GNU. В этих случаях может быть написан эмулятор для реализации набора инструкций ZPU на целевом процессоре, а компиляторы ZPU могут использоваться для создания кода. В результате система работает медленно, но упаковывает код в меньший объем памяти, чем многие процессоры, и позволяет проекту использовать широкий спектр компиляторов и кода.

Особенности конструкции

ZPU был специально разработан для минимизации количество электронной логики. Он имеет минимальный набор инструкций, но может быть закодирован для коллекции компиляторов GNU. Это также минимизирует количество регистров, которые должны быть в ПЛИС, сводя к минимуму количество триггеров. Вместо регистров промежуточные результаты хранятся в стеке, в памяти.

Он также имеет небольшой код для экономии памяти. Инструкции стековой машины не обязательно должны содержать идентификаторы регистров, поэтому код ZPU меньше, чем у других процессоров RISC, и, как утверждается, ему требуется только около 80% пространства ARM Holdings Thumb2. Например, немедленное подписание помогает ZPU хранить 32-битное значение не более чем в 5 байтах пространства инструкций и всего в одном. Большинству процессоров RISC требуется не менее восьми байтов.

Наконец, около 2/3 его инструкций могут быть эмулированы микропрограммным обеспечением, реализованным с использованием остальных 1/3 «необходимых» инструкций. Хотя результат очень медленный, итоговый процессор может потребовать всего 446 справочных таблиц (мера сложности FPGA, примерно эквивалентная 1700 электронным логическим элементам).

ZPU имеет вектор сброса, состоящий из 32 байтов кодового пространства, начиная с нулевой позиции. Он также имеет одно прерывание, чувствительное к краям, с вектором, состоящим из 32 байтов кодового пространства, начиная с адреса 32. Каждый вектор со 2 по 63 имеет 32 байта пространства, но зарезервирован для кода, имитирующего инструкции с 33 по 63.

Базовый ZPU имеет 32-битный путь к данным. ZPU также имеет вариант с 16-битным трактом данных, чтобы сохранить еще больше логики.

Инструменты и ресурсы

ZPU имеет хорошо протестированный порт коллекции компиляторов GNU. Энтузиасты и инженеры по прошивке портировали ECos, FreeRTOS и μClinux. По крайней мере, одна группа энтузиастов скопировала популярную среду разработки Arduino и адаптировала ее к ZPU.

Сейчас существует несколько моделей ядра ZPU. Помимо оригинальных ядер Zylin, существуют также ядра ZPUino и ZPUFlex. Ядро Zylin разработано для минимального использования ПЛИС и включает 16-разрядную версию. ZPUino имеет практические улучшения в скорости, может заменять эмулируемые инструкции аппаратными средствами и встроен в структуру системы на кристалле. ZPUFlex разработан для использования блоков внешней памяти и может заменять эмулируемые инструкции аппаратными средствами.

Академические проекты включают исследования и улучшения энергоэффективности, а также исследования надежности.

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

Один разработчик снизил потребление энергии на 46% с помощью кеш стека и автоматическая вставка стробирования часов. Энергопотребление тогда было примерно эквивалентно небольшому ядру с открытым исходным кодом Amber, которое реализует архитектуру ARM v2a.

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

Набор команд

"TOS" - это сокращение от «Top Of Stack». «NOS» - это аббревиатура от «Next to the top Of Stack».

Требуемый набор команд ZPU
ИмяДвоичноеОписание
BREAKPOINT00000000Остановите ЦП и / или перейдите к отладчик.
IM_x1xxxxxxxОтправьте или добавьте подписанный 7-битный сразу к TOS.
STORESP_x010xxxxxВставьте TOS и сохраните его в стеке со смещением сверху.
LOADSP_x011xxxxxИзвлечь из значения, проиндексированного в стеке, и вставить его в TOS.
EMULATE_x001xxxxxЭмулировать инструкцию с кодом в векторе x.
ADDSP_x0001xxxxИзвлечь из значения, проиндексированного в стеке, и добавить это значение в TOS.
POPPC00000100Извлечь адрес из TOS и сохранить его на ПК.
LOAD00001000Вставить адрес и передать загруженное значение памяти в TOS.
СОХРАНИТЬ00001100Сохранение NOS в памяти, на которую указывает TOS. Поп оба.
PUSHSP00000010Вставьте текущий SP в TOS.
POPSP00001101Извлечь TOS и сохранить его в SP.
ADD00000101Целочисленное сложение TOS и NOS.
AND00000110Побитовое И для TOS и NOS.
OR00000111Побитовое ИЛИ TOS и NOS.
NOT00001001Побитовое НЕ из TOS.
FLIP00001010Обратный порядок следования битов TOS.
NOP00001011Нет операции. (Обычно используется для циклов задержки или таблиц кода.)

Кодовые точки с 33 по 63 могут эмулироваться кодом в векторах от 2 до 32: LOADH и STOREH (16-битный доступ к памяти), LESSTHAN (набор сравнений 1 для истины, 0 для ложного), LESSTHANOREQUAL, ULESSTHAN, ULESSTHANOREQUAL, SWAP (TOS с NOS), MULT, LSHIFTRIGHT, ASHIFTLEFT, ASHIFTRIGHT, CALL, EQ, NEQ, NEG, SUB, XOR, LOADB и STOREB (8-битный доступ к памяти), DIV, MOD, EQBRANCH, NEQBRANCH, POPPCREL, CONFIG, PUSHPC, SYSCALL, PUSHSPADD, HALFMULT, CALLPCREL

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