УДК 519.687, 519.682.8
А.В. КАЛАЧЕВ
ВИРТУАЛЬНАЯ ФОРТ МАШИНА ДЛЯ AVR32
В данной работе представлена модель виртуальной форт машины для контроллеров на базе процессорного ядра avr32. Осуществлена привязка регистров и областей памяти форт машины к регистрам и модели памяти ядра avr32. Произведены оценки затрат на эмуляцию стековой машины.
This work presents model of Forth virtual machine for microcontrollers based on AVR32 processors core. It's linking of registers and memory areas Forth machines to registers and memory model of the AVR32 core. An assessment of the cost of emulation stack machine.
ВВЕДЕНИЕ
Целью данной работы является создание модели виртуальной форт машины для процессорного ядра avr32, построение концепции компилятора языка Форт для данной архитектуры.
Основные задачи - свести к минимуму накладные расходы на эмуляцию стековой машины, обеспечить поддержку операций цифровой обработки сигналов, обеспечить совместимость со стандартами языка форт - FORTH83 и ANS FORTH 94.
Краткая характеристика архитектуры AVR32
Avr32 позиционируется как высокопроизводительное ядро с низким энергопотреблением, предназначенное для функций цифровой обработки данных, контроля периферии [1,2]. Также компанией заявляется высокая плотность кода (компактность), что в принципе подтверждается тестами и исследованиями.
AVR32 имеет 16 регистров, объединенных в регистровый файл (регистры R0-R15). Стоит отметить, что указатель стека (SP), программный счётчик (PC) и регистр связи (LR) отражаются в регистровом файле - регистры R13, R15 и R14 соответственно. Возможно выполнение инструкций, таких как, сложение и вычитание с использованием SP, PC и LR регистров, что приводит к более эффективной адресации памяти. Данные регистры могут использоваться в качестве операнда источника или приёмника (регистра назначения) во всех инструкциях, которые используют регистровые операнды, включая арифметические или логические инструкции и инструкции загрузки/сохранения.
Инструкции, использующие PC как приёмник, следует рассматривать как инструкции перехода. Это подразумевает, что очищается конвейер и выполнение возобновляется с адреса, определяемым новым значением PC.
Регистр R12 предназначен для возврата значения из функций вызова, а так же выступает как скрытое возвращаемое значение команд перемещения и тестирования. Многоадресные команды загрузки и извлечения из стека имеют те же самые функциональные возможности, которые позволяют им использоваться как инструкции возвращения. Указатель стека также неявно используется некоторыми инструкциями.
Во всех режимах регистр общего назначения R14 используется как регистр связей (LR). Он сохраняет адрес возврата из программы. Когда подпрограмма вызова выполняется разновидностью команд call LR запоминает адрес возврата из программы. Возврат из подпрограммы происходит при копировании LR в PC одной из разновидностью команды mov таких как ldm, popm или ret. Во всех остальных случаях регистр связей R14 можно использовать как регистр общего назначения. Для работы с числами двойной точности используются регистровые пары R0-R1, R2-R3 и т.д. Ортогональный набор команд ядра AVR32 позволяет все регистры использовать как указатели.
Процессор имеет набор инструкций для цифровой обработки сигналов (DSP): умножение с накоплением - MAC, команды SIMD и инструкции поддержки языка JAVA.
Архитектура AVR32 определяет различные микроархитектуры, имеющие отличающиеся характеристики по величине расхода и сохранения энергии, составу регистров и порядке обработки прерываний и исключительных ситуаций.
Модель виртуальной форт машины (Forth Virtual machine - FVM)
AVR32 позиционируется как ядро MCU/DSP, поэтому, особое внимание уделено реализации команд групп SIMD (одиночный поток команд, множественный поток данных) и MAC (умножение с накоплением). Слова с действиями DSP, SIMD выносятся в отдельные словари. Для сохранения стиля имена SIMD и DSP слов совпадают с именами слов (перегрузка слов, если воспользоваться терминологией языка С) обычных операций: +, -, +-, D+, D-, D+-,MIN, MAX, RSHIFT, LSHIFT и др, для операций с байтами и словами (16бит) соответственно. Данные также берутся со стека, семантика данных и контроль за их использованием лежит на программисте. При этом не вводится новых типов данных, при работе с различными данными достаточно переключения словаря.
Традиционная модель виртуальной форт машины состоит из двух стеков – данных и возвратов, общей области памяти в которой организован словарь форт-системы и свободная область памяти. Соответственно, для реализации на целевой платформе выделяют регистры указатели стека данных и возвратов, программный счетчик, иногда указатель свободной памяти, в случае многозадачной системы добавляется указатель области задачи.
Для большинства современных систем характерно выделение (кэширование) вершины стека данных, иногда стека возвратов, в отдельном регистре. Типичный состав регистров форт-машины в этом случае следующий (например в SwiftX):
U - пользовательский указатель - указатель области памяти задачи;
T - вершина стека данных;
SP - указатель стека данных;
R - указатель стека возвратов;
LR - регистр связи (вершина стека возвратов);
PC - программный счетчик.
При переключении задач сохраняются указатели стеков и кэширующие регистры.
Для более эффективной поддержки приложений цифровой обработки сигналов рассматривается следующая модификация FVM. К классической модели добавляется четыре регистра - регистры указатели и временного хранения данных – A, B, и индексные регистры X, Y [4]. Для данных регистров возможны операции автоинкремента-автодекремента. Как правило, в аппаратном варианте реализуются только регистры A и B [3], индексные регистры X, Y реализуются в моделях FVM для процессоров общего назначения.
Регистровая модель FVM
С учетом возможностей различных вариантов архитектур (AVR32A, AVR32B), «системные» регистры форт-машины располагаются в регистрах с R8 по R15. Основная задача при спецификации функций регистров - найти оптимальное распределение регистров, минимизировать количество промежуточных операций при моделировании работы стековой машины.
К рассмотрению предлагается модель FVM с кэшированием верхних элементов стеков возврата и данных (см. Таблицу 1).
Данная модель позволяет сохранять основные регистры форт системы при возникновении прерываний для любой микроархитектуры процессора. Позволяет за счет двух временных регистров кэшировать данные стека для осуществления арифметико-логических операций, как одинарной, так и двойной точности, временно сохраняя данные в регистровых парах.
При создании ядра виртуальной форт-машины были рассмотрены наборы слов, реализуемых в различных системах на низком уровне. Для анализа были взяты системы: dsforth [6], ориентированная на работу в мобильных устройствах под управлением Windows CE; SwiftX [7] ориентированная на самостоятельную работу вне операционных систем и содержащая в себе небольшую систему – SwiftOS и SP-Forth – 32 битная система под Windows 9*/2000/XP [8].
Таблица 1 - Регистровая модель FVM для AVR32
регистр обозначение функция в FVM
PC(R15) PC программный счетчик
LR(R14) R0 вершина стека возвратов
SP(R13) RP указатель стека возвратов
R12 B Индексный регистр/регистр временного хранения данных
R11 S / A Индексный регистр/регистр временного хранения данных/второй элемент стека данных
R10 T вершина стека данных
R9 SP указатель стека данных
R8 U указатель пользовательской области
R7-R0 отведены под локальные переменые
ACBA базовый регистр вызова подпрограмм/функций.(используется acall) может быть использован, как указатель текущего словаря системы
JAVA_LVx регистры локальных переменных (? в том случае, если есть возможность использовать их в RISC режиме)
Основные часто используемые слова реализованы на низком уровне в виде макроассемблерных вставок, часть слов составляет словарь системы в виде набора подпрограмм. Такое решение позволяет сохранить баланс между размером программного кода и его быстродействием. Также в виде макроассемблерных вставок реализованы наборы слов реализующие SIMD и DSP операции. В ядро системы включены слова операций со стеками, арифметических (включая умножение и деление), строковые операции, доступ к памяти, операции сравнения.
Накладные расходы на организацию работы виртуальной машины для случая смешанного подпрограммного кода с прямыми кодовыми вставками представлены в таблице 2.
Таблица 2 – Затраты на реализацию виртуальной форт машины
тип операций FVM количество RISC команд (среднее)
стековые операции одинарной точности 1-4 (2)
операции с памятью и переменными 2-3 (2)
арифметико-логические операции 2-5 (3)
переходы и циклы 2-8 (3)
Таким образом, переход к виртуальной форт-машине снижает производительность примерно в два раза. С другой стороны, переход к языку высокого уровня упрощает построение алгоритмов, структур данных. Выигрыш от кэширования верхнего элемента стека составляет примерно в два раза для стековых и арифметических операций [9].
ЛИТЕРАТУРА
1.32-разрядные микроконтроллеры / ЦПОС семейства AVR32 - http://www.gaw.ru/html.cgi/txt/ic/Atmel ... /start.htm.
2.Сидоренко Б. AVR32- микроконтроллеры для применений 21-го столетия. / Chip News Украина. №8, 2008.
3.IntellaSys - SEAforth 40C18 - http://www.intellasys.net/index.php?opt ... &Itemid=75
4. Stephen Pelc. Extreme Forth - http://www.ddj.com/hpc-high-performance ... JVN?pgno=2)
5. С.Н. Баранов, Н.Р. Ноздрунов. Язык Форт и его реализации. Ленинград. Машиностроение, Ленинградское отделение,1988.
6. DELOSOFT./ www.delosoft.com.
7. SwiftX embedded systems development - embedded Forth. / http://www.forth.com/embedded/index.html.
8. SP-FORTH - ANS FORTH 94 for Win95/98/ME/NT/2000/XP Open source project / http://spf.sourceforge.net.
9. kernel.S - AVR32 Forth kernel. / http://nic-nac-project.de/~swestres/code/kernel.S