Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[0]


имя автора - Иосиф Каршенбойм
Сайт автора - www.iosifk.narod.ru
Сайт журнала - www.kit-e.ru

Компоненты и технологии, № 82002

Микроконтроллер для встроенного применения - NIOS. Система команд и команды, определяемые пользователем.

Часть I. Регистры и доступ к данным

Иосиф Каршенбойм

Ik@lmail.loniis.spb.su

data in

irq

rz

irq #

Clock Enable

Введение

Целью настоящей статьи является предварительное знакомство с системой команд микропроцессора Nios, описание ее отличий от команд стандартных микропроцессоров.

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

При реализации процессора в FPGA появляется дополнительная возможность - реализация команд и аппаратных сопроцессоров, определяемых и разрабатываемых пользователем.

В январе 2002 года был опубликован документ - описание процессора Nios в версии 2.0 [5]. Фирмой Altera были произведены важные дополнения к возможностям системы - введен режим мультимасте-ра в шину Avalon и добавлены новые команды - команды, определяемые пользователем (заказные команды). Документация по системе команд процессора Nios 2.0 была любезно предоставлена автору фирмой «ЭФО».

Instruction Decoder

Operand Fetch

Interrupt Control

Л

Program Counter

ALU

General-Purpose Processor Register File

Control

data out

addn

read/write ifetch

byte enable

Рис. 1. Блок-схема процессора NIOS CPU-32

Описание команд, приведенное в настоящей статье, охватывает, по возможности, обе версии - Nios CPU-32 и Nios CPU-16. Но, поскольку Nios CPU-32 имеет больше команд, то таблица формата команд и кодов операций команд приведены только для 32-битной версии.

Данная статья предназначается только для ознакомления с системой команд и принципом работы микропроцессора и не может претендовать на полное рабочее руководство для программиста. Детальные описания команд процессора приведены в документации [3-5].

Развитие элементной базы происходит столь стремительно, что если в 2001 году процессором среднего быстродействия считались процессоры с тактовой частотой до 50 МГц, то теперь, с появлением на рынке микросхем серии STRATIX, в эту категорию попадают изделия с частотой до 300 МГц. А это уже серьезный конкурент для многих «средних» DSP. Более того, изменения, внесенные в шину Avalon, позволяют теперь реализовать режим мультимастера, что позволяет еще более увеличить производительность всей системы с процессором Nios [7].

Краткий обзор CPU Nios

Процессор Nios, является RISC-процессором с конвейерной обработкой команд, большинство команд которого выполняется в единственном цикле синх-рочастоты [1-2, 6]. Система команд Nios ориентирована на встроенные прикладные программы. Nios CPU в вариантах применения на 16 бит и 32 бит, имеет размеры слова соответственно 16 бит и 32 бит.

В Nios термин «байтное слово» относится к 8-битному слову, «слово половинной разрядности» относится к 16-битному слову, а «слово» - к 32-битному слову. Семейство программного ядра процессора Nios включает 32- и 16-битные варианты архитектуры (далее Nios CPU-32 и Nios CPU-16) (см. табл. 1).

Таблица 1. Архитектура процессора Nios

Компоненты процессора

Nios CPU-32

Nios

CPU-16

Разрядность шины данных

32

16

Разрядность ALU

32

16

Разрядность внутренних регистров

32

16

Разрядность шины адреса

32

16

Разрядность команды

16

16


Компоненты и технологии, № 82002

Для выполнения задач реального времени процессор Nios имеет развитую систему прерываний и программных исключений.

Nios CPU - это конвейерная RISC-архитектура. Конвейер команд позволяет увеличить быстродействие процессора при выполнении кода программы, не имеющего ветвлений. Если же необходимо выполнить переход на другой адрес программы, то необходимо произвести перезагрузку конвейера команд (при этом образуется «слот задержки перехода»). То есть команда, следующая немедленно после JMP и CALL, выполняется после JMP и CALL, но перед выполнением команды перехода в новый адрес. Чтобы повысить быстродействие при коротких переходах, есть пять условно-выполняемых команд SKIP (SKPs, SKP0, SKP1, SKPRz, и SKPRnz). Каждая из этих команд позволяет выполнить при определенном условии следующую за командой SKIP команду или следующая команда пропускается. Поскольку процессор Nios имеет конвейер команд, то пропуск (невыполнение) команды выполняется за один такт синхрочастоты, в то время как перезагрузка конвейера команд при выполнении команды перехода типа JMP или CALL требует несколько циклов синхрочасто-ты. Поэтому применение команд SKIP для коротких переходов повышает скорость работы.

Процессор Nios имеет две команды для программной обработки исключения: TRAP и TRET. При помощи этих команд осуществляется эффективная отладка программ. Эти команды не приводят к исполнению следующей за ними команды в конвейере команд.

В процессор Nios в версии 2.0 введены дополнительные команды - команды, определяемые пользователем (заказные команды).

Nios CPU поставляется с транслятором GNUPro и отладчиком от Cygnus, что представляет собой промышленный стандарт по C/C++, с открытыми исходными материалами, компоновщиком транслятора и комплектом отладочных программ. Комплект инструментов GNUPro включает C/C ++ транслятор, макроассемблер, компоновщик, отладчик, утилиты и библиотеки.

Система команд процессора Nios ориентирована на то, чтобы эффективно поддержать программы, откомпилированные из исходных программ, написанных на C и C++. Поэтому набор команд включает в себя стандартный набор арифметических и логических операций, команды поддержки для операций над битами, извлечения байта, передачи данных, модификации потока управления, и небольшого набора условно-выполняемых команд, которые могут быть полезны в устранении условных ветвлений на короткие переходы. В процессор Nios в версии 2.0 введены команды, определяемые и разрабатываемые пользователем.

Краткий обзор регистров

Архитектура Nios CPU имеет большой файл регистров общего назначения, несколько регистров машинного управления, счетчик программы и регистр K, используемый для выполнения префиксов команд.

Регистры общего назначения

Регистры общего назначения имеют разрядность 32 бит в Nios CPU-32 и 16 бит в Nios CPU-16. Размер файлового регистра может быть переконфигурирован пользователем на этапе формирования ядра процессора и периферии и содержать 128, 256 или 512 регистров. Программное обеспечение может обращаться к регистрам через двигающееся окно длиной в 32 регистра, которое перемещается с шагом в 16 регистров. Это окно может передвигаться по всему регистровому файлу и обеспечивает доступ к подмножеству регистров файла.

Окно разделено на четыре четных раздела как показано в таблице 2. Самые нижние восемь регистров (%г0-%г7) - глобальные регистры, также называемые %g0-%g7. Глобальные регистры не изменяются с движением окна, и остаются доступными как %g0-%g7. Верхние 24 регистра (%г8-%г31) в регистровом файле доступны через текущее окно.

Таблица 2. Группы регистров

In регистры

%r24 - %r31 или %i0 - %i7

Local регистры

%r16 - %r23 или %L0 - %L7

Out регистры

%r8 - %r15 или %o0 - %o7

Global регистры

%r0 - %r7 или %g0 - %g7

Восемь верхних регистров (%i0-%i7) называются «входные» («in») регистры, следующие восемь (%L0-%L7) - «локальные» регистры, остальные восемь (%o0-%o7) - «выходные»

Таблица 3. Программная модель

(«out») регистры. Когда окно регистра перемещается вниз на 16 регистров (так как это делается для команды SAVE), регистры «out» становятся регистрами «in» в новой позиции окна. Кроме того, «локальные» и «in» регистры последней позиции окна становятся недоступными (табл. 3). Регистр K

Регистр K - 11-битовый префикс, который всегда устанавливается в 0 каждой командой, кроме PFX. Системы команд PFX устанавливают регистр K непосредственно из поля команды IMM11. Регистр K содержит значение, отличное от нуля только для команды, непосредственно следующей за PFX. Команда PFX отключает прерывания для одного цикла син-хрочастоты, то же происходит и с двумя командами последовательности PFX (PFX немедленно после команды SKPx или IFx) в «атомных операциях» CPU.

Кроме того, пары команды последовательности PFX пропускаются при выполнении команды SKP - команды условного выражения типа SKIP.

Программное обеспечение непосредственно не обращается к регистру K, но использует его косвенно.

Команда MOVI, например, передает все 11 бит регистра K в биты 15-5 регистра адресата. Эта операция чтения K выдаст результат, отличный от нуля только тогда, когда предыдущая команда - PFX.

31130 29 28 271 26 25 124123 122 121 120119 18 171 16 15 141 13 112 111 110 9 8 7 6 5 4 3 2 1 0

%i7 %r31

SAVED return-address

%i6 %r30

%fp-frame pointer

%i5 %r29

%i4 %r28

%i3 %r27

%i2 %r26

%i1 %r25

%i0 %r24

%L7 %r23

%L6 %r22

%L5 %r21

%L4 %r20

%L3 %r19

Base-pointer 3 for STP/LDP (or geenral-purpose local)

%L2 %r18

Base-pointer 2 for STP/LDP (or geenral-purpose local)

%L1 %r17

Base-pointer 1 for STP/LDP (or geenral-purpose local)

%L0 %r16

Base-pointer 0 for STP/LDP (or geenral-purpose local)

%o7 %r15

current return-address

%o6 %r14

%sp-Stack Pointer

%o5 %r13

%o4 %r12

%o3 %r11

%o2 %r10

%o1 %r9

%o0 %r8

%g7 %r7

%g6 %r6

%g5 %r5

%g4 %r4

%g3 %r3

%g2 %r2

%g1 %r1

%g0 %r0

SET IE

SET IE

WVALID

STATUS

PC

Any write (WRCTL) operation to this register sets STATUS [15] (IE)=1. Result of any read operation (RDCTL) is undefined.

Any write (WRCTL) operation to this register sets STATUS [15] (IE)=1. Result of any read operation (RDCTL) is undefined.

reserved -

reserved -

reserved -

HI LIMIT

LO LIMIT

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16

14 13 12 1110 9

CWP

8 I 7 I 6 I 5 j 4

31

10

0

K REGISTER

%ctl9

%ctl8

%ctl7

%ctl6

reserved

%ctl5

reserved

%ctl4

%ctl3

%ctl2

%cll1

STATUS

Saved Status

%ctl0

IE

IP RI

N

V

Z

C

15

3

2

0


Компоненты и технологии, № 82002

Счетчик команд

Счетчик команд - регистр PC - содержит адрес байта команды, выполняющейся в настоящее время. Так как все команды должны быть выровнены до слова половинной разрядности, значение бита младшего разряда PC всегда равно 0.

PC инкрементируется на два (PC <- PC + 2) после каждой команды, если PC не устанавливается непосредственно. Команды BR, BSR, CALL и JMP изменяют PC непосредственно. PC имеет разрядность 33 бит в Nios CPU-32 и 17 бит в Nios CPU-16.

Регистры управления

Есть пять определенных регистров управления, которые адресуются независимо от регистров общего назначения. Команды RDCTL и WRCTL - единственные команды, которые могут читать или писать в регистры управления (значение %ctl0 не связано с %g0).

STATUS (%ctl0)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

IE

IPRI

CWP

N

V

Z

C

Разрешение прерывания (IE)

IE - бит разрешения прерывания. Когда IE=1, все внешние прерывания и внутренние исключения разрешены. IE=0 отключает внешние прерывания и исключения.

Программные команды TRAP будут все же нормально выполняться, даже когда IE=0.

Обратите внимание, что IE может быть установлен непосредственно при записи в SET IE (%ctl9) и CLR IE (%ctl8) в регистр управления, и это не будет воздействовать на остальную часть регистра STATUS. Когда CPU находится в состоянии сброса, IE будет установлен в 0 (заблокированные прерывания).

Приоритет прерываний (IPRI)

IPRI содержит приоритет выполняющегося прерывания. Когда исключение обработано, значение IPRI установлено на номер исключения.

Для внешних аппаратных прерываний значение IPRI соответствует 6-битовому номеру аппаратного прерывания. Для команд TRAP поле IPRI устанавливается в соответствии со значением поля команды IMM6. Для внутренних исключений IPRI устанавливается от 6-битового номера исключения. Аппаратное прерывание не будет обработано, если его внутренний номер больше или равен IPRI или IE=0. Команда TRAP обрабатывается всегда. Когда CPU сброшен, IPRI установлен на 63 (самый низкий приоритет).

IPRI запрещает прерывания выше некоторого номера. Например, если IPRI - 3, то прерывания 0, 1 и 2 будут обработаны, но все другие (прерывания 3-63) будут заблокированы.

Текущий указатель окна (CWP)

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

файле общего назначения. Инкрементирова-ние CWP перемещает окно на 16 регистров вверх. Декрементирование CWP перемещает окно вниз на 16 регистров. CWP декременти-руется командами SAVE и инкрементируется командами RESTORE.

Только специализированное системное программное обеспечение, такое, как «средство для управления окном регистра» должно непосредственно записывать значения CWP через WRCTL. Обычное программное обеспечение будет изменять CWP, используя команды SAVE и RESTORE.

Когда CPU сброшен, CWP будет установлен на самое большое допустимое значение - HI LIMIT.

После того, как произведен сброс, регистр WVALID (%ct12) установлен в 0x01C1, то есть LO LIMIT = 1 и HI LIMIT = 14 (см. раздел «WVALID (%ctl2)» для получения дополнительной информации).

Флажки состояния

Некоторые команды изменяют флажки состояния. Эти флажки - четыре младших бита регистра состояния (табл. 4).

Таблица 4. Флаги состояния

Флаг

Бит

Результат

N

3

Знак результата или старший бит

V

2

Арифметическое переполнение, если бит 31 из 32-битового результата отличается от знака результата, вычисленного с неограниченной точностью

Z

1

Результат равен нулю

C

0

Перенос при сложении, заем при вычитании

ISTATUS (%ctl1)

15 14

13 12

11 10 9 8 7 6 5 4 3 2 1 0

ISTATUS - это сохраненная копия регистра STATUS. Когда исключение обработано, значение регистра STATUS будет скопировано в регистр ISTATUS. Это действие позволяет восстанавливать значение регистра STATUS перед возвращением управления прерванной программе. При возвращении из TRAP команда TRET автоматически копирует регистр ISTATUS в регистр STATUS. Когда исключение обрабатывается, прерывания заблокированы (IE=0) . Перед перепредоставлением прерываний драйвер исключения должен сохранить значение регистра ISTATUS. Когда CPU сброшен, ISTATUS установлен в 0.

WVALID (%ctl2)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

UNUSED

HI LIMIT

LOW LIMIT

WVALID содержит два значения: HI LIMIT и LOW LIMIT. Когда выполняются декременты CWP по команде SAVE от значения LOW LIMIT до LOW LIMIT-1, происходит выход за нижний предел окна регистра и генерируется исключение #1. Когда команда RESTORE инкрементирует CWP от HI LIMIT до HI LIM-IT + 1, происходит переполнение окна регистра и генерируется исключение #2. Регистр WVALID имеет перестраиваемую конфигурацию и может быть доступен только для чтения

или для чтения и записи. Когда CPU сброшен, LO LIMIT устанавливается в 1, а HI LIMIT равен самому высокому допустимому указателю окна - (размер файла регистра / 16) - 2. CLR IE (%ctl8)

Любая операция WRCTL с регистром CLR IE сбрасывает бит IE в регистре STATUS (IE <- 0) и значение WRCTL игнорируется. Операция RDCTL над CLR IE приводит к неопределенному результату.

SET IE (%ctl9)

Любая операция WRCTL с регистром SET IE устанавливает бит IE в регистре STATUS (IE <- 1) и значение WRCTL игнорируется. Операция RDCTL над SET IE приводит к неопределенному результату.

Доступ к памяти

Процессор Nios - организован как little-endian. Память данных должна находиться в непрерывном порядке следования слов. Если физическое устройство памяти более узко, чем размер рабочего слова, то шина данных должна осуществить установление размеров динамическим образом, чтобы моделировать для Nios CPU данные полной разрядности. Периферийные устройства представляют свои регистры как native-word, то есть младшие разряды подключаются к младшим разрядам шины, и если их регистры меньше, чем рабочее слово, то остальные разряды дополняются нулями в старших битах. В таблице 5 показано содержимое типового поля памяти, а в таблице 6 показаны регистры, подключаемые как «native-word» к Nios CPU-32.

Таблица 5. Поле памяти программ и данных для Nios CPU-32 с адреса 0х0100

Содержание поля памяти

31 24

23 16

15 8

7 0

0х0100

Байт 3

Байт 2

Байт 1

Байт 0

0х0104

Байт 7

Байт 6

Байт 5

Байт 4

0х0108

Байт 11

Байт 10

Байт 9

Байт 8

0х010С

Байт 15

Байт 14

Байт 13

Байт 12

Таблица 6. Периферия разрядностью N-бит для Nios CPU-32 с адреса 0х0100

Адрес

Содержание регистров периферии

31 N

N-1 0

0х0100

Заполнение нулями

Регистр 0

0х0104

Заполнение нулями

Регистр 1

0х0108

Заполнение нулями

Регистр 2

0х010С

Заполнение нулями

Регистр 3

Чтение из памяти или периферийных устройств

Nios CPU может только выполнять выровненный доступ к памяти. 32-битная операция чтения может читать только полное слово, начинающееся с адреса байта, который является множителем 4. 16-битная операция чтения может читать только слово половинной разрядности, начинающееся с адреса байта, который является множителем 2. Команды, которые читают из памяти всегда, устанавливают младший бит (для Nios CPU-16) или два младших бита (для Nios CPU-32) адреса как в 0.

Адрес



имя автора - Иосиф Каршенбойм
Сайт автора - www.iosifk.narod.ru
Сайт журнала - www.kit-e.ru



[стр.Начало] [стр.1]