|
NIOS для начинающих |
|
|
43 страниц
1 2 3 > »
|
 |
Ответов
(1 - 99)
|
Oct 12 2009, 18:39
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 12-10-09
Пользователь №: 52 894

|
Цитата(Full41 @ Oct 12 2009, 22:00)  Если хочешь могу скинуть ссылку на сайт!=)) Спрашиваешь!
Сообщение отредактировал AlexBel - Oct 12 2009, 18:40
|
|
|
|
|
Oct 12 2009, 19:22
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 12-10-09
Пользователь №: 52 894

|
Цитата(Full41 @ Oct 12 2009, 22:46)  У тебя проблемы с ящиком не чего не отправляется!! если напишешь почту, то скину туда alex (собака) speccyland.net
|
|
|
|
|
Oct 12 2009, 20:09
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 12-10-09
Пользователь №: 52 894

|
Цитата(Full41 @ Oct 12 2009, 23:28)  Все отправил Все получил, спасибо, буду изучать!
Сообщение отредактировал AlexBel - Oct 12 2009, 20:09
|
|
|
|
|
Oct 13 2009, 04:50
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(AlexBel @ Oct 12 2009, 21:47)  Имею девборду Altera DE1 (Cyclone II 2C20). Хотел бы своими руками "пошшупать" NIOS. Где-нибудь можно найти что-то типа "курса для начинающих", желательно с использованием DE1? Чтобы и теория была и практика и доступные пониманию новичков примеры. Конечная цель - создание "железа" с SDRAM и видеоконтроллером и разработка софта под него. demosondemand.com Или ниписать в Гамму-выборг и поросить диск с этими презентациями... А у меня на сайте есть пара статей... Но они еще про самый первый Ниос. И еще сохранилось кое-что, что я переводил по Ниосу на сайте Эфо. Ссылка у меня на сайте есть. Удачи!
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Oct 13 2009, 16:31
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 12-10-09
Пользователь №: 52 894

|
Цитата(Stewart Little @ Oct 13 2009, 17:01)  Полезный ресурс для начинающих - http://www.nioswiki.com/Содержит кучу примеров, в т.ч. SDRAM и пр. Спасибо!
|
|
|
|
|
Oct 27 2009, 11:28
|
Местный
  
Группа: Свой
Сообщений: 399
Регистрация: 1-01-06
Из: Волгоград
Пользователь №: 12 763

|
AlexBelЛеш, я запустил ниос пройдя "Nios II Hardware Development Tutorial" - http://www.altera.com/literature/tt/tt_nio...re_tutorial.pdfПросто по порядку делай что там написано и все ) у меня кита нет, потому запускал на своей макетке под EP2C8. все получается, правда пришлось поиграться с оптимизирующими галочками, поскольку пример без модификаций расчитан на EP2C20, а у С8 меньше onchip RAM. использовал программатор Игоря - http://www.speccyland.net/forum/viewtopic.php?f=13&t=9Nios II IDE нормально с ним работает, включая пошаговую отладку программы в железе.
|
|
|
|
|
Nov 17 2009, 14:06
|

Лентяй
     
Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843

|
Цитата(Full41 @ Nov 17 2009, 16:58)  То есть самому написать мастер шину!!? Не "мастер шину", а "мастер на шину". Шина - она стандартная (Авалон), на ней бывают мастеры и слейвы. Мастер - это тот, кто может инициировать транзакцию (т.е. передачу данных). Стандартные мастеры - это, к примеру, ядро NiosII, или блок DMA. Слейв - тот, кто поддерживает транзакцию (т.е. принимает или передает даные в соответствии с поступившим ему запросом). Ваши rs232, USB и тд. - это слейвы. К ним должен кто-то обращаться (во-первых - для того, чтобы сконфигурировать, или задать режим; во-вторых - записать или считать информацию). Этот "кто-то" и есть мастер.
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Dec 9 2009, 17:21
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Уважаемые гуру, подскажите - как "объяснить" NIOS IDE 9.1, что после компиляции проекта мне нужно обновлять onchip_memory.hex? А то отчитывается об успешной компиляции, пишет- сколько байт ушло на код, генерит .elf, .objdump и на этом всё. В SOPC-builder'е кроме onchip_memory никакой другой памяти нет, векторы Reset, Exception и Break настроены на onchip_memory. При тех же самых действиях NIOS IDE 7.2 генерировал .hex без вопросов, а здесь сходу не получилось. Ну и заодно - сходу не нашёл привычной вкладки настроек "program never exits", "small C library" и т.п.. Где искать?
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Dec 9 2009, 19:59
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984

|
Евгений НиколаевВ 9.1 в этом плане сильно всё поменялось! Теперь для генерации файлов инициализации памяти надо правой кнопкой клацнуть по названию проекта в project explorer в выпавшем окне Make targets->Build.. появится окно Make Targets в котором должен быть пункт mem_init_install. Стать на этот пункт и нажать в этом же окне кнопку Build. После этого ниос сгенерит новые файлы образов памяти. Если этого пункта нет, то нажать кнопку Add и в появившемся окне Create a new Make terget создать такой пункт. В поле Target Name ввести mem_init_install, в поле Make Target тоже mem_init_install остальное по умолчанию. После этого можно будет генерить образы. Редактировать параметры компиляции надо в BSP Editor. Чтобы его вызвать в project explorer правой кнопкой клацнуть по названию проекта системной библиотеки и в выпавшем окне Nios II->BSP Editor...
Причина редактирования: Излишнее цитирование
|
|
|
|
|
Dec 10 2009, 04:37
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
inco, спасибо! Сегодня попробую. Честно говоря, считал, что перейду с 7.2 на 9.1 за один день, но 9-ый, в отличие от 7-го, не интуитивно понятен. --- Работает! Кстати, переход начал поэтапно - сначала поставил 9-ый квартус, но пользовался 7-ым NIOS IDE - на первый взгляд всё нормально, с портов читает, выводит, но почему-то перестали работать прерывания от внутреннего обработчика. Сейчас с 9-ым всё заработало. Видимо, альтеровцы частично что-то сменили внутри (кривые руки разработчика - тоже не исключаются, конечно  ).
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Dec 12 2009, 18:05
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 12-10-09
Пользователь №: 52 894

|
Reanimator++Рома, спасибо, извини, что не отреагировал сразу, но причину знаешь  Обязательно это попробую, как закончу проект...
Причина редактирования: Излишнее цитирование
|
|
|
|
|
Dec 20 2009, 02:30
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Подскажите. Есть система, картинка во вложении. MemoryWraper - это мой собственный контроллер DDR. Он включает в себя собственно контроллер доступа к DDR памяти, контроллер LCD (800*480) и что-то типа слабенького акселератора для видео (может отрисовывать точки, линии, заполненные прямоугольные области и символы с возможностью их масштабирования), ну и конечно арбитраж для совместного доступа. Соответственно, видеопамять и память, доступная для nios вся расположена в DDR, только в разных областях. Работает это все на 100МГц, а nios на 50. Теперь собственно сама проблема. Собираю NIOS без кэша данных и с минимальным кэшем инструкций 512байт. В IDE для в свойствах системной библиотеки указываю для всего использовать только MemoryWraper. Программа (freertos с двумя примитивными task) не работает, причем по дебугеру сбоит в разных местах. Если выставить в настройках для .text и .rodata использовать MemoryWraper, а для всего остального onchip память tigtly_data - работает. Подскажите в каком направлении копать. То ли мой контроллер памяти тупит, но тогда, по идее он должен сбоить и на инструкциях (ведь при маленьком кэше инструкций выборки из памяти обязаны быть), либо что-то еще. P.S. Если добавить кэш данных 1к и кэш инструкций довожу до 4к, при этом в кэш данных выставляю line size 32 байта, то работает при любом размещении. Если 4 байта line size - не работает, сбоит.
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 20 2009, 03:38
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(vadimuzzz @ Dec 20 2009, 14:23)  похоже, сбоит запись в память(MemoryWraper), тогда понятно, почему не сбоит на инструкциях(там только чтение). Попробую это выяснить. Смущает то что при старте программа из флеша бутлоадером записывается в DDR. А есть ли какие-нибудь хитрые тесты памяти? Дело в том, что я писал прогу из 3 циклов, в первом цикле писала в DDR,во втором считывала, модифицировала и обратно записывала. В третьем проверялось содержимое. Затем опять на первый цикл. Работает без сбоев. Кэш обходил командами IOWR_32DIRECT и IORD_32DIRECT. Может нужны какие-то более жесткие тесты? PS. Сейчас опять добавил подобный тест в одну из task. Каждую секунду выполняется один из выше описанных циклов. В конце 3-й секунды проверяется содержимое. Код void FirstFill(unsigned char fl) { unsigned char i; if(fl){for(i=0;i<64;i++)IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4, i);} else {for(i=0;i<64;i++)IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4, 50000000-i);} } void SecondTune(void) { unsigned char i; int tmp; for(i=0;i<64;i++) { tmp=IORD_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4); tmp*=10; IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4, tmp); } } unsigned char CheckMem(unsigned char fl) { unsigned char i,res=0; int tmp; for(i=0;i<64;i++) { tmp=IORD_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4); if(tmp!=((fl?i:(50000000-i))*10))res=1; } return res; }
В таске делаю это:
switch(state) { case 0: FirstFill(fl);break; case 1: SecondTune();break; case 2: if(CheckMem(fl)) { LCDSetPrintPoint(120,70);LCDPutChar(ch+'B'); LCDSetPrintPoint(132,70);LCDPutChar(ch+'A'); LCDSetPrintPoint(144,70);LCDPutChar(ch+'D'); LCDSetPrintPoint(156,70);LCDPutChar(ch+'!'); LCDSetPrintPoint(168,70);LCDPutChar(ch+'!'); }else { LCDSetPrintPoint(120,120);LCDPutChar(ch+'O'); LCDSetPrintPoint(132,120);LCDPutChar(ch+'K'); LCDSetPrintPoint(144,120);LCDPutChar(ch+'!'); LCDSetPrintPoint(156,120);LCDPutChar(ch+'!'); LCDSetPrintPoint(168,120);LCDPutChar(ch+'!'); } break; } state++; if(state==3){state=0;fl=!fl;} Сбоев нет! Хоть бы знать, куда копать. При этом у меня сейчас все сегменты установлены на MemoryWraper и есть дата кэш, описанный выше.
|
|
|
|
|
Dec 21 2009, 08:48
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Переделал тест. Теперь он пишет сперва 5 ячеек подряд, затем 5 через 1, 5 через 2 и так далее до промежутка между ячейками равного 10 (получается две посылки подряд будут обращаться к одному банку в DDR но в разные блоки burst, она у меня 16 битная с burstlength=4, на один burst ложатся два int). Промежуточные ячейки, как фон, предварительно тоже заполняю. Проверял и с возрастающими адресами и с понижающимися, как в коде: CODE void FirstFill(unsigned char fl) { unsigned int i,j; unsigned int addr=0; for(i=0;i<300;i++)IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4, (fl?0xa5a55a5a:0x5a5aa5a5)); // for(j=1;j<11;j++) // { // for(i=1;i<=5;i++) for(j=10;j>0;j--) { for(i=5;i>0;i--) { addr=((j-1)*j)/2*5+j*i; IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000,addr*4, (fl?addr:(50000000-addr))); } } //********* void SecondTune(void) { unsigned int i,tmp; for(i=0;i<300;i++) { tmp=IORD_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4); tmp^=0xffffffff; IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4, tmp); } } //*********** unsigned char CheckMem(unsigned char fl) { unsigned int i=1,j=1,res=0,tmp; unsigned int k; for(k=0;k<300;k++) { tmp=IORD_32DIRECT(CPU2EXTMEM_BASE+0x10000, k*4); if((((j-1)*j)/2*5+j*i)==k && j<11) { if(tmp!=((fl?k:(50000000-k))^0xffffffff)) res=1; if(i==5){i=1;j++;} else i++; } else { if(tmp!=((fl?0xa5a55a5a:0x5a5aa5a5)^0xffffffff))res=1; } } return res; } В task блок проверки тот же. Работает, собака, как часы. Что еще можно придумать? Не может же Nios сам как-то подругому обращаться? Просто с родной (как советовал vadimuzzz) алтеровскй тестер небольшой головняк прикрутить для проверки. СтОит ли? Может это ClockCrossBridge как-то у меня не правильно настроен, в описании мутная формула дана для минимальной длины slave-to-master, у меня он 64, а master-to-slave = 8. Можно, конечно, забить. Такой вариант системы, как сейчас работает. Но как начну дальше писать уже нормальную прогу с несколькими task да как опять вылезет. Страшно.
Причина редактирования: Оформление кода
|
|
|
|
|
Dec 21 2009, 09:28
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Kuzmi4
По поводу сигналтаба идея хорошая, но боюсь что будет: " - Петька, приборы? -40 -Что 40?.....". Всмысле как я буду отлавливать неудачные записи, не представляю. Нужно подумать. По второму. По поводу гейт-левел понял. Но не понял причем здесь влезет или не влезет во внутреннюю память. Не могли бы разъяснить для тех кто в прочном корпусе  . Кстати по поводу такой симуляции. Я под конец написания своего контроллера пробовал такую симуляцию. Она почему-то не пошла. Т.е. вообще все молчало. Забил. Если все-таки к ней вернуться, где почитать, как проводить симуляцию вместе с ниосом. Что-бы уже наверняка. При этом мне как раз и нужно, чтобы симулировалось с внешней памятью. С внутренней и так работает. А кто-нибудь пробовал подобную систему, но что-бы все сегменты распологались строго в DDR? Может это все-таки сомо ядро ниоса тупит при большой и изменяющейся латентностью чтения/записи данных. (всегда есть надежда что не сам виноват  ).
Причина редактирования: Избыточное цитирование
|
|
|
|
|
Dec 21 2009, 10:12
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
Разъясняю - пишем прогу для ниоса2, компилим, располагаем её в on-chip памяти, далее собираем всё системку на Modelsim-е, инициализируя вашу on-chip тем что выдал IDE (там только по-моему нужно будет ELF в HEX перегнать вроде), цепляем модельки ДДР2(ищем на сайте производителя - точно должны дыть) и LCD (если есть, тут думаю всё сложней чем поиск на сайте производителя будет), выводим интересующие вайры, делаем нужные стробы и смотрим что к чему.. Но это как то долго и интересно, когда железо в разработке или заказчику нужна функциональная модель того, что есть в железе. Да и судя по-всему для вас это всё будет проблемно по началу и займёт много времемни. Думаю что всё же проще вам прицепить сигнал-таб и просто, для начала, посмотреть транзакции - как они у вас вообсче проходят в зависимости от ваших экспериментов с программой и ниосом2, ну а потом уже и стробы понапридумывать для тригирования событий. Ну вот как то так..
|
|
|
|
|
Dec 22 2009, 03:58
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(vadimuzzz @ Dec 21 2009, 20:40)  кстати, как-то упустили из виду. а какого рода сбой? повисает прога? и акселератор имеет прямой доступ к памяти? Убрал data cache. Проверил - сбои непредсказуемые. Поясняю. В моей main перед уходом в sheduler имеются несколько строк кода. В зависимости от того, куда я ставлю breakpoint, а затем после остановки пускаю дальше прога вылетает в разные места. Иногда летит в обработку exception. причем подлавливал в регистре exception 0x14,0x0c и 0x1c (Illegal Instruction, Trap Instruction и Misaligned Destination Address). В другом месте поставлю брейкпоинт или делаю пошагово может дойти до цикла for(;;); и висеть, при этом ipending и ienable висят в 0х01 (то есть должно идти в прерывание, но не идет). Была ситуация, что крутится в цикле проверки пришедшего прерывания (ipending при этом равен 0x01, а переменная active - запомненное значение ipending в файле alt_irq_handler.c). Получается, что все-таки глюк с памятью скорее всего  . Одно радует - если повторяю одни и теже действия с breakpoint вроде есть повторяемость. Значит можно будет сигналтаб (как советует Kuzmi4) на это как-нибудь настроить. Сейчас буду читать про связку сигналтаб+ниос, где-то видел апликуху или раздел. 2 vadimuzzz .Акселератор имеет прямой доступ. У меня контроллер MemoryWraper включает себя акселератор, контроллер вывода на LCD и контроллер доступа nios к памяти. Соответственно внутри реализован арбитр, который разруливает между ними. При этом половину полосы пропускания отводится для вывода на экран (подготовку fifo строки), оставшаяся половина делится между акселератором, чтением и записью в память поровну. Просто для чтения и записи один интерфейс с nios, для акселератора отдельный. PS. Если вообще не ставить breakpoint, то залетаю до for(;;); и весит, при этом ipending и ienable равны 0х01, status=0, exception=0. Делаю перестановки строк, опять запускаю без брейкпоинтов - зависает на бесконечном цикле определения прерывания (active=0;)Очень странно. А можно ли будет одновременно работать и в дебугере niosa и в signaltab?
|
|
|
|
|
Jan 24 2010, 07:28
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Не знаю точно, сюда нужно постить, или в раздел gcc микроконтроллеров. Поиском похожие темы не нашел. Есть такие структуры, описывающие подпись для кнопок меню (пока только текст, без иконок) Код typedef struct {unsigned char length;char * arr;}lable_line_st; typedef struct {unsigned char lines;const lable_line_st* strinrs;}lable_text_st; typedef struct {lable_text_st text;}lable_st; Т.е. при выводе на экран сразу могу определить сколько строк в подписи и сколько в каждой строке символов для выравнивания по центру. Необходимо каким-то образом красиво создавать подписи на этапе компиляции. Ничего не смог придумать лучше, чем: Код //в заголовочном файле: #define STRINGLINE(x) {(sizeof(x)-1),x} // в тексте const lable_line_st Button1_text[]={STRINGLINE("line 0,"),STRINGLINE("line 2"),STRINGLINE("and line 3")}; const lable_st Button1={{3, &Button1_text[0] }}; хотелось бы, чтобы подпись можно было бы создавать как нибудь наглядней , что-то типа Код const lable_st Button1{{CREATETEXT("line0,","line1","and line 3" )}} Реально ли это как-нибудь сделать? Пробовал делать структуру с переменной длиной массива typedef struct {unsigned char lines;const lable_line_st strinrs[];}lable_text_st; Но компилятор ругается, т.к. эта структура является вложенной в другую структуру. PS. Работаю в nios IDE, соответственно компилятор gcc, в свойствах библиотеки не стоит флажок "support C++" ,
|
|
|
|
|
Feb 10 2010, 10:07
|
Частый гость
 
Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167

|
Здравствуйте. Начинаю разбираться с ниосом, при этом возникло множество вопросов, кита к сожалению нет. Документации очень много, где конкретно искать непонятно плюс ко всему все рассмотренные мной описания сделаны под предыдущие версии, а в 9.1 много чего по другому. Ответьте пожалуйста на следующие вопросы: Я сделал проект на циклоне3 в квартусе состоящий из одного NIOS и PIO порта вывода (+JTAG UART). В NIOS IDE создал проект "Hello World small" на основе квартусовского. 1) В main вбил строчку IOWR(0x00000000, 0, 0xffffffff); - запись в порт "1" с учетом того, что в SOPC Builder pio занимает адресное пространство с 0х00000000 верно или нет? Скомпилилось успешно, elf создался. 2) Как зашить данный проект и откуда (квартус или NIOS IDE)? Компилирую в квартусе - в симуляторе выход не меняется. В NIOS IDE запуск через "NIOS hardware" ничего не дает. Подцеплял плату подключенную через USB-Blaster, но не к JTAG (в плате используется AS загрузка), сброс видно что работает, но в списках соединений ничего не появляется. Будет ли работать при подключении к JTAG или надо еще что-нибудь сделать? 3) В каком именно документе находится описание использования периферии NIOS? 4) JTAG при конфигурировании NIOSа добавлять нужно для программирования? Или он по дефолту есть? "JTAG UART" это замена штатному или основной?
|
|
|
|
|
Feb 11 2010, 05:43
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(Serg_Sm @ Feb 10 2010, 21:07)  Документации очень много, где конкретно искать непонятно плюс ко всему все рассмотренные мной описания сделаны под предыдущие версии, Основное по NIOS - на "родине" http://www.altera.com/literature/lit-nio2.jsp (Processor Reference Handbook, Software Developer's Handbook, ну и остальные по мере надобности), по самому Quartus - естественно первым делом его handbook ( http://www.altera.com/literature/hb/qts/qu...i_handbook.pdf). Книги эти большие, но там много воды, нужно научиться их читать, пропуская введения и т.п. перед каждым разделом. 1) Да. 2) Не понял как у Вас разведена на плате схема программирования. Возможны варианты с разведенными отдельно разъемами и JTAG и AS как на Figure 10–28. в книге "Cyclone III Device Handbook, Volume 1", на самом деле достаточно развести как "Figure 10–29. Programming Serial Configuration Devices In-System Using the JTAG Interface". У Вас вообще jtag выведен? 3) http://www.altera.com/literature/hb/nios2/n2cpu_nii5v3.pdf4) Нет, добавлять ничего не обязательно. JTAG UART это отдельная фича (сам не пользовался  ), с помощью которой Вы можете обмениваться с консолью NIOS в процессе отладки, как если бы Вы вставили в SOPC модуль UART, развели его на плате, подключили к COM-порту и работали, например, в Гипертерминале. Плюс у этой фичи, что на плате разводить ничего не надо, минус - что работать с таким UART можно только (на сколько я знаю) из консоли NIOS IDE.
|
|
|
|
|
Feb 22 2010, 20:45
|
Группа: Участник
Сообщений: 3
Регистрация: 26-11-09
Пользователь №: 53 890

|
Доброго времени суток. Я начал работать в SOPC Builder (Q8.1) и столкнулся с проблемой: мне необходимо создать свой условно говоря интерфейсик, для этого я хочу создать в SOPC свой компонент который будет состоять только из сигналов входов и выходов, но, создав такой компонент он не размещается в системе, а точнее он не попадает в адресное пространство. Кто-то может подсказать что-то? Как правильно создать компонент в сопк баилдер состоящий из портов входов и выходов?
|
|
|
|
|
Mar 9 2010, 10:22
|

Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287

|
Здравствуйте. Я сделал проектик, с использованием niosa, который как то преобразует входные данные в выходные. Сам проект работает нормально, если программу хранить во внутренней памяти процессора. Но при попытки использования внешней флэшки застопорился. Делаю все, как написано здесь , и появляется ошибка: No CFI table found at address 0x01000000. Может что посоветуете?
|
|
|
|
|
Mar 9 2010, 10:44
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(styuf @ Mar 9 2010, 16:22)  Но при попытки использования внешней флэшки застопорился. ... и появляется ошибка: No CFI table found at address 0x01000000. Может что посоветуете? у меня слабо развит дар телепатии, поэтому вопросы: -что за плата(кит или своя) -что за проект в квартусе(самодельный или из примеров) -что нужно сделать с флешкой (только исполнять программу или еще и ПЛИС конфигурировать) -картинку из SOPC-билдера -читали ли эти темы: http://electronix.ru/forum/index.php?showtopic=64687 http://electronix.ru/forum/index.php?showtopic=70900указанная ошибка появляется когда проц не видит флешку по указанному адресу, причин м.б. несколько - корявая распиновка, не тот адрес
|
|
|
|
|
Mar 12 2010, 09:23
|

Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287

|
Жалко, что плохо развит По порядку: - плата стандартная альтеровская - Nios II Development board для EP2C35F672C6N такого циклона второго; - проект самодельный; - только программку хранить; - картинка из SOPC (прикрепленна); - читал, но видимо до проблем, разобранных там еще не добрался, по причине, обнаруженной пол часа назад: оказалась, что в SOPCе указывал не ту память. Отодрал наклейку с корпуса памяти и обнаружил S29GL128M10TFIR1. И думаю все бы ничего, щас все исправлю, но в инете не нашел ни одного описания именно этой памяти, даже на сайте изготовителя, а без описания не знаю как задавать в сопсе описание оной памяти. Никто не работал с такой?
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 14 2010, 14:37
|
Группа: Участник
Сообщений: 3
Регистрация: 26-11-09
Пользователь №: 53 890

|
Кто-то может подсказать как можно создать блок, дающий на вывод тактирование в 1кГц, у меня циклон первый, там 50МГц тактовая, счетчик такую не дает частоту, можно конечно в ниосе написать мелкую программку, которая будет тактировать в 1кГц, но возможно есть проще способ???
|
|
|
|
|
Mar 15 2010, 01:03
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(S_Lee @ Mar 15 2010, 00:37)  Кто-то может подсказать как можно создать блок, дающий на вывод тактирование в 1кГц, у меня циклон первый, там 50МГц тактовая, счетчик такую не дает частоту, можно конечно в ниосе написать мелкую программку, которая будет тактировать в 1кГц, но возможно есть проще способ??? У счетчика есть опция timeout_pulse. Цитата When this option is on, the core outputs a signal timeout_pulse. This signal pulses high for one clock cycle whenever the timer reaches zero. Я им, правда, не пользовался, но не вижу причин, почему он Вам не подходит. 50МГц/1кГц=50000 вполне реализуемое число на 32-х разрядном счетчике (требуется всего 16 разрядов).
|
|
|
|
|
Mar 20 2010, 09:40
|
Группа: Участник
Сообщений: 3
Регистрация: 26-11-09
Пользователь №: 53 890

|
как счетчик может дать 1КГц из 50МГц??? 16ти разрядный допустим -> (50 000 000 / (2^16=65536))=762 Гц
|
|
|
|
|
Mar 22 2010, 08:10
|

Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287

|
Цитата во флеш-программере, пожалуй, ничем Эти параметры по умолчанию выставляют разное смещение адреса. Я так понимаю, именно начиная с величины смещения и начинается писаться прошивка для альтеры (То бишь не с нулевого). Судя по всему у циклона есть контроллер, которые работает с флэшками и при включении питания тянет прошивку из определенного места. А как конфигурировать контроллер мне на глаза не попадалось( Цитата по первому вопросу: ниос тоже висит или только программа? на flash-programmer откликается? Хм, я даже и не знаю. Посмотрю, тогда скажу. У меня подозрения на переполнение чего-нибудь (памяти). Так как программа работает ровно какое-то время в активном режиме (при нажатой кнопке). В пассивном режиме, когда ничего в логике альтеры не происходит, оно может стоять хоть сколько.
Сообщение отредактировал styuf - Mar 22 2010, 08:35
|
|
|
|
|
Mar 22 2010, 08:26
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(styuf @ Mar 22 2010, 14:10)  Судя по всему у циклона есть контроллер, которые работает с флэшками и при включении питания тянет прошивку из определенного места. не только Цитата А как конфигурировать контроллер мне на глаза не попадалось( http://www.altera.com/literature/hb/cyc3/c...e3_handbook.pdf секция 9
|
|
|
|
|
Apr 13 2010, 18:17
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Только начал осваивать Nios, поэтому сразу начали возникать вопросы. По мере их возникновения стараюсь по максимуму курить маны, но не всегда получается докопаться до истины. Вот и споткнулся на очередной, наверняка, простейшей фигне, но нигде не смог найти описание или какое-то указание о ней. Итак, имею девбоард Altera DE2-70, QII 8.1 и Nios IDE такой же версии. Собираю простейшую систему: Самый мощный вариант процессора, он-чип память, PIO-вход (подключенный к свичам на плате), PIO-выход (подключенный к светодиодам на плате). Компилю систему, заливаю ее программером (.sof-файл) - он прекрасно подцепляется (появляется сообщение о том, что система имеет такие-то временные ограничения и чере столько-то будет отключена - типа, все окей. Далее в IDE создаю Nios II C/C++ проект (с библиотекой), содержащий в исходнике простейший сишный код (слизан из альтеровского же pdf-ника), адреса, естественно, выставляю те, которые получились у меня: Код #define Switches (volatile char *) 0x0001800 #define LEDs (char *) 0x0001810
void main() { while (1) *LEDs = *Switches; } После этого компилю проект, а далее начинается вопрос (конфигурация хардвары создана). Если я запускаю программу в режиме отладки (Debug as -> ....., бряк стоит на цикле), то при пошаговом выполнении (постоянно жму F5) я вижу что программа прекрасно работает, то есть светодиоды зажигаются/гаснут в зависимости от положения свичей. Однако, если я запускаю проект не в режиме отладки, а просто как (Run as -> ......, бряк при этом снимаю), то программа, такое ощущение, не стартует... Так и не смог найти информацию - почему такое происходит.... То есть, что получается при запуске программы - я в консоли IDE вижу что он программу туда заливает (пишет ОК), верифицирует (пишет ОК), а потом пишет "Leaving target processor paused ". Я так понимаю что после загрузки программы процессор не запущен. В хелпе все вроде бы четко написано (цитата из хелпа по Nios IDE): Цитата When targeting Nios II hardware, the Run As command does the following:
1. Creates a default run/debug configuration for the target board. Note: This step usually completes automatically without user intervention. If it cannot (the most common cause is that you have multiple JTAG download cables installed), the IDE displays an error message, and you must manually set up a run configuration.
2. Builds the project. If the project is not up-to-date, then the IDE builds it first to generate an up-to-date executable file.
3. Establishes communication with the target board, and verifies that the expected SOPC Builder system is configured in the FPGA. If the FPGA is not configured properly, you should repeat the steps to configure the hardware.
4. Downloads the executable file (.elf) to memory on the target board.
5. Instructs the Nios II processor to begin executing the code. Собственно, как выполнить пункт 5 (я так понимаю, именно в этом и затык) нигде не нашел упоминания.......
Причина редактирования: Оформление цитаты. Omen_13
|
|
|
|
|
Apr 14 2010, 00:37
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата То есть, что получается при запуске программы - я в консоли IDE вижу что он программу туда заливает (пишет ОК), верифицирует (пишет ОК), а потом пишет "Leaving target processor paused ". Я так понимаю что после загрузки программы процессор не запущен. это нормальное сообщение, а вот ваша программа вполне может и не работать так, как вы того ожидаете, особенно на NIOS-fast. точно сказать можно только для конкретной системы, но чаще всего это "фокусы" кэша данных. конструкции вида Код *LEDs = *Switches; вообще говоря не предназначены для операций ввода/вывода, хотя можно использовать и их (тогда читайте про операции с кэшем, главным образом про cache bypass). более надежный вариант писать так: Код //эти define`s есть в system.h //#define Switches (volatile char *) 0x0001800 //#define LEDs (char *) 0x0001810 #include "system.h" #include "altera_avalon_pio_regs.h" void main() { while (1) //*LEDs = *Switches; IOWR_ALTERA_AVALON_PIO_DATA(LEDs_base , IOWR_ALTERA_AVALON_PIO_DATA(Switches_base));//вместо LEDs_base и Switches_base подставить то, что в system.h } это будет работать независимо от наличия кэша
|
|
|
|
|
Apr 15 2010, 06:33
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Цитата попробуйте в строке "Additional nios2-download arguments" в диалоговом окне Run, вкладка Main написать --go Не помогло. Пишет следующее: Код Using cable "USB-Blaster [USB-0]", device 1, instance 0x00 Processor is already paused Initializing CPU cache (if present) OK
Downloading 00002000 ( 0%) Downloaded 8KB in 0.1s
Verifying 00002000 ( 0%) Verified OK Starting processor at address 0x00002020 и дальше тишина - никакой реакции на положения свичей. Цитата более надежный вариант писать так: ... это будет работать независимо от наличия кэша На этот код компилятор вообще выдает ошибки: Код #include "system.h" #include "altera_avalon_pio_regs.h" void main() { while (1) IOWR_ALTERA_AVALON_PIO_DATA(0x00011010 , IOWR_ALTERA_AVALON_PIO_DATA(0x00011000)); }
Выхлоп компилятора: - error: `IOWR_ALTERA_AVALON_PIO_DATA' undeclared (first use in this function) test_project main.c line 6; - macro "IOWR_ALTERA_AVALON_PIO_DATA" requires 2 arguments, but only 1 given test_project main.c line 6; Кроме того, еще ряд непонятных моментов образовался. Вчера все работало (пускай и только в режиме отладки, но все же работало). Сегодня - не работает вообще ни в одном из режимов (ни выполнение, ни отладка). Почему? Ведь я не трогал абсолютно ничего... П.С.: Может проще будет выложить сюда проект? П.П.С.: В настройках компилятора отключено использование уменьшенных С-библиотек и всяческих оптимизаций, включена поддержка С++. И еще вопрос: в настройках PIO в SOPC-билдере указываю разрядность 18 бит (именно столько свичей и светодиодов на плате). Однако, при отладке функционируют только 8 свичей и светодиодов. Что не так? Все адреса в SOPC-системе выровнены автоматически, если что.
|
|
|
|
|
Apr 15 2010, 06:49
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
По второй ошибке. Вообще-то тут у уважаемого vadimuzzz опечатка. Нужно в скобках не WR а RD: Код IOWR_ALTERA_AVALON_PIO_DATA(0x00011010 , IORD_ALTERA_AVALON_PIO_DATA(0x00011000)); Еще, лучше явно не писать адреса, а брать имена, данные sopc bilder из system.h, типа Код IOWR_ALTERA_AVALON_PIO_DATA(SWITCH_BASE , IORD_ALTERA_AVALON_PIO_DATA(LEDS_BASE)); Однако, почему у Вас появилась ошибка, что якобы IOWR_... не определена, я затрудняюсь ответить.
|
|
|
|
|
Apr 15 2010, 07:07
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616

|
Цитата(barabek @ Apr 15 2010, 11:04)  По второй ошибке. Вообще-то тут у уважаемого vadimuzzz опечатка. Нужно в скобках не WR а RD: Код IOWR_ALTERA_AVALON_PIO_DATA(0x00011010 , IORD_ALTERA_AVALON_PIO_DATA(0x00011000)); Еще, лучше явно не писать адреса, а брать имена, данные sopc bilder из system.h, типа Код IOWR_ALTERA_AVALON_PIO_DATA(SWITCH_BASE , IORD_ALTERA_AVALON_PIO_DATA(LEDS_BASE)); Однако, почему у Вас появилась ошибка, что якобы IOWR_... не определена, я затрудняюсь ответить. У меня используются заголовки Код #include <stdio.h> #include <stdlib.h> #include "sys/alt_irq.h" #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" #include "sys/alt_sys_init.h" и все макросы находятся С портами общаюсь так Код IOWR_ALTERA_AVALON_PIO_DATA(FLASH_RD_BASE, 1); IOWR_ALTERA_AVALON_PIO_DATA(FLASH_RD_BASE, 0); d_I0 = IORD_ALTERA_AVALON_PIO_DATA(FLASH_DATA_BASE);
Сообщение отредактировал Omen_13 - May 13 2010, 15:45
Причина редактирования: Оформление кода. Omen_13
|
|
|
|
|
Apr 15 2010, 08:21
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
да, это я неудачно скопипастил, правильный код такой: Код IOWR_ALTERA_AVALON_PIO_DATA(SWITCH_BASE , IORD_ALTERA_AVALON_PIO_DATA(LEDS_BASE)); отсюда же и растут ноги ошибки "error: `IOWR_ALTERA_AVALON_PIO_DATA' undeclared (first use in this function) test_project main.c line 6; - macro "IOWR_ALTERA_AVALON_PIO_DATA" requires 2 arguments, but only 1 given test_project main.c line 6;" т.к. IOWR_ALTERA_AVALON_PIO_DATA, который объявлен в altera_avalon_pio_regs.h требует 2 аргумента (адрес, данные), а IORD_ALTERA_AVALON_PIO_DATA, который и должен там был стоять изначально - только адрес покажите ваш system.h и картинку из SOPC-билдера. пины в квартусе правильно разведены, варнингов при компиляции не кидал про ноги? лог компиляции в квартусе тоже давайте на всякий случай.
|
|
|
|
|
Apr 15 2010, 09:09
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Все заработало! Ошибка была в том, что я использовал неправильные адреса Сейчас, как и посоветовали, взял алиасы на них их из system.h (он, как я понимаю, генерится SOPC-билдером, да?) и все заработало. Ключик "--go" тоже заработал (похоже что он и раньше работал, но т.к. я использовал некорректные адреса - то и не видел ничего). Разрядность PIO также оказалась рабочей. В общем, почти все косяки были из-за обращений к некорректным адресам ))) Спасибо за помощь! Пока что полет нормальный - все работает четко. Начинаю втыкать как использовать загрузку с флэшки.
|
|
|
|
|
Apr 15 2010, 13:25
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Что-то аццкий Flash programmer (из IDE) орет на меня (делаю все по доке "Nios II Flash Programmer User Guide"): Код #!/bin/sh # # This file was automatically generated by the Nios II IDE Flash Programmer. # # It will be overwritten when the flash programmer options change. #
cd E:/FPGA/NIOSII_Projects/test_project/Debug
# Creating .flash file for the FPGA configuration "$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="E:/FPGA/DE2/NIOSII/NIOSII_time_l imited.sof" --output="NIOSII_time_limited.flash" Info: ******************************************************************* Info: Running Quartus II Convert_programming_file Info: Command: quartus_cpf --no_banner --convert --device=EPCS128 --option=NIOSI I_time_limited.opt E:/FPGA/DE2/NIOSII/NIOSII_time_limited.sof NIOSII_time_limite d.pof File E:/FPGA/DE2/NIOSII/NIOSII_time_limited.sof contains one or more time-limite d megafunctions that support the OpenCore Plus feature that will not work after the hardware evaluation time expires. Refer to the Messages window for evaluatio n time details. Info: SRAM Object File E:/FPGA/DE2/NIOSII/NIOSII_time_limited.sof contains time- limited megafunction that supports OpenCore Plus feature -- Vendor: 0x6AF7, Prod uct: 0x00A2 Internal Error: Sub-system: PGMIO, File: /quartus/pgm/pgmio/pgmio_flash_mapping. cpp, Line: 3714 ranks->size() > 0 Stack Trace: 0x1C496 : PGMIO_PCF_FILE_INFO::operator= + 0x76E6 (pgm_pgmio)
End-trace
Info: ******************************************************************* Info: Running Quartus II Convert_programming_file Info: Command: quartus_cpf --no_banner --convert NIOSII_time_limited.pof NIOSII_ time_limited.rpd Error: File name "NIOSII_time_limited.pof" does not exist Error: Quartus II Convert_programming_file was unsuccessful. 1 error, 0 warnings Error: Peak virtual memory: 66 megabytes Error: Processing ended: Thu Apr 15 17:35:42 2010 Error: Elapsed time: 00:00:00 Error: Total CPU time (on all processors): 00:00:00 15.04.2010 17:35:42 - (SEVERE) sof2flash: Read error: File: NIOSII_time_limited. rpd not found, exiting 15.04.2010 17:35:42 - (SEVERE) sof2flash: Error retrieving data from NIOSII_time _limited.rpd
# Programming flash with the FPGA configuration "$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00009800 --sidp=0x0 000a010 --id=135841862 --timestamp=1271336990 --accept-bad-sysid "NIOSII_time_l imited.flash" NIOSII_time_limited.flash: Unable to open input file Empty flash content cannot be programmed or verified
# Creating .flash file for the project "$SOPC_KIT_NIOS2/bin/elf2flash" --epcs --after="NIOSII_time_limited.flash" --inp ut="test_project.elf" --output="epcs_flash_controller.flash" 15.04.2010 17:35:43 - (SEVERE) elf2flash: Data error: File not found: NIOSII_tim e_limited.flash 15.04.2010 17:35:44 - (SEVERE) elf2flash: Error retrieving data from test_projec t.elf
# Programming flash with the project "$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00009800 --sidp=0x0 000a010 --id=135841862 --timestamp=1271336990 --accept-bad-sysid "epcs_flash_co ntroller.flash" epcs_flash_controller.flash: Unable to open input file Empty flash content cannot be programmed or verified Это связано с тем, что ядро time-limited? Хотя после загрузки в плату SOF он мне выдает сообщение что "time remaining: unlimited".........
|
|
|
|
|
Apr 19 2010, 11:59
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Итак, все заработало как я и ожидал. Программка и Система была простейшая - бегущий светодиод (т.е., On-chip RAM, PIO-out, контроллер EPCS, System ID, CPU). Все работало и зашивалось в EPCS на ура. Далее я решил поиграться с прерываниями. Всего-лишь в существующую систему добавил PIO-вход (кнопочки), настроил в нем прерывания и автоназначил их в SoPC-билдере. Компилю, зашиваю, делаю в Nios II IDE простейший проект для отработки прерывания, успешно его компилирую, а далее при попытке загрузить его в плату получаю следующее фи: Код Using cable "USB-Blaster [USB-0]", device 1, instance 0x00 Pausing target processor: OK Reading System ID at address 0x0000A020: verified Initializing CPU cache (if present) OK
Downloading 00004000 ( 0%) Downloading 00009820 (96%) Downloaded 13KB in 0.2s (65.0KB/s)
Verifying 00004000 ( 0%) Verifying 00009820 (96%) Verify failed between address 0x9820 and 0x99C7 Leaving target processor paused Насколько я понял из альтеровских и ниосовских форумов, такая ошибка возникает как правило при неверном pinout, невыполнении таймингов для внешней памяти (но у меня-то вся память - OnChip...), наводках по линии ТCK у JTAG. В чем может быть дело? - Pinout (Assignments для всей платы одним файлом) взят с фирменного диска, работал с ним уже сто раз на не-ниосовских проектах - все разведено нормально. - Никакой внешней памяти кроме EPCS я не использую. Более того, раньше с ней все работало (до того как я добавил в систему PIO-вход). - Timing Analyzer, конечно, поругивается варнингами про отрицательные слэки, но раньше же все работало. Неужели из-за добавления простого порта все так уехало? - Вроде как, судя по адресам - это как раз флэшка. Но какого хрена она тогда раньше нормально работала? П.С.: на всякий прилагаю скриншот системы П.П.С.: клок, если что, беру не с PLL, а напрямую с источника на плате (50 МГц).
Сообщение отредактировал spectr - Apr 19 2010, 12:01
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 19 2010, 12:49
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Вот отчет компилятора IDE: CODE **** Build of configuration Debug for project test_project ****
make -s all includes Compiling main.c... ../main.c: In function `init_button_pio': ../main.c:34: warning: implicit declaration of function `alt_irq_register' ../main.c: At top level: ../main.c:39: warning: return type of 'main' is not `int' ../main.c: In function `main': ../main.c:41: warning: unused variable `value' Linking test_project.elf... Info: (test_project.elf) 13 KBytes program size (code + initialized data). Info: 3120 Bytes free for stack + heap. Creating generated_app.sh... Post-processing to create ram_memory.hex Hardware simulation is not enabled for the target SOPC Builder system. Skipping creation of hardware simulation model contents and simulation symbol files. (Note: This does not affect the instruction set simulator.) Post-processing to create epcs_flash_controller_boot_rom.flash Build completed in 27.984 seconds Вот простыня исходника: CODE #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h"
//-------------------------------------------------------------- void delay(value) { int i=0; for(i=0;i<value;i++); }
//-------------------------------------------------------------- static void handle_button_interrupts(void* context, alt_u32 id) { volatile int* edge_capture_ptr = (volatile int*) context; *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE,0); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTONS_BASE,0xF); }
//-------------------------------------------------------------- //-------------------------------------------------------------- //-------------------------------------------------------------- //-------------------------------------------------------------- //-------------------------------------------------------------- volatile int edge_capture;
static void init_button_pio() { void* edge_capture_ptr = (void*) &edge_capture; IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTONS_BASE,0xF); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE,0); alt_irq_register(BUTTONS_IRQ,edge_capture_ptr,handle_button_interrupts); }
//-------------------------------------------------------------- void main(void) { int value = 0x00000001; init_button_pio(); while (1) { if(edge_capture!=0) { switch(edge_capture) { case 0x1: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x1); break;
case 0x2: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x2); break;
case 0x4: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x4); break;
case 0x8: IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x8); break; default: break; } } } Если это важно: в свойствах системной библиотеки параметры Program Memory и ReadOnly Memory установлены на On-Chip память. Еще одно уточнение - процессор по сбросу и исключению уходит в память EPCS. Но в системной библиотеке, как я уже писал выше память программ и ROM-память указывают на OnChip-память. Может из-за этого косячить? Во! Когда я изменил в свойствах системной библиотеки указание памяти программ и ROM с OnChip на EPCS, то компилятор выдал-таки ошибку, причем как раз с теми адресами, которые он выдавал при верификации: Код **** Build of configuration Debug for project test_project ****
make -s all includes Compiling main.c... ../main.c: In function `init_button_pio': ../main.c:34: warning: implicit declaration of function `alt_irq_register' ../main.c: At top level: ../main.c:39: warning: return type of 'main' is not `int' ../main.c: In function `main': ../main.c:41: warning: unused variable `value' Linking test_project.elf... /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: region epcs_flash_controller is full (test_project.elf section .text). Region needs to be 8908 bytes larger. /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: address 0xa2b4 of test_project.elf section .epcs_flash_controller is not within region epcs_flash_controller /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .rodata [00009820 -> 0000984b] overlaps section .exceptions [00009820 -> 000099c7] /cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .rwdata [0000984c -> 0000a2b3] overlaps section .exceptions [00009820 -> 000099c7] collect2: ld returned 1 exit status make: *** [test_project.elf] Error 1 Build completed in 13.921 seconds Похоже что ему мало памяти...
Сообщение отредактировал Omen_13 - May 13 2010, 15:50
Причина редактирования: Оформление кода.
|
|
|
|
|
Apr 19 2010, 13:26
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Я немного не понял, что Вы делаете
Когда при запуске он пытается загрузить программу и пишет: Downloading 00004000 ( 0%) Downloading 00009820 (96%) Downloaded 13KB in 0.2s (65.0KB/s), он грузит ее как бы в ОЗУ и неудивительно, что при попытке верификации EPCS он выдает ошибки. Для программирования EPCS надо использовать Flash Programmer.
По сути, область памяти от 0x9800, выделенная на EPCS контроллер - это загрузчик, который перекачивает из EPCS в ОЗУ содержимое, зашитое Flash Programmer'ом в EPCS. Тогда при включении системы загрузчик сам перекачает код из EPCS в те секции памяти, которые надо инициализировать (т.е., секции, которые лежат во встроенном ОЗУ, внешнем ОЗУ и т.д.).
Поэтому и код, и exception вектор в настройках ядра процессора кладите в ram_memory, а reset - на EPCS контроллер. Тогда при reset код из EPCS будет загружаться загрузчиком, а при загрузке с кабеля при Run - загружаться в ram_memory через JTAG.
P.S. Это вроде как в теории, сам с системами на кристалле, использующими EPCS не работал.
|
|
|
|
|
Apr 30 2010, 07:45
|
Местный
  
Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893

|
Добрый день, возникла проблема с средой Eclipse: Стал изучать NIOSII и начал с этих уроков (на которые ссылается сама альтера) http://www.nioswiki.com/Embedded_Systems_Lab благо плата CII starter kit была в наличии выполнил согласно их даташиту все шаги но на последнем возникла проблема в том что непонял как залить програму в процессор и запустить, т.е. не смог выполнить: Цитата In the previous module you already downloaded the .SOF, so the FPGA is primed and ready to run the software application. Keeping the USB cable still plugged in to the DE1 board, you will download the application via the USB-JTAG link. To run the software project on the Nios II processor: • Right click on the software project directory and choose Run As and Nios II Hardware. • If the Run Configurations window appears: Under the Project Tab: Verify Project and elf file name. Under the Target Connection Tab: Select Refresh Connections Select Run т.к. фактически нет в Run Configurations пунктов отвечающих за JTAG програматор и отладчик. Как его включить так чтоб он в среде програмирования появился?
Причина редактирования: Оформление цитаты. Omen_13
|
|
|
|
|
May 6 2010, 06:25
|
Местный
  
Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893

|
спасибо, ещё вопрос: как освободить усб бластер занятый в среде ниойса для квартуса не выгружая самой среды ниойс еклипс? пробовал нажимать на красный квадрат остановки отладки/запуска не помогает. Т.е. заливаеш в начале по джитагу прошивку из квартуса через байт бластер, потом запускаеш ниойс эклипс, заливаеш через него программу, останавливаеш выполнение, возврощаешся в квартус и пробуеш перезалить иную версию а он выдаёт: Цитата Info: Started Programmer operation at Thu May 06 10:27:01 2010 Error: Application Nios2 on 192.168.1.14 is using the target device Error: Operation failed Info: Ended Programmer operation at Thu May 06 10:27:01 2010 и пока среду разработки для ниойса вообще не закроеш квартус будет выдавать такую ошибку.
Сообщение отредактировал Omen_13 - May 13 2010, 15:52
Причина редактирования: Оформление цитаты. Omen_13
|
|
|
|
|
May 7 2010, 07:14
|
Местный
  
Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893

|
запустил один чип sdram памяти 256мегабит, 16 бит шина данных, но на плате стоит 2 чипа, с общими сигналами управления и адресом, с раздельными шинами данных (32битный модуль памяти в итоге), как их подключить в spoc билдере так чтоб одновременно шло обращение к обоим чипам в 32битном режиме?
просто выставить в настройках custom memory нельзя ибо сигналы маскирования байт будут уже для 32 бит т.е. на 4 байта, а не для 16 бит, объединять через тристейт мост авалона не хочу, т.к. насколько я понимаю они станут как 2 раздельных 16 разрядных банка памяти, а вот как их объединить в один 32битный банк памяти?
|
|
|
|
|
May 7 2010, 07:30
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Porty если у вас Cyclone II FPGA Starter Development Kitто там нет сдвоенных SDRAM-ов  там всего по одной штучке Цитата Memory: 8-Mb SDRAM 512-Kb SRAM 4-Mb flash
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|