Софт процессор Nios II - Часть 1

Nios II это 32-разрядная микропроцессорная архитектура для встраиваемых приложений (Soft-микропроцессор), разработанная специально для ПЛИС фирмы Altera. Nios II является развитием архитектуры Nios и находит применение в различных встраиваемых приложениях начиная от цифровой обработки сигналов до управляющих систем.
Прочитав эту статью, мне стало безумно интересно. Как, теперь можно обойтись без avr, 8051, msp430 или arm/cortex ? Можно! Но за все придется платить, и об этом в конце статьи.

Я попробую поделиться с вами той информацией, которой мне не хватало в самом начале.

Структура процессора

На представленной схеме представленны основные компоненты процессора NiosII и возможной системы на его основе.


Ниже приведены основные характеристики процессора Nios II/f:
  • более 2-х гигабайт адресного пространства;
  • отдельный кэш инструкций и кэш данных;
  • аппаратное выполнение умножения и деления;
  • 6-ти стадийный конвейер;
  • поддержка исключений;
  • система защиты памяти;
  • система виртуальной памяти;
  • выполнение операции умножения и сдвига за один такт;
  • динамическое предсказание ветвлений;
  • использование до 256 пользовательских инструкций;
  • широкие возможности отладки через JTAG модуль;
  • реализация требует 1400-1800 логических элементов FPGA;
  • реализация включает 3 блока памяти M4K, плюс блоки для кэш памяти;
  • производительность процессора 51 миллион операций в секунду (51 DMIPS) на частоте 50 МГц.

Если заинтересовало, прошу под кат

Попробуем разобрать все попорядку. Начнем с шины AVALON.
Для соединения компонентов процессорной системы используется синхронная шина Avalon. Как следует и официальной документации, шина Avalon может содержать следующие типы:
  • Avalon Clock Interface , для передачи синхросигналов и управления ими;
  • Avalon Reset Interface, для передачи сигналов сброса;
  • Avalon Streaming Interface (Avalon-ST), для поддержки однонаправленных потоков данных, включая мультиплексированные, пакетные и данные цифровых сигнальных процессоров;
  • Avalon Memory Mapped Interface (Avalon-MM), для чтения/записи с адресацией типа ведущий/ведомый;
  • Avalon Tri-State Conduit Interface (Avalon TC), для сопряжения с модулями вне кристалла;
  • Avalon Interrupt Interface, для реализации приоритетной системы прерываний;
  • Avalon Conduit Interface, для объединения отдельных сигналов или групп сигналов, которые не подходят под любой другой тип шины Avalon.


Регистры процессора Nios II

Архитектура процессора Nios II поддерживает плоский регистровый файл, содержащий  32 регистра общего назначения и до 32 управляющих регистров. Регистры общего назначения и управляющие регистры, представлены в таблицах.
Регистры общего назначения.
Регистр
Имя
Функция
r0
r1
zero
at
0х00000000
временный
r3
r4
r4
r23
Нет специального
обозначения
Регистры общего назначения
r24
r25
et
bt
Временный для исключений (1)
Временный для отладки (2)
r26
r27
r28
r29
r30
r31
gp
sp
fp
ea
ba
ra
Глобальный указатель
Указатель стека
Указатель кадра
Адрес возврата из исключений (1)
Возврат из контрольной точки (2)
Адрес возврата

(1)    – регистры не доступные в пользовательском режиме
(2)    – регистры используются только JTAG Debug модулем

Регистр r0, называемый регистром нуля, всегда содержит значение 0. Результатом чтения из этого регистра является значение 0. Записать другое значение в этот регистр невозможно.
Регистр r1 используется ассемблером как временный регистр. Поэтому при разработке программ не рекомендуется его использовать.
Регистры r24 и r29 используются для обработки исключений. Поэтому они недоступны в режиме пользователя.
Регистры r25 и r30 используются исключительно модулем JTAG Debug в отладочных целях.
Регистры r27 и r28 используются процессором для управления стеком.
Регистр r31 хранит адрес возврата при вызове подпрограмм.

Регистры управления NiosII
Регистр
Имя
b31 …b2
b1
b0
ctl 0
ctl 1
ctl 2
status
e status
b status
резерв
резерв
резерв
U
EU
BU
PIE
EPIE
BPIE
сtl 3
сtl 4
сtl 5
ienable
ipending
cpuid
Биты разрешения прерывания
Биты возникших прерываний
Уникальный идентификатор

В состав процессора  Nios II  может входить до 32 управляющих регистров. Их количество зависит от присутствия модуля защиты памяти или модуля управления памятью. В таблице 4 приведены форматы 6 основных базовых управляющих регистров. Причем имена, представленные там, понимаются ассемблером. Регистры используются следующим образом.
Регистр ctl0 отражает текущее состояние процессора. Чаще всего используют биты U и PIE этого регистра. U определяет режим работы процессора (пользователя/супервизора). PIE - бит разрешения внешних прерываний. Остальные биты используются при наличии модуля защиты памяти или модуля управления памятью.
Регистр ctl1 хранит копию регистра состояния во время обработки прерываний.
Регистр ctl2 хранит копию регистра состояния во время обработки точек останова.
Регистр ctl3 используется для разрешения прерываний от отдельных устройств в процессорной системе.
Регистр ctl4 указывает произошедшие прерывания.
Регистр ctl5 хранит уникальное значение, идентифицирующее процессор в многопроцессорной системе.

Адресация в процессоре Nios II

Процессор Nios II использует для адресации 32-битный адрес, при этом память является адресуемой по байтам. С помощью команд можно записывать/считывать слова (32), полуслова (16) и байты данных(8). Чтение или запись данных по адресам, которые не связаны с памятью или периферийными устройствами, приводит к неопределенным результатам. В процессоре NIOS II используются следующие способы адресации.
Непосредственная адресация. 16 битный операнд присутствует в команде. Он может быть дополнен знаковым разрядом до 32 разрядов при выполнении арифметической операции.
Регистровая адресация. Операнды находятся в регистрах процессора.
Относительная  регистровая адресация. Эффективный адрес операнда получается путем суммирования содержимого регистра и знакового 16 разрядного смещения, находящегося в самой команде.
Косвенная регистровая адресация. Содержимое регистра является эффективным адресом операнда. Этот способ эквивалентен предыдущему способу, когда смещение равно нулю.
Абсолютная адресация. 16-битный абсолютный адрес операнда может быть определен путем использования смещения относительно регистра r0, который всегда равен нулю.

Аппаратные прерывания


 
Аппаратные прерывания могут быть вызваны внешними источниками, такими как, например, устройства ввода/вывода.
Каждое такое устройство использует один из 32 входов запросов прерывания процессора. Прерывания происходят при выполнении следующих условий:
бит PIE регистра status установлен в единичное состояние;

один из входов запросов прерывания (irqk) процессора активирован;
соответствующий бит регистра разрешения прерываний ienable содержит единичное значение.
Содержимое регистра ipending отражает прерывания, требующие обработки. Обработчик прерываний определяет, какие из них имеют наибольший приоритет, и передает управление в соответствующую подпрограмму. Возврат из обработчика прерывания в основную программу осуществляется с помощью команды eret, описанной выше. Следует отметить, что перед выполнением этой команды необходимо модифицировать регистр ea. Модификация состоит в вычитании 4 из его содержимого. Это необходимо сделать, так как при возникновении сигнала прерывания выполнение текущей инструкции прекращается, а в регистр ea записывается адрес следующей команды.


JTAG Модуль


В состав процессорного ядра могут входить и специализированные блоки: JTAG UART – для обмена информацией с компьютером с помощью загрузочного кабеля (USB-Blaster или ByteBlaster), модуль JTAG Debug – для выполнения отладки программного обеспечения с помощью компьютера. Обязательная часть переферии, позволяет использовать команды

  • alt_printf() 
  • alt_putchar() 
  • alt_putstr() 
  • alt_getchar() 

для общения с виртуальной консолью разработчика.

MMU и MPU

В самой жирной реализации ( NiosII/f ) возможно включение блоков MPU или MMU. А это дает возможность для запуска полноценных линуксов.
Одновременно в процессоре может быть только один блок, какой - выбирать вам.


Следущая статья >>

Комментарии