Весомым конкурентным преимуществом FPGA является возможность создания устройства на одном кристалле. Представьте только- вместо того что бы паять микроконтроллер, spi память, часы реального времени, счетчики событий и прочую перифирию, вы можете все это синтезировать внутри всего лишь одной микросхемы! Самая основная проблема этой идей- это реализация процессора. В этой статье мы покажем, как реализовать Soft-микропроцессор (также «микропроцессор с программным ядром») для FPGA Altera.
Компания Altera предлагает отличное решение для таких задач — процессор Nios II. Семейство softcore процессоров Nios® II — второе поколение встраиваемых процессоров фирмы Altera. Процессоры Nios II дают возможность разработчикам получить производительность свыше 200 Dmips при стоимости логики не более $0,35 на процессор. При трех типах процессоров и возможности выбора из более чем 60 дополнительных IP ядер, системы Nios II обеспечивают исключительную гибкость, позволяя разработчикам подбирать набор процессоров в наибольшей мере соответствующий потребностям встраиваемой системы.
Создаем новый проект для нашей платы. После создания проекта добавите схему (bdf) в проект. Когда все готово приступим к настройке Nios.
Открываем Qsys: Tools — Osys.
В строку поиска вводим ram, находим пункт On-Chip Memory (RAM or ROM), выбираем его двойным кликом.
В окне настройки памяти изменяем пункт Total memory size c 4096 на 8192 байт. Пункт Enable non-default initialization file оставляем не выбранным. В принципе если у Вас есть готовая прошивка для Nios II вы можете инициализировать память на этом этапе, но если вы хотите иметь возможность отладки (а мы хотим такую возможность), нужно оставить память не инициализированной. Далее добавляем параллельный интерфейс, алгоритм точно такой-же: в поле поиска вводим pio.
Выбираем ширину порта 32 бит- Width (1-32 bits): 32. Направление выбираем Output. Для экспериментов нам хватит. Ну и напоследок добавляем сам процессор:
Версию процессора выберем самую простую Nios II/e. Далее настраиваем соединение наших блоков:
Все блоки необходимо объединить согласно схеме. В настройках процессора Nios II (Classic) Processor необходимо выбрать местоположение векторов сброса и исключений. В качестве местоположения выбираем нашу набортную память onchip_memory2_0.s1
В качестве языка синтеза и симуляции выбираем Verilog и жмем Generate. После чего наш проект сохраняется:
И генерируется:
Далее добавляем созданный нами soft-процессор- nios_cpu.qsys, а также известные уже нам модули hvsync_ex.v и pic_gen.v.
Как в проекте Частотомер с VGA выходом добавлем синтезатор частоты и модуль встроенной памяти для хранения изображения цифр. Создаем схему с нашим процессором и модулем вывода VGA изображения:
Пришло время создать программу для нашего процессора! Для этого в меню Пуск выбираем Nios II Software Build Tools for Eclipse и создаем новый проект- New->Nios II Application and BSP from Template:
В настройках выбираем SOPS Info файл из нашего проекта и выбираем создание пустого проекта (Blank Project):
Создадим файл main.c со следующим содержимым:
C++ Code:
/*
/*
* main.c
*
* Created on: 19 февр. 2016 г.
* Author: Visuale
*/
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
//Структура для преобразования int to BCD
typedef struct
{
char value[8];
} BCD_Number;
//Функция преобразования int to BCD
BCD_Number bin2bcd(int bin_number)
{
BCD_Number bcd_number;
int i;
for(i = 0; i < sizeof(bcd_number.value); i++)
{
bcd_number.value[i] = bin_number % 10;
bin_number /= 10;
}
return bcd_number;
}
//Главная функция
int main ()
{
BCD_Number bcd_number;
unsigned long port;
unsigned int cnt=1;
int i;
while(1) //Бесконечный цикл
{
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, port); //Записываем BCD число в порт
for (i=0; i<(ALT_CPU_CPU_FREQ/5000); i++); //Задержка
cnt = (cnt >= 0xFFFF) ? 1u : (cnt+1); //Счетчик
bcd_number=bin2bcd(cnt); //Преобразуем в BCd и собираем обратно в 32 битное BCD представление
port = bcd_number.value[7]<<28 | bcd_number.value[6]<<24 |
bcd_number.value[5]<<20 | bcd_number.value[4]<<16 |
bcd_number.value[3]<<12 | bcd_number.value[2]<<8 |
bcd_number.value[1]<<4 | bcd_number.value[0];
}
return 0;
}
В принципе тут все просто: счетчик cnt считает от 1 до 65535, далее мы его преобразуем в BCD вид, и выводим в порт нашего процессора. Далее правой клавишей мыши на проекте nios_first_bsp [nios_cpu]
На проекте nios_first выбираем Build Project и если мы хотим инициализировать нашу память, то выбираем Make targets->Build:
Осталось последнее, настроить отладку. Синтезируем прошивку ПЛИС. Прошиваем. Если инициализируем нашу память On-Chip Memory (RAM or ROM) *.hex файлом, то на мониторе увидим цифры нашего счетчика. Но мы собрались настроить отладку, приступим. Правой клавишей мыши по проекту nios_first и выбираем Debug As->Debug Gonfigurations. В появившемся окне делаем двойной клик левой клавишей мыши на пункте Nios II Hardware появится новая конфигурация дебагера. В списке Project Name выбираем наш проект nios_first:
На вкладке Target Connection выбираем Refresh Connections:
Нажимаем кнопку Debug, получаем предупреждение о переходе к виду eclipse в режиме отладки:
Нажимаем Yes и переходим в режим отладки нашего приложения:
Поздравляю! Мы создали свой soft-процессор. Ну и по традиции видео работы и исходные файлы:
Исходные файлы проекта Nios II: nios_II.zip
visuale.ru
Прочитав эту статью, мне стало безумно интересно. Как, теперь можно обойтись без avr, 8051, msp430 или arm/cortex ? Можно! Но за все придется платить, и об этом в конце статьи.Nios II это 32-разрядная микропроцессорная архитектура для встраиваемых приложений (Soft-микропроцессор), разработанная специально для ПЛИС фирмы Altera. Nios II является развитием архитектуры Nios и находит применение в различных встраиваемых приложениях начиная от цифровой обработки сигналов до управляющих систем.
Я попробую поделиться с вами той информацией, которой мне не хватало в самом начале.
Структура процессора
На представленной схеме представленны основные компоненты процессора NiosII и возможной системы на его основе.
Если заинтересовало, прошу под кат
Попробуем разобрать все попорядку. Начнем с шины AVALON.
Для соединения компонентов процессорной системы используется синхронная шина Avalon. Как следует и официальной документации, шина Avalon может содержать следующие типы:
Регистры процессора Nios II
Архитектура процессора Nios II поддерживает плоский регистровый файл, содержащий 32 регистра общего назначения и до 32 управляющих регистров. Регистры общего назначения и управляющие регистры, представлены в таблицах.
Регистры общего назначения.
Нет специального | Регистры общего назначения | |
Временный для исключений (1) Временный для отладки (2) | ||
Глобальный указатель Указатель стека Указатель кадра Адрес возврата из исключений (1) Возврат из контрольной точки (2) Адрес возврата |
Регистры управления NiosII
Биты разрешения прерывания Биты возникших прерываний Уникальный идентификатор |
В состав процессора 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, который всегда равен нулю.Аппаратные прерывания
|
один из входов запросов прерывания (irqk) процессора активирован;
соответствующий бит регистра разрешения прерываний ienable содержит единичное значение.
JTAG Модуль
В состав процессорного ядра могут входить и специализированные блоки: JTAG UART – для обмена информацией с компьютером с помощью загрузочного кабеля (USB-Blaster или ByteBlaster), модуль JTAG Debug – для выполнения отладки программного обеспечения с помощью компьютера. Обязательная часть переферии, позволяет использовать командыMMU и MPU
non6.blogspot.com
Скриншот интерфейса дизассемблера IDA Pro
IDA Pro — знаменитый дизассемблер, который уже много лет используют исследователи информационной безопасности во всем мире. Мы в Positive Technologies также применяем этот инструмент. Более того, нам удалось разработать собственный процессорный модуль дизассемблера для микропроцессорной архитектуры NIOS II, который повышает скорость и удобство анализа кода.
Сегодня я расскажу об истории этого проекта и покажу, что получилось в итоге.
Процессорный модуль разрабатывался для версии IDA 6.9. Для скорости был выбран IDA Python. В месте, где обитают процессорные модули, — подкаталоге procs внутри установочного каталога IDA Pro — есть три модуля на Python: msp430, ebc, spu. В них можно подсмотреть, как устроен модуль и как может быть реализована базовая функциональность дизассемблирования:
Опытом создания процессорного модуля я решил поделиться с сообществом на конференции PHDays 8. Выступление вызвало интерес (видео доклада опубликовано на сайте PHDays), на нем присутствовал даже создатель IDA Pro Ильфак Гильфанов. Один из его вопросов был — реализована ли поддержка IDA Pro версии 7. На тот момент ее не было, но уже после выступления я пообещал сделать соответствующий релиз модуля. Вот тут-то и началось самое интересное.
Теперь самым свежим стал мануал от Intel, который использовался для сверки и проверки на наличие ошибок. Я значительно переработал модуль, добавил ряд новых возможностей, в том числе решив те проблемы, которые раньше победить не получалось. Ну и, конечно, добавил поддержку 7-й версии IDA Pro. Вот что получилось.
Предположим, что в модуле пока не реализован даже базовый разбор команд. Учитывая, что каждая команда занимает 4 байта, сгруппируем байты по четыре, тогда все будет выглядеть примерно так.
После реализации базовой функциональности декодирования инструкций и операндов, их вывода на экран и анализа инструкций передачи управления набор байтов из примера выше преобразуется в следующий код.
Как видно из примера, формируются также перекрестные ссылки с команд передачи управления (в данном случае можно увидеть условный переход и вызов процедуры).
Одно из полезных свойств, которое можно реализовать в процессорных модулях, — это комментарии к командам. Если отключить вывод значений байтов и включить вывод комментариев, тот же участок кода уже будет выглядеть так.
Здесь, если вы впервые столкнулись с ассемблерным кодом новой для вас архитектуры, с помощью комментариев можно понять, что происходит. Далее примеры кода будут в таком же виде — с комментариями, чтобы не смотреть в мануал по NIOS II, а сразу понять, что происходит в участке кода, который приведен в качестве примера.
Например, для первого вида рассмотрим код.
Видно, что здесь часто встречается использование регистра zero в вычислениях. Если внимательно присмотреться к этому примеру, можно заметить, что все команды кроме передачи управления являются вариантами простого занесения значений в определенные регистры.
После реализации обработки псевдоинструкций получаем этот же участок кода, но теперь он выглядит уже более читаемым, и вместо вариаций команд or и add мы получаем вариации команды mov.
Очевидно, что в стеке резервируется место под локальные переменные. Можно предположить, что регистр ra сохраняется в стековой переменной, а затем восстанавливается из нее.
После добавления в модуль функциональности, которая отслеживает изменения указателя стека и создает стековые переменные, этот же пример будет выглядеть следующим образом.
Теперь код выглядит немного понятней, и уже можно именовать стековые переменные и разбирать их назначение, переходя по перекрестным ссылкам. Функция в примере имеет тип __fastcall и ее аргументы в регистрах r4 и r5 заносятся в стек для вызова подпроцедуры, которая имеет тип _stdcall.
Для решения этой задачи используются смещения, состоящие из двух частей. Подобный механизм используется в процессорах в PowerPC: смещение состоит из двух частей, старшей и младшей, и заносится в регистр двумя командами. В PowerPC это выглядит следующим образом.
В данном подходе перекрестные ссылки образуются с обеих команд, хотя по сути настройка на адрес происходит во второй команде. Это может иногда причинять неудобства при подсчете количества перекрестных ссылок.
В свойствах смещения для старшей части используется нестандартный тип HIGHA16, иногда используется тип HIGh26, для младшей части — LOW16.
В самом вычислении 32-битных чисел из двух частей ничего сложного нет. Сложности возникают при формировании операндов как смещений для двух отдельных команд. Вся эта обработка ложится на процессорный модуль. Примеров, как это реализовать (тем более на Python), в IDA SDK нет.
В докладе на PHDays смещения стояли как нерешенная задача. Для решения проблемы мы схитрили: 32-битное смещение только с младшей части — по базе. База вычисляется как старшая часть, сдвинутая влево на 16 бит.
При таком подходе перекрестная ссылка образуется только с команды занесения младшей части 32-битного смещения.
В свойствах смещения видна база и отмечено свойство, чтобы рассматривать ее как число, чтобы не формировалось большое количество перекрестных ссылок на сам адрес, который принимаем как базу.
В коде под NIOS II встречается следующий механизм занесения 32-битных чисел в регистр. Сначала в регистр заносится старшая часть смещения командой movhi. Затем к ней присоединяется младшая часть. Сделано это может быть тремя способами (командами): сложением addi, вычитанием subi, логическим ИЛИ ori.
Например, в следующем участке кода регистры настраиваются на 32-битные числа, которые потом заносятся в регистры — аргументы перед вызовом функции.
После добавления вычисления смещений получим следующее представление этого блока кода.
Получаемое 32-битное смещение выводится рядом с командой занесения его младшей части. Этот пример достаточно наглядный, и мы даже могли бы все 32-битные числа легко подсчитать в уме, просто присоединив младшую и старшую части. Судя по значениям, скорее всего, они не являются смещениями.
Рассмотрим случай, когда при занесении младшей части используется вычитание. В этом примере определить конечные 32-битные числа (смещения) с ходу уже не получится.
После применения вычисления 32-битных чисел получится следующий вид.
Здесь мы видим, что теперь, если адрес есть в адресном пространстве, на него формируется смещение, и значение, которое образовалось в результате соединения младшей и старшей частей, рядом уже не выводится. Здесь получили смещение на строку «10/22/08». Чтобы остальные смещения указывали на валидные адреса, увеличим немного сегмент.
После увеличения сегмента получаем, что теперь все вычисленные 32-битные числа являются смещениями и указывают на валидные адреса.
Выше упоминалось, что есть еще вариант вычисления смещений, когда используется команда логического ИЛИ. Вот пример кода, где таким образом вычисляются два смещения.
То, которое вычисляется в регистре r8, потом заносится в стек.
После преобразования видно, что в данном случае регистры настраиваются на адреса начала процедур, то есть в стек заносится адрес процедуры.
После обработки таких ситуаций получаем смещения на переменные из самих команд чтения и записи. При этом также в зависимости от размерности операции выставляется размер самой переменной.
Поток исполнения останавливается на регистровом переходе jmp r2. Далее идут блоки кода, на которые есть ссылки из данных, причем в конце каждого блока происходит прыжок на одну и ту же метку. Очевидно, что это конструкция switch и эти отдельные блоки обрабатывают конкретные случаи из нее. Выше также можно увидеть проверку количества случаев и прыжок по умолчанию.
После добавления обработки switch этот код будет выглядеть следующим образом.
Теперь обозначены сам прыжок, адрес таблицы со смещениями, количество случаев, а также каждый случай с соответствующим номером.
Сама таблица со смещениями на варианты выглядит следующим образом. Для экономии места приведены первые пять ее элементов.
По сути обработка switch заключается в проходе по коду обратно и поиске всех его составляющих. То есть описывается некоторая схема организации switch. Иногда в схемах могут быть исключения. Это может быть причиной случаев, когда в существующих процессорных модулях не распознаются, казалось бы, наглядные switch. Получается, что реальный switch просто не подпадает под схему, которая определена внутри процессорного модуля. Еще возможны варианты, когда схема вроде бы есть, но внутри нее есть еще другие команды, не участвующие в схеме, или основные команды переставлены местами, или она разорвана переходами.
Процессорный модуль NIOS II распознает switch с такими «посторонними» инструкциями между основными командами, а также с переставленными местами основными командами и с разрывающими схему переходами. Используется обратный проход по пути исполнения с учетом возможных переходов, разрывающих схему, с установкой внутренних переменных, которые сигнализируют различные состояния распознавателя. В итоге распознается порядка 10 различных вариантов организации switch, встреченных в прошивках.
Можно заметить, что две последние инструкции имеют одинаковый номер инструкции и, похоже, выполняют одинаковые действия.
По инструкции custom существует отдельный мануал. Согласно ему, одним из самых полных и современных вариантов набора инструкций custom является набор инструкций для работы с плавающей точкой — NIOS II Floating Point Hardware 2 Component (FPh3). После реализации разбора команд FPh3 пример будет выглядеть так.
По мнемонике двух последних команд убеждаемся, что они действительно выполняют одно и то же действие — команду fadds.
Рассмотрим участок кода.
В последней строчке происходит прыжок по значению регистра, при этом видно, что прежде в регистр заносится адрес процедуры, которая начинается в первой строчке примера. В данном случае очевидно, что прыжок совершается в ее начало.
После добавления функционала распознавания прыжков получается следующий вид.
Рядом с командой jmp r8 выводится адрес, куда происходит прыжок, если его удалось вычислить. Также формируется перекрестная ссылка между командой и адресом, куда происходит прыжок. В данном случае ссылку видно в первой строчке, сам прыжок выполняется с последней строчки.
В данном примере процессорный модуль находит и вычисляет значение регистра gp в новой базе. При закрытии базы idb значение gp сохраняется в базе.
При загрузке уже существующей базы idb и если значение gp уже было найдено, оно загружается из базы, что показано в отладочном сообщении в следующем примере.
Поскольку значение адреса, которое хранится в регистре gp, мы уже получили, то можно адресовать такого рода чтения и записи.
После добавления обработки ситуаций чтения и записи относительно регистра gp получим более удобную картину.
Здесь можно увидеть, к каким переменным идет обращение, отследить их использование и выявить их назначение.
Например, здесь мы видим, что регистры настраиваются относительно регистра gp на некоторые переменные или области данных.
После добавления функциональности, распознающей такие ситуации, преобразующей в смещения и добавляющей перекрестные ссылки, получим следующий вид.
Здесь уже видно, на какие области относительно gp настраиваются регистры, и становится более понятным, что происходит.
Очевидно, что регистры настраиваются на некоторые локальные переменные. Такие ситуации — настройка аргументов на локальные буферы перед вызовами процедур — встречаются достаточно часто.
После добавления обработки (преобразования непосредственных значений в смещения) получим следующий вид.
Теперь становится ясно, что после вызова процедуры значения загружаются из тех переменных, адреса которых были переданы в качестве параметров перед вызовом функции.
Глядя на этот участок кода, можно понять, что поле field_8 инкрементируется и, возможно, является счетчиком наступления какого-либо события. В случае если чтение и запись поля разнесены в коде на большом расстоянии, в анализе могут помочь перекрестные ссылки.
Рассмотрим саму структуру.
Хотя обращения к полям структур есть, как видим, перекрестных ссылок с кода на элементы структур не образовалось.
После того, как подобные ситуации обрабатываются, для нашего случая все будет выглядеть следующим образом.
Теперь есть перекрестные ссылки к полям структур из конкретных команд, которые работают с этими полями. Создаются прямые и обратные перекрестные ссылки, и можно отслеживать по разным процедурам, где значения полей структуры считываются, а где заносятся.
Вот пример этой команды из одной прошивки.
Открывая другую прошивку в месте с похожим контекстом, встречаем иную ситуацию.
Эти байты не преобразовались автоматически в команду, хотя обработка всех команд есть. Судя по окружению, и даже похожему адресу, это должна быть одна и та же команда. Посмотрим внимательно на байты. Это та же команда eret, за тем исключением, что биты 22–26 не равны 0x1E, а равны нулю.
Приходится немного исправить разбор этой команды. Теперь он не совсем соответствует мануалу, но соответствует действительности.
Единственный непонятный момент: при загрузке нового бинарного файла под NIOS II в IDA 7 не происходит начального автоматического анализа, который присутствует в IDA 6.9.
Автор: Антон Дорфман, Positive Technologies
habr.com
Ссылки на статьи и форумы
Документирование ПЛИС
Nios II Processor Peripherals and Interfaces — Периферия процессора Nios 2
HAL — Слой аппаратной абстракции (HAL) для процессора NIOS 2
newlib — Новая библиотека Си для встраиваемых систем
Использование новой библиотеки — Уменьшение кода
Справочник HAL API —
Инструментальные средства проектирования и отладки систем на программируемых кристаллах компании Altera —
Начало работы с Nios
Часть 1. Создание приложения по шаблону
Часть 2. Собственное простое приложение
Часть 3. Собственный проект работы с данными
Часть 4. Собственный проект арифметических операций над целочисленными данными
Часть 5. Установка точек останова
Часть 6. Вывод данных в регистр PIO
Часть 7. Управление интервальным таймером
Часть 8. Обработка прерываний от интервального таймера
Загрузка программы из EPCS флеш памяти
В этой статье обсуждается, как спроектировать систему SOPC Builder с функцией загрузки программы для процессора Nios II из EPCS флеш памяти, использующейся для загрузки образа конфигурации чипа Altera. Описано, как конвертировать файлы SOF в FLASH, ELF в FLASH, FLASH в HEX, как создавать JIC файл и проверять работу программы в терминале Nios II EDS.
Часть 1. Генерирование системы SOPC Builder.
Часть 2. Настройка и компиляция проекта Quartus II.
Часть 3. Создание BSP и программного проекта в среде Nios II EDS на платформе Eclipse
Часть 4. Конвертирование программных файлов и программирование чипа Altera.
Adding PIO ( Port Input/Output) in NIOS with INTERRUPT — PIO с прерываниями
Загрузчик — Пример реализации загрузчика образа программного кода из EPCS.
Конфигурирование ПЛИС — Конфигурирование ПЛИС Altera со статической памятью конфигурации
Примеры
Altera Nios II QiuckStart — Осваиваем принципы построения системы и инфраструктуру сборки.
Сборка Nios — Принципы построения системы
SDRAM_DDR2 — Cкоростная память DDR3: стоит ли игра свеч?
SDRAM — Подключение SDRAM
SDRAM controller — Контроллер SDRAM по русски
SDRAM controller — FPGA VHDL SDRAM Controller
SDRAM — Описание работы SDRAM от фирмы Micron
Video NIOS — Преобразование видеосигнала с помощью Nios
SDRAM and Nios — Программа проверки SDRAM
NIOS ASSEMBLER — NIOS 2 команды
NIOS 2 — NIOS 2 сборка
Nios II Softwarе
Пример2 — Пример реализации загрузчика образа программного кода из EPCS
САПР ALTIUM DESIGNER 6 — СКВОЗНОЕ ПРОЕКТИРОВАНИЕФУНКЦИОНАЛЬНЫХ УЗЛОВ РЭС НА ПЕЧАТНЫХ ПЛАТАХ В САПР ALTIUM DESIGNER 6
ПЛИС VHDL Verilog — Ethernet на Cyclon IV DE0 Nano Board
NIOS- QSYS
SOPC_Builder
SOPC Builder — Использование SOPC Builder для создания процессорной системы на программируемом кристалле фирмы Altera
SOPC_Builder_4_0 — Компоненты SOPC_Builder
SOPC_Builder_10_0 — Сквозной контроль разработки компонента SOPC_Builder
Описание мегафункций
Ethernet — Triple-Speed Ethernet MegaCore Function
Stratix2 — Stratix II Memory Board 1 Block Diagram
ModelSim
Симулирование ModelSim — моделирование в ModelSim
Симулятор ModelSim — Stratix II Memory Board 1 Block Diagram
Quartus + ModelSim. Интеграция в картинках и создание TestBenchm
Поддержка ModelSim
10G
Симуляция проектов имеющих трансиверы
Cyclone V Transceiver PHY Basic Design Examples — Altera Wiki
Симуляция SDRAM контроллера в ModelSim- HDMI
serurvis.3dn.ru
Мы будем использовать версию economy и подключим необходимый минимум переферии:
Для начала этого нам хватит, даже с избытком.
Тут следует сделать отступление и поговорить о используемой плате/кристалле. Я использую клон платы от DIGIACIS.
Based on Altera EP2C5T144 FPGA chip
Configuration EPROM chip EPCS4, size 4Mbit
Onboard 50M active patch oscillator (crystal oscillator in the board’s back)
5V power supply
The board has the power indicator light and reset switch
Onboard 3 SMD LED
All the IO ports and clock pin through the pin to bring out (any of these interfaces can be used for memory and peripheral expansion)
Создаем новый проект в Quartus2, выбираем нужный чип. В готовом проекте создаем top-level файл.
Выберете пункт Block Diagram / Schematic File. Откроется файл с сеткой, где вы сможете должны собрать следующую схему :
Схема собирается из простых примитивов.
Далле в меню Tools -> Qsys . Запустится мастер Qsys, в списке компонентов выберете Nios 2 Processor. Откроется окно настроек процессора.
По умолчанию мастер настроек предлагает создать Nios2/f. Нам же нужен Nios2/e, к тому же версии Standart и Full версии являются лицензируемыми. Остальные настройки оставьте теми же.
Далее добавляем компоненты JTAG-UART, и OnChip Memory. Если настройки первого оставляем дефолтными, то настройки памяти надо изменить. В пункте Tital memory size впишите 8192, что составляет 8к байт.
Следующим шагом добавьте компонент таймера. Введите в поиске «Timer» и добавьте компонент.
В настройках укажите период 100us (100 микросекунд или 1/10 секунды).
Когда все компоненты добавлены, их необходимо соединить.
Соедините линии reset, clk и s1 как показано на рисунке. Создав эти соединения вы создадите единую систему тактирования, сброса и дины инструкций и данных.
Далее необходимо назначить адреса переферии, памяти и процессора. Для этого выберите пункт меню System -> Assign Base Adresses. Адреса автоматически установятся. Без этого вы получите массу ошибок о взаимном перекрытии адресов (overlaps).
Далее необходимо установить приоритет прерываний двойным щелчком установите «0» приоритет у таймиера и «16» у jtag прерываний.
Как видите у нас все еще остались две ошибки. двойным щелчком откройте настройки процессора nios2.
В разделах Reset Vector и Exception Vector установите oncip_memory2_0. Это позволит загружаться контроллеру из оперативной памяти.
Это последний шаг по конфигурированию в Qsys. Перейдите во вкладку Generation и нажмите кнопку Generate.
После недолгого ожидания система будет сгенерирована.
Добавьте сгенерированный компонет на схему :
Для продолжения нажмите кнопу Start Analysis & Synthesis. Проект удет проверен на ошибки и подготовлен к симуляции. В случае отсутствия ошибок откройте компонент Pin Planner и расположите пины : output типа по своему усмотрению, а clk — на вывод к которому подключен выход тактового генератора.
Последним шагом является компиляция. Нажмите кнопку Start Compilation, и скомпилируйте проект.
Всё. Теперь остается только загрузить файл прошивки в плату!
non6.blogspot.com
  Раздел «RTOS по-русски» содержит переводы документации по реализации операционной системы реального времени (RTOS) на базе процессора Nios II.
Приятного чтения!
Это перевод Андреем Тимченко учебного пособия
Using MicroC/OS-II RTOS with the Nios II Processor. Tutorial. TU-NIOSII-MCRC/OS-II-3.0
В учебном пособии содержатся пошаговые инструкции реализации примера проека Nios II Ethernet Standard Design Example. В примере проекта реализованы некоторые базовые функции операционной системы реального времени, такие как помещение в очередь сообщений и использование общего ресурса, защищённого семафором. |
1. Выполнение учебного руководства   1-1
Программные и аппаратные требования   1-1     Получение аппаратных файлов проекта для примера   1-1     Получение программных файлов проекта для примера   1-2 Обучающий проект MicroC/OS II   1-2     Создание программного проекта MicroC/OS-II   1-3     Конфигурация BSP   1-7     Запуск программного проекта MicroC/OS-II.   1-10 |
Это мой перевод 10 главы 3 раздела 3 тома Nios II Software Developer’s Handbook .
10. MicroC/OS-II Real Time Operating System
В главе предоставляется общая информация об особенностях реализации операционной системы реального времени MicroC/OS-II от Micrium на базе процессорной системы Nios II. |
Введение в MicroC/OS-II RTOS   10-1
    Дополнительная информация   10-1     Лицензирование   10-2 Другие поставщики RTOS   10-2 Nios II вариант реализации MicroC/OS-II RTOS   10-2     Архитектура MicroC/OS-II   10-2     Многопоточная отладка в MicroC/OS-II   10-3     Драйверы устройств MicroC/OS-II   10-3     Драйверы сохранения потока HAL   10-4     Стандартная библиотека newlib ANSI C   10-5     Программы обработки прерываний (ISR) для MicroC/OS-II   10-6 Реализация MicroC/OS-II RTOS проектов на процессоре Nios II   10-6 |
Это мой перевод Section III. Advanced Programming Topics. 11. Ethernet and the NicheStack TCP/IP Stack — Nios II Edition.
В этой главе обсуждается стек NicheStack TCP/IP — варианта упрощённой реализации TCP/IP стека для встраиваемых систем с малой памятью. Стек поддерживает следующие протоколы: IP, ICMP, UDP, TCP, RTT, DHCP, ARP, а также Socket API. В главе сделан акцент именно на Nios II реализацию стека: описаны инициализация и правила использования в программе. |
11. Изернет и TCP/IP стек NicheStack — Версия под Nios II   11-1
Предварительные условия для понимания устройства NicheStack TCP/IP стека   11-2 Введение в NicheStack TCP/IP стек — версия под Nios II   11-2     Файлы и директории NicheStack TCP/IP стека   11-3     Лицензирование   11-3 Другие TCP/IP стеки для процессора Nios II   11-3 Использование NicheStack TCP/IP стека — версия под Nios II   11-3     Требования к системе Nios II   11-4     Задачи для NicheStack TCP/IP стека   11-4     Инициализация стека   11-4         alt_iniche_init()   11-5         netmain()   11-5         iniche_net_ready   11-5         get_mac_addr() и get_ip_addr()   11-6     Вызов интерфейса гнезда   11-7 Конфигурирование NicheStack TCP/IP стека в программе Nios II   11-9     Основные настройки NicheStack TCP/IP стека   11-9     Настройки IP   11-10     Настройки TCP   11-10 Информация для дальнейшей работы   11-10 Информация об ограничениях   11-10 |
Это мой перевод Using the NicheStack TCP/IP Stack — Nios II Edition Tutorial. TU-01001-3.0
В главе подробно описывается пример проекта Nios II Simple Socket Server. Описывается его взаимодействие с системными задачами MicroC/OS-II, детально описано фукнционирование и настройка приложения. |
Введение   1-1
Аппаратные и программные требования   1-2 Файлы учебного пособия   1-2     Файлы аппаратного проекта   1-2     Файлы программы   1-2 Процесс разработки программы   1-3     Создание нового проекта Nios II   1-4     Конфигурирование BSP   1-7     Изучение файлов проекта Nios II Simple Socket Server   1-11     Сборка и запуск проекта Nios II Simple Socket Server   1-11     Взаимодействие с Nios II Simple Socket Server   1-13 Обзор Nios II Simple Socket Server   1-16     Унифицированные имена в программе   1-16     Архитектура программы   1-17     Ресурсы MicroC/OS-II   1-19         Задачи   1-19         Ресурсы коммуникаций внутренних задач   1-20     Инициализация стека NicheStack TCP/IP   1-20     Подробности реализации Nios II Simple Socket Server   1-21 Важный концепт NicheStack TCP/IP Stack   1-22     Обработка ошибок   1-22     Создание задачи по умолчанию в NicheStack TCP/IP Stack   1-22     Создание задач, использующих интерфейс гнезда NicheStack TCP/IP Stack   1-23     Приоритеты задач в проекте Nios II Simple Socket Server   1-25         Внутренние задачи MicroC/OS-II   1-26         Внутренние задачи NicheStack TCP/IP Stack   1-26         Задачи инициализации сети   1-26         Сетевые задачи пользователя   1-26         Несетевые задачи пользователя   1-26         Задачи мониторинга PHY   1-26         Размер стека задач   1-27 Что делать дальше?   1-27 2. Дополнение А   2-28     Подробности установки аппаратных средств   2-28     Введение   2-28     Сетевое подключение   2-28 |
naliwator.narod.ru
 
Вы попали в личную он-лайн библиотеку Егорова Антона.
Здесь содержатся мои переводы документации фирмы Altera.
Всё, что может помочь вам работать в среде Quartus II,
вникнуть в тонкости устройства чипов,
разработке и ведению проектов Quartus II.
Здесь русский человек может осмыслить
Altera по-русски и Quartus II по-русски.
Все документы он-лайн библиотеки созданы в виде отдельных
.pdf файлов. Для ускорения поиска нужного материала,
используйте поиски по странице, по оглавлению и по сайту.
Это свободная библиотека, но призываю с уважением относиться
к труду её автора. Выявленные ошибки направляете мне по почте.
На отзывы и пожелания с удовольствием отвечаю.
Приятного чтения!
НОВОСТИ
05.09.2013 Важная новость! Ввиду случившегося факта переезда сайта с
хостинга на народе в Ucos, может случаться проблема с загрузкой контента моего сайта. Решения у проблемы два: переписать движок так,
как хочет его Ucos, дабы снабжать страницу собственной рекламой, либо установить в браузере дополнение, которое борется с подобной навязчивой рекламой, например Adblock Plus.
16.06.2013 «Руководство пользователя флеш программатором Nios II»
(Здесь)
15.04.2013 Обновление материала «Тактовые сети и PLL в семействе Cyclone III»
(Здесь)
16.10.2012 «TL431, TL431A Прецизионные настраиваемы регуляторы шунта»
(Здесь)
11.10.2012 «Серия PC817 Оптопара для монтажа высокой плотности»
(Здесь)
06.09.2012 Обновление материала «Встроенные умножители в семействе Cyclone III»
(Здесь)
21.08.2012 Обновление материала «Блоки памяти в семействе Cyclone III»
(Здесь)
07.08.2012 Обновление материала «Логические элементы и блоки массивов логики в чипах Cyclone III»
(Здесь)
03.08.2012 «Общее представление о семействе Cyclone III»
(Здесь)
03.07.2012 «Учебное пособие. Использование стека NicheStack TCP/IP — версия под Nios II»
(Здесь)
18.05.2012 «11. Изернет и TCP/IP стек NicheStack — Версия под Nios II»
(Здесь)
25.04.2012 «Использование MicroC/OS-II RTOS в процессорах NIOS II. Учебное руководство»
(Здесь)
17.04.2012 «Операционная система реального времени MicroC/OS-II»
(Здесь)
07.03.2012 «Отладка цепей приёмопередатчика с помощью System Console»
(Здесь)
01.03.2012 «Обработка прерываний от интервального таймера»
(Здесь)
25.11.2011 «Симуляция проектов со встроенным процессором Nios II»
(Здесь)
28.09.2011 «Отладка Nios II системы при помощи встроенного логического анализатора SignalTap II»
(Здесь)
12.08.2011 «SLS. IP ядро устройства USB 2.0″
(Здесь)
17.06.2011 «Подключение SRAM памяти»
(Здесь)
09.06.2011 «Настольная книга по встраиваемым системам. 4.Инструменты командной строки Nios II»
(Здесь)
23.05.2011 «SOPC Builder. Ядро SPI»
(Здесь)
12.05.2011 «SOPC Builder. Сквозной контроль разработки компонента SOPC Builder»
(Здесь)
28.04.2011 «SOPC Builder. Ядро UART»
(Здесь)
14.04.2011 «Tcl скриптирование»
(Здесь)
01.04.2011 «Процессор Nios II Настольная книга программиста. 9.Кэш и прочно сопряжённая память»
(Здесь)
25.03.2011 «Руководство пользователя H-JTAG»
(Здесь)
21.03.2011 Статья «Начало работы с Nios II»
(Здесь)
14.03.2011 «SOPC Builder. Ядро контроллера SDRAM»
(Здесь)
05.03.2011 «Процессор Nios II Настольная книга программиста. Обработка исключений»
(Здесь)
14.02.2011 «Процессор Nios II Настольная книга программиста. Разработка драйверов устройств для слоя аппаратной абстракции (HAL)»
(Здесь)
09.02.2011 «SOPC Builder. Ядро PIO»
(Здесь)
04.02.2011 Появился раздел «статьи».
Статья «Загрузка программы из EPCS флеш памяти»
(Здесь)
31.01.2011 «SOPC Builder. Ядро интервального таймера»
(Здесь)
26.01.2011 «SOPC Builder. Компоненты»
(Здесь)
17.01.2011 «Альтернативные методы загрузки Nios II»
(Здесь)
14.01.2011 Обновление дизайна сайта.
03.01.2011 Моей библиотеке исполняется год. За 2010 год ресурс посетили 8209 посетителей. К моему удивлению, аудитория сайта не ограничена границами Союза. Техническая документация на русском языке востребована в США, Канаде, Японии, Корее, Израиле, Германии, Франции, Польше, Норвегии, Сербии, Болгарии, Греции, Италии, Нидерландах, Финляндии, Малайзии и Сирии. Я рад такому широкому расселению наших соотечественников. В новом году я продолжу поддерживать свой проект и безвозмездно делиться с вами интересными для меня темами.
С уважением, Егоров Антон.
01.12.2010 «Процессор Nios II Настольная книга программиста. Разработка программ с использованием слоя аппаратной абстракции»
(Здесь)
23.11.2010 «SOPC Builder. Ядро последовательного флеш контроллера EPCS»
(Здесь)
16.11.2010 «SOPC Builder. Система структуры внутренних соединений для интерфейсов с распределением в памяти»
(Здесь)
08.11.2010 «Процессор Nios II Настольная книга программиста. Общее представление о слое аппаратной абстракции»
(Здесь)
25.10.2010 «Процессор Nios II Настольная книга программиста. Начало работы с графической оболочкой»
(Здесь)
12.10.2010 «Поддержка Mentor Graphics ModelSim/QuestaSim»
(Здесь)
05.10.2010 «Симуляция проекта с помощью инструментов EDA»
(Здесь)
22.09.2010 «Учебное пособие по ModelSim SE»
(Здесь)
29.07.2010 «Процессор Nios II Настольная книга. Архитектура процессора»
(Здесь)
21.07.2010 «Отладка в системе с помощью исходников и пробников в системе»
(Здесь)
08.07.2010 «Обновление памяти и констант в системе»
(Здесь)
02.07.2010 «Процессор Nios II Настольная книга. Введение»
(Здесь)
21.06.2010 «Nios II Разработка аппаратных средств»
(Здесь)
08.06.2010 «Отладка в системе с использованием внешних логических анализаторов»
(Здесь)
01.06.2010 «Отладка в системе с использованием встроенного логического анализатора SignalTap II»
(Здесь)
18.05.2010 «Интерфейс с внешней памятью в чипах Cyclone III»
(Здесь)
05.05.2010 «Высокоскоростные диффренциальные интерфейсы в чипах Cyclone III»
(Здесь)
01.05.2010 «Быстрая отладка проекта с помощью SignalProbe»
(Здесь)
18.04.2010 «Средства ввода/вывода в чипах Cyclone III»
(Здесь)
06.04.2010 «Встроенные умножители в чипах Cyclone III»
(Здесь)
04.04.2010 «Блоки памяти в чипах Cyclone III»
(Здесь)
02.04.2010 «Многодорожечные внутренние соединения в чипах Cyclone III»
(Здесь)
12.03.2010 «Логические элементы и блоки массивов логики в чипах Cyclone III»
(Здесь)
04.03.2010 «Экосистема отладки в чипе»
(Здесь)
24.02.2010 «Тактовые сети и PLL в чипах Cyclone III»
(Здесь)
03.02.2010 «Лучшие примеры для временного анализатора Quartus II TimeQuest»
(Здесь)
28.01.2010 «Временной анализатор Quartus II TimeQuest»
(Здесь)
21.01.2010 «Инкрементная компиляция в Quartus II для иерархических и командных проектов»
(Здесь)
05.01.2010 «Вводный курс Quartus II для
пользователей Verilog» (Здесь)
03.01.2010 Запуск первой версии сайта.
naliwator.narod.ru