Корзина

0 Товары - 0.00 RUB
В корзину

Курсы Валют

Курсы Валют  Дата ЦБ
Нал.USD
23.11 59.01
Нал.EUR
23.11 69.40
Нал.CNY
23.11 89.18

Оплата

visa

Реклама

Блог

Процессор Nios II для VE-EP4CE10E.

Весомым конкурентным преимуществом 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. 

23b969c087b876bfe256895a76e799e8.jpg

В строку поиска вводим ram, находим пункт On-Chip Memory (RAM or ROM), выбираем его двойным кликом.

b95e0043ffe9cfccfc456ba4934c3e53.jpg

В окне настройки памяти изменяем пункт Total memory size c 4096 на 8192 байт. Пункт Enable non-default initialization file оставляем не выбранным. В принципе если у Вас есть готовая прошивка для Nios II вы можете инициализировать память на этом этапе, но если вы хотите иметь возможность отладки (а мы хотим такую возможность), нужно оставить память не инициализированной. Далее добавляем параллельный интерфейс, алгоритм точно такой-же: в поле поиска вводим pio.

f373a988149519c9fb02cfa50e019b01.jpg

Выбираем ширину порта 32 бит- Width (1-32 bits): 32. Направление выбираем Output. Для экспериментов нам хватит. Ну и напоследок добавляем сам процессор:

13c2a032c5d9c6c34c2b4204c0fe92c8.jpg

Версию процессора выберем самую простую Nios II/e. Далее настраиваем соединение наших блоков:

c256d46ca2f3ebb0193bafe102e1de43.jpg

 Все блоки необходимо объединить согласно схеме. В настройках процессора Nios II (Classic) Processor необходимо выбрать местоположение векторов сброса и исключений. В качестве местоположения выбираем нашу набортную память onchip_memory2_0.s1. Далее приступаем к генерации нашего Soft-микропроцессора:

11a360519fabc4997df2a779c61aaddf.jpg

 В качестве языка синтеза и симуляции выбираем Verilog и жмем Generate. После чего наш проект сохраняется:

1177eb6ecd2c18978fca1f2d5235cc6e.jpg

 И генерируется:

bca8f198ad58bc82634bb59f462510f3.jpg

 Далее добавляем созданный нами soft-процессор- nios_cpu.qsys, а также известные уже нам модули hvsync_ex.v и pic_gen.v.

eea8f67021c094ef992b3e5b4c9a4885.jpg

Как в проекте Частотомер с VGA выходом добавлем синтезатор частоты и модуль встроенной памяти для хранения изображения цифр. Создаем схему с нашим процессором и модулем вывода VGA изображения:

58ee4023fb08487e07430f97bb2368e5.jpg

 Пришло время создать программу для нашего процессора! Для этого в меню Пуск выбираем Nios II Software Build Tools for Eclipse и создаем новый проект- New->Nios II Application and BSP from Template:

10a4f5f600cc2bac6a89d617ec999795.jpg

 В настройках выбираем SOPS Info файл из нашего проекта и выбираем создание пустого проекта (Blank Project):

9beff49ad40a2da773c835959cf63e4e.jpg

 Создадим файл main.c со следующим содержимым:

C++ Code:
  1. /*
  2. /*
  3.  * main.c
  4.  *
  5.  * Created on: 19 февр. 2016 г.
  6.  * Author: Visuale
  7.  */
  8. #include <stdio.h>
  9. #include "system.h"
  10. #include "altera_avalon_pio_regs.h"
  11.  
  12. //Структура для преобразования int to BCD
  13. typedef struct
  14. {
  15. char value[8];
  16. } BCD_Number;
  17.  
  18. //Функция преобразования int to BCD
  19. BCD_Number bin2bcd(int bin_number)
  20. {
  21. BCD_Number bcd_number;
  22. int i;
  23.  
  24. for(i = 0; i < sizeof(bcd_number.value); i++)
  25. {
  26. bcd_number.value[i] = bin_number % 10;
  27. bin_number /= 10;
  28. }
  29.  
  30. return bcd_number;
  31. }
  32.  
  33. //Главная функция
  34. int main ()
  35. {
  36. BCD_Number bcd_number;
  37. unsigned long port;
  38. unsigned int cnt=1;
  39. int i;
  40.  
  41. while(1) //Бесконечный цикл
  42. {
  43. IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, port); //Записываем BCD число в порт
  44. for (i=0; i<(ALT_CPU_CPU_FREQ/5000); i++); //Задержка
  45.  
  46. cnt = (cnt >= 0xFFFF) ? 1u : (cnt+1); //Счетчик
  47. bcd_number=bin2bcd(cnt); //Преобразуем в BCd и собираем обратно в 32 битное BCD представление
  48. port = bcd_number.value[7]<<28 | bcd_number.value[6]<<24 |
  49. bcd_number.value[5]<<20 | bcd_number.value[4]<<16 |
  50. bcd_number.value[3]<<12 | bcd_number.value[2]<<8 |
  51. bcd_number.value[1]<<4 | bcd_number.value[0];
  52. }
  53. return 0;
  54. }
  55.  

В принципе тут все просто: счетчик cnt считает от 1 до 65535, далее мы его преобразуем в BCD вид, и выводим в порт нашего процессора. Далее правой клавишей мыши на проекте nios_first_bsp [nios_cpu] выбираем пунк Nios II->Generate BSP:

8bdb97330db1485189d9bf99e1b93097.jpg

 На проекте nios_first выбираем Build Project и если мы хотим инициализировать нашу память, то выбираем Make targets->Build:

9c68796647d770b8d588be4b49ca140f.jpg

Осталось последнее, настроить отладку. Синтезируем прошивку ПЛИС. Прошиваем. Если инициализируем нашу память On-Chip Memory (RAM or ROM) *.hex файлом, то на мониторе увидим цифры нашего счетчика. Но мы собрались настроить отладку, приступим. Правой клавишей мыши по проекту nios_first и выбираем Debug As->Debug Gonfigurations. В появившемся окне делаем двойной клик левой клавишей мыши на пункте Nios II Hardware появится новая конфигурация дебагера. В списке Project Name выбираем наш проект nios_first:

0a8f410631f4df17fc33a0512741f300.jpg

На вкладке Target Connection выбираем Refresh Connections:

bb209e34741434b6d9fc7f9b91fabec0.jpg

Нажимаем кнопку Debug, получаем предупреждение о переходе к виду eclipse в режиме отладки:

cce2959e4f7e9ca5efe2ffd17cda30a2.jpg

Нажимаем Yes и переходим в режим отладки нашего приложения:

71949983277555c853be2c52fcda1cd2.jpg

Поздравляю! Мы создали свой soft-процессор. Ну и по традиции видео работы и исходные файлы:

Исходные файлы проекта Nios II: nios_II.zip

Перевод

Вход

Или классический вход:

Время

Карта сайта Визуальная электроника