|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[1] Компоненты и технологии, № 82002 Команда EXT8D 3124 2316158 70 RA before RA after
RB[1..0] byte n 31 Рис. 2. Команда EXT8D
Команды для чтения отдельных байтов и слов половинной разрядности Самая простая команда, которая читает данные из памяти - команда LD. Типичный пример этой команды - LD %g3, [%o4]. Первый операнд регистра, %g3, является регистром адресата, куда данные будут загружены. Второй операнд регистра определяет регистр, содержащий адрес, из которого будет произведено чтение. Этот адрес будет выровнен к самому близкому слову половинной разрядности (для Nios CPU-16) или к слову (для Nios CPU-32), причем значение самого младшего бита (для Nios CPU-16) или двух бит адреса (для Nios CPU-32) будут обработаны, как если бы они равнялись 0. Весьма часто, однако, программное обеспечение должно читать данные меньшие, чем рабочее слово данных. Nios CPU обеспечивает команды для распаковки индивидуальных байтов (для Nios CPU-16 и для Nios CPU-32) и словами половинной разрядности (для Nios CPU-32) от рабочего слова данных. Команда EXT8D используется для распаковки байта, а EXT16D - для распаковки слова. Типичный пример команды EXT8D - EXT8D %g3, %o4. Команда EXT8D использует самый младший бит (для Nios CPU-16) или два бита (для Nios CPU-32) второго операнда регистра, чтобы извлечь байт из первого операнда регистра и заменить содержимое первого операнда регистра тем байтом. На рис. 3 показано, как прочитать отдельный байт из памяти, даже если адрес байта не приведен к native-word. Запись в память или периферийные устройства Процессор Nios может выполнять выровненную запись в память слов, имеющих разрядность байта, слова половинной разрядности или слова. Слово (для Nios CPU-32) может быть записано в любой адрес, кратный 4, одной командой. Слово половинной разрядности может быть записано в любой адрес, кратный 2, одной командой (для Nios CPU-16) или двумя командами (для Nios CPU-32). Байт может быть записан в любой адрес двумя командами. В Nios CPU-32 самый младший байт регистра может быть записан только по адресу, кратному 4; следующий байт может быть записан только по адресу, кратному 4, плюс 1, и т. д. Точно так же для Nios CPU-16, младший байт регистра может быть записан только по четному адресу, а старший байт может быть записан только по нечетному адресу. Nios CPU-32 может также записать младшее слово половинной разрядности в регистр по адресу, кратному 4, а старшее слово половинной разрядности регистра - по адресу, кратному 4, плюс 2. Команда ST пишет полное слово рабочей разрядности, взятое из любого регистра с выравниванием типа «native». Команды ST8D и ST16D (только для Nios CPU-32) пишут байт и слово половинной разрядности, соответственно, с ограничениями выравнивания, описанными выше, от регистра %r0. Для программного обеспечения часто бывает необходимо записать специфический байт или слово половинной разрядности по произвольно расположенному адресу в памяти. Позиция в пределах исходного регистра может не соответствовать расположению в памяти, в которую будет производиться запись. Команды FILL8 и FILL16 (только для Nios CPU-32) будут брать самый младший байт или слово половинной разрядности регистра соответственно, и копировать это в регистр %r0. На рис. 4 показано, как записать отдельный байт в память, даже если адрес байта не приведен к native. Пример кода 2. Запись в память одного байта - Адрес не выровнен к ширине слова. Содержание памяти до операции: 0123 0x000012000x46 0x49 0x53 0x48 ; lets assume %04 contains the address x00001203 ; and that %g3 contains the value 0x000000BC FILL8 %r0, %g3 ; (First operand can only be %r0) ; replicate low byte of %g3 across %r0 ; so %r0 contains 0xBCBCBCBC ST8D [%04], %r0 ; (Second operand can only be %r0) ; Stores the 3rd byte of %r0 to address 0x1203 Содержание памяти после операции 0123 0x000012000x46 0x49 0x53 0xBC Рис. 4 Способы адресации Nios CPU поддерживает 5 способов адресации: •5/16-битная прямая адресация; •косвенная адресация полной разрядности; •косвенная адресация частичной разрядности; •косвенная адресация полной разрядности со смещением; • косвенная адресация частичной разрядности со смещением. 5/16-битная прямая адресация Множество арифметических и логических команд используют непосредственное 5-битное число в качестве операнда. На рис. 5 показана команда ADDI с двумя операндами: регистром и 5-битным числом. 5-битное число - это константа от 0 до 31. Чтобы определить постоянное значение, требуется от 6 до 16 бит (число от 32 до 65535), 11 бит регистра K могут быть установлены с помощью команды PFX. Это значение связано с 5-битным числом. Команда PFX должна использоваться непосредственно перед командой, которую она изменяет. Пример кода 3. Применение команды ADDI с PFX и без PFX ADDI %g3,5 PFX %hi (0x1234) ADDI %g3, %1o (0x1234) Assume %g3 contains the value 0x00000041 Add 5 to %g3 so %g3 now contains 0x00000046 Load K with upper 11 bits of 0x1234 Add low 5 bits of 0x1234 to %g3 so the K register contained 0x091 ; and the immediate operand of the ADDI ; instruction contained 0x14, which ; concatenated together make 0x00001234 ; Now °/og3 contains 0x0000127A Рис. 5 Для преобразования 16-битной константы в значение PFX и 5-битное число ассемблер использует операторы %hi () и %lo (). Оператор %hi (x) получает от константы x 11 бит (с 5 по 15 биты), а %lo (x) - 5 бит (с 0 по 4 биты). Помимо арифметических и логических команд есть еще несколько команд, которые используют режим прямой адресации различной разрядности без использования регистра K. В таблице 7 приведены команды, использующие 5/16-битные числа. Команды, помеченные звездочкой, - AND, ANDN, OR и XOR - могут только использовать 16-битные значения PFX. Эти команды действуют на два операнда регистра, если им не предшествовала команда PFX. Таблица 7. Команды, использующие 5/16-битную прямую адресацию
Косвенная адресация полной разрядности Команды LD и ST могут загружать и сохранять, соответственно, полное рабочее слово в или из регистра, используя другой регистр. Чтобы определить адрес, см. таблицу 8. Компоненты и технологии, № 82002 Сначала адрес должен быть приведен к рабочему слову так, как описано выше, а регистр K должен быть обработан как смещение со знаком, разрядностью в рабочее слово. Таблица 8. Команды, использующие косвенную адресацию полной разрядности Таблица 9. Команды, использующие косвенную адресацию частичной разрядности
Косвенная адресация частичной разрядности Среди команд Nios нет команд, которые читают слово частичной разрядности. Чтобы прочитать частичное слово, вы должны комбинировать (объединить) команду косвенного чтения полной разрядности с командой извлечения - EXT8d, EXT8s, EXT16d (только для Nios CPU-32) или EXT16S (только для Nios CPU-32). Есть несколько команд, которые могут записывать частичное слово. Каждая из этих команд имеет статический и динамический вариант. Позиция и в пределах исходного регистра, и в рабочем слове памяти определена младшими битами регистра адресации. В случае статического варианта позиция и в пределах исходного регистра, и рабочего слова памяти определена как 1- или 2-битный непосредственный операнд в команде. Как и в случае косвенной адресации через регистр с полной разрядностью, регистр K трактуется как знаковое смещение в рабочем слове при выравнивании адреса по рабочему слову. Все команды записи данных частичной разрядности через косвенный регистр используют %г0 в качестве источника данных. Эти команды удобно использовать вместе с командами FILL8 или FILL16 (только для Nios CPU-32) (см. табл. 9). Косвенная адресация полной разрядности со смещением Команды LDP, LDS, STP и STS могут загружать или записывать полное рабочее слово в или из регистра, используя другой регистр для определения адреса и число, чтобы определить смещение в рабочих словах от этого адреса. В отличие от команд LD и ST, которые для определения адреса памяти могут использовать любой регистр, эти команды могут использовать только специальные регистры для формирования адреса. Команды LDP и STP могут использовать только регистры %L0, %L1, %L2 или %L3 для формирования адреса. Команды LDS и STS могут только использовать указатель стека - регистр %sp (эквивалент %o6) в качестве регистра адреса. Каждая из этих команд берет непосредственное ин- дексное значение со знаком, которое определяет смещение в рабочих словах от выровненного адреса (см. табл. 10). Таблица 10. Команды, использующие косвенную адресацию полной разрядности со смещением
Косвенная адресация частичной разрядности со смещением Среди команд Nios нет команд, которые читают частичное слово из памяти. Чтобы читать частичное слово, вы должны комбинировать (объединить), индексную косвенную команду чтения полной разрядности с командой извлечения - EXT8d, EXT8s, EXT16d (только для Nios CPU-32) или EXT16S (только для Nios CPU-32). STS8S и STS16S (только для Nios CPU-32) используют число, чтобы определить байт или смещение слова половинной разрядности, соответственно, от указателя стека, чтобы записать, соответственно, выровненное слово частичной разрядности из исходного регистра %г0 (см. табл. 11). Таблица 11. Команды, использующие косвенную адресацию частичной разрядности со смещением
Есть команды, которые могут использовать только указатель стека - регистр %sp (эквивалент %o6) в качестве регистра адреса и могут использовать только регистр %г0 (эквивалент %g0, но в ассемблере должен называться %г0) в качестве регистра данных. Эти команды удобно использовать с командами FILL8 или FILL16 (только для Nios CPU-32). ИШ Литература 1.Altera™. Nios Soft Core Embedded Processor, data sheet June 2000, ver. 1. 2.Altera™. Nios 2 0 CPU datasheet. 3.Altera™. Nios Programmers Reference Manual Version 1.1. March 2001. 4.Altera™. Nios 32-Bit Programmers Reference Manual. January 2002. Version 2.0. 5.Altera™. Nios 16-Bit Programmers Reference Manual. January 2002. Version 2.0. 6.Altera™. Nios tutorial.pdf. 7.Altera™. Simultaneous Multi-Mastering with the Avalon Bus. Окончание следует |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||