Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NIOS для начинающих
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
AlexBel
Имею девборду Altera DE1 (Cyclone II 2C20). Хотел бы своими руками "пошшупать" NIOS. Где-нибудь можно найти что-то типа "курса для начинающих", желательно с использованием DE1? Чтобы и теория была и практика и доступные пониманию новичков примеры. Конечная цель - создание "железа" с SDRAM и видеоконтроллером и разработка софта под него.
Full41
Материала на русском языке мало, я бы даже сказал почти нет! А вот на английском на официальном сайте altera есть, да же есть примеры процессоров. Я когда начинал пробовать работать с NIOS сделал простенький проект, который нашел на одном сайте, там расписано как делать и какие инструменты для чего! А после этого уже стал сам пробовать реализовать свои небольшие придумки на NIOS! Если хочешь могу скинуть ссылку на сайт!=))
AlexBel
Цитата(Full41 @ Oct 12 2009, 22:00) *
Если хочешь могу скинуть ссылку на сайт!=))


Спрашиваешь! smile.gif
Full41
У тебя проблемы с ящиком не чего не отправляется!! если напишешь почту, то скину туда
AlexBel
Цитата(Full41 @ Oct 12 2009, 22:46) *
У тебя проблемы с ящиком не чего не отправляется!! если напишешь почту, то скину туда


alex (собака) speccyland.net
Full41
Цитата(AlexBel @ Oct 12 2009, 23:22) *
alex (собака) speccyland.net


Все отправил
AlexBel
Цитата(Full41 @ Oct 12 2009, 23:28) *
Все отправил


Все получил, спасибо, буду изучать!
iosifk
Цитата(AlexBel @ Oct 12 2009, 21:47) *
Имею девборду Altera DE1 (Cyclone II 2C20). Хотел бы своими руками "пошшупать" NIOS. Где-нибудь можно найти что-то типа "курса для начинающих", желательно с использованием DE1? Чтобы и теория была и практика и доступные пониманию новичков примеры. Конечная цель - создание "железа" с SDRAM и видеоконтроллером и разработка софта под него.


demosondemand.com

Или ниписать в Гамму-выборг и поросить диск с этими презентациями...
А у меня на сайте есть пара статей... Но они еще про самый первый Ниос. И еще сохранилось кое-что, что я переводил по Ниосу на сайте Эфо. Ссылка у меня на сайте есть.
Удачи!
sysel
Цитата(Full41 @ Oct 12 2009, 22:00) *
Если хочешь могу скинуть ссылку на сайт!=))


Это сайт какой-то подпольной экстремистской организации?
Если нет - выложите, пожалуйста, ссылку тут.
Full41
Да нет нормальный сайт, там просто в кратце на русском приводят пример создания проекта на NIOS. Я с этого все начинал!!

http://www.(текст)profelectronica.ru/index...c62d24039cbdd9b

При использовании ссылки убрать фразу (текст)

Цитата(Full41 @ Oct 13 2009, 09:57) *
Да нет нормальный сайт, там просто в кратце на русском приводят пример создания проекта на NIOS. Я с этого все начинал!!

http://www.(текст)profelectronica.ru/index...c62d24039cbdd9b

При использовании ссылки убрать фразу (текст)



это не правильная ссылка вот правильная

http://www.profelectronica.ru/index.php?op...c62d24039cbdd9b

[quote name='Full41' date='Oct 13 2009, 10:00' post='661400']
Да нет нормальный сайт, там просто в кратце на русском приводят пример создания проекта на NIOS. Я с этого все начинал!!

http://www.profelectronica.ru/index.php?op...c62d24039cbdd9b
Stewart Little
Цитата(AlexBel @ Oct 12 2009, 21:47) *
Имею девборду Altera DE1 (Cyclone II 2C20). Хотел бы своими руками "пошшупать" NIOS. Где-нибудь можно найти что-то типа "курса для начинающих", желательно с использованием DE1? Чтобы и теория была и практика и доступные пониманию новичков примеры. Конечная цель - создание "железа" с SDRAM и видеоконтроллером и разработка софта под него.

Полезный ресурс для начинающих - http://www.nioswiki.com/
Содержит кучу примеров, в т.ч. SDRAM и пр.
AlexBel
Цитата(Stewart Little @ Oct 13 2009, 17:01) *
Полезный ресурс для начинающих - http://www.nioswiki.com/
Содержит кучу примеров, в т.ч. SDRAM и пр.


Спасибо!
Kuzmi4
Может тему в шапку вынести , а то вопросы по ниосу довольно часто встречаются ??
Full41
Цитата(Kuzmi4 @ Oct 13 2009, 22:13) *
Может тему в шапку вынести , а то вопросы по ниосу довольно часто встречаются ??


точно, необходимо перенести тему NIOS в шапку!! rolleyes.gif
Omen_13
Сделано по просьбе трудящихся... biggrin.gif
С уважением, модератор
Reanimator++
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=9
Nios II IDE нормально с ним работает, включая пошаговую отладку программы в железе.
Full41
Хотел узнать, можно ли использовать переферийные устройства из SOPC Builde (rs232, USB и тд), без использования самого процессора!?
Kuzmi4
2 Full41 - можно, только вам тогда нужно будет написать своего мастера, который ими дирижировать будет laughing.gif
Full41
Цитата(Kuzmi4 @ Nov 17 2009, 16:50) *
2 Full41 - можно, только вам тогда нужно будет написать своего мастера, который ими дирижировать будет laughing.gif


То есть самому написать мастер шину!!?
Stewart Little
Цитата(Full41 @ Nov 17 2009, 16:58) *
То есть самому написать мастер шину!!?

Не "мастер шину", а "мастер на шину". Шина - она стандартная (Авалон), на ней бывают мастеры и слейвы.
Мастер - это тот, кто может инициировать транзакцию (т.е. передачу данных). Стандартные мастеры - это, к примеру, ядро NiosII, или блок DMA.
Слейв - тот, кто поддерживает транзакцию (т.е. принимает или передает даные в соответствии с поступившим ему запросом).
Ваши rs232, USB и тд. - это слейвы. К ним должен кто-то обращаться (во-первых - для того, чтобы сконфигурировать, или задать режим; во-вторых - записать или считать информацию). Этот "кто-то" и есть мастер.
Full41
Все понял!! Буду пробовать!! Спасибо!!
EvgenyNik
Уважаемые гуру, подскажите - как "объяснить" 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" и т.п.. Где искать?
inco
Евгений Николаев
В 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...
EvgenyNik
inco, спасибо!
Сегодня попробую. Честно говоря, считал, что перейду с 7.2 на 9.1 за один день, но 9-ый, в отличие от 7-го, не интуитивно понятен.
---
Работает! a14.gif
Кстати, переход начал поэтапно - сначала поставил 9-ый квартус, но пользовался 7-ым NIOS IDE - на первый взгляд всё нормально, с портов читает, выводит, но почему-то перестали работать прерывания от внутреннего обработчика.
Сейчас с 9-ым всё заработало. Видимо, альтеровцы частично что-то сменили внутри (кривые руки разработчика - тоже не исключаются, конечно smile.gif ).
AlexBel
Reanimator++
Рома, спасибо, извини, что не отреагировал сразу, но причину знаешь sad.gif
Обязательно это попробую, как закончу проект...
barabek
Подскажите. Есть система, картинка во вложении. 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 - не работает, сбоит.
vadimuzzz
Цитата(barabek @ Dec 20 2009, 08:30) *
Если выставить в настройках для .text и .rodata использовать MemoryWraper, а для всего остального onchip память tigtly_data - работает. Подскажите в каком направлении копать. То ли мой контроллер памяти тупит, но тогда, по идее он должен сбоить и на инструкциях (ведь при маленьком кэше инструкций выборки из памяти обязаны быть), либо что-то еще.

похоже, сбоит запись в память(MemoryWraper), тогда понятно, почему не сбоит на инструкциях(там только чтение).
barabek
Цитата(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 и есть дата кэш, описанный выше.
vadimuzzz
можно погонять контроллер на тестах, что генерит мегавизард (файл _top.vhd или _top.v). еще такая дока есть www.altera.com/literature/an/an380.pdf. хуже, если где-то времянки перекосило.
barabek
Цитата(vadimuzzz @ Dec 20 2009, 16:42) *
можно погонять контроллер на тестах, что генерит мегавизард (файл _top.vhd или _top.v). еще такая дока есть www.altera.com/literature/an/an380.pdf. хуже, если где-то времянки перекосило.

Насчёт времянок - это врядли. Так как считавание и запись от акселератора идет нормально. На экране изображение чистое. А внутри не может быть, ругался бы timequest. А за тесты спасибо за наводку. Завтра на работе посмотрю. А то я сам писал testbench, мог что-нибудь не учесть. Даже мой приведенный тест мне самому теперь не нравится- запись производится в последовательные ячейки.
barabek
Переделал тест. Теперь он пишет сперва 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 да как опять вылезет. Страшно.
Kuzmi4
2 barabek
когда у меня возникают проблемы похожего характера - цепляюсь сигналтабом на вх/вых порты компонента и смотрю что там творится. У меня как то тоже было что мои представления фунциклирования ниосовской проги расходились с тем, что я увидел на сигналтабе laughing.gif

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

я гонял на стартер-ките. все в DDR(контроллер альтеровский), загрузка из FLASH. глюков не было, даже линукс грузил.
Kuzmi4
Разъясняю - пишем прогу для ниоса2, компилим, располагаем её в on-chip памяти, далее собираем всё системку на Modelsim-е, инициализируя вашу on-chip тем что выдал IDE (там только по-моему нужно будет ELF в HEX перегнать вроде), цепляем модельки ДДР2(ищем на сайте производителя - точно должны дыть) и LCD (если есть, тут думаю всё сложней чем поиск на сайте производителя будет), выводим интересующие вайры, делаем нужные стробы и смотрим что к чему..
Но это как то долго и интересно, когда железо в разработке или заказчику нужна функциональная модель того, что есть в железе.
Да и судя по-всему для вас это всё будет проблемно по началу и займёт много времемни. Думаю что всё же проще вам прицепить сигнал-таб и просто, для начала, посмотреть транзакции - как они у вас вообсче проходят в зависимости от ваших экспериментов с программой и ниосом2, ну а потом уже и стробы понапридумывать для тригирования событий.
Ну вот как то так..
vadimuzzz
кстати, как-то упустили из виду. а какого рода сбой? повисает прога? и акселератор имеет прямой доступ к памяти?
barabek
Цитата(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). Получается, что все-таки глюк с памятью скорее всего sad.gif.
Одно радует - если повторяю одни и теже действия с breakpoint вроде есть повторяемость. Значит можно будет сигналтаб (как советует Kuzmi4) на это как-нибудь настроить. Сейчас буду читать про связку сигналтаб+ниос, где-то видел апликуху или раздел.

2 vadimuzzz .Акселератор имеет прямой доступ. У меня контроллер MemoryWraper включает себя акселератор, контроллер вывода на LCD и контроллер доступа nios к памяти. Соответственно внутри реализован арбитр, который разруливает между ними. При этом половину полосы пропускания отводится для вывода на экран (подготовку fifo строки), оставшаяся половина делится между акселератором, чтением и записью в память поровну. Просто для чтения и записи один интерфейс с nios, для акселератора отдельный.

PS. Если вообще не ставить breakpoint, то залетаю до for(;;); и весит, при этом ipending и ienable равны 0х01, status=0, exception=0. Делаю перестановки строк, опять запускаю без брейкпоинтов - зависает на бесконечном цикле определения прерывания (active=0;)Очень странно. А можно ли будет одновременно работать и в дебугере niosa и в signaltab?
vadimuzzz
Цитата
А можно ли будет одновременно работать и в дебугере niosa и в signaltab?

можно и даже лучше так и делать www.altera.com/literature/an/an446.pdf плагин для ниоса в сигналтапе и дизассемблер умеет. еще можно попробовать так: .text и .rom запихать в он-чип, все остальное - в DDR. если сбои будут, значит конфликт с размещением(кто-то, скорее всего акселератор, пишет не по адресу, например, гадит в .text). что-то похожее было у меня, когда мой самописный avalon-master затирал память программ. сигналтапом я его и ущучил.
barabek
vadimuzzz и Kuzmi4, спасибо! Действительно полезный оказался плагин. Нашел по крайней мере один косяк. В проге после компиляции обнаружил, что встречаются подряд 2 инструкции stw и ldw на тот же адрес (причем неоднократно - вроде неразумно поступает компилятор, но что есть то есть). А у меня запись и чтение идут по отдельным маршрутам. Соответственно чтение иногда обгоняет запись. Отсюда имею свое горе sad.gif. Буду теперь ломать голову над этой проблемой.
barabek
Не знаю точно, сюда нужно постить, или в раздел 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++" ,
vadimuzzz
посмотрите тут http://porn.quiteajolt.com/2007/11/05/init...ay-member-in-c/

название сайта жжот )
Serg_Sm
Здравствуйте. Начинаю разбираться с ниосом, при этом возникло множество вопросов, кита к сожалению нет. Документации очень много, где конкретно искать непонятно плюс ко всему все рассмотренные мной описания сделаны под предыдущие версии, а в 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" это замена штатному или основной?
barabek
Цитата(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.pdf
4) Нет, добавлять ничего не обязательно. JTAG UART это отдельная фича (сам не пользовался smile.gif ), с помощью которой Вы можете обмениваться с консолью NIOS в процессе отладки, как если бы Вы вставили в SOPC модуль UART, развели его на плате, подключили к COM-порту и работали, например, в Гипертерминале. Плюс у этой фичи, что на плате разводить ничего не надо, минус - что работать с таким UART можно только (на сколько я знаю) из консоли NIOS IDE.
Serg_Sm
Большое спасибо за ответ.
Сейчас платы с разведенным JTAG у меня нет, поэтому хочу попробовать загрузить через AS. Требуется ли для этого какие-либо манипуляции в NIOS IDE?
После компиляции в симуляторе квартуса видно, что pio выводы остаются в нуле. Хотя в проекте NIOS им присваивается значение "1".
S_Lee
Доброго времени суток. Я начал работать в SOPC Builder (Q8.1) и столкнулся с проблемой: мне необходимо создать свой условно говоря интерфейсик, для этого я хочу создать в SOPC свой компонент который будет состоять только из сигналов входов и выходов, но, создав такой компонент он не размещается в системе, а точнее он не попадает в адресное пространство. Кто-то может подсказать что-то? Как правильно создать компонент в сопк баилдер состоящий из портов входов и выходов?
barabek
Цитата(S_Lee @ Feb 23 2010, 06:45) *
Как правильно создать компонент в сопк баилдер состоящий из портов входов и выходов?

А чем стандартные Peripherals->PIO не устраивают? А по теме -мало информации, отсюда только вопросы: интерфейс делали согласно спецификации авалон шины? В SOPC билдере, когда создавали новый компонент все сигналы и интерфейсы правильно определялись/назначались? Наконец, литературу "Avalon Interface Specifications" и раздел в quartus handbook "component editor" читали?
Kuzmi4
Цитата(S_Lee @ Feb 22 2010, 22:45) *
...а точнее он не попадает в адресное пространство....

для начала простенькие вопросы:
1) адресные линии вы ему забили в интерфейсе ?
2)на последней стадии создания ошибок в окошке не наблюдалось ?
3) он у вас в сопц билдере отражается ?
styuf
Здравствуйте.
Я сделал проектик, с использованием niosa, который как то преобразует входные данные в выходные. Сам проект работает нормально, если программу хранить во внутренней памяти процессора. Но при попытки использования внешней флэшки застопорился. Делаю все, как написано здесь , и появляется ошибка: No CFI table found at address 0x01000000.
Может что посоветуете?
vadimuzzz
Цитата(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
указанная ошибка появляется когда проц не видит флешку по указанному адресу, причин м.б. несколько - корявая распиновка, не тот адрес
styuf
Жалко, что плохо развит biggrin.gif
По порядку:
- плата стандартная альтеровская - Nios II Development board для EP2C35F672C6N такого циклона второго;
- проект самодельный;
- только программку хранить;
- картинка из SOPC (прикрепленна);
- читал, но видимо до проблем, разобранных там еще не добрался, по причине, обнаруженной пол часа назад: оказалась, что в SOPCе указывал не ту память. Отодрал наклейку с корпуса памяти и обнаружил S29GL128M10TFIR1. И думаю все бы ничего, щас все исправлю, но в инете не нашел ни одного описания именно этой памяти, даже на сайте изготовителя, а без описания не знаю как задавать в сопсе описание оной памяти.
Никто не работал с такой?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.