|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[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
Компоненты и технологии, № 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. Группы регистров
Восемь верхних регистров (%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.
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)
Разрешение прерывания (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. Флаги состояния
ISTATUS - это сохраненная копия регистра STATUS. Когда исключение обработано, значение регистра STATUS будет скопировано в регистр ISTATUS. Это действие позволяет восстанавливать значение регистра STATUS перед возвращением управления прерванной программе. При возвращении из TRAP команда TRET автоматически копирует регистр ISTATUS в регистр STATUS. Когда исключение обрабатывается, прерывания заблокированы (IE=0) . Перед перепредоставлением прерываний драйвер исключения должен сохранить значение регистра ISTATUS. Когда CPU сброшен, ISTATUS установлен в 0. WVALID (%ctl2)
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 Содержание поля памяти
Таблица 6. Периферия разрядностью N-бит для Nios CPU-32 с адреса 0х0100
Чтение из памяти или периферийных устройств Nios CPU может только выполнять выровненный доступ к памяти. 32-битная операция чтения может читать только полное слово, начинающееся с адреса байта, который является множителем 4. 16-битная операция чтения может читать только слово половинной разрядности, начинающееся с адреса байта, который является множителем 2. Команды, которые читают из памяти всегда, устанавливают младший бит (для Nios CPU-16) или два младших бита (для Nios CPU-32) адреса как в 0. Адрес имя автора - Иосиф Каршенбойм Сайт автора - www.iosifk.narod.ru Сайт журнала - www.kit-e.ru |
Среды: 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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||