|
|
  |
nios2 на ките Cyclone II для чайников, простейший проект |
|
|
|
Feb 6 2008, 12:36
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
есть альтервский "Cyclone II FPGA Starter Development Kit", установлен квартус 7.0 с двд от кита (с правленой лицензией, полный, не веб) и все что ставится по умолчанию. есть примеры с цд от кита. cii_starter_nios.v скачал...
уважаемые гуру, может кто поделится простейшим проектом - типа вывести в rs232 "хелло ворд" и помигать светодиодиком?
пока не могу сообразить, как "С" исходник к проекту прицепить... прошу прошения за возможную нечеткость формулировок.
|
|
|
|
|
Feb 6 2008, 13:52
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
Цитата(RHnd @ Feb 6 2008, 16:22)  Нужно установить Nios IDE и создать в нем проект. я слегка криво сформулировал... чтоя делаю: из примеров беру "cii_starter_nios" (брал и то что было изначально, и пересобирал сам), это, как я понял, "железная" часть системы - проц с переферией и памятью. заливаю получившийся .sof в кит - начинают моргать 7-ми сегментные индикаторы. далее я я запускаю niosIIide, создаю проект на базе шаблона с "хелло ворд", указывая system_0.ptf из cii_starter_nios директории - этим, судя по всему, я говорю компилятору о своем железе. смотрю make-файл - все так и есть. делаю билд-алл, все проходит нормально. потом пытаюсь запустить на плате кита: run - run as - nios II hardware, происходит загрузка через USB-бластер с остановкой процессора, но при верификации выдается ошибка по памяти в 400000-40F0DB как я понял, это несовпадение железа (то что в квартусе сделано) с пониманием этого железа у компилятора-линкера... подскажите именно по этой DK-CYCII-2C20N плате, с чего начать, чтоб получилось взаимопонимание у компилятора и квартуса?
|
|
|
|
|
Feb 6 2008, 14:41
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
Цитата(RHnd @ Feb 6 2008, 17:25)  У меня все почти работало из проблем. Что приходит в голову: 1) Проверить свойства библиотеки - где долен размещаться код программы, данные, стек, куча и т.п.. 2) В СОПС проверить, какой переферии соответствуют указанные адреса. Возможно, пересобрать. 3) В system.h проверить соответствие переферия-адреса тому, что указано в сопсе. вопросы такие: работали именно с DK-CYCII-2C20N платой? создавали свой проект с ниосом, или использовали готовый "cii_starter_nios"? а документация на пример из кита "cii_starter_nios" существует, или и так должно быть все понятно?
|
|
|
|
|
Feb 6 2008, 14:56
|
Знающий
   
Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997

|
Цитата(Vasily_A @ Feb 6 2008, 17:41)  вопросы такие: работали именно с DK-CYCII-2C20N платой? создавали свой проект с ниосом, или использовали готовый "cii_starter_nios"? а документация на пример из кита "cii_starter_nios" существует, или и так должно быть все понятно? Да, именно эта плата. Она у меня как основной отладочный стенд.  В основном - свой проект с ниосом. Когда пришла плата, еще не было выложенно на сайте альтеры недостающего файла. Так что пришлось по по образцу сопса создавать свой ниос. Потом, когда файл выложили, вроде запускал и их фирменный пример. Я же тогда, как и сейчас, учился только. Повсюду тыкался, так что уже и не помню, что сразу пошло, а где экспериментировал. Документации, афаир, нету. Это же не ниос-плата. Вот еще подумал - проверьте в проекте unused pins. Попробуйте as input tristated.
|
|
|
|
|
Feb 6 2008, 16:16
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
Цитата(RHnd @ Feb 6 2008, 17:56)  Да, именно эта плата. Она у меня как основной отладочный стенд.  В основном - свой проект с ниосом. Когда пришла плата, еще не было выложенно на сайте альтеры недостающего файла. Так что пришлось по по образцу сопса создавать свой ниос. Потом, когда файл выложили, вроде запускал и их фирменный пример. Я же тогда, как и сейчас, учился только. Повсюду тыкался, так что уже и не помню, что сразу пошло, а где экспериментировал. Документации, афаир, нету. Это же не ниос-плата. Вот еще подумал - проверьте в проекте unused pins. Попробуйте as input tristated. Какие версии софта? у меня квартус 7.0 из кита. может поделишся минимально рабочим проектом с ниосом? ОПА! заработало! прошил в плату тайм-лимитед версию .sof (ту что сам собрал), и пример написал мне "хелло от ниоса2" в окне j-тага. осталось понять как собрать полноценный (не тайм-лимитед) вариант...
|
|
|
|
|
Feb 6 2008, 16:43
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
Цитата(RHnd @ Feb 6 2008, 19:18)  Хм. Вообще, тайм-лимитид зависит от лицензии на ниос и не зависит от сборки. В комплекте к этой плате лицензии на ниос нет, только демонстрационная тайм-лимитид версия. лицензия у меня леченая, но может недолеченная... кто может пояснить, где посмотреть тип лицензии, и что делать, чтоб плата могла работать автономно? задачка у меня такая - брать с кодека сигнал (примерно звукового диапазона), анализировать его, и выдавать результат на ком-порт. естественно, рядом стоящего компа с запущенным квартусом не планируется  изначальная проблема, судя по всему, в кривом примере в ките от альтеры - если самособраный ограниченый .sof стартует с ноликами на индикаторах, то готовый от альтеры рисует там дергающийся мусор.
|
|
|
|
|
Feb 6 2008, 17:16
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 12-10-07
Пользователь №: 31 308

|
Цитата есть альтервский "Cyclone II FPGA Starter Development Kit", установлен квартус 7.0 с двд от кита (с правленой лицензией, полный, не веб) и все что ставится по умолчанию. есть примеры с цд от кита. У меня вот этот пример. Kits\CycloneII_Starter_Kit-v1.0.0\Examples\CII_Starter_demonstrations\CII_Starter_NIOS При заливке проца в плату, семисегментные индикаторы не выставлялись в нули. И некотороые красные и зеленые светодиоды загорались. Скачал с терастика их демонстрашку, они одинаковы но не знаю почему то с терастиком у меня не было проблем. \Kits\DE1_CD_v06\DE1_demonstrations\DE1_NIOS - без проблем процессор залился в плату, на семисегментном индикаторе все нули, ни один из светодиодов не горит. Так понял это начальная установка. Или у кого то по другому? После загружаю программу, сначала посмотри hello led что из примеров nios2ide, поставив там свои базовые адреса. Потом написал программу и помигал светодиодами, вот код на си 4. Включение любых переключателей от SW0 до SW7 включает светодиоды от LEDG0 до LEDG7. #include <stdio.h> #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" char ch; int main() { while (1) { ch =IORD_ALTERA_AVALON_PIO_DATA(0x00481050); IOWR_ALTERA_AVALON_PIO_DATA(0x00481020, ch); } return 0; } вместо этого 0x00481050 поставь свой адрес переключателя а вместо вот этого 0x00481020 - адрес светодиода Адреса брал из первой страницы SOPC Buildera, там где схема соединений нарисована. Если не хочешь цифры писать зайди в system.h и посмотри как обозначаются переключатели и светодиоды. И их впиши вместо цифр. Просто когда писал программу не знал этого, а когда заработало все не захотел в этой программе ничего менять и оставил так.  Вот нашел где я вместо цифрового адреса вставил его обозначение LED_PIO_BASE 5.пересчет светодиодов не виден, быстро выставляются все светодиоды в единицу. #include <stdio.h> #include "system.h" #include "altera_avalon_pio_regs.h" int main () { int i; printf("Hello from Nios II!\n"); for(i=0;i<256;i++) { IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,i); } return 0; } ############################################################# 6.способ создания задержки void delay(void) { volatile int i; i=0; while (i<400000) i++; } ############################################################### 7.пересчет светодиодов уже виден. #include <stdio.h> #include "system.h" #include "altera_avalon_pio_regs.h" int main() {int i; printf("Hello from Nios II!\n"); for(i=0;i<256;i++) { volatile int j; j=0; while (j<400000) j++; IOWR_ALTERA_AVALON_PIO_DATA(0x00481020,i); } return 0; } почему то в седьмом примере обратно поставил цифровой адрес , не помню почему вроде и так и так работает, в блокноте у меня записаны те программы которые заработали.
|
|
|
|
|
Feb 6 2008, 20:19
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
Спасибо! скачал DE1_CD_v06.zip посмотрю что там интересного...
|
|
|
|
|
Feb 7 2008, 13:27
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
некий промежуточный результат:
system_0.ptf и DE1_NIOS.sof из DE1_CD_v06.zip оказались работоспособными, а отличие от альтеровских.
написал простенький пример (ориентируясь на prog_sun):
#include <stdio.h> #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" void delay(void); //------------------------------------------------------- int main() { int i; int n=0; printf("Hello from Nios II!\r\n"); while(1) { for(i=0;i<256;i++) { IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE,i); delay(); printf("n=%d\r\n",n); n++; } } return 0; } //------------------------------------------------------- void delay(void) { volatile int i; i=0; while (i<500000) i++; } //-------------------------------------------------------
откомпилировал, залил - результат порадовал: в ком-порт на скорости 115200 выдается все что ожидается, светодиодики моргают.
закрыл ниос-иде, запитал плату от лабораторного блока, вытащил ЮСБ из платы - работает! ест по 7.5в от блока 420ма.
планы на ближайшее будущее: 1. собрать проц с таймерами, интерфейсом к кодеку, умножителями и, возможно, вга. 2. научиться запускать это все с пзу. 3. написать обработку сигнала - сначала на базе БПФ точек на 32, а далее по результатам на железе.
если у кого есть опыт по пунктам 1 и 2, подскажите более простой путь (если бы не конфа, я с альтеровским китовым софтом так и завяз бы...)
Сообщение отредактировал Vasily_A - Feb 7 2008, 13:31
|
|
|
|
|
Feb 7 2008, 16:09
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957

|
Цитата(RHnd @ Feb 7 2008, 18:36)  1-2) Читайте доки, пробуйте. 3) Расчеты на Ниосе? Нееее.... Лучше сразу пишите для железа и оформляйте как периферийный модуль для ниоса. доки вещь хорошая... в идеале надо получить такой вариант: прошитый в конфигурационное пзу ниос, и задачку для ниоса, по старту системы копируюшуюся из флеша в SRAM или SDRAM и оттуда стартующюю. а чем плох ниос для рассчетов? аппаратные умножители ипользовать он может? если загнать все - код и данные в SRAM, и сконфигурировать проц на "быстрый" вариант - неужели слабая числомолотилка получится? считать в целочисленном варианте, 32 разряда должны позволять. подобная задачка при работе под виндой, написаная на дельфи (но с плавучкой), с визуализацией и по 8-ми каналам сразу давала на П4-2ГГц 8% загрузки... для железа DSP-обработку я наверное пока морально не готов делать, да и оперативно менять сложней. задачка такая - стальная струна, около нее датчик (типа магнитофонной головки), и надо определять, находится струна внутри или снаружи азрозольного факела. соответственно система нужна обучаемая...
|
|
|
|
|
Feb 7 2008, 17:45
|
Знающий
   
Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997

|
Цитата(Vasily_A @ Feb 7 2008, 19:09)  доки вещь хорошая... в идеале надо получить такой вариант: прошитый в конфигурационное пзу ниос, и задачку для ниоса, по старту системы копируюшуюся из флеша в SRAM или SDRAM и оттуда стартующюю. Тут даже думать особо не придется. Там автоматически встраивается загрузчик, копирующий при запуске код из флеш/конф. пзу/где еще он лежит в sram/sdram/где еще он там будет во время исполнения. Все это достаточно просто настраивается в свойствах системной библиотеки. Цитата(Vasily_A @ Feb 7 2008, 19:09)  а чем плох ниос для рассчетов? аппаратные умножители ипользовать он может? если загнать все - код и данные в SRAM, и сконфигурировать проц на "быстрый" вариант - неужели слабая числомолотилка получится? считать в целочисленном варианте, 32 разряда должны позволять.
подобная задачка при работе под виндой, написаная на дельфи (но с плавучкой), с визуализацией и по 8-ми каналам сразу давала на П4-2ГГц 8% загрузки... Да не то чтоб плох. Просто не предназначен. И умножители использовать будет, и загнать все в срам можно, и кеш кода/кеш данных сделать - все равно не то. Если собираетесь писать на C, то лучше сразу брать DSP контроллер. А если хотите быстро/сильно/веселей и взяли FPGA, то и использовать нужно именно ее ресурсы, а не встраиваемого контроллера. Хотя, попробуйте - может, под конкретное требуемое быстродействие и влезет. Где-то на форуме обсуждалась применимость ниоса. И, в целом, пришли к выводу, что его основная задача - координировать между собой самописную переферию. Плюс, ее тестировать. Плюс, реализоывать некоторые вещи, которые в виде FSM слишком тяжко делать. Например, Ethernet. Следует отметить, что это все - сугубо мое дилетантское мнение. Сейчас придут гуру и все расскажут.  Цитата(Vasily_A @ Feb 7 2008, 19:09)  для железа DSP-обработку я наверное пока морально не готов делать, да и оперативно менять сложней. задачка такая - стальная струна, около нее датчик (типа магнитофонной головки), и надо определять, находится струна внутри или снаружи азрозольного факела. соответственно система нужна обучаемая... Да там не сильно сложно, главное начать. По поводу оперативной замены и задачи - я понятия не имею, что есть азрозольный факел, но, похоже, Вы хотите получить некоторый адаптивный алгоритм идентификации и даже, возможно, управления (струну будете дергать?). Правильное решение таких проектов, на сколько я знаю, начинается либо с моделирования в том же MatLab, либо с написания работающего алгоритма для компа (С++, дельфи). На сколько я понял, алгоритм на дельфи уже реализован, все отлажено? Тогда что Вы собираетесь оперативно менять по ходу аппаратной реализации?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|