|
|
|
NIOS для начинающих |
|
|
|
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 и есть дата кэш, описанный выше.
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|