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


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




[1]

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

Слоты задержки перехода

Слот задержки перехода - это команда, немедленно следующая после BR, BSR, CALL или JMP. Слот задержки перехода выполняется после команды перехода, но перед командой, которая будет выполняться по новому адресу после перехода. Таблица 12 иллюстрирует слот задержки перехода для команды BR.

Таблица 12. Пример слота задержки команды BR Branch

(a) (b) (c) (d)

ADD %g2, BR Target ADD %g4, ADD %g6,

%g3

%g5 -

Branch Delay

Slot

%g7

(e)

Target:

ADD %g8,

%g9

После того как команда перехода (b) принята, команда (c) выполняется прежде, чем управление передается по адресу перехода (e). Последовательность выполнения вышеупомянутого фрагмента кода была бы (a), (b), (c), и (e). Команда (c) - слот задержки перехода команды (b). Команда (d) не выполняется. Большинство команд может использоваться как слот задержки перехода, кроме следующих:

BR, RSR, CALL, IF1, IFO, IFRnz, IFRz, IFs, JMP, LRET, PFX, RET, SKP1, SKPO, SKPRnz, SKPRz, SKPs, TRET, TRAP.

Прямая манипуляция CWP

Каждая команда WRCTL, изменяющая регистр STATUS (%ctl0), должна сопровождаться командой NOP.

Команды,

определяемые пользователем

В версии 2.0 процессора Nios фирмой Altera произведено важное дополнение к возможностям системы - введены команды, определяемые пользователем (заказные команды). Теперь проектировщики могут ускорять критические по времени выполнения программные алгоритмы, добавляя собственные коман-

То FIFO, Memory, or Other Logic

Nios ALU

Nios Embedded Processor

Рис. 6. Добавление логики пользователя к ALU процессора NIOS

ды к системе команд Nios. Системные проектировщики могут использовать такие команды, чтобы добавить к ALU аппаратный узел собственной разработки, позволяющий обрабатывать задачи за один или несколько тактов процессора. Используя такие команды, дополнительно добавленная пользователем логика может обращаться к памяти и логике вне системы Nios (см. рис. 6).

Используя заказные команды, системные проектировщики могут уменьшать сложную последовательность стандартных команд, применяя вместо них единственную команду, которая аппаратными средствами выполняет те же действия. Системные проектировщики могут использовать эту особенность для ряда прикладных программ, например, оптимизи-

Таблица 13. Команды пользователя: код операции, тип и формат

Код операции

Тип

Формат

USR0

RR

Ra <- Ra op Rb

USR1

Rw

Ra <- Ra op %r0

USR2

Rw

Ra <- Ra op %r0

USR3

Rw

Ra <- Ra op %r0

USR4

Rw

Ra <- Ra op %r0

Таблица 14. Описание формата записи команд для 32-битной версии

Notation

Meaning

X <н Y

X is written with Y

0- е

Expression e is evaluated, and the result is discarded

RA

One of the 32 visible registers, selected by the 5-bit a-field of the instruction word

RB

One of the 32 visible registers, selected by the 5-bit b-field of the instruction word

RP

One of the 4 pointer-enabled (P-type) registers, selected by the 2-bit p-field of the instruction word

iMMn

An n-bit immediate value, embedded in the instruction word

К

The 11 -bit value held in the К register, (K can only be set by a PFX instruction}

Oxnn.mm

Hexadecimal notation (decimal points not significant added for clarity)

X : Y

Bitwise-concatenation operator. For example: (0x12 : 0x34) = 0x1234

{el, e2}

Conditional expression. Evaluates to e2 if previous instruction was PFX, e1 otherwise

a(X)

X after being sign-extended into a full register-sized signed integer

X[n]

The nth bit of X (n = 0 means LSB)

X[n..m]

Consecutive bits n through m of X

С

The С (carry) flag in the STATUS register

CTLk

One of the 2047 control registers selected by К

PC

(Program Counter) Byte address of currently executing instruction.

X >> n

The value X after being right-shifted n bit positions

X<<n

The value X after being left-shifted n bit positions

bnX

The nth byte (8-bit field) within the full-width value X. b0X = Х[7..0], Ь,Х = Х[15..8], b2X = X[23..16], and b3X = X[31..24]

hnX

The nth half-word (16-bit field) within the full-width value X. h0X = X[15..0]. h1X = X[31..16]

X & Y

Bitwise logical AND

X Y

Bitwise logical OR

X Ф Y

Bitwise logical exclusive OR

~X

Bitwise logical NOT (ones complement)

IXI

The absolute value of X (that is, -X if (X < 0), X otherwise).

Mem32[X]

The aligned 32-bit word value stored in external memory, starting at byte address X

aIign32(X)

X & 0xFF.FF.FF.FC, which is the integer value X forced into full-word alignment via truncation

VECBASE

Byte address of Vector #0 in the interrupt vector table (VECBASE is configurable)

ровать программные циклы для обрабатываемого по алгоритмам DSP цифрового сигнала, обработки заголовка пакета и для прикладных программ со сложными вычислениями. Более того, как уже говорилось [1], применение заказных команд позволит реализовывать муль-тимикропроцессорные устройства, где ведущий процессор запускает на выполнение процесс в ведомом через обращение к нему заказной командой. Здесь необходимо отметить основное отличие микропроцессорного устройства, реализованного в FPGA от стандартного микропроцессора. В стандартном микропроцессоре скорость обработки задачи зависит только от скорости работы самого микропроцессора, ресурсов микропроцессора, таких, как разрядность шин, число регистров, наличие умножителей и т. д. и эффективности программного кода. При этом обычно все ресурсы микропроцессора участвуют в решении задачи последовательно, а данные из одного «элемента вычислительного процесса» переносятся в другой «элемент вычислительного процесса» под управлением программы, которая выполняется при данном решении задачи. Для микропроцессорного устройства, реализованного в FPGA, ресурс - это логические ячейки в

Таблица 15. Формат команд для 32-битной версии

RR

Ri5

15l4l3l2l1110

9 1 8 7 6 5

4 1 3 2 1 0

op6

B

A

1514131211110

9 1 8 7 6 5

4 1 3 2

0

op6

IMM5

A

Ri4

1514131211110

9

8 7 6 5

4 1 3 2

0

op6

0

IM4

A

Rpi5

Ri6

Ri8

15114113112

11110

9 1 8 7 6 5

4 1 3 2 1 0

op4

P

B

A

1514131211

10987 6 5

4 1 3 2 1 0

op5

IMM6

A

15114113

1211110 9 8 7 6 5

4 1 3 2 1 0

op3

IMM8

A

1514131211110

987654321

0

op6

IMM9

0

i10

i11

Ri2u

i8v

i6v

Rw

i4v

1514131211110

987654321 0

op6

IMM10

1514131211

10987654321 0

op5

IMM11

Ri1u

1514131211110

9 1 8 7

6

5

4 1 3 2 11 0

op6

op3u

IMM1u

0

A

1514131211110

9 1 8 7

6 5

4 1 3 2 1 0

op6

op3u

IMM2u

A

1514131211110

9 8

7654321 0

op6

op2v

IMM8w

1514131211110

9 8

7

6

5 4 3 2 1 0

op6

op2v

0

0

IMM6w

1514131211110

9 1 8 7 6 5

4 1 3 2 1 0

op6

op5w

A

1514131211110

9 1 8 7 6 5

4

3 2 1 0

op6

op5w

0

IMM4w

1514131211110

9 1 8 7 6 5

4

3

2

1

0

op6

op5w

0

0

0

0

0

i9


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

Таблица 16.1. Коды операций команд для 32-битной версии

Таблица 16.2. Коды операций команд для 32-битной версии

Opcod

Mnemonic

Format

Summary

000000

ADD

RR

RA - RA + RB Flags affected: N, V, C, Z

000001

ADDI

Ri5

RA - RA+(0x00.00 : K : IMM5) Flags affected: N, V, C, Z

000010

SUB

RR

RA - RA - RB Flags affected: N, V, C, Z

000011

SUBI

Ri5

RA - RA - (0x00.00 : K : IMM5) Flags affected: N, V, C, Z

000100

CMP

RR

0 - RA - RB Flags affected: N, V, C, Z

000101

CMPI

Ri5

0 - RA - (0x00.00 : K : IMM5) Flags affected: N, V, C, Z

000110

LSL

Ri5

RA - (RA<<RB[4..0]), Zero-fill from right

000111

LSLI

Ri5

RA - (RA<<IMM5), Zero-fill from right

001000

LSR

RR

RA - (RA>>RB[4..0]), Zero-fill from left

001001

LSRI

Ri5

RA - (R>>IMM5), Zero-fill from left

001010

ASR

RR

RA - (RA>>RB[4..0]), Fill from left withRA [31]

001011

ASRI

Ri5

RA - (RA>>IMM5), Fill from left withRA [31]

001100

MOV

RR

RA - RB

001101

MOVI

Ri5

RA - (0x00.00 : K : IMM5)

001110

AND

RR Ri5

RA - RA & {RB, (0x00.00 : K : IMM5)} Flags affected: N, Z

001111

ANDN

RR, Ri5

RA - RA &~({RB, (0x00.00 : K : IMM5)}) Flags affected: N, Z

010000

OR

RR Ri5

RA - RA {RB, (0x00.00 : K : IMM5)} Flags affected: N, Z

010001

XOR

RR Ri5

RA - RA Ф {RB, (0x00.00 : K : IMM5)} Flags affected: N, Z

010010

BGEN

Ri5

RA - 2IMM5

010011

EXT8D

RR

RA (0x00.00.00 : bnRA) where n = RB[1..0]

010100

SKP0

Ri5

Skip next instruction if: (RA [IMM5] ==0)

010101

SKP1

Ri5

Skip next instruction if: (RA [IMM5] ==1)

010110

LD

RR

RA - Mem32 [align32(RB + (a(K) x 4))]

Таблица 16.3. Коды операций команд для 32-битной версии

Opcode

Mnemonic

Format

Summary

01111101111

Unused

01111110000

ST8D

Rw

bnMem32 [align32(RA + (a(K) x 4))] - bn%r0 where n = RA[1..0]

01111110001

ST16D

Rw

hnMem32 [align32(RA + (a(K) x 4))] - hn%r0 where n = RA[1]

01111110010

FILL8

Rw

%r0 - (b0RA : b0RA : b0RA : b0RA)

01111110011

FLL16

Rw

%r0 - (h0RA : h0RA)

01111110100

MSTEP

Rw

if (%r0[31 ] == 1) then %r0 - (%r0 << 1 ) + RA else %r0 - (%r0<<1)

01111110101

MUL

Rw

%r0 -(%r0 & 0x0000.ffff) x (RA & 0x0000.ffff)

01111110110

SKPRZ

Rw

Skip next instruction if: (RA == 0)

01111110111

SKPS

Mw

Skip next instruction if condition encoded by IMM4w is true

01111111000

WRCTL

Rw

CTLk - RA

01111111001

RDCTL

Rw

RA - CTLk

01111111010

SKPRNZ

Rw

Skip next instruction if: (RA ! = 0)

01111111011

Unused

01111111100

Unused

01111111101

Unused

01111111110

JIV1P

Rw

PC - (RA x 2)

01111111111

CALL

Rw

R15 - ((PC + 4) >> 1); PC - (RA x 2)

100000

BR

i11

РС - РС + ((a(IMM11) + 1) x 2)

100001

Unused

100010

BSR

i11

РС - РС + C(a(IMM11) + 1) x 2); %r15 - ((РС + 4)>>1)

10011

PFX

i11

К - IMM11 (К set to zero after next instruction)

1010

STP

RPi5

Mem32[align32(RP + (a(K : IMM5) x 4))] - RA

1011

LDP

RPi5

RA - Mem32 [align32(RP + (a(K : IMM5) x 4))]

110

STS

Ri8

Mem32[align32(%sp + (IMM8 x 4) )] - RA

111

LDS

Ri8

RA - Mem32 [align32(%sp + (IMM8 x 4))]

Opcode

Mnemonic

Format

Summary

010111

ST

RR

Mem32 [align32( RB + (a(K) x 4))] - RA

011000

STS8S

i10

bnMem32 [align32(%sp + IMM 10)] - bn%r0 where n = IMM10[1..0]

011001

STS16S

i9

hnMem32 [align32( %sp + IMM9 x 2)] - hn%r0 where n - IMM9[0]

011010

EXT16D

RR

RA - (0x00.00 : hnRA) where n = RB[1]

011011

MOVHI

Ri5

h1RA - (K : IMM5), h0RA unaffected

011100

USRO

RR

RA - RA <user-defined operation> RB

011101000

EXT8S

Ri1u

RA - (0x00.00.00 : bnRA) where n = IMM2u

011101001

EXT16S

Ri1u

RA - (0x00.00 : hnRA) where n = IMM1u

011101010

Unused

011101011

Unused

011101100

ST8S

Ri1u

bnMem32 [align32(RA + (a(K) x 4))] - bn%r0 where n = IMM2u

011101101

ST16S

Ri1u

hnMem32 [align32(RA + (a(K) x 4))] - hn%r0 where n = IMM1u

01111 000

SAVE

i8v

CWP - CWP - 1; %sp - %fp - (IMM8V x 4) If (old-CWP == LO LIMIT) then TRAP #1

0111100100

TRAP

i6v

ISTATUS - STATUS; IE - 0; CWP - CWP - 1; I PRI - IMM6v; %r15 - ((PC + 2) >>1); PC - Mem32 [VECBASE + (IMM6v x 4)] x 2

01111100000

NOT

Rw

RA - ~RA

01111100001

NEG

Rw

R A - 0 - RA

01111100010

ABS

Rw

RA - RA

01111100011

SEXT8

Rw

RA - a(b0RA)

01111100100

SEXT16

Rw

RA - a(h0RA)

01111100101

RLC

Rw

С - msb (RA); RA - (RA << 1 ) : С Flag affected: С

01111100110

RRC

RW

С - RA[0]; RA - С : (RA >> 1) Flag affected: С

01111100111

Unused

01111101000

SWAP

Rw

RA - h0RA:h1RA

01111101001

USR1

Rw

RA - RA <user-defined operation> R0

01111101010

USR2

Rw

RA - RA <user-defined operation> R0

01111101011

USR3

RW

RA - RA <user-defined operation> R0

01111101100

USR4

Rw

RA - RA <user-defined operation> R0

01111101101

RESTORE

w

CWP - CWP + 1; if (old-CWP == HI LIMIT) then TRAP #2

01111101110

TRET

Rw

PC - (RA x 2); STATUS - ISTATUS

FPGA, и формально совершенно не важно, что из этого ресурса организовано и как именно этот ресурс связан с микропроцессором - как отдельный вычислительный узел, например умножитель с накоплением, или как микропрограммный автомат - аппаратный сопроцессор, реализующий конкретную процедуру вычислений, например FFT или FIR. Мало того, когда пользователь определил ресурс, требуемый для решения специфичных аппаратных задач пользователя, все остальные ресурсы микросхемы FPGA могут быть задействованы для реализации вычислительных узлов и аппаратных сопроцессоров.

Далее необходимо отметить еще одну особенность реализации вычислительного процесса в FPGA. При реализации вычислений на аппаратном сопроцессоре данные передаются из одного «элемента вычислительного процесса» в другой аппаратно, не требуя затрат времени от основного процессора. При обработке массивов данных все элементы сопроцессора участвуют в вычислении одновременно, как стадии конвейера обработки данных. Сам же аппаратный сопроцессор может быть настроен на решение требуемой задачи пользователя - разрядность шин, число ступеней конвейера, тип умножителя и т. д. И есть еще одна возможность в FPGA, применив которую, можно значительно повысить скорость обработки задач для многоканальных вычислений. Так, например, при обработке многоканального потока HDLC возможно реализовать аппаратный сопроцессор и дополнительный стек данных для хранения временных результатов вычислений. Загрузка или выгрузка результатов вычислений из аппаратного сопроцессора потребует только одну команду, а сами вычисления для обработки данных в канале потребуют тоже только одну команду от основного процессора. Всего на обработку одного канала потребуется до 10 тактов синхрочастоты основного процессора (1 такт - загрузить сопроцессор состоянием вычислений на предыдущем этапе для данного канала, 8 тактов - обработка байта данных потока HDLC, 1 такт - сохранить результат вычислений сопроцессора для данного канала). Обобщая, можно сказать, что аппаратные сопроцессоры с возможностью их пе-


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

Таблица 17. Псевдокоманды GNU Compiler/Assembler

Таблица 19. Пример организации регистрового файла

Псевдокоманда

Эквивалентная команда

Примечание

LRET

JMP %o7

LRET не имеет операндов

RET

JMP %i7

RET не имеет операндов

NOP

MOV %g0, %g0

NOP не имеет операндов

IF0 %rA, IMM5

SKP1 %rA, IMM5

IF1 %rA, IMM5

SKP0 %rA, IMM5

IFRZ %rA

SKPRNZ %rA

IFRNZ %rA

SKPRZ %rA

IFS cc c

SKPS cc nc

IFS cc nc

SKPS cc c

IFS cc z

SKPS cc nz

IFS cc nz

SKPS cc z

IFS cc mi

SKPS cc pl

IFS cc pl

SKPS cc mi

IFS cc ge

SKPS cc lt

IFS cc lt

SKPS cc ge

IFS cc le

SKPS cc gt

IFS cc gt

SKPS cc le

IFS cc v

SKPS cc nv

IFS cc nv

SKPS cc v

IFS cc ls

SKPS cc hi

IFS cc hi

SKPS cc ls

(Internal Register File)

CWP=6 (HI LIMIT)

Reg[120..127]

Req[112..119l

Reg[104..111]

Reg[96..103]

Reg[88..95]

Reg[80..87]

Reg[72..79]

Reg[64..71]

Reg[56.,63]

Reg[48..55]

Reg[40..47]

Reg[32..39]

Reg[24..31]

Reg[16..23]

Reg[8..15]

Reg[0..7]

%i0..%i7

%L0..%L7

%o0..%o7

%g0..%g7

CWP=5

Restore

%io..%i7

%L0.. %L7

%o0..%o7

%g0..%g7

CWP=4

Save

%i0..%i7

%L0..%L7

%o0..%o7

%g0..%g7

CWP=3

%i0..%i7

%L0,.%L7

%o0..%o7

%g0..%g7

CWP=2

%io..%i7

%L0..%L7

%o0..%o7

%g0..%g7

CWP=1 (LOW LIMIT)

%i0..%i7

%L0..%L7

%o0..%o7

%g0..%g7

CWP=0

(Underflow

or TRAP)

%i0..%i7

%L0..%L7

%o0..%o7

%g0..%g7

This shows the smallest Nios register file, which is 128 registers. Larger files have more register windows.

Register Groups for CWP=0

%r24..%r31

aka %io..%i7

%r16..%r23

aka %LO..%L7

%r8..%r15

aka %oO..%o7

%r0..%r7

aka %gO..%g7

резагрузки при переключении задач значительно повышают скорость отклика при переключении с задачи на задачу и эффективность работы микропроцессора.

Для конфигурации Nios CPU фирмой Altera разработан Мастер конфигурации, к которому обращается SOPC Builder. Он обеспечивает графический интерфейс для определения конфигурации пяти заказных команд процессора Nios.

Мастер конфигурации Nios интегрирует заказные логические блоки с процессором Nios ALU при формировании Nios. Он также создает программные макрокоманды в C/C++ и ассемблере, обеспечивая программный доступ к этим заказным логическим блокам. Пользователь должен задать название (имя) макрокоманды. Если заказная команда комбинаторная, то число циклов синхрочастоты, необходимых для исполнения команды, установлено в 1. Если заказная команда требует несколько циклов, то пользователь должен указать требуемое число циклов синхрочастоты.

Код операции, тип и формат заказных команд приведены в таблице 13. Заказная команда USR0 берет содержимое двух регистров общего назначения Ra и Rb и выполняет над ними операцию, определяемую логическим блоком пользователя. Результат этой операции сохраняется в регистре Ra. Код операции для команды USR0 - RR.

Заказные команды USR1... USR4 берут содержимое двух регистров общего назначения Ra и %r и выполняют над ними операцию, определяемую логическим блоком пользователя. Результаты этих операций так же сохраняются в регистре Ra. Код операции для команд USR1... USR4 - Rw.

Более подробно заказные команды описаны в документации [10].

Таблица 14 содержит краткое описание синтаксиса команд для 32-битной версии, а таблица 15 - формат команд для 32-битной версии. Коды операций команд приведены в таблице 16.

Команды, описание которых приведено в таблице 17, генерируются компилятором и совместимы с ассемблером.

Операторы, описание которых приведено в таблице 18, могут быть использованы с константами и символическими адресами и совместимы с ассемблером и линкером.

В таблице 19 показан пример организации регистрового файла для 128 регистров. Показано движение окна при выполнении команд SAVE и RESTORE.

Литература

1.И. Каршенбойм, Н. Семенов. Микропрограммные автоматы на базе специализированных ИС Chip News. 2000. № 7.

2.Altera™. Nios an188 Custom Instructions.

Таблица 18. Операторы NIOS

Операторы

Описание

Операция

%lo(x)

Извлекает младшие 5 бит из слова х

x & 0x0000001f

%hi(x)

Извлекает биты 15..5 из слова х

(x >> 5) & 0x000007ff

%xlo(x)

Извлекает биты 20..16 из слова х

(x >> 16) & 0x0000001f

%xhi(x)

Извлекает биты 31..21 из слова х

(x >> 21) & 0x000007ff

x@h

Адрес половины слова х

x >> 1

-www.finestreet.ru-

www.platan.ru

платан

ЭЛЕКТРОННЫЕ КОМПОНЕНТЫ ОТ ВЕДУЩИХ ПРОИЗВОДИТЕЛЕЙ



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