Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ Системы на ПЛИС - System on a Programmable Chip (SoPC) _ NIOS для начинающих

Автор: AlexBel Oct 12 2009, 17:47

Имею девборду Altera DE1 (Cyclone II 2C20). Хотел бы своими руками "пошшупать" NIOS. Где-нибудь можно найти что-то типа "курса для начинающих", желательно с использованием DE1? Чтобы и теория была и практика и доступные пониманию новичков примеры. Конечная цель - создание "железа" с SDRAM и видеоконтроллером и разработка софта под него.

Автор: Full41 Oct 12 2009, 18:00

Материала на русском языке мало, я бы даже сказал почти нет! А вот на английском на официальном сайте altera есть, да же есть примеры процессоров. Я когда начинал пробовать работать с NIOS сделал простенький проект, который нашел на одном сайте, там расписано как делать и какие инструменты для чего! А после этого уже стал сам пробовать реализовать свои небольшие придумки на NIOS! Если хочешь могу скинуть ссылку на сайт!=))

Автор: AlexBel Oct 12 2009, 18:39

Цитата(Full41 @ Oct 12 2009, 22:00) *
Если хочешь могу скинуть ссылку на сайт!=))


Спрашиваешь! smile.gif

Автор: Full41 Oct 12 2009, 18:46

У тебя проблемы с ящиком не чего не отправляется!! если напишешь почту, то скину туда

Автор: AlexBel Oct 12 2009, 19:22

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


alex (собака) speccyland.net

Автор: Full41 Oct 12 2009, 19:28

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


Все отправил

Автор: AlexBel Oct 12 2009, 20:09

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


Все получил, спасибо, буду изучать!

Автор: iosifk Oct 13 2009, 04:50

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


demosondemand.com

Или ниписать в Гамму-выборг и поросить диск с этими презентациями...
А у меня на сайте есть пара статей... Но они еще про самый первый Ниос. И еще сохранилось кое-что, что я переводил по Ниосу на сайте Эфо. Ссылка у меня на сайте есть.
Удачи!

Автор: sysel Oct 13 2009, 05:47

Цитата(Full41 @ Oct 12 2009, 22:00) *
Если хочешь могу скинуть ссылку на сайт!=))


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

Автор: Full41 Oct 13 2009, 06:01

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

http://electronix.ru/redirect.php?http://www.(текст)profelectronica.ru/index.php?option=com_content&view=article&id=64%3Aniosii&catid=42%3Adevaart&Itemid=71&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b

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

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

http://electronix.ru/redirect.php?http://www.(текст)profelectronica.ru/index.php?option=com_content&view=article&id=64%3Aniosii&catid=42%3Adevaart&Itemid=71&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b

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



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

http://electronix.ru/redirect.php?http://www.profelectronica.ru/index.php?option=com_content&view=article&id=64%3Aniosii&catid=42%3Adevaart&Itemid=71&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b

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

http://electronix.ru/redirect.php?http://www.profelectronica.ru/index.php?option=com_content&view=article&id=64%3Aniosii&catid=42%3Adevaart&Itemid=71&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b&8287022a4ffc9b43c8b1b7997c9cdac2=790a0c5e9deed6e28c62d24039cbdd9b

Автор: Stewart Little Oct 13 2009, 13:01

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

Полезный ресурс для начинающих - http://electronix.ru/redirect.php?http://www.nioswiki.com/
Содержит кучу примеров, в т.ч. SDRAM и пр.

Автор: AlexBel Oct 13 2009, 16:31

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


Спасибо!

Автор: Kuzmi4 Oct 13 2009, 18:13

Может тему в шапку вынести , а то вопросы по ниосу довольно часто встречаются ??

Автор: Full41 Oct 14 2009, 05:20

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


точно, необходимо перенести тему NIOS в шапку!! rolleyes.gif

Автор: Omen_13 Oct 18 2009, 18:45

Сделано по просьбе трудящихся... biggrin.gif
С уважением, модератор

Автор: Reanimator++ Oct 27 2009, 11:28

AlexBel
Леш, я запустил ниос пройдя "Nios II Hardware Development Tutorial" - http://electronix.ru/redirect.php?http://www.altera.com/literature/tt/tt_nios2_hardware_tutorial.pdf
Просто по порядку делай что там написано и все )

у меня кита нет, потому запускал на своей макетке под EP2C8. все получается, правда пришлось поиграться с оптимизирующими галочками, поскольку пример без модификаций расчитан на EP2C20, а у С8 меньше onchip RAM.

использовал программатор Игоря - http://electronix.ru/redirect.php?http://www.speccyland.net/forum/viewtopic.php?f=13&t=9
Nios II IDE нормально с ним работает, включая пошаговую отладку программы в железе.

Автор: Full41 Nov 17 2009, 13:28

Хотел узнать, можно ли использовать переферийные устройства из SOPC Builde (rs232, USB и тд), без использования самого процессора!?

Автор: Kuzmi4 Nov 17 2009, 13:50

2 Full41 - можно, только вам тогда нужно будет написать своего мастера, который ими дирижировать будет laughing.gif

Автор: Full41 Nov 17 2009, 13:58

Цитата(Kuzmi4 @ Nov 17 2009, 16:50) *
2 Full41 - можно, только вам тогда нужно будет написать своего мастера, который ими дирижировать будет laughing.gif


То есть самому написать мастер шину!!?

Автор: Stewart Little Nov 17 2009, 14:06

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

Не "мастер шину", а "мастер на шину". Шина - она стандартная (Авалон), на ней бывают мастеры и слейвы.
Мастер - это тот, кто может инициировать транзакцию (т.е. передачу данных). Стандартные мастеры - это, к примеру, ядро NiosII, или блок DMA.
Слейв - тот, кто поддерживает транзакцию (т.е. принимает или передает даные в соответствии с поступившим ему запросом).
Ваши rs232, USB и тд. - это слейвы. К ним должен кто-то обращаться (во-первых - для того, чтобы сконфигурировать, или задать режим; во-вторых - записать или считать информацию). Этот "кто-то" и есть мастер.

Автор: Full41 Nov 17 2009, 14:13

Все понял!! Буду пробовать!! Спасибо!!

Автор: Евгений Николаев Dec 9 2009, 17:21

Уважаемые гуру, подскажите - как "объяснить" 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 Dec 9 2009, 19:59

Евгений Николаев
В 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

inco, спасибо!
Сегодня попробую. Честно говоря, считал, что перейду с 7.2 на 9.1 за один день, но 9-ый, в отличие от 7-го, не интуитивно понятен.
---
Работает! a14.gif
Кстати, переход начал поэтапно - сначала поставил 9-ый квартус, но пользовался 7-ым NIOS IDE - на первый взгляд всё нормально, с портов читает, выводит, но почему-то перестали работать прерывания от внутреннего обработчика.
Сейчас с 9-ым всё заработало. Видимо, альтеровцы частично что-то сменили внутри (кривые руки разработчика - тоже не исключаются, конечно smile.gif ).

Автор: AlexBel Dec 12 2009, 18:05

Reanimator++
Рома, спасибо, извини, что не отреагировал сразу, но причину знаешь sad.gif
Обязательно это попробую, как закончу проект...

Автор: barabek Dec 20 2009, 02:30

Подскажите. Есть система, картинка во вложении. 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 Dec 20 2009, 03:23

Цитата(barabek @ Dec 20 2009, 08:30) *
Если выставить в настройках для .text и .rodata использовать MemoryWraper, а для всего остального onchip память tigtly_data - работает. Подскажите в каком направлении копать. То ли мой контроллер памяти тупит, но тогда, по идее он должен сбоить и на инструкциях (ведь при маленьком кэше инструкций выборки из памяти обязаны быть), либо что-то еще.

похоже, сбоит запись в память(MemoryWraper), тогда понятно, почему не сбоит на инструкциях(там только чтение).

Автор: barabek Dec 20 2009, 03:38

Цитата(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 Dec 20 2009, 06:42

можно погонять контроллер на тестах, что генерит мегавизард (файл _top.vhd или _top.v). еще такая дока есть www.altera.com/literature/an/an380.pdf. хуже, если где-то времянки перекосило.

Автор: barabek Dec 20 2009, 11:28

Цитата(vadimuzzz @ Dec 20 2009, 16:42) *
можно погонять контроллер на тестах, что генерит мегавизард (файл _top.vhd или _top.v). еще такая дока есть www.altera.com/literature/an/an380.pdf. хуже, если где-то времянки перекосило.

Насчёт времянок - это врядли. Так как считавание и запись от акселератора идет нормально. На экране изображение чистое. А внутри не может быть, ругался бы timequest. А за тесты спасибо за наводку. Завтра на работе посмотрю. А то я сам писал testbench, мог что-нибудь не учесть. Даже мой приведенный тест мне самому теперь не нравится- запись производится в последовательные ячейки.

Автор: barabek Dec 21 2009, 08:48

Переделал тест. Теперь он пишет сперва 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 Dec 21 2009, 08:57

2 barabek
когда у меня возникают проблемы похожего характера - цепляюсь сигналтабом на вх/вых порты компонента и смотрю что там творится. У меня как то тоже было что мои представления фунциклирования ниосовской проги расходились с тем, что я увидел на сигналтабе laughing.gif

Как вариант, если прога не большая и влезет в он-чип -может стоит поднять гейт-левел симуляцию (вдруг квартус чегой то за вас додумал) ?

Автор: barabek Dec 21 2009, 09:28

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

Автор: vadimuzzz Dec 21 2009, 09:36

Цитата(barabek @ Dec 21 2009, 15:28) *
А кто-нибудь пробовал подобную систему, но что-бы все сегменты распологались строго в DDR? Может это все-таки сомо ядро ниоса тупит при большой и изменяющейся латентностью чтения/записи данных. (всегда есть надежда что не сам виноват smile.gif ).

я гонял на стартер-ките. все в DDR(контроллер альтеровский), загрузка из FLASH. глюков не было, даже линукс грузил.

Автор: Kuzmi4 Dec 21 2009, 10:12

Разъясняю - пишем прогу для ниоса2, компилим, располагаем её в on-chip памяти, далее собираем всё системку на Modelsim-е, инициализируя вашу on-chip тем что выдал IDE (там только по-моему нужно будет ELF в HEX перегнать вроде), цепляем модельки ДДР2(ищем на сайте производителя - точно должны дыть) и LCD (если есть, тут думаю всё сложней чем поиск на сайте производителя будет), выводим интересующие вайры, делаем нужные стробы и смотрим что к чему..
Но это как то долго и интересно, когда железо в разработке или заказчику нужна функциональная модель того, что есть в железе.
Да и судя по-всему для вас это всё будет проблемно по началу и займёт много времемни. Думаю что всё же проще вам прицепить сигнал-таб и просто, для начала, посмотреть транзакции - как они у вас вообсче проходят в зависимости от ваших экспериментов с программой и ниосом2, ну а потом уже и стробы понапридумывать для тригирования событий.
Ну вот как то так..

Автор: vadimuzzz Dec 21 2009, 10:40

кстати, как-то упустили из виду. а какого рода сбой? повисает прога? и акселератор имеет прямой доступ к памяти?

Автор: barabek Dec 22 2009, 03:58

Цитата(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 Dec 22 2009, 07:00

Цитата
А можно ли будет одновременно работать и в дебугере niosa и в signaltab?

можно и даже лучше так и делать www.altera.com/literature/an/an446.pdf плагин для ниоса в сигналтапе и дизассемблер умеет. еще можно попробовать так: .text и .rom запихать в он-чип, все остальное - в DDR. если сбои будут, значит конфликт с размещением(кто-то, скорее всего акселератор, пишет не по адресу, например, гадит в .text). что-то похожее было у меня, когда мой самописный avalon-master затирал память программ. сигналтапом я его и ущучил.

Автор: barabek Dec 23 2009, 13:42

vadimuzzz и Kuzmi4, спасибо! Действительно полезный оказался плагин. Нашел по крайней мере один косяк. В проге после компиляции обнаружил, что встречаются подряд 2 инструкции stw и ldw на тот же адрес (причем неоднократно - вроде неразумно поступает компилятор, но что есть то есть). А у меня запись и чтение идут по отдельным маршрутам. Соответственно чтение иногда обгоняет запись. Отсюда имею свое горе sad.gif. Буду теперь ломать голову над этой проблемой.

Автор: barabek Jan 24 2010, 07:28

Не знаю точно, сюда нужно постить, или в раздел 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 Jan 25 2010, 01:39

посмотрите тут http://electronix.ru/redirect.php?http://porn.quiteajolt.com/2007/11/05/initializing-a-struct-with-a-string-array-member-in-c/

название сайта жжот )

Автор: Serg_Sm Feb 10 2010, 10:07

Здравствуйте. Начинаю разбираться с ниосом, при этом возникло множество вопросов, кита к сожалению нет. Документации очень много, где конкретно искать непонятно плюс ко всему все рассмотренные мной описания сделаны под предыдущие версии, а в 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 Feb 11 2010, 05:43

Цитата(Serg_Sm @ Feb 10 2010, 21:07) *
Документации очень много, где конкретно искать непонятно плюс ко всему все рассмотренные мной описания сделаны под предыдущие версии,

Основное по NIOS - на "родине" http://electronix.ru/redirect.php?http://www.altera.com/literature/lit-nio2.jsp (Processor Reference Handbook, Software Developer's Handbook, ну и остальные по мере надобности), по самому Quartus - естественно первым делом его handbook ( http://electronix.ru/redirect.php?http://www.altera.com/literature/hb/qts/quartusii_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://electronix.ru/redirect.php?http://www.altera.com/literature/hb/nios2/n2cpu_nii5v3.pdf
4) Нет, добавлять ничего не обязательно. JTAG UART это отдельная фича (сам не пользовался smile.gif ), с помощью которой Вы можете обмениваться с консолью NIOS в процессе отладки, как если бы Вы вставили в SOPC модуль UART, развели его на плате, подключили к COM-порту и работали, например, в Гипертерминале. Плюс у этой фичи, что на плате разводить ничего не надо, минус - что работать с таким UART можно только (на сколько я знаю) из консоли NIOS IDE.

Автор: Serg_Sm Feb 11 2010, 06:53

Большое спасибо за ответ.
Сейчас платы с разведенным JTAG у меня нет, поэтому хочу попробовать загрузить через AS. Требуется ли для этого какие-либо манипуляции в NIOS IDE?
После компиляции в симуляторе квартуса видно, что pio выводы остаются в нуле. Хотя в проекте NIOS им присваивается значение "1".

Автор: S_Lee Feb 22 2010, 20:45

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

Автор: barabek Feb 23 2010, 02:36

Цитата(S_Lee @ Feb 23 2010, 06:45) *
Как правильно создать компонент в сопк баилдер состоящий из портов входов и выходов?

А чем стандартные Peripherals->PIO не устраивают? А по теме -мало информации, отсюда только вопросы: интерфейс делали согласно спецификации авалон шины? В SOPC билдере, когда создавали новый компонент все сигналы и интерфейсы правильно определялись/назначались? Наконец, литературу "Avalon Interface Specifications" и раздел в quartus handbook "component editor" читали?

Автор: Kuzmi4 Feb 23 2010, 08:43

Цитата(S_Lee @ Feb 22 2010, 22:45) *
...а точнее он не попадает в адресное пространство....

для начала простенькие вопросы:
1) адресные линии вы ему забили в интерфейсе ?
2)на последней стадии создания ошибок в окошке не наблюдалось ?
3) он у вас в сопц билдере отражается ?

Автор: styuf Mar 9 2010, 10:22

Здравствуйте.
Я сделал проектик, с использованием niosa, который как то преобразует входные данные в выходные. Сам проект работает нормально, если программу хранить во внутренней памяти процессора. Но при попытки использования внешней флэшки застопорился. Делаю все, как написано http://electronix.ru/redirect.php?http://www.profelectronica.ru/index.php?option=com_content&view=article&id=64%3Aniosii&catid=42%3Adevaart&Itemid=71&8287022a4ffc9b43c8b1b7997c9cdac2=8a1e49e43ab21e3e9029372cab250efb&limitstart=3 , и появляется ошибка: No CFI table found at address 0x01000000.
Может что посоветуете?

Автор: vadimuzzz Mar 9 2010, 10:44

Цитата(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 Mar 12 2010, 09:23

Жалко, что плохо развит biggrin.gif
По порядку:
- плата стандартная альтеровская - Nios II Development board для EP2C35F672C6N такого циклона второго;
- проект самодельный;
- только программку хранить;
- картинка из SOPC (прикрепленна);
- читал, но видимо до проблем, разобранных там еще не добрался, по причине, обнаруженной пол часа назад: оказалась, что в SOPCе указывал не ту память. Отодрал наклейку с корпуса памяти и обнаружил S29GL128M10TFIR1. И думаю все бы ничего, щас все исправлю, но в инете не нашел ни одного описания именно этой памяти, даже на сайте изготовителя, а без описания не знаю как задавать в сопсе описание оной памяти.
Никто не работал с такой?

 

Автор: vadimuzzz Mar 13 2010, 10:57

это spansion. сама микросхема, видимо, снята с производства. ее более новая версия: http://electronix.ru/redirect.php?http://www.spansion.com/Products/Pages/ProductDetails.aspx?ProdID=S29GL128P. вот даташит на старую: http://electronix.ru/redirect.php?http://rapidshare.com/files/362755049/013-5320-S29GL032M10.pdf.html. из схематика http://electronix.ru/redirect.php?http://www.altera.com/literature/manual/CycloneII_NiosII_2C35_Rev02_DB_SCH.zip (зачем наклейку отдирали ? smile.gif) видно, что подкючена в 8-битном режиме, это надо учесть в SOPC-билдере. по идее, там все как у интела, ну в крайнем случае override сделать. читайте тут: www.altera.com/literature/ug/ug_nios2_flash_programmer.pdf. вектор сброса ниоса нацелить на флеш.

Автор: S_Lee Mar 14 2010, 14:37

Кто-то может подсказать как можно создать блок, дающий на вывод тактирование в 1кГц, у меня циклон первый, там 50МГц тактовая, счетчик такую не дает частоту, можно конечно в ниосе написать мелкую программку, которая будет тактировать в 1кГц, но возможно есть проще способ???

Автор: barabek Mar 15 2010, 01:03

Цитата(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 разрядов).

Автор: S_Lee Mar 20 2010, 09:40

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

Автор: des00 Mar 20 2010, 09:56

Цитата(S_Lee @ Mar 20 2010, 03:40) *
как счетчик может дать 1КГц из 50МГц??? 16ти разрядный допустим -> (50 000 000 / (2^16=65536))=762 Гц

а поделить на число отличное от 2^16 ?

Автор: barabek Mar 21 2010, 22:07

Цитата(S_Lee @ Mar 20 2010, 19:40) *
как счетчик может дать 1КГц из 50МГц??? 16ти разрядный допустим -> (50 000 000 / (2^16=65536))=762 Гц

Не берем 65536, берем 50000 и получаем ровно 1кГц. smile.gif

Автор: styuf Mar 22 2010, 07:20

Вечер добрый)
Вопросы собственно такие:
-Научился работать с флэшкой (ну или почти научился), делаю так, что бы с неё по нажатию кнопки фактори (factory) грузился и проект в альтеру с ниосом, и программка к ниосу. Но возникает такая трудность - программа работает 5 минут и стопарится. то бишь просто перестает реагировать на что либо (в нормальных условиях она по нажатию кнопки на плате раз в секунду выдает данные из ниоса). У кого-нить была такая проблема или хотя бы идеи есть, а то третий день ничего придумать не могу.
- Чем отличаются режимы NIOS II EPCS, NIOS II USER, NIOS II FACTORY в флэш программере кроме адреса оффсета?

Данные о проекте чуть выше по топику.

Автор: vadimuzzz Mar 22 2010, 07:52

Цитата(styuf @ Mar 22 2010, 13:20) *
- Чем отличаются режимы NIOS II EPCS, NIOS II USER, NIOS II FACTORY в флэш программере кроме адреса оффсета?

во флеш-программере, пожалуй, ничем. последние 2 имеют отношение к фиче циклона-3 - Remote Upgrade. пример для active parallel: www.altera.com/literature/an/AN521.pdf

по первому вопросу: ниос тоже висит или только программа? на flash-programmer откликается?

Автор: styuf Mar 22 2010, 08:10

Цитата
во флеш-программере, пожалуй, ничем

Эти параметры по умолчанию выставляют разное смещение адреса. Я так понимаю, именно начиная с величины смещения и начинается писаться прошивка для альтеры (То бишь не с нулевого). Судя по всему у циклона есть контроллер, которые работает с флэшками и при включении питания тянет прошивку из определенного места. А как конфигурировать контроллер мне на глаза не попадалось(
Цитата
по первому вопросу: ниос тоже висит или только программа? на flash-programmer откликается?

Хм, я даже и не знаю. Посмотрю, тогда скажу. У меня подозрения на переполнение чего-нибудь (памяти). Так как программа работает ровно какое-то время в активном режиме (при нажатой кнопке). В пассивном режиме, когда ничего в логике альтеры не происходит, оно может стоять хоть сколько.

Автор: vadimuzzz Mar 22 2010, 08:26

Цитата(styuf @ Mar 22 2010, 14:10) *
Судя по всему у циклона есть контроллер, которые работает с флэшками и при включении питания тянет прошивку из определенного места.

не только
Цитата
А как конфигурировать контроллер мне на глаза не попадалось(

http://electronix.ru/redirect.php?http://www.altera.com/literature/hb/cyc3/cyclone3_handbook.pdf секция 9

Автор: spectr Apr 13 2010, 18:17

Только начал осваивать 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 (я так понимаю, именно в этом и затык) нигде не нашел упоминания.......

Автор: barabek Apr 13 2010, 23:29

Цитата(spectr @ Apr 14 2010, 05:32) *
Собственно, как выполнить пункт 5 (я так понимаю, именно в этом и затык) нигде не нашел упоминания.......

попробуйте в строке "Additional nios2-download arguments" в диалоговом окне Run, вкладка Main написать --go

Автор: vadimuzzz Apr 14 2010, 00:37

Цитата
То есть, что получается при запуске программы - я в консоли 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
}

это будет работать независимо от наличия кэша

Автор: spectr Apr 15 2010, 06:33

Цитата
попробуйте в строке "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-системе выровнены автоматически, если что.

Автор: barabek Apr 15 2010, 06:49

 По второй ошибке. Вообще-то тут у уважаемого 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

Цитата(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);

Автор: vadimuzzz Apr 15 2010, 08:21

да, это я неудачно скопипастил, правильный код такой:

Код
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-билдера. пины в квартусе правильно разведены, варнингов при компиляции не кидал про ноги? лог компиляции в квартусе тоже давайте на всякий случай.

Автор: spectr Apr 15 2010, 09:09

Все заработало!
Ошибка была в том, что я использовал неправильные адреса blush.gif
Сейчас, как и посоветовали, взял алиасы на них их из system.h (он, как я понимаю, генерится SOPC-билдером, да?) и все заработало.
Ключик "--go" тоже заработал (похоже что он и раньше работал, но т.к. я использовал некорректные адреса - то и не видел ничего).
Разрядность PIO также оказалась рабочей.

В общем, почти все косяки были из-за обращений к некорректным адресам )))

Спасибо за помощь!

Пока что полет нормальный - все работает четко. Начинаю втыкать как использовать загрузку с флэшки.

Автор: spectr Apr 15 2010, 13:25

Что-то аццкий 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".........

Автор: vadimuzzz Apr 15 2010, 14:20

да, нужна лицензия

Автор: spectr Apr 15 2010, 14:24

Я проверил в Quartus->Tools->License Setup у процессора стоит Expiration: permanent... Это означает что лицензия корректна?

Автор: vadimuzzz Apr 15 2010, 15:29

в логах компиляции поищите "Opencores-бла-бла-бла" - если есть, значит лицензии нету.

Автор: spectr Apr 15 2010, 15:33

Да, есть такое. Курю форум, понимаю что надо пофиксить фичу. Но что-то не пойму как. Просто везде пишут про vendor_string, а в моем .dat'е такого вооооообще нет, зато есть

FEATURE 6AF7_00A2 alterad 2011.11 permanent uncounted HOSTID=0022152f62fe \
ISSUER="ICK&C 2007" SIGN="1234 5678 9ABC DEF0 1234 5678 \
1234 5678 9ABC DEF0 1234 5678 1234 5678 9ABC DEF0 1234 5678 \
1234 5678 9ABC DEF0 1234 5678 1234 5678 9ABC DEF0 1234 5678"

FEATURE 6AF7_00A5 alterad 2011.11 permanent uncounted HOSTID=0022152f62fe \
ISSUER="ICK&C 2007" SIGN="1234 5678 9ABC DEF0 1234 5678 \
1234 5678 9ABC DEF0 1234 5678 1234 5678 9ABC DEF0 1234 5678 \
1234 5678 9ABC DEF0 1234 5678 1234 5678 9ABC DEF0 1234 5678"

. Как быть?

Автор: vadimuzzz Apr 15 2010, 15:46

способа 2 - буржуйский и народный ) если интересует второй, давайте мыло

Автор: spectr Apr 15 2010, 15:47

ilkz (at) yandex.ru

Автор: vadimuzzz Apr 15 2010, 15:54

выслал

Автор: spectr Apr 15 2010, 18:13

Все получил.

Компиляция прошла без упоминаний о триальности опенкорки, так что делаю вывод что все заработает на железке (это проверю завтра).

Спасибо за помощь!

Автор: spectr Apr 19 2010, 11:59

Итак, все заработало как я и ожидал. Программка и Система была простейшая - бегущий светодиод (т.е., 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 МГц).

 

Автор: vadimuzzz Apr 19 2010, 12:10

такое впечатление, что либо бинарник большой, либо адреса левые. как будто что-то не пересобралось (system library?) куда-то он не туда пишет, ну и проверить естественно не может. выхлоп компилятора покажите

Автор: spectr Apr 19 2010, 12:49

Вот отчет компилятора 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


Похоже что ему мало памяти...

Автор: Sergey'F Apr 19 2010, 13:26

Я немного не понял, что Вы делаете

Когда при запуске он пытается загрузить программу и пишет:
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 не работал.

Автор: vadimuzzz Apr 19 2010, 14:21

Цитата
Если это важно: в свойствах системной библиотеки параметры Program Memory и ReadOnly Memory установлены на On-Chip память.

Еще одно уточнение - процессор по сбросу и исключению уходит в память EPCS. Но в системной библиотеке, как я уже писал выше память программ и ROM-память указывают на OnChip-память.

на EPCS должен указывать только вектор сброса. как уже писал Sergey'F, по этому адресу живет начальный загрузчик(там маленькое ОЗУ в компонент встроено+контроллер SPI), все остальное (и системная библиотека) должно располагаться в RAM. собственно запуск программы из ниос-иде не затрагивает загрузчик. а по памяти - вроде хватает, еще 3к свободно. хотя для того, что вы привели 13к как-то многовато.

Автор: barabek Apr 19 2010, 21:37

 кроме всего вышесказанного предыдущими, при использовании прерываний подключайте файл sys/alt_irq.h

Автор: Porty Apr 30 2010, 07:45

Добрый день,
возникла проблема с средой Eclipse:
Стал изучать NIOSII и начал с этих уроков (на которые ссылается сама альтера) http://electronix.ru/redirect.php?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 програматор и отладчик.

Как его включить так чтоб он в среде програмирования появился?

Автор: vadimuzzz Apr 30 2010, 07:49

Цитата(Porty @ Apr 30 2010, 14:45) *
Как его включить так чтоб он в среде програмирования появился?

зашейте из квартус-программера sof, потом в ниос-иде жмите Run. при включенном jtag`е и правильном sof эклипс увидит циклон и ниос в нем (все настройки в авто). чтобы создать конфигурацию, ткните в пункт Nios II Hardware

Автор: Porty May 4 2010, 05:48

спасибо, запустил, но почему во время отладки при попытке прохода по шагам текущая выполняемая строка по F6 или F5 скачет достаточно странно (то всё линейно исполняется то назад проскакивает и тд)?

Автор: vadimuzzz May 4 2010, 12:47

Цитата(Porty @ May 4 2010, 12:48) *
спасибо, запустил, но почему во время отладки при попытке прохода по шагам текущая выполняемая строка по F6 или F5 скачет достаточно странно (то всё линейно исполняется то назад проскакивает и тд)?

включена оптимизация кода по размеру (-Os)? для отладки лучше оставить debug (-Og)

Автор: Porty May 6 2010, 06:25

спасибо, ещё вопрос: как освободить усб бластер занятый в среде ниойса для квартуса не выгружая самой среды ниойс еклипс? пробовал нажимать на красный квадрат остановки отладки/запуска не помогает.

Т.е. заливаеш в начале по джитагу прошивку из квартуса через байт бластер, потом запускаеш ниойс эклипс, заливаеш через него программу, останавливаеш выполнение, возврощаешся в квартус и пробуеш перезалить иную версию а он выдаёт:

Цитата
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


и пока среду разработки для ниойса вообще не закроеш квартус будет выдавать такую ошибку.

Автор: vadimuzzz May 6 2010, 07:33

Цитата(Porty @ May 6 2010, 13:25) *
как освободить усб бластер занятый в среде ниойса для квартуса не выгружая самой среды ниойс еклипс?

должен освобождаться, если отладчиком не занят. похоже баг. а отладчик что пишет в окне, где процессы висят (там типа ""thread gdb running")? если нажать красную кнопку, там должно писаться "terminated". что за операционка?

Автор: Porty May 6 2010, 08:01

win7 64bit

Автор: vadimuzzz May 6 2010, 08:17

Цитата(Porty @ May 6 2010, 15:01) *
win7

не советуют

Автор: Porty May 7 2010, 07:14

запустил один чип sdram памяти 256мегабит, 16 бит шина данных, но на плате стоит 2 чипа, с общими сигналами управления и адресом, с раздельными шинами данных (32битный модуль памяти в итоге), как их подключить в spoc билдере так чтоб одновременно шло обращение к обоим чипам в 32битном режиме?

просто выставить в настройках custom memory нельзя ибо сигналы маскирования байт будут уже для 32 бит т.е. на 4 байта, а не для 16 бит, объединять через тристейт мост авалона не хочу, т.к. насколько я понимаю они станут как 2 раздельных 16 разрядных банка памяти, а вот как их объединить в один 32битный банк памяти?

Автор: Kuzmi4 May 7 2010, 07:30

2 Porty
http://electronix.ru/forum/index.php?s=&showtopic=68235&view=findpost&p=752536 у вас http://electronix.ru/redirect.php?http://www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html
то там http://electronix.ru/redirect.php?http://www.altera.com/products/devkits/altera/documents/cy2_fpga_starter_board_schematic.pdf сдвоенных SDRAM-ов smile.gif
там всего по одной штучке

Цитата
Memory:
8-Mb SDRAM
512-Kb SRAM
4-Mb flash

Автор: Porty May 7 2010, 07:35

у меня своя плата, точнее набор. поспешили и сделали задел не продумав всю организацию памяти.

Автор: Kuzmi4 May 7 2010, 07:37

2 Porty
Тогда, наверно, дорога вам ковыряйть альтеровский SDRAM контроллер на свой лад unsure.gif

Автор: Porty May 7 2010, 14:10

хочу сделать согласно этому рисунку (т.е. все сигналы адреса и управления в том числе и CS запаралелены у обоих модулей):
http://electronix.ru/redirect.php?http://img708.imageshack.us/img708/3314/98895866.jpg
это кстати взято из официальной альтеровской документации (http://www.altera.com/literature/hb/nios2/n2cpu_nii51005.pdf) на sdram контроллер, но как включать такой режим и использовать упоминаний нет, просто сказано что вот он существует.

Автор: vadimuzzz May 7 2010, 14:23

а что мешает взять custom memory и скоммутировать сигналы маскирования?

Автор: Porty May 7 2010, 16:39

чтение понятно как можно скомутировать, а вот чтоб замаскировать запись необходимо либо как то не подавать сигнал записи на сам модуль что вообще невозможно без перепайки (наверное так и сделаю) ибо шины управления запаралелены, даже записывая 1 байт в память А идёт запись того же байта в память Б, т.е. нужно сделать буфер и как то сохранять те значения которые были что крайне сложно, да и смутила оригинальная документация на ip модуль памяти (что я выше выкладывал) по ней выходит что можно сделать средствами самой среды.

Автор: vetal May 7 2010, 18:02

Вы сигналы маскирования объединили или нет?

Автор: vadimuzzz May 8 2010, 05:42

Цитата(Porty @ May 7 2010, 23:39) *
чтение понятно как можно скомутировать, а вот чтоб замаскировать запись необходимо либо как то не подавать сигнал записи на сам модуль что вообще невозможно без перепайки (наверное так и сделаю) ибо шины управления запаралелены, даже записывая 1 байт в память А идёт запись того же байта в память Б, т.е. нужно сделать буфер и как то сохранять те значения которые были что крайне сложно, да и смутила оригинальная документация на ip модуль памяти (что я выше выкладывал) по ней выходит что можно сделать средствами самой среды.

а мне кажется, что просто половину DQMx на один чип завести, половину - на другой. и видиться 2 чипа x16 будут как один x32. разве нет? и во второй чип он не будет писать, если маска не установлена. или у вас на плате сигналы маскирования объединены? тогда - резать smile.gif

Автор: Reanimator++ May 9 2010, 10:54

Вопрос от совсем начинающего )

Есть плата с Cyclone2, в котором Nios2 и немного логики.

Попробовал собрать и позапускать примеры - работает. Делал по мануалу hardware development tutorial.


Собрал свою систему в которой cpu, onchip_mem, uart, pio и sysid.

Модификацией примера hello_world_small добился что оно начало делать то что мне нужно. Обрадовался что все работает.

Решил добавить epcs_controller_module для того чтобы номер платы сохранять.
Добавил его в SOPC, пересобрал железо в квартусе, залил в плату.
Пересобрал софт, запускаю, IDE говорит что NIOS не отвечает.

Попробовал вернуть обратно, пересобрать заново, все-равно не отвечает. Пробовал разнообразные варианты пересборки и тыкания на все подряд, но пока результата так и не получил.

Собственно, как диагностировать почему IDE не может законнектиться к процу? Чего ему не хватает для счастья?

Автор: vadimuzzz May 9 2010, 13:57

Цитата(Reanimator++ @ May 9 2010, 17:54) *
Собственно, как диагностировать почему IDE не может законнектиться к процу? Чего ему не хватает для счастья?

логи покажите (NIOS IDE). картинку из билдера тоже можно.

Автор: Reanimator++ May 9 2010, 14:23

Я все облазил но файла с логами IDE не нашел..

Я конфигурирую плис через Quartus Programmer, затем жму на проект Run As Nios 2 Hardware.
после успешной компиляции IDE пишет в консоли -

Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Pausing target processor: not responding.
Resetting and trying again: FAILED
Leaving target processor paused

Картинка из билдера не очень информативна.. Вложил. Еще вложил успешный лог билдера..

 

 vezuviy_controller_log.txt ( 3.02 килобайт ) : 84
 

Автор: vadimuzzz May 9 2010, 14:51

попробуйте "Run As..", создать новую конфигурацию, что пишется? если все в "Auto", от должен сначада усб-бластер увидеть, а потом проц, что пишется?

Автор: Reanimator++ May 10 2010, 09:22

Насчет того что вы последний раз написали не совсем понял куда смотреть.
Юсб бластер видится еще когда я Quartus 2 Programmer запускаю чтобы железо проца залить в плату. А вот софт для проца уже не получается загрузить через jtag debugging module.

Я провел следующие эксперименты:

1. В глючный проект железа (не отвечающий проц) пытался залить разные софтовые проекты, в том числе не родные (для другого железа) и точно рабочие.
Результат везде один - проц не отвечает, FAILED. Причем даже до проверки sysid дело не доходит, сразу же вешается.

Сделал вывод что копаться надо в том что квартус создает.

2. Создал заново пустой проект с дефолтными настройками (мало ли что я там натыкал). Скопировал туда единственный верилоговский файлик с моей логикой и инстанциацией (фу, слово-то какое) проца. Создал заново в SOPC (протыкал мышой, а не копировал файлы) проект как на картинке (только без таймера, он мне не нужен).
Откомпилировал, залил в плату.
Создал минимальный тестовый пример из шаблона в NIOS IDE и запустил Run As Nios II Hardware.
Проц нашелся, прога отработала.

Вернулся в квартус, добавил epcs_flash_controller в SOPC, пересобрал, перекомпилировал, перезалил в плату.
В Nios IDE пересобрал тестовый пример, запустил - проц не видится, FAILED.

Вернулся в квартус, удалил epcs_flash_controller в SOPC, пересобрал, перекомпилировал, перезалил в плату.
В Nios IDE пересобрал тестовый пример, запустил - проц нашелся, программа отработала.

Т.е. добавление epcs контроллера в SOPC систему добивает проект.

В принципе меня устраивает и то что сейчас работает, но как-то не нравится мне это все, если добавление одного в принципе несложного компонента приводит к таким непредсказуемым результатам. И самое главное я не знаю как понять чего именно хочет от меня система..

Автор: vadimuzzz May 10 2010, 11:32

а куда reset/exception указывает (особенно в нерабочем варианте)? как конфигурируется ПЛИС? только через jtag? еще настройки system library покажите

Автор: Reanimator++ May 10 2010, 14:05

Reset - 0x00
Exception - 0x20
оба в onchip_mem, т.к. другой памяти нет. (собсно, у меня только один чип циклона на плате)
настройки system lybrary минимальные, см картинку.

впрочем, опять же я пробовал грузить даже проекты под другое железо, результат тот же, т.е. врядли дело в Nios IDE...

да и разве Jtag Debugging Module не должен отрабатывать не зависимо от того где сейчас проц исполняет код и вообще что бы там с ним ни было?

В окончательном виде платы плис конфигурируется в AS режиме из EPCS4 (к ней доступ и хотел получить для хранения номера платы.).
На время экспериментов она была пустой и все делалось через JTAG.

 

Автор: vadimuzzz May 10 2010, 14:10

а какая версия квартуса? тут недавно было -> http://electronix.ru/forum/index.php?showtopic=74308 была бага в самом квартусе

Автор: Reanimator++ May 10 2010, 14:15

Собственно, если в плату железо не залить совсем, то IDE ругается громко и красно, что железа нету, настойчиво предлагает сконфигурировать плис и запускает программер.


Думаю, для дальнейшего надо попробовать собрать вообще пустой проект, содержащий только проц и epcs_controller и выложить его...

Quartus II 9.0 build 132 02/25/2009 SJ Full Version, взято с torrents.ru.

Проблем с прошивкой флешки как в той теме нету, сейчас доваял рабочую прогу без доступа к epcs, создал в квартусе jic файл из sof-а, и программером закачал. При включении питания все сразу же запускается и работает.

Автор: vadimuzzz May 10 2010, 14:24

Цитата(Reanimator++ @ May 10 2010, 21:15) *
Проблем с прошивкой флешки как в той теме нету

там не с флешкой проблема, а с sof-файлом, если мне память не изменяет (было на alteraforum.com). похоже, что проц даже не инитится. м.б. вдобавок к процу в систему добавить независимый (от проца) блочок, лампочкой помигать, что прошивка прошла

Автор: Reanimator++ May 10 2010, 14:29

хорошая идея cool.gif , завтра попробую

Автор: Reanimator++ May 13 2010, 14:49

Мучения прервал, наткнувшись на описание своей проблемы в раздачах квартуса на torrens.ru. Человек пробовал 9-й квартус, вплоть до 9.1 SP2. Стабильную работу получил на 8.1. Видимо плохо отломали 9-й... Буду пробовать 8.1.

Автор: vadimuzzz May 13 2010, 15:09

странно, чего там ломать. на всякий случай: у меня в 9.1сп2 таких проблем не было

Автор: styuf Jun 8 2010, 05:59

Доброго времени суток всем. У меня такой вопрос - касательно лицензии - Во сколько станет лицензия на квартус + nios ii + использование uOS + TCP-IP стэк стандартный? И что именно нужно купить, что бы с этим работать? Пробовал писать проекты с крякнутым квартусом - дальше запуска примеров не ушел, так как при добавлении минимальных изменений начинает ругаться на таймлимитед функции.
Ну и естественно, если можно сломать, то я буду рад услышать как.

Автор: vadimuzzz Jun 8 2010, 06:10

по квартусу (может подойти и веб-эдишн)
http://electronix.ru/redirect.php?http://www.altera.ru/cgi-bin/price/price

по мегафункциям
http://electronix.ru/redirect.php?http://www.altera.ru/cgi-bin/go?23#n1

Автор: Iouri Jul 6 2010, 13:03

Господа,

Пытаюсь создать проект под Эклипс пробовал EDS10, with Q10, EDS9.1 with Q9.1, OS Win7.0 32 bit,
получаю собщение


: "Unable to create project" reason Failed to execute ./create -this -app --no-make

далее кликаю на кнопку детали и получаю вот такое сообщение

chmod:changing permissions of ,':Permission deniedchmod: changing permission of"/
create -this-app': Permission denied..

Подскажите в чем может быть поблема, под ХР все работает нормально

Спасибо!


Автор: torik Jul 9 2010, 04:20

Проблема в совместимости, наверное, как обычно. Ставьте Q10.0 или запускайте в режиме совместимости...

Автор: jb83 Jul 22 2010, 05:08

Здравствуйте вам.

Представим себе ситуацию: кристально честный человек biggrin.gif хочет проектировать устройства на основе FPGA фирмы Altera (с использованием NIOS II, а также без оного) - что для этого нужно КУПИТЬ?? Погуляв немного по просторам Altera'шного сайта, я набросал такой список:
- Quartus II Subscription Edition.
- Лицензия для NIOS II Core.
- IP МегаКорки по вкусу.

Вопросы:
1) Достаточно ли перечисленного выше набора для полноценной (не time-limited) работы?
2) Какие MegaCores идут в составе Quartus'а (или он поставляется "голый")?
3) Нужно ли в список добавить C2H Compiler (насколько он востребован и можно ли обойтись без него)?

Заранее благодарен.

Автор: des00 Jul 22 2010, 05:22

Цитата(jb83 @ Jul 22 2010, 00:08) *
2) Какие MegaCores идут в составе Quartus'а (или он поставляется "голый")?


обратитесь http://electronix.ru/redirect.php?http://altera.ru/ вам дадут полный расклад на лицензионный квартус

Автор: jb83 Jul 22 2010, 08:47

Цитата(des00 @ Jul 22 2010, 08:22) *
обратитесь сюда...


у них это где-то на сайте озвучено (чего-то не по глазам unsure.gif )?? или спросить через контакты?

Автор: Stewart Little Jul 22 2010, 10:32

Цитата(jb83 @ Jul 22 2010, 09:08) *
... проектировать устройства на основе FPGA фирмы Altera (с использованием NIOS II, а также без оного) - что для этого нужно КУПИТЬ??

Что покупать - это зависит от задачи.
В минимальной конфигурации ничего покупать не надо - используйте Quartus II Web Edition и вариант процессорного ядра NiosII/Economy - он бесплатный начиная с версии 9.1 ЕМНИП.
Если задача более сложная, то переходим ко второму вопросу.

Цитата(jb83 @ Jul 22 2010, 09:08) *
Погуляв немного по просторам Altera'шного сайта, я набросал такой список:
- Quartus II Subscription Edition.
- Лицензия для NIOS II Core.
- IP МегаКорки по вкусу.

Вопросы:
1) Достаточно ли перечисленного выше набора для полноценной (не time-limited) работы?

Для "не timelimited" - достаточно. Но полнота этого списка опять-же зависит от задачи.
Во-первых, Quartus II Subscription Edition не является жизненно необходимым. Под большое кол-во задач хватит и Web Edition'а.
Далее - планируете ли Вы моделировать Вашу систему? - Если да, то добавляйте в список ModelSim-Altera Edition (платную версию) или ModelSim-Altera Starter Edition (эта версия бесплатная, но у нее имеется ограничение на кол-во строк симулируемого кода - до 10000 строк, ЕМНИП).
Планируете ли Вы использовать ethernet? Если да, то добавляйте в список стек протоколов InterNiche.
Планируете ли Вы использовать RTOS? Если да, то добавляйте в список ось по Вашему выбору.
И т.д.

Цитата(jb83 @ Jul 22 2010, 09:08) *
2) Какие MegaCores идут в составе Quartus'а (или он поставляется "голый")?

Вместе с квартусом инсталлируется вся библиотека альтеровских ip-ядер (полный список см. на сайте у альтеры). Для них требуется приобретение лицензий.
Особая песня - периферийные устройства, входящие в состав библиотеки SOPC Builder'а - они лицензирования не требуют.

Цитата(jb83 @ Jul 22 2010, 09:08) *
3) Нужно ли в список добавить C2H Compiler (насколько он востребован и можно ли обойтись без него)?

Если планируете использовать аппаратное ускорение сишного кода - то включайте. Если нет, то и не надо.

Автор: jb83 Jul 22 2010, 13:54

Цитата(Stewart Little @ Jul 22 2010, 13:32) *
... планируете ли Вы использовать ethernet? Если да, то добавляйте в список стек протоколов InterNiche.


А если прикрутить один из многочисленных опенсорц TCP/IP стеков (тот же uIP, например)? или это для начинающего слишком замороченная задача?

Автор: vadimuzzz Jul 23 2010, 06:30

Цитата(jb83 @ Jul 22 2010, 20:54) *
А если прикрутить один из многочисленных опенсорц TCP/IP стеков (тот же uIP, например)? или это для начинающего слишком замороченная задача?

можно даже использовать опенсорц IP-ядра, тот же Ethernet MAC. а халявы нигде не будет, чуть дальше "hello world" - придется разбираться.

Автор: Shaggy Aug 3 2010, 13:26

Здравствуйте, подскажите пожалуйста в NIOS возможна ли такая вставка

Код
FILE *f;
f=fopen("Massiv.txt","r");
fscanf(f,"%d",&c);
fclose(f);

Необходимо считать данные из файла, чтобы потом погрузить их в ПЛИС. Может быть есть какие-то еще варианты, для того чтобы вытащить из файла данные?

Автор: vadimuzzz Aug 3 2010, 14:13

разумеется, возможно, но:
файловые операции предполагают наличие файловой системы, а конкретно вызовы fopen, fscanf и т.п. - использование библиотеки stdio. что, вообще говоря, для систем с ниосом вовсе не обязательно. из вашего вопроса не ясно где находится файл и кто в ПЛИС является потребителем. телепаты в отпуске, да smile.gif

Автор: Shaggy Aug 4 2010, 05:25

Код
int c;
с=0;
FILE *f;
f=fopen("D:\Massiv.txt","r");
fscanf(f,"%d",&c);
fclose(f);

Это всего лишь пример... Проблема заключается в том,что в значение переменной не изменяется. Как был 0 так он и остался, в Borland c++ все работает.

Может быть есть еще какие-нибудь варианты чтения из файла???

Автор: vadimuzzz Aug 4 2010, 05:47

используете host-base file system? читайте здесь http://electronix.ru/redirect.php?http://www.altera.com/literature/hb/nios2/n2sw_nii52005.pdf, раздел "Using File Subsystems". там есть нюансы, типа "работает только в режиме отладки". ну и компоненты соответствующий д.б. включены в BSP

Автор: Shaggy Aug 4 2010, 07:00

Спасибо большое за помощь. Расставление галочек эта какая-то беда... Стоило поставить галочку и все заработало.

Автор: Shaggy Aug 4 2010, 13:10

Возник следующий вопрос.
Читаю из текстового файла данные (значения пикселей картинки 256х256) полученные в Borland C++ в массив созданный в NIOS II. Затем этот массив записываю в новый файл. И этот новый файл открываю в Borland. Проблема в скорости чтения/записи данных. Данные в новый файл пишутся несколько минут.

Автор: Shaggy Aug 6 2010, 06:53

Добрый день подскажите пожауйста в SOPC Builder собрал системку, она сгенерировалась без проблем, но при компиляции проекта на стадии анализа выдается ошибка "Data size does not match the number of bytes at line 65537 in Hexademical (Intel-Format) File "onchip_memory2_0.hex"".

Автор: vadimuzzz Aug 6 2010, 07:26

наверное, остался от компиляции программы в эклипсе. можно удалить файл и сгенерить систему заново

Автор: Shaggy Aug 6 2010, 07:56

Подскажите пожалуйста от чего зависит скорость обмена данными между макетом и компьютером. в NIOS II открываю файл fopen(), записываю в массив, затем этот массив при помощи fprintf() записываю в другой файл. Но данный процесс занимает подозрительно много времени. Исходный файл содержит информацию о значении пикселей картинки 256x256, а получаемый файл тоже значения пикселей,только после ДКП-ОДКП. Выполнение преобразования я отключил, так что просто пишу теже данные. Почему процесс чтения-записи происходит так долго?

Автор: vadimuzzz Aug 6 2010, 08:51

долго это сколько? а так, первое что на ум приходит - слишком много уровней абстракции, не все из которых документированы. примерно такая цепочка: драйвер ФС хоста -- библиотека обмена по JTAG -- JTAG -- ФС Ниоса -- библиотека stdio. последние 2 пункта скорости никак не прибавляют.

Автор: Shaggy Aug 6 2010, 08:54

Порядка 2-х 3-х минут.

Автор: _VM Oct 6 2010, 11:48

Всем привет!
В этой теме уже http://electronix.ru/forum/index.php?showtopic=68235&view=findpost&p=745221 вопрос о триальности open-core.
Собственно, я с ним тоже столкнулся.
Ездил на 9.1 все нормально было, пересел на 10.0 и заглох.

Цитата
Info: SRAM Object File X:/DE2_NET/DE2_NET_time_limited.sof contains time-limited megafunction that supports OpenCore Plus feature -- Vendor: 0x6AF7, Product: 0x00A2

Добавлю, генерится time limited sof, который загружается и работает.
При загрузке программером квартуса выводит окно типа: "нажми cancel и у тебя все встанет".
Действительно, прошивка работает (проверяю пингом самодельный TCP/IP стек) пока не нажмешь на кнопку.
Как понимаю предлагается купить ниос .
Мож есть народное средство laughing.gif ?

Автор: _VM Oct 6 2010, 15:28

Цитата(_VM @ Oct 6 2010, 14:48) *
Всем привет!
В этой теме уже http://electronix.ru/forum/index.php?showtopic=68235&view=findpost&p=745221 вопрос о триальности open-core.
Собственно, я с ним тоже столкнулся.
Ездил на 9.1 все нормально было, пересел на 10.0 и заглох.


Добавлю, генерится time limited sof, который загружается и работает.
При загрузке программером квартуса выводит окно типа: "нажми cancel и у тебя все встанет".
Действительно, прошивка работает (проверяю пингом самодельный TCP/IP стек) пока не нажмешь на кнопку.
Как понимаю предлагается купить ниос .
Мож есть народное средство laughing.gif ?


Проблема решилась перепиской с участниками форума.

Автор: nkie Oct 19 2010, 06:02

Здравствуйте, господа форумчане. У меня чайниковский вопрос. Тут где-то прочитал, что если программа для ниос не очень большая, то ее можно зашить одновременно с конфигурацией fpga одним pof файлом. Не подскажите как это сделать? Что-то никак не найду. Просто конфигурацию для ПЛИС мы делаем в SOPC билдере, а программу пишем в NIOS EDS, который создает свой файл и не изменяет первичный pof. Разве не так? Или я ошибаюсь...

Автор: vadimuzzz Oct 19 2010, 06:19

при сборке программы создается hex-файл для памяти, его можно вшить в sof(pof). для этого нужно настроить вектор сброса на on-chip memory, туда же слинковать программу. после каждой линковки hex-файл будет обновляться, не забывайте запускать Assembler в квартусе. ну, и вариант с бутлоадером тоже никто не отменял.

Автор: Serhiy_UA Oct 19 2010, 06:35

Цитата(nkie @ Oct 19 2010, 09:02) *
Здравствуйте, господа форумчане. У меня чайниковский вопрос. Тут где-то прочитал, что если программа для ниос не очень большая, то ее можно зашить одновременно с конфигурацией fpga одним pof файлом. Не подскажите как это сделать? Что-то никак не найду. Просто конфигурацию для ПЛИС мы делаем в SOPC билдере, а программу пишем в NIOS EDS, который создает свой файл и не изменяет первичный pof. Разве не так? Или я ошибаюсь...


Все делайте согласно прилагаемого ug_nios2_flash_programmer.pdf, если у Вас QII 7.2
А точнее, раздел "2. Using the Flash Programmer in IDE Mode"
Какой пункт в нем не ясен?

 ug_nios2_flash_programmer_1.pdf ( 675.04 килобайт ) : 742
 

Автор: nkie Oct 19 2010, 06:40

Можно ли такой же финт сделать с rbf файлом? У меня просто несколько странная система. Cyclone грузится rbf файлом из компьютера через MAXII по PS. Т.е. моя собственная прога берет rbf и сует через MAXII в Циклон. На Циклоне не JTAG-а ни чего больше нет. Хочу поиграться с НИОСОМ. Алтеровской платы у меня тоже нет. Развел отдельную плату со всеми возможными интерфейсами конфигурации но пока она в производстве, хочется хоть как-то этот НИОС пощупать... Вот и хочу конфигурационный файл с прошивкой слепить в rbf файл и залить по-старому... Реально ли это?

Автор: vadimuzzz Oct 19 2010, 07:09

Цитата(nkie @ Oct 19 2010, 13:40) *
Можно ли такой же финт сделать с rbf файлом? ... Реально ли это?

а в чем проблема? берете sof, как я выше описывал, конвертируете в rbf

Автор: nkie Oct 19 2010, 07:34

да проблема в том, что в проекте нет никаких flashmemory девайсов да и на плате их нет. А FlashProgrammer матерится на это когда я ему пытаюсь скормить .sopcinfo. Может закинуть какой нибудь флеш контроллер в проект надо... А все вектора в on-chip оставить... ?

Автор: vadimuzzz Oct 19 2010, 07:48

Цитата(nkie @ Oct 19 2010, 14:34) *
да проблема в том, что в проекте нет никаких flashmemory девайсов да и на плате их нет. А FlashProgrammer матерится на это когда я ему пытаюсь скормить .sopcinfo. Может закинуть какой нибудь флеш контроллер в проект надо... А все вектора в on-chip оставить... ?

зачем ва флеш-программер, если флеша нет 07.gif ? запускаете SOPC-билдер, в настройках процессора ставите reset и exception на on-chip, собираете проект. потом собираете прогу и запускаете квартусовский ассемблер, он сделает sof (или любой другой файл, в настройках можно указать)

Автор: nkie Oct 19 2010, 08:23

Цитата(vadimuzzz @ Oct 19 2010, 11:48) *
зачем ва флеш-программер, если флеша нет 07.gif ? запускаете SOPC-билдер, в настройках процессора ставите reset и exception на on-chip, собираете проект. потом собираете прогу и запускаете квартусовский ассемблер, он сделает sof (или любой другой файл, в настройках можно указать)

1. Собираю проект в SOPC-билдере. Самый простой первый туториал, где леды...
в настройках процессора ставлю reset и exception на on-chip
2. Генерю систему, получаю .sopcinfo
3. Компилирую проект в Квартусе, получаю .sof(.pof/.rbf)
4. Открываю NIOS EDS, подключаю там .sopcinfo, открываю пример count_binari, компилю его... получаю .elf

Что куда теперь подсовывать? Опять надо квартовский ассемблер на кого-то натравить? И какое место во всей этой истории занимает Flash Programmer?

Автор: vadimuzzz Oct 19 2010, 08:34

Цитата(nkie @ Oct 19 2010, 15:23) *
4. Открываю NIOS EDS, подключаю там .sopcinfo, открываю пример count_binari, компилю его... получаю .elf

внимательно смотрите выхлоп консоли во время сборки, там пишется какие файлы (в т.ч. hex созданы/обновлены) hex лежит в основной папке проекта, не в software

Цитата(nkie @ Oct 19 2010, 15:23) *
Что куда теперь подсовывать? Опять надо квартовский ассемблер на кого-то натравить? И какое место во всей этой истории занимает Flash Programmer?

просто запустите ассемблер, сгенерируется sof, потом конвертируйте его в rbf. флеш-программер вам не нужен

Автор: nkie Oct 19 2010, 09:26

Все, нашел где эти опции замены .hex файла... Спасибо за помощь

Автор: nkie Oct 20 2010, 12:44

рано обрадовался...
Циклон почему-то не шьется со встроенной в on-chip программой. Если прошивать Ниос с чистой памятью, то конфигурация прошивается успешно. Все делаю, как описано в посте
http://electronix.ru/forum/index.php?s=&showtopic=68235&view=findpost&p=691886
но видимо какие-то настройки все-таки упускаю...Подскажите пожалуйста, нужно ли выполнить еще какие-нибудь действия, для линковки программы во внутричиповую память?

Автор: vadimuzzz Oct 20 2010, 12:51

пишите конкретно, по шагам: что делали какие настройки, выхлоп консоли. а то на такие вопросы:

Цитата(nkie @ Oct 20 2010, 19:44) *
Подскажите пожалуйста, нужно ли выполнить еще какие-нибудь действия, для линковки программы во внутричиповую память?

приходит на ум только шаманский бубен с заячьей лапкой.

настройки линкера-то нашли?

Автор: nkie Oct 21 2010, 06:30

Проблема непрошивки решилась путем установления галочки в свойствах on-chip memory: "Enable non-default initialization file". Теперь циклон прошивается. Проект перешел из стадии "не компилится(не прошивается)" в стадию "тупо не работает" biggrin.gif

Все завелось, всем спасибо за участие 1111493779.gif

Автор: ILYCHOFF Jan 28 2011, 14:39

Помогите пожалуйста nios 9.1 Почему то нет конфигурации hardware в менеджере конфигураций. Ничего не понимаю... Хоть в бубен бей. Раньше не встречал такое.

Автор: Stewart Little Jan 28 2011, 15:02

Цитата(ILYCHOFF @ Jan 28 2011, 17:39) *
Помогите пожалуйста nios 9.1 Почему то нет конфигурации hardware в менеджере конфигураций. Ничего не понимаю... Хоть в бубен бей. Раньше не встречал такое.

Это в NiosII EDS (типа Run As - NiosII Hardware)?
Как именно Вы его открываете?
Скриншот в студию!

Автор: ILYCHOFF Jan 28 2011, 15:37

Обычно там есть вариант hardware, а у меня нет. При чем на другом компе все нормально. Может я где чего отключил... Как отлаживать не пойму...

 

Автор: vadimuzzz Jan 28 2011, 15:46

смущает строчка Filter matched 7 of 8 items. у меня там 4 из 4 при пустом эклипсе, hardware есть. залезьте в Filter, может там чего (сверху кнопка Filter launch configurations)

Автор: ILYCHOFF Jan 28 2011, 16:59

У меня три из трех при пустом эклипсе. Hardware нет. Просто пипец... Как такое может быть. Винда семерка. Хотя на другом компе все нормально.

Автор: Stewart Little Jan 28 2011, 17:17

Цитата(ILYCHOFF @ Jan 28 2011, 19:59) *
У меня три из трех при пустом эклипсе. Hardware нет. Просто пипец... Как такое может быть. Винда семерка. Хотя на другом компе все нормально.

Ну так 9.1 с Win7 не дружит.
Там были какие-то шаманские пляски по их скрещиванию - то-ли режим совместимости с XP включить надо, то-ли ява-машину обновить.

Автор: alexPec Jan 28 2011, 17:23

Цитата(ILYCHOFF @ Jan 28 2011, 19:59) *
У меня три из трех при пустом эклипсе. Hardware нет. Просто пипец... Как такое может быть. Винда семерка. Хотя на другом компе все нормально.


У меня такая же фигня была, правда на XP. Как только подключил и установил дрова на usb-blaster - все появилось волшебным образом. А на семерке так и не поборол Q91+nios, точнее только nios, Q91 работает. Но при этом хардваре видит, только при компиляции ошбки какие-то лезут компиляторные.

Цитата
то-ли ява-машину обновить


не, мне перл советовали обновить. Точно без бубна там не обходится!


Автор: ILYCHOFF Jan 28 2011, 17:51

Stewart Little прямо в точку. режим совместимости с ХР решил проблему всем спасибо. 1111493779.gif

Автор: juvf Feb 11 2011, 11:05

А как залить прошивку в ниос?

Собрал в sopc процессор, собрал в квартусе схему, скомпелировал.
В эклипсе создал проект и написал прогу для своей борды.
В режиме дебага программа работает.
Даже получилось залить свою конфигурацию в epcs и при включении работает моя аппаратная часть. А как залить программу для ниоса во флешь?

Автор: Stewart Little Feb 11 2011, 12:37

Цитата(juvf @ Feb 11 2011, 14:05) *
А как залить программу для ниоса во флешь?

Читайте http://electronix.ru/redirect.php?http://www.altera.com/literature/ug/ug_nios2_flash_programmer.pdf

Автор: juvf Feb 14 2011, 09:51

Цитата(Stewart Little @ Feb 11 2011, 17:37) *
Читайте http://electronix.ru/redirect.php?http://www.altera.com/literature/ug/ug_nios2_flash_programmer.pdf

Не получается. Картинка 1.1 How the Nios II Flash Programmer Works из этого документа..... Комп заливает прошивку в плис, а плис в epcs. естественно ниже требование для NIOS - должен быть контроллер epcs.
У меня боарт от terasic "Altera DE0 Board". В ниосе не было ни контроллера epcs, ни cfi, ни мостов. Апаратную часть удалось зашитить в ерсs. Но как програму ниоса зашить? В прикреплении функциональная схема. По документу Nios II FlashProgrammer User Guide требуется контроллер epcs. Добавил в ниос контроллер. Вывод контроллера clk стал выходом. Посмотрел принципиальную схему борды - генератор clk на epcs является не ПЛИС, а MAXII 240. И клок от епцс к DE0 подключен к ВХОДУ плис. Но в ниосе это выход. Как назначать пин у плис?

Наверно такой способ прожига не подойдет. даже на картинке 1.1 показанно, что через плис прожигается епцс, а в DE0, судя по схеме, мимо епцс. Может нужно слить аппаратную прошивку с программой в один файл и прошить его? Но это как сделать? Тоже не понятно.

Цитата
Все делайте согласно прилагаемого ug_nios2_flash_programmer.pdf, если у Вас QII 7.2
А точнее, раздел "2. Using the Flash Programmer in IDE Mode"
Какой пункт в нем не ясен?
Не понятно.... Должен ли быть в ниосе epcs контроллер? Если не должен быть, то картинки 2-2 из этого документа нету. Если он должен быть, то как назначить пины в DE0?
Кто нибудь пробовал поднять ниос на подобных бордах? Как в них заливать программу для ниоса в epcs?

p.s. в прикреплении принципиальная схема DE0.

 

 DE0_V12_RELEASE.pdf ( 339.36 килобайт ) : 76
 

Автор: naliwator Feb 14 2011, 10:17

Цитата(juvf @ Feb 11 2011, 14:05) *
А как залить прошивку в ниос?

Собрал в sopc процессор, собрал в квартусе схему, скомпелировал.
В эклипсе создал проект и написал прогу для своей борды.
В режиме дебага программа работает.
Даже получилось залить свою конфигурацию в epcs и при включении работает моя аппаратная часть. А как залить программу для ниоса во флешь?


Загляните в http://electronix.ru/forum/index.php?showtopic=78032 тему.

Автор: vadimuzzz Feb 14 2011, 10:32

Цитата(juvf @ Feb 14 2011, 15:51) *
p.s. в прикреплении принципиальная схема DE0.

чуть голову об нее не сломал. значится так: ниос можно грузить с любой из 2 флешек. соответственно надо добавить соотв. контроллер - epcs или cfi (и ресет туда выставить). если epcs - не забудьте соотв. ноги объявить в ассигментах как Regular I/O. надо еще уточнить по объему, сколько требуется для конфигурации самой ПЛИС, для процессора может не хватить памяти. я бы поставил cfi. и еще, судя по MSEL, режим загрузки циклона - active serial, так что dclk обязан заходить на epcs. если есть возможность, проверьте тестером.

Автор: Stewart Little Feb 14 2011, 10:36

Цитата(juvf @ Feb 14 2011, 12:51) *
Посмотрел принципиальную схему борды - генератор clk на epcs является не ПЛИС, а MAXII 240.

Если бы это было так, то ПЛИС не могла бы никогда сконфигурироваться от EPCS'ки.

Цитата(juvf @ Feb 14 2011, 12:51) *
И клок от епцс к DE0 подключен к ВХОДУ плис. Но в ниосе это выход. Как назначать пин у плис?

По поводу подключения контролера EPCS в выводам Cyclone III смотрите там : http://electronix.ru/redirect.php?http://www.altera.com/support/kdb/solutions/rd11012007_792.html

Цитата(juvf @ Feb 14 2011, 12:51) *
Наверно такой способ прожига не подойдет.

Спорим, что подойдет? sm.gif

Цитата(juvf @ Feb 14 2011, 12:51) *
Может нужно слить аппаратную прошивку с программой в один файл и прошить его? Но это как сделать? Тоже не понятно.

Можно и так, то это слишком трансректальный способ.

Цитата(juvf @ Feb 14 2011, 12:51) *
Должен ли быть в ниосе epcs контроллер?

Если собираетесь бутиться из EPCS, то обязательно должен быть! И вектор сброса процессора должен указывать на контроллер EPCS.

Еще раз призываю внимательно изучить документацию на FlashProgrammer!!!

Автор: juvf Feb 15 2011, 09:39

ну как-то не идет........ Ни один из 3-х способов. Решил хотябы один способ освоить. Пусть будет с контроллером epcs. Добавил в ниос контроллер. Как пины на контроллере назначать?

Цитата
По поводу подключения контролера EPCS в выводам Cyclone III смотрите там : http://electronix.ru/redirect.php?http://www.altera.com/support/kdb/solution...012007_792.html

Цитата
Therefore, in order to use the EPCS Configuration Controller the pins must be assigned manually, and the following settings must be made the Quartus® II software:

1. Choose Settings from the Assignments menu
2. Click Device and Pin Options from the Device category
3. Click Dual-Purpose Pins and then make the following changes:

Где в сетингах Device and Pin Options? так и не нашел.

В переводе naliwator исправленно Assignments->Devices->Device and Pin Options. Сделал Use as regular I/O. Но как пины назначить? Я так понял в схеме верхнего уровня создать примитив Pin xxxx ....... хз какой.... С большей вероятностью data0_to_the_epcs_controller должен быть входом, остальные выходы. (хотя не факт, возможно и что-то 2направлено). посоеденил пины к ниосу. После анализа...... что дальше? можно (или нужно) ли их в пин планере добавлять? Или в пинпланере не надо, а только в assignments editor и причем Location не назначать, а только, например для data0_to_the_epcs_controller назначить assignment name -> Data[0], а Location автоматом на стандартные ноги назначится?

Автор: vadimuzzz Feb 15 2011, 09:44

после того как сделаете их Regular I/O, назначайте в пин-планнере. для циклона-3 они автоматом не назначаются

Автор: juvf Feb 15 2011, 10:02

Цитата(vadimuzzz @ Feb 15 2011, 14:44) *
после того как сделаете их Regular I/O, назначайте в пин-планнере. для циклона-3 они автоматом не назначаются

тааак..... понятно.... спасибо ......

Автор: vadimuzzz Feb 15 2011, 10:11

как соберете проект и зальете sof, в консоли наберите nios2-flash-programmer --epcs --debug --base=адрес_контроллера. должна появиться инфа типа:

Цитата
Using cable "USB-Blaster [USB 7-1.2]", device 1, instance 0x00
Resetting and pausing target processor: OK
Processor data bus width is 32 bits
Looking for EPCS registers at address 0x04001800 (with 32bit alignment)
Initial values: 0001703A 04C00074 9801483A 9CFFF804 983FFD1E 0000203A
Not here: reserved fields are non-zero
Looking for EPCS registers at address 0x04001900 (with 32bit alignment)
Initial values: 92400237 4A40100C 483FFD26 90000135 92400237 4A40200C
Not here: reserved fields are non-zero
Looking for EPCS registers at address 0x04001A00 (with 32bit alignment)
Initial values: 108001C4 1004D0FA 002EE03A 003F9C06 002EE03A 003F9506
Not here: reserved fields are non-zero
Looking for EPCS registers at address 0x04001B00 (with 32bit alignment)
Initial values: 00000000 00000000 00000000 00000000 00000000 00000000
Not here: SPI_SLAVE_SEL has 0 valid bits (should be between 1 and 16)
Looking for EPCS registers at address 0x04001C00 (with 32bit alignment)
Initial values: 00000000 00000000 00000260 00000000 00000000 00000001
Valid registers found
EPCS signature is 0x17
EPCS identifier is 0x012018

Автор: juvf Feb 15 2011, 11:48

что-то подобное получилось, см рисунок. Но теперь ельф не грузится. Вообще я заметил, что загрузка кода для дебага в ниос зависит от расположения звезд. Похоже сейчас солнце в казероге, дебаг не грузится. Помогите разобраться.

Собрал в квартусе схему с ниосом. Вектор ресета на epcs контроллер. Скомпелял. теперь в эклипсе есть рабочий проект. заного сгенерировал BSP. Собрал проект. Вызвал Quartus Programmer и залил *.sof через JTAG в ПЛИС. Аппаратная часть стартовала и заработала в соответствии с разработкой в квартусе. ПКМ по проекту... Debug AS...->Debug Configuration... На вкладке Project нужный проект и нужный elf. На вкладке Target Connection нужный USB-Blaster. Жму кнопку Debug ..... Побежали цыфры с %%..... ошибка!!!

'Launching nameProject NIOS II Hardware Configuration' has encounted problem. Downloading ELF Process Failed.

смотрю лог

Failed Executing: [nios2-download, '--cable=USB-Blaster on localhost [USB-1]', --device=1, --instance=1, --sidp=0x1004158, --id=0x0, --timestamp=1297768557, /cygdrive/d/Work/Quartus/TestBench/software/frontEndOS/frontEndOS.elf] return code: 4, 'other error'
An exception stack trace is not available.

Что за ошибка? Иногда бывает бьюсь пол дня. на утро включаю - все работает. А иногда помогает пересборка без изменений ниоса, пересборка sof, пересборка BSP и программы для ниоса. Как это побороть?



 

Автор: alexPec Feb 15 2011, 13:33

Тактовые проверьте, законстрейнены ли.
От звезд у меня зависело когда тактовый клок не законстрейнен был. Соберешь-работает, чуть поменял - уже не работает.
И тактовая то какая? Не 120 МГц надеюсь? У меня с -8 кристаллом стабильно система всегда работает только на 80 МГц

Автор: vadimuzzz Feb 15 2011, 14:20

Цитата(juvf @ Feb 15 2011, 17:48) *
что-то подобное получилось, см рисунок.

все нормально, можно шить. насчет констрейнов - поищите по форуму, я вроде выкладывал. завтра еще раз выложу

вот по минимуму:
Код
# Clock constraints
create_clock -name {altera_reserved_tck} -period 100.000 -waveform { 0.000 50.000 } [get_ports {altera_reserved_tck}]
create_clock -name "sys_clk" -period 20ns [get_ports {osc_clk}] -waveform {0.000ns 10.000ns}
# Automatically constrain PLL and other generated clocks
derive_pll_clocks -create_base_clocks
# Automatically calculate clock uncertainty to jitter and other effects.
derive_clock_uncertainty
set_clock_groups -exclusive -group {altera_reserved_tck}

osc_clk замените на свое название. этого достаточно, чтобы завести проект с on-chip. если будет внешняя память, типа DDR, то нужно обязательно констрейнить и ее.

Автор: juvf Feb 16 2011, 04:34

частота 50 МГц. констрейн настроил. Непомогло. с утра уже час как рыба на льду.

Автор: vadimuzzz Feb 16 2011, 04:39

Цитата(juvf @ Feb 16 2011, 10:34) *
частота 50 МГц. констрейн настроил. Непомогло. с утра уже час как рыба на льду.

в отчете квартуса (и таймквеста) все нормально? Critical warnings нет?

Автор: juvf Feb 16 2011, 06:15

Цитата(vadimuzzz @ Feb 16 2011, 09:39) *
в отчете квартуса (и таймквеста) все нормально? Critical warnings нет?
критикал ворнингов нет. тока почему то в отчете один пукт красный, Unconstrained Paths. см рис.



 

Автор: vadimuzzz Feb 16 2011, 06:44

это он про I/O ругается, если внешнее ОЗУ не задействовано, можно забить. покажите конфиг системы (можно скрин из SOPC-билдера)

Автор: juvf Feb 16 2011, 06:50

Цитата
покажите конфиг системы (можно скрин из SOPC-билдера)

как конфиг показать не знаю. а скрин - пожалуста

В sopc билдере 2 варнинга. тоже не понятные.

 

Автор: vadimuzzz Feb 16 2011, 07:03

а линкера настройки какие? там в sdram ничего не пишется? если sdram задействована без констрейнов не обойтись

Автор: juvf Feb 16 2011, 07:09

Цитата(vadimuzzz @ Feb 16 2011, 12:03) *
а линкера настройки какие? там в sdram ничего не пишется? если sdram задействована без констрейнов не обойтись

Ну я сам в проекте ни мапил память. ни каких секций не назначал. все по умолчанию. вот вывод линкера
Код
Info: Linking frontEndOS.elf
nios2-elf-g++  -T'../frontEndOS_bsp/linker.x' -msys-crt0='../frontEndOS_bsp/obj/HAL/src/crt0.o' -msys-lib=ucosii_bsp -L../frontEndOS_bsp   -Wl,-Map=frontEndOS.map   -O0 -g -Wall   -EL -mno-hw-div -mhw-mul -mno-hw-mulx  -o frontEndOS.elf obj/Buffer.o obj/KeeperDevices.o obj/Spi.o obj/devices/Device.o obj/devices/FM25CL64.o obj/devices/Register.o obj/devices/deviceInfo.o obj/init.o obj/main.o obj/timer.o obj/uart.o -lm
nios2-elf-insert frontEndOS.elf --thread_model ucosii --cpu_name cpu_0 --simulation_enabled false --id 0 --sidp 0x1004158 --timestamp 1297768557 --stderr_dev uart_0 --stdin_dev uart_0 --stdout_dev terminal --sopc_system_name cpuNew --quartus_project_dir "D:/Work/Quartus/TestBench" --jdi D:/Work/Quartus/TestBench/software/frontEndOS_bsp/../../topLevel.jdi
Info: (frontEndOS.elf) 211 KBytes program size (code + initialized data).
Info:                  7973 KBytes free for stack + heap.
Info: Creating frontEndOS.objdump
nios2-elf-objdump --disassemble --syms --all-header --source frontEndOS.elf >frontEndOS.objdump
[frontEndOS build complete]

Автор: vadimuzzz Feb 16 2011, 07:34

Цитата(juvf @ Feb 16 2011, 13:09) *
Info: (frontEndOS.elf) 211 KBytes program size (code + initialized data).
Info: 7973 KBytes free for stack + heap.

к гадалке не ходи, это все в sdram только влезет. без констрейнов не взлетит. какой чип памяти?

Автор: juvf Feb 16 2011, 07:52

Цитата(vadimuzzz @ Feb 16 2011, 12:34) *
к гадалке не ходи, это все в sdram только влезет. без констрейнов не взлетит. какой чип памяти?

ступил, действительно 8Мб - это сдрам. чип - Zentel A3V64S40ETP pdf в инклуде

 A3V64S40ETP_v1.2_Zentel.pdf ( 668.98 килобайт ) : 2759
 

Автор: vadimuzzz Feb 16 2011, 08:26

Вот пример для похожего чипа (Micron, 32MB). Подправьте тайминги, в т.ч. и в настройках контроллера в билдере.

CODE

#**************************************************************
# sdram clocks (from PLL)
#**************************************************************
set main_clk pll1_inst|altpll_component|auto_generated|pll1|clk[0]
set sdram_clk pll1_inst|altpll_component|auto_generated|pll1|clk[1]
create_generated_clock -name sdram_clk_pin -source $sdram_clk

set_clock_groups -exclusive -group [list $main_clk $sdram_clk sdram_clk_pin]
#**************************************************************
# sdram timings
#**************************************************************
set tAC 5.4
set tOH 3
set tCM_Hold 0.8
set tCM_Setup 1.5
set tD_Hold 0.8
set tD_Setup 1.5
set tA_Hold 0.8
set tA_Setup 1.5
#**************************************************************
# Board Timings
set CLK_BD_MAX 0.1
set CLK_BD_MIN - 0.1
set DATA_BD_MAX 0.1
set DATA_BD_MIN - 0.1
#**************************************************************
#**************************************************************
# Set Input Delay
#**************************************************************
set_input_delay -max -clock sdram_clk_pin [expr $CLK_BD_MAX + $tAC + $DATA_BD_MAX] [get_ports {sdram_dq[*]}]
set_input_delay -min -clock sdram_clk_pin [expr $CLK_BD_MIN + $tOH + $DATA_BD_MIN] [get_ports {sdram_dq[*]}]
#**************************************************************
# Set Output Delay
#**************************************************************
set_output_delay -max -clock sdram_clk_pin [expr $DATA_BD_MAX + $tD_Setup - $CLK_BD_MIN] [get_ports {sdram_dq[*]}]
set_output_delay -min -clock sdram_clk_pin [expr $DATA_BD_MIN + $tD_Hold - $CLK_BD_MAX] [get_ports {sdram_dq[*]}]
set_output_delay -max -clock sdram_clk_pin [expr $DATA_BD_MAX + $tCM_Setup - $CLK_BD_MIN] [get_ports {sdram_cas_n sdram_ras_n sdram_we_n sdram_cs_n sdram_cke sdram_dqm[*]}]
set_output_delay -min -clock sdram_clk_pin [expr $DATA_BD_MIN + $tCM_Hold - $CLK_BD_MAX] [get_ports {sdram_cas_n sdram_ras_n sdram_we_n sdram_cs_n sdram_cke sdram_dqm[*]}]
set_output_delay -max -clock sdram_clk_pin [expr $DATA_BD_MAX + $tA_Setup - $CLK_BD_MIN] [get_ports {sdram_addr[*] sdram_ba[*]}]
set_output_delay -min -clock sdram_clk_pin [expr $DATA_BD_MIN + $tA_Hold - $CLK_BD_MAX] [get_ports {sdram_addr[*] sdram_ba[*]}]
#**************************************************************
# Set Multicycle Path
#**************************************************************
set_multicycle_path -from [get_clocks {sdram_clk_pin}] -to [get_clocks $main_clk] -setup -end 2
set_multicycle_path -from [get_clocks {sdram_clk_pin}] -to [get_clocks $main_clk] -hold -end 0

в примере анализ времянок идет без учета задержек распространения на плате, но на низких частотах это не влияет. собственно, работать должно и без констрейнов при одном условии: клок, который идет на чип памяти правильно сфазирован относительно клока контроллера. у вас в проекте я не увидел PLL, возможно, причина в этом. я делал так: с приведенными констрейнами собирал проект, при этом на PLL крутил фазу, чтобы попасть примерно в центр кострейнов. этого достаточно для стабильной работы. в проектах с DDR SOPC-билдер и квартус берут эту часть на себя, а тут приходится руками.

Автор: juvf Feb 16 2011, 08:51

спасибо за помощь. буду разбираться

Автор: juvf Feb 16 2011, 15:41

Цитата
у вас в проекте я не увидел PLL, возможно, причина в этом.
Нашел пример проекта c SDRAM для моей борды, для DE0. Там всего один констрейн - на внешний входной клок и в ниосе есть плл и клоки на озу идут с сдвигами. Сделал у себя так же. Всё рано не грузится elf. Правда в примере какой-то другой плл, в моём SOPC нет такого (10.1). Буду пробовать внешний плл и поиграюсь с фазами.
А есть какая-нибудь утилита для проверки SDRAM? Например можно из кансоли дать команду, типа nios2_check_SDRAM и она вернёт ответ по которому можно судить: правильно настроены клоки и работает ли сдрам? А то может сдрам исправно работает и проблема эльфа не в этом скрыта.

Автор: vadimuzzz Feb 17 2011, 01:54

Цитата(juvf @ Feb 16 2011, 21:41) *
А есть какая-нибудь утилита для проверки SDRAM? Например можно из кансоли дать команду, типа nios2_check_SDRAM и она вернёт ответ по которому можно судить: правильно настроены клоки и работает ли сдрам? А то может сдрам исправно работает и проблема эльфа не в этом скрыта.

не помню такой, а в доках пишут что-то типа "если NIOS работает, то все нормально". проще всего проверить проект, собрав маленькую программу для on-chip memory. да, еще в примерах к эклипсу есть прога memtest (точно не помню), ей можно любую память потестить. но она довольно большая, чтобы упихать в on-chip, надо шаманить

Автор: juvf Feb 17 2011, 02:56

Цитата(vadimuzzz @ Feb 17 2011, 06:54) *
не помню такой, а в доках пишут что-то типа "если NIOS работает, то все нормально". проще всего проверить проект, собрав маленькую программу для on-chip memory. да, еще в примерах к эклипсу есть прога memtest (точно не помню), ей можно любую память потестить. но она довольно большая, чтобы упихать в on-chip, надо шаманить

дак а как проверить память программой из ниоса, если программа в ниос не грузится? Проблема в том, что я не могу скомпелированную программу загрузить и запустить в ниосе.

Автор: vadimuzzz Feb 17 2011, 03:11

Цитата(juvf @ Feb 17 2011, 08:56) *
дак а как проверить память программой из ниоса, если программа в ниос не грузится? Проблема в том, что я не могу скомпелированную программу загрузить и запустить в ниосе.

в настройках линкера (в bsp-editor) все секции выставить на он-чип.

немного в сторону от темы: у вас проблема в том, что вы взяли сложный проект + новые средства разработки + новое железо. где спрятался косяк не-телепату понять трудно. вот я и предлагаю - соберите простейший проект - процессор + он-чип + jtag-uart- соберите hello world. пашет - отлично, глюки эклипса (а они нередки) отметаем. не пашет - подбираем версии квартуса/ОС чтобы работало. заработало с он-чип - подключаем sdram, собираем, пробуем читать/писать. получилось - можно линковать в sdram.

а то можно извести уйму времени, а потом выяснится, что стоит винда-семерка, на которой такая-то версия квартуса не работает.

Автор: juvf Feb 18 2011, 04:23

Сделал как доктор прописал. собрал Hallo word! В процессоре только ядро, ончип, джитаг, пио, сисАйДи и таймер. В эклипсе из шаблона сделал хеллоуВорд. Эльф не грузится. Вообще не понятно. При запуске Debug Configurations... в Error Log сипятся ошибки. см рис. потом при запуске дебага опять сыпятся теже ошибки. Когда эльф грузился и дебаг нормально работал - эти ошибки тоже сыпались. А т.к. альтера генерит варненги и рекомендует на них не обращять внимания, то на эти ошибки я тоже не обращял внимания. Работает ведь. Может в этом дело? Что это за ошибки и как от них избавится?

CPU master group not set. что за группа и как её установить?

CPU architecture type not set. - а это вообще кто?

ну и остальные.....


ps винда-семёрка. квартус 10.1



 

Автор: vadimuzzz Feb 18 2011, 05:17

Цитата(juvf @ Feb 18 2011, 10:23) *
ps винда-семёрка. квартус 10.1

это к Stewart_Little

у меня такие вопросы: а давно в шаблонах появились примеры на C++? раньше вроде только сишные были. поддержку C++ по-моему надо явно включать в настройках BSP.
кстати, неплохо бы на эти самые настройки взглянуть. и да, в топку SysID, толку от него в этой ситуации 0, а мешает он часто.

вообще, симптомы напоминают жабоглюки. попробуйте обновить Java

Автор: juvf Feb 18 2011, 05:45

Цитата(vadimuzzz @ Feb 18 2011, 10:17) *
это к Stewart_Little

у меня такие вопросы: а давно в шаблонах появились примеры на C++? раньше вроде только сишные были. поддержку C++ по-моему надо явно включать в настройках BSP.
кстати, неплохо бы на эти самые настройки взглянуть. и да, в топку SysID, толку от него в этой ситуации 0, а мешает он часто.

вообще, симптомы напоминают жабоглюки. попробуйте обновить Java

шаблон на Си. Это я переименовал исходник в срр. Не работает в си такой for(int i =0;... Преределал на си - теже проблемы.

Цитата
поддержку C++ по-моему надо явно включать в настройках BSP.
Я сотрю вывод компилятора, вроде по расширению нужный компилятор подхватывается.

А про жаву...... нашел на форуме альтеры подобные проблемы. вроде люди от них избавились путем переустановки эклипса. буду пробовать

Автор: juvf Mar 1 2011, 12:09

Собрал двухпортовую память. Обычную, типа SDRAM. Пытаюсь подключить к ниосу. Не получается. Посмотрел примерный проект, собрал в ниосе новый контроллер памяти на базе Avalon Memory Mapped Tristate Slave, добавил в ниос новый контроллер, новыый контроллер, добавил в ниос tristate_bridge. Вроде в квартусескомпилялся проект.
Теперь в эклипсе пытаюсь достучаться до этой ОЗУ. Но как? Попытался создать в BSP секцию памяти и указать на этот контроллер - не получается, нет BSP редакторе в выборе этой памяти.
Есть какая нибудь дока по подключению двухпортовых озу или вообще, по созданию параллельной шины Adress/Data в ниосе? Как это делается? Для SRAM, для SDRAM? Для чего нужен Avalon Memory Mapped Tristate Slave и tristate_bridge?

Автор: Stewart Little Mar 1 2011, 12:30

Цитата(juvf @ Mar 1 2011, 15:09) *
Теперь в эклипсе пытаюсь достучаться до этой ОЗУ. Но как? Попытался создать в BSP секцию памяти и указать на этот контроллер - не получается, нет BSP редакторе в выборе этой памяти.

Ну так обновите BSP.
В конце концов создайте BSP заново.

Автор: vadimuzzz Mar 1 2011, 13:06

Цитата(juvf @ Mar 1 2011, 18:09) *
Теперь в эклипсе пытаюсь достучаться до этой ОЗУ. Но как? Попытался создать в BSP секцию памяти и указать на этот контроллер - не получается, нет BSP редакторе в выборе этой памяти.

в настройках компонента в билдере надо галку поставить "memory device" (название точно не помню, на той вкладке, где диаграмки)

Автор: juvf Mar 2 2011, 05:23

Цитата(Stewart Little @ Mar 1 2011, 17:30) *
Ну так обновите BSP.

Ну так когда в BSP редактор заходишь, парсится *.sopcinfo. Если sopcinfo у меня обновлен, то я должен увидеть новые секции и регионы памяти. По крайней мере так было при добавлении епцс и сдрам. Почему то новый контроллер не виден в редакторе. см рисунок. Должен появится регион DacMemOut. Или его в ручную добавлять нужно? Может я в билдере его не так создал?


Цитата
в настройках компонента в билдере надо галку поставить "memory device"
- не нашел (((

На рисунке 2-портовая память. Как такую память подключить к ниосу? Что нужно сделать в SOPC билдере? Мосты, тристэйты, авалоны, от куда брать клок на память? Не могу найти доку по этим вопросам в альтере. была где-то. Не могу найти.

 

Автор: vadimuzzz Mar 2 2011, 05:58

Цитата(juvf @ Mar 2 2011, 11:23) *
На рисунке 2-портовая память. Как такую память подключить к ниосу? Что нужно сделать в SOPC билдере? Мосты, тристэйты, авалоны, от куда брать клок на память? Не могу найти доку по этим вопросам в альтере. была где-то. Не могу найти.

вы поясните, что сделать хотите. 2-портовая память одним портом к ниосу, вторым к другому устройству? тут 2 варианта - либо через tristate bridge вытащить сигналы из SOPC наружу, либо интегрировать свой компонент в SOPC, тогда можно использовать компонент on-chip ram, у него есть 2 портовый режим.

Автор: juvf Mar 2 2011, 06:23

Цитата(vadimuzzz @ Mar 2 2011, 10:58) *
вы поясните, что сделать хотите. 2-портовая память одним портом к ниосу, вторым к другому устройству? тут 2 варианта - либо через tristate bridge вытащить сигналы из SOPC наружу, либо интегрировать свой компонент в SOPC, тогда можно использовать компонент on-chip ram, у него есть 2 портовый режим.

"интегрировать свой компонент в SOPC" - ну протакую фичу вообще не знал....... Я хочу пока так: писать в 2-х портовую память из ниоса, а читать другим устройством.

Автор: vadimuzzz Mar 2 2011, 06:44

Цитата(juvf @ Mar 2 2011, 12:23) *
"интегрировать свой компонент в SOPC" - ну протакую фичу вообще не знал....... Я хочу пока так: писать в 2-х портовую память из ниоса, а читать другим устройством.

пожалуй, проще начать с tristate bridge. посмотрите http://electronix.ru/forum/index.php?showtopic=87067 тему, я там описывал создание компонента из шаблона. при добавлении такого компонента-заглушки и бриджа, сигналы шины Avalon будут выведены наружу, прицепите их к памяти.

Автор: juvf Mar 2 2011, 09:02

Цитата(vadimuzzz @ Mar 2 2011, 11:44) *
пожалуй, проще начать с tristate bridge. посмотрите http://electronix.ru/forum/index.php?showtopic=87067 тему, я там описывал создание компонента из шаблона. при добавлении такого компонента-заглушки и бриджа, сигналы шины Avalon будут выведены наружу, прицепите их к памяти.

Спасибо, что-то получаться стало. ....... вот мой тсл
Код
# TCL File Generated by Component Editor 10.1
# Wed Mar 02 13:46:07 YEKT 2011
# DO NOT MODIFY


# +-----------------------------------
# |
# | DAC_memOut "DAC_memOut" v1.0
# | Anisimov 2011.03.02.13:46:07
# |
# |
# +-----------------------------------

# +-----------------------------------
# | request TCL package from ACDS 10.1
# |
package require -exact sopc 10.1
# |
# +-----------------------------------

# +-----------------------------------
# | module DAC_memOut
# |
set_module_property NAME DAC_memOut
set_module_property VERSION 1.0
set_module_property INTERNAL false
set_module_property OPAQUE_ADDRESS_MAP true
set_module_property GROUP "Memories and Memory Controllers/SDRAM"
set_module_property AUTHOR Juvf
set_module_property DISPLAY_NAME DAC_memOut
set_module_property INSTANTIATE_IN_SYSTEM_MODULE false
set_module_property EDITABLE true
set_module_property ANALYZE_HDL AUTO
# |
# +-----------------------------------

# +-----------------------------------
# | files
# |
# |
# +-----------------------------------

# +-----------------------------------
# | parameters
# |
# |
# +-----------------------------------

# +-----------------------------------
# | display items
# |
# |
# +-----------------------------------

# +-----------------------------------
# | connection point avalon_tristate_slave
# |
add_interface avalon_tristate_slave avalon_tristate end
set_interface_property avalon_tristate_slave activeCSThroughReadLatency false
set_interface_property avalon_tristate_slave associatedClock clock
set_interface_property avalon_tristate_slave explicitAddressSpan 0
set_interface_property avalon_tristate_slave holdTime 0
set_interface_property avalon_tristate_slave isMemoryDevice true
set_interface_property avalon_tristate_slave isNonVolatileStorage false
set_interface_property avalon_tristate_slave maximumPendingReadTransactions 0
set_interface_property avalon_tristate_slave printableDevice false
set_interface_property avalon_tristate_slave readLatency 0
set_interface_property avalon_tristate_slave readWaitStates 0
set_interface_property avalon_tristate_slave readWaitTime 0
set_interface_property avalon_tristate_slave setupTime 0
set_interface_property avalon_tristate_slave timingUnits Cycles
set_interface_property avalon_tristate_slave writeWaitTime 0

set_interface_property avalon_tristate_slave ENABLED true

add_interface_port avalon_tristate_slave addr address Input 10
add_interface_port avalon_tristate_slave data data Bidir 16
add_interface_port avalon_tristate_slave rd read Input 1
add_interface_port avalon_tristate_slave wr write Input 1
add_interface_port avalon_tristate_slave cs chipselect_n Input 1
# |
# +-----------------------------------

# +-----------------------------------
# | connection point clock
# |
add_interface clock clock end
set_interface_property clock clockRate 0

set_interface_property clock ENABLED true

add_interface_port clock clk clk Input 1
# |
# +-----------------------------------


add_interface_port avalon_tristate_slave addr address Input 10 - десяти разрядная шина адреса. почему в графически ниос показывает 11 разрядную шину? бага? Чем тактировать внеешнее озу? клоками ядра?

 

Автор: vadimuzzz Mar 2 2011, 15:19

Цитата(juvf @ Mar 2 2011, 15:02) *
почему в графически ниос показывает 11 разрядную шину? бага?

это для побайтовой адресации. просто игнорируйте младший разряд
Цитата
Чем тактировать внеешнее озу? клоками ядра?

да

Автор: W1nneR Mar 3 2011, 09:16

Доброго времени суток Уважаемые гуру. Прошу о помощи.
С 2009 года занимаюсь учебной исследовательской работой в университете на теме: "Диагностика и тестирования ПЛИС", мною были самостоятельно изучены основы работы в Quartus II 8.0 собственно в нём год и прошёл. Теперь поступило новое задание, переписать всё что было сделано на Verilog(е) за год под Nios II С/С++.

И тут прям со старта я наткнулся на проблемы...
на ПК стоит Quartus II 8.0 Web Edition и Nios II EDS 8.0, в теме нашел много полезной литературы для обучения, но везде предлагается создавать проект Nios II Application and BSP from Template, который у меня отсутствует в меню >Создать. Осмелюсь предположить, что это из-за того, что установлен Nios II 8.0 IDE, а нужен Nios II 8.0 SBT, но это лишь моё предположение. К сожалению на мой запрос о данной версии Nios(а) гугл ничего толкового не дал, на сайте Alter(ы) я увидел мою же версию но по новее 10.1 (боюсь что моя лицензия не подойдёт), на сайте Eclipse тоже пусто... Прошу о помощи.

Заранее благодарен, с Уважением Дмитрий.

Автор: Stewart Little Mar 3 2011, 09:38

Цитата(W1nneR @ Mar 3 2011, 12:16) *
И тут прям со старта я наткнулся на проблемы...

До девятых версий термин "BSP" Альтера не использовала. Вместо него пользовались понятием "System Library".
В Вашем случае проект нужно создавать так - File - New - Project - Altera Nios II - Nios II C/C++ Application.
При создании проекта указать "Create a new system library"

Автор: vadimuzzz Mar 3 2011, 09:38

SBT появился в 9-й версии (по-моему 9.1). лицензия на ниосовские IDE не нужна, они бесплатные. да и на квартус веб-эдишн тоже

Автор: W1nneR Mar 3 2011, 10:07

Благодарю, пошел грызть гранит науки.

Автор: juvf Mar 4 2011, 10:04

Доброго времени. Подключил к 2-хпортовому озу ниос. вопрос - как из ниоса достучатся до озу? как писать туда? В эклипсе в BSP создал секцию памяти и разместил её на своем Avalon Memory Mapped Tristate Slave. теперь из кода программы пытаюсь записать в озу что-нибудь. пишу так

Код
__attribute__ ((section (".dac"),used)) unsigned int dacData[512];
....
while(1)
{
dacData[16] = 0x55aa;
pauseMm(1000);
}

смотрю сигналТапом сигнал WR- нету. В нуле всегда. на шине данных и шине адреса что-то меняется. а WR - нет. Может я не правильно dacData[512] разместил?

Автор: juvf Mar 4 2011, 11:04

Во млин!!! Удалось записать в озу данные, и даже тайминги все правильно расставленны. Пишу с помощю IOWR_16DIRECT(DAC_MEM_BASE, 10, 0x55aa); - кто бы мог подумать, что доступ к внешнему озу..... через IOWR_16DIRECT. Хотя тут же SDRAM стоит, через альтеровский контроллер подключенна: обращяюсь к ней без всяких IOWR_16DIRECT.

ps в порты PIO пишу через IOWR_ALTERA_AVALON_PIO_DATA(IOLED_BASE, led);. По идее, если сделать секцию памяти .myPio в BSP и разместить её по адресу IOLED_BASE ..... яже могу потом обращаться без всяких IOWR_ALTERA_AVALON_PIO_DATA , а как-то

Код
__attribute__ ((section (".myPio "),used)) unsigned int led;
...
//а потом писать в порт
led = 0x12;

По идее так должно работать?

Автор: vadimuzzz Mar 4 2011, 11:51

Цитата(juvf @ Mar 4 2011, 17:04) *
ps в порты PIO пишу через IOWR_ALTERA_AVALON_PIO_DATA(IOLED_BASE, led);. По идее, если сделать секцию памяти .myPio в BSP и разместить её по адресу IOLED_BASE ..... яже могу потом обращаться без всяких IOWR_ALTERA_AVALON_PIO_DATA , а как-то
Код
__attribute__ ((section (".myPio "),used)) unsigned int led;
...
//а потом писать в порт
led = 0x12;

По идее так должно работать?

IOWR_16DIRECT пишет в обход кэша данных. причина непоняток с памятью, видимо, в этом. можете создать указатель с адресом IOLED_BASE и писать/читать, используя разыменование указателя, следите только, чтобы 31-й бит был взведен.

Автор: W1nneR Mar 9 2011, 14:48

Создал простейшую систему в SOPC Builder (Nios tiny, On Chip Memory (4k), 3 - PIO, Timer) хотел проверить заработает ли она, и написать некое подобие команды Ping. На PIO загружаю какой то код, делаю проверку первых 8 бит, если они равны - ААh, то [7:31] вываливаю на PIO иначе на PIO нули. Т.к. с Nios(ом) еще пока дел не имел, есть пара вопросов.
1. При создании Nios II Application and BSP from Tample указал файл *.sopcinfo и тот создал мне 2 папки:
1 - Имя проекта;
2 - Имя проекта _ bsp;
Файл со своим текстом программы создавать в (1) или (2)?
2. В файле с программой каким образом можно обратится к первым восьми линиям PIO?
В файле system.h нашел кучу присваиваний, но конкретных имён линий не увидел.

Простите за глупые вопросы, я самоучка и спросить у других специолистов возможности нет, приходится спотыкаться на элементарных вещах.

Автор: vadimuzzz Mar 9 2011, 15:41

Цитата(W1nneR @ Mar 9 2011, 20:48) *
Файл со своим текстом программы создавать в (1) или (2)?

(1)
Цитата
2. В файле с программой каким образом можно обратится к первым восьми линиям PIO?
В файле system.h нашел кучу присваиваний, но конкретных имён линий не увидел.

подключаете altera_avalon_pio_regs.h и читаете через макрос IORD_ALTERA_AVALON_PIO_DATA, потом маску накладываете. base address в system.h смотрите

Автор: W1nneR Mar 9 2011, 18:41

Спасибо, щас опробуем.

Автор: W1nneR Mar 9 2011, 22:23

Ну, вот стряпал кое что.


#include <stdio.h>
#include <system.h>
#include "altera_avalon_pio_regs.h"

void main() {

BYTE PING = AA;
BYTE COMMAND;
BYTE CODE = FF;
BYTE ERROR = F0;

COMMAND = IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE);

if(COMMAND == PING) { IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, CODE); }
else IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, ERROR);

}

только почему то не хочет подключать указанные в INCLUDE файлы, если они находятся не в одной папке с главным файлом.
Приходится перетаскивать всё в одну папку с _bsp. Это можно как-нибудь исправить?

Автор: barabek Mar 10 2011, 01:42

Цитата(W1nneR @ Mar 10 2011, 08:23) *
только почему то не хочет подключать указанные в INCLUDE файлы, если они находятся не в одной папке с главным файлом.
Приходится перетаскивать всё в одну папку с _bsp. Это можно как-нибудь исправить?

Странно, стандартные должны находиться. А вообще, свойства проекта -> c/c++build->general->include paths плюсиком добавляете нужные пути.

Автор: W1nneR Mar 10 2011, 17:38

Кто нибудь имел дело с Nios системами ведущих обмен с FTDI?

Автор: alexPec Mar 11 2011, 10:32

Цитата(W1nneR @ Mar 10 2011, 20:38) *
Кто нибудь имел дело с Nios системами ведущих обмен с FTDI?

Да, с FT245.

Автор: W1nneR Mar 16 2011, 19:57

alexPec, не осталось прошивки ознакомится? Буду бесконечно благодарен.

Автор: vilary Apr 1 2011, 06:51

При добавлении в систему компонента с шиной данных 8 бит появляется warning: "cpu.data_master/device.avalon_slave does not have byteenables. Narrow (less than 32-bit) writes from cpu.data_master will result in spurious writes to device.avalon_slave". При добавлении byteenable пишет ошибку, что byteenable не может быть меньше 2, хотя в спецификации написано что может быть и 1. Может это повлиять на работу системы если не ставить byteenable?

Еще quartus при компиляции пишет "Found Invalid timing asssignments". При просмотре ошибок minimum slack для Clock Hold: nios pll имеет отрицательное значение и pll_offset = -1,667 ns.
При попытке на данную прошивку загрузить софт Nios пишет: "ID value doesn't match. Timestamp value doesn't match: image on board is older than expected". При чем данная ошибка появляется только когда в системе присутствуют компоненты со Stream интерфейсом. Что это может быть и как это можно исправить?

Автор: naliwator Apr 1 2011, 09:57

Ваши вопросы напрямую зависят от вашего проекта, выложите проект для просмотра.

Автор: barabek Apr 1 2011, 22:35

Цитата(vilary @ Apr 1 2011, 17:51) *
При добавлении в систему компонента с шиной данных 8 бит появляется warning: "cpu.data_master/device.avalon_slave does not have byteenables. Narrow (less than 32-bit) writes from cpu.data_master will result in spurious writes to device.avalon_slave". При добавлении byteenable пишет ошибку, что byteenable не может быть меньше 2, хотя в спецификации написано что может быть и 1. Может это повлиять на работу системы если не ставить byteenable?

Раз Вы можете добавить byteenable то, смею предположить, что это Ваш самописный компонент. Если так, то можно либо выставить NATIVE адресацию у компонента, тогда и byteenable не нужен. Либо оставить DYNAMIC, но сделать шину 32-х битную, вставить byteenable, при этом логику внутри компонета можно сделать такой, что старшие 3 байта игнорировать. Выбирайте.



Автор: alexPec Apr 2 2011, 13:25

Цитата(W1nneR @ Mar 16 2011, 23:57) *
alexPec, не осталось прошивки ознакомится? Буду бесконечно благодарен.

В файлике ф-ии записи и чтения в/из USB и пример использования этих ф-й. На стороне компа после установки драйверов запись/чтение происходит как в обычный ком-порт.

Думаю названия портов интуитивно понятно каким выводам FT245 соответствуют. Порт data - двунаправленный.


 sample_ft245.txt ( 1.26 килобайт ) : 89
 

Автор: W1nneR Apr 7 2011, 05:37

Спасибо большое, что откликнулись на зов моей помощи, но что то не могу файлик пощупать, ни скачивается и не просмативается... (

Автор: alexPec Apr 7 2011, 06:11

Цитата(W1nneR @ Apr 7 2011, 09:37) *
Спасибо большое, что откликнулись на зов моей помощи, но что то не могу файлик пощупать, ни скачивается и не просмативается... (


И правда ерунда какая-то. Напишите письмо на alex@udsu.ru с пометкой о чем, вышлю.

Автор: Reanimator++ Apr 18 2011, 13:59

На заметку.

1. Если хотите чтобы работал Nios II Flash Programmer то ставьте версию 9.1 SP1. На SP2 и без SP не работает (неправильно конвертирует sof->flash).


2. Чтобы работать с UART в неблокирующем режиме нужно открывать его следующим образом:

Код
static int fdterm; // FILEDESCRIPTOR RETURNED BY OPEN
..
fdterm = open("/dev/uart1", O_RDWR | O_NONBLOCK | O_NOCTTY | O_SYNC);
..


reading is done by

..
res=read(fdterm,uart1_tempbuff,sizeof(uart1_tempbu ff)-1);
if(res>0) {
... we have received some bytes
}

Тогда при чтении данных исполнение программы блокироваться не будет. Удивительно но не нашел доку где это было бы описано, спасибо альтерафоруму.

Автор: inventor Apr 18 2011, 19:07

подскажите пожалуйста, где взять таблетку от жадности
для квартуса 7.2 ?
ну или от десятки?

Автор: juvf Apr 19 2011, 06:44

Как писать/читать флешку CFI из ниоса?
На борту DE0 стоит флешка. Собрал контроллер. в программе пробовал alt_write_flash() - при вызове второй раз это функции старые данные стираются. Нашел в доках, что эта функция стерает блок.
Есть функция alt_write_flash_block() - но про ней мало что понятно. Есть ещё какие то загадочные alt_flash_cfi_init() alt_flash_cfi_read() ... Про них вообще ни чего не нашел.

Чем отличаются alt_flash_cfi_write и alt_write_flash_block/ alt_write_flash?

ps Вообще хотелось бы получить функцию типа write(alt_u32 addressInFlash, alt_u8 *source, alt_u32 length); Пока видется путь писать свою используя alt_write_flash_block/read/open/close, в которой проверять перекрытие границы блока. Но там адская функция получается. Ещё не понятно что такое регион? С чем его есть и для чего он нужен?

Автор: vadimuzzz Apr 19 2011, 07:31

самое простое - использовать функции alt_write_flash, alt_read_flash. тогда можно о блоках не думать. то, что вы перечислили - низкоуровневые функции, они вызываются в alt_write_flash, alt_read_flash. можно делать и на низком уровне, но код будет менее универсальный, больше привязан к железу. см. http://electronix.ru/redirect.php?http://www.altera.com/literature/hb/nios2/n2sw_nii52010.pdf

Цитата(juvf @ Apr 19 2011, 13:44) *
Ещё не понятно что такое регион? С чем его есть и для чего он нужен?

см. alt_flash_types.h

Автор: juvf Apr 19 2011, 07:56

Цитата(vadimuzzz @ Apr 19 2011, 13:31) *
самое простое - использовать функции alt_write_flash, alt_read_flash. тогда можно о блоках не думать. то, что вы перечислили - низкоуровневые функции, они вызываются в alt_write_flash,

изночально нписал

alt_write_flash(...); // пишу 1234 в адрес 0
alt_write_flash(...); // пишу 5678 в адрес 20

alt_read_flash(...); //читаю из адреса 0, получаю 0xffff
alt_read_flash(...); //читаю из адреса 20, получаю то, что записал, т.е. 5678

такое чувство что вторая запись сначала стерла первую запись, а потом записала 5678.

Автор: vadimuzzz Apr 19 2011, 08:05

см. Nios II Software Developer’s Handbook, глава 6 Developing Programs Using the
Hardware Abstraction Layer, раздел Using Flash Devices. там все эти случаи разобраны


Автор: juvf Apr 19 2011, 08:13

Цитата
тогда можно о блоках не думать.
как же не думать? Вот из http://electronix.ru/redirect.php?http://www.altera.com/literature/hb/nios2/n2sw_nii5v2.pdf, стр 6-21

Цитата
Generally, flash memory is divided into blocks. alt_write_flash() might need to
erase the contents of a block before it can write data to it. In this case, it makes no
attempt to preserve the existing contents of the block. This action can lead to
unexpected data corruption (erasure), if you are performing writes that do not fall on
block boundaries. If you wish to preserve existing flash memory contents, use the
fine-grained flash functions.
These are discussed in the following section.

...

Fine-Grained Flash Access
Three additional functions provide complete control for writing flash contents at the
highest granularity:
■ alt_get_flash_info()
■ alt_erase_flash_block()
■ alt_write_flash_block()



как то не понятно, как эту флеш писать читать?



Автор: vadimuzzz Apr 19 2011, 08:15

Цитата(juvf @ Apr 19 2011, 15:13) *
как то не понятно, как эту флеш писать читать?

считали блок->изменили часть данных->записали блок

Автор: Stewart Little Apr 19 2011, 11:12

Цитата(juvf @ Apr 19 2011, 12:13) *
как то не понятно, как эту флеш писать читать?

Вы сперва разберитесь, как вообще Flash работает. Чтение из флэши возможно и побайтное, и пословное. А вот стирание и запись - посекторные. См. предыдущий ответ ув. vadimuzzz

Автор: juvf Apr 20 2011, 02:28

Цитата(Stewart Little @ Apr 19 2011, 17:12) *
Вы сперва разберитесь, как вообще Flash работает. Чтение из флэши возможно и побайтное, и пословное. А вот стирание и запись - посекторные. См. предыдущий ответ ув. vadimuzzz

Ну это от флеша к флешу. Есть флешки с побайтной записью. Ну и "считали блок->изменили часть данных->записали блок" это какой-то низкоуровневый алгоритм. Я и хочу с этим разобраться. В доках от альтеры написанно, что alt_write_flash() сотрет весь блок. Нужно заботится о том, чтоб не потерять данные. Также альтера предлагает alt_write_flash_block(), якобы в этой функции не надо об этом заботится. Да и вообще, коль есть апи, можно было и более высокоуровневую функцию сделать, типа write(адрессФлэш, указательИсточника, длинна). Причем если данные 1 байт, или данные перекрывают 3 блока (например 1/3 блока 8кб, 1 блок 8 кб и 100 байт из блока в 64 кб), то эта write должна сама сделать все низкоуровневые операции типа "считали блок->изменили часть данных->записали блок". Удевительно что в hal нет такой функции. придёться самому писать ((.

Потом, тут есть регион и есть блок. Что такое регион я так и не понял. Что такое блок - понятно. Вся флеш разбита на блоки (по пдф), причем размер блоков разный. А вот что такое регион - ???
смотрю Alt_flash_types.h, структура
Код
typedef struct flash_region
{
  int   offset;
  int   region_size;
  int   number_of_blocks;
  int   block_size;
}flash_region;


int region_size - размер региона. Что такое регион?

Пока не понятно как работать с alt_flash_cfi_write? Есть у когонибудь демо проект с флешкой cfi? Поделитесь, заранее благодарен.

Автор: vadimuzzz Apr 20 2011, 03:30

Цитата(juvf @ Apr 20 2011, 09:28) *
Ну и "считали блок->изменили часть данных->записали блок" это какой-то низкоуровневый алгоритм.

для флешек с блочным стиранием это обычное дело. 3-4 вызова функций HAL, что тут низкоуровневого? вот дергать alt_flash_cfi_write - это и есть низкоуровневый доступ. а так можно и с SPI-ными флешками работать
Цитата
Потом, тут есть регион и есть блок. Что такое регион я так и не понял. Что такое блок - понятно. Вся флеш разбита на блоки (по пдф), причем размер блоков разный. А вот что такое регион - ???

смотрите даташит на свою флешку, там все расписано. например, у меня интеловская p30. имеет 2 региона с разными размерами блоков в первом 32кбайтные, во втором (основном) - 128 кбайтные.
пример кода:
CODE

#include <stdio.h>
#include "alt_types.h"
#include "system.h"
#include <io.h>
#include <sys/alt_flash.h>
#include <unistd.h>
int main()
{
flash_region* regions;
alt_flash_fd* fd;
int number_of_regions;
int ret_code;
int i;
printf("Hello from Nios II!\n");
fd = alt_flash_open_dev(CFI_FLASH_0_NAME);
if (fd)
{
ret_code = alt_get_flash_info(fd, &regions, &number_of_regions);
for (i=0;i<number_of_regions;i++)
{
printf("Offset: %d\r\n", regions[i].offset);
printf("Region Size: %d\r\n", regions[i].region_size);
printf("Number of Blocks: %d\r\n", regions[i].number_of_blocks);
printf("Block Size: %d\r\n\r\n", regions[i].block_size);
}
}
}

выхлоп:
Цитата
Hello from Nios II!
Offset: 0
Region Size: 131072
Number of Blocks: 4
Block Size: 32768

Offset: 131072
Region Size: 16646144
Number of Blocks: 127
Block Size: 131072

ну, и пример 6-11 посмотрите, как запись организована. имейте в виду, что там не производится проверка адресов на предмет перекрытия соседних блоков. эту проверку вы должны делать сами.

Автор: juvf Apr 20 2011, 04:41

Цитата(vadimuzzz @ Apr 20 2011, 09:30) *
3-4 вызова функций HAL, что тут низкоуровневого?
да уш не 3-4. А отслежывать перекрытие блоков..... Вызовов может и 3-4, но + к этому целый алгоритм мутить по отслежованию перекрытий.


Цитата
например, у меня интеловская p30. имеет 2 региона с разными размерами блоков в первом 32кбайтные, во втором (основном) - 128 кбайтные.

спасибо, все стало понятно.

пока у меня новая проблема: alt_flash_open_dev(CFI_FLASH_0_NAME) возвращает 0. Если не правильно распинать флешку, неправильно подключить, или если её физически нет, но в ниосе есть контроллер cfi - то что вернёт alt_flash_open_dev? ноль?


ps Есть у алтеры дока "HAL API Reference". В ней говорится о функциях open(), read(), write(), close(). В частности
Цитата
The open() function opens a file or device and returns a file descriptor (a small, nonnegative
integer for use in read, write, etc.)
эта open(),,,,,,,, она работает (должна работать) с cfi flash?

Автор: vadimuzzz Apr 20 2011, 06:01

Цитата(juvf @ Apr 20 2011, 11:41) *
да уш не 3-4. А отслежывать перекрытие блоков..... Вызовов может и 3-4, но + к этому целый алгоритм мутить по отслежованию перекрытий.

драйвер делает ровно то, что позволяет флешка. может, вы захотите еще и файловую систему поверх водрузить - этим тот же драйвер должен заниматься?
что вы хотите хранить на флешке, какая задача?
Цитата
пока у меня новая проблема: alt_flash_open_dev(CFI_FLASH_0_NAME) возвращает 0.

а она у вас CFI_FLASH_0_NAME называется? в system.h посмотрите.
Цитата
Если не правильно распинать флешку, неправильно подключить, или если её физически нет, но в ниосе есть контроллер cfi - то что вернёт alt_flash_open_dev? ноль?

нет. диагностировать подключение удобно при помощи nios2-flash-programmer. пускаете его с ключом --debug и смотрите, что он там пишет.

Цитата(juvf @ Apr 20 2011, 11:41) *
эта open(),,,,,,,, она работает (должна работать) с cfi flash?

не должна

Автор: juvf Apr 20 2011, 08:03

Цитата(vadimuzzz @ Apr 20 2011, 12:01) *
а она у вас CFI_FLASH_0_NAME называется? в system.h посмотрите.
У меня CFI_FLASH_NAME, соответственно вызов делаю с именем CFI_FLASH_NAME. пробовал "/dev/cfi_flash" (из тогоже систем.аш) - тозе возвращает 0

Цитата
нет. диагностировать подключение удобно при помощи nios2-flash-programmer. пускаете его с ключом --debug и смотрите, что он там пишет.

выхлоп nios2-flash-programmer на картинке. Это нормальная работа флешки?


 

Автор: vadimuzzz Apr 20 2011, 08:10

Цитата(juvf @ Apr 20 2011, 15:03) *
выхлоп nios2-flash-programmer на картинке. Это нормальная работа флешки?

нет, похоже проблема с подключением.
вот как примерно должно выглядеть:
CODE

Resetting and pausing target processor: OK
Found CFI table in 16 bit mode
Raw CFI query table read from device:
0: 89 00 1B 88 01 00 01 00 89 00 CF BF 01 00 01 00 ................
10: 89 00 1B 88 01 00 01 00 89 00 CF BF 01 00 01 00 ................
20: 51 00 52 00 59 00 01 00 00 00 0A 00 01 00 00 00 Q.R.Y...........
30: 00 00 00 00 00 00 17 00 20 00 85 00 95 00 08 00 ........ .......
40: 09 00 0A 00 00 00 01 00 01 00 02 00 00 00 18 00 ................
CFI query table read from device:
10: 51 52 59 01 00 0A 01 00 00 00 00 17 20 85 95 08 QRY......... ...
20: 09 0A 00 01 01 02 00 18 01 00 06 00 02 03 00 80 ................
30: 00 7E 00 00 02 00 00 00 00 FF FF FF FF FF FF FF .~..............
40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
CFI extended table read from device:
0: 50 52 49 31 34 E6 01 00 00 01 03 00 18 90 02 80 PRI14...........
10: 00 03 03 89 00 00 00 00 00 00 10 00 04 03 04 01 ................
Read autoselect code 0089-881B (in 16 bit mode)
No CFI override data for [FLASH-0089-881B]
Target timeout loop runs 1497780 times/s
Timeout set to 767 loops
Device size is 16MByte
Erase regions are:
offset 0: 4 x 32K
offset 20000: 127 x 128K
Device supports Intel style programming algorithm
Multi-byte programming with 64 byte buffer
Sector erase timeout is 4s
Word program timeout is 512us
Buffer program timeout is 1ms
Leaving target processor paused


а какая у вас борда?

Автор: juvf Apr 20 2011, 08:29

Цитата(vadimuzzz @ Apr 20 2011, 14:10) *
а какая у вас борда?


http://electronix.ru/redirect.php?http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=56&No=364

Автор: Reanimator++ Apr 21 2011, 10:28

Собственно, даже если вы напишите функции которые позволяют дописать два байта в произвольное место флеши (по принципу чтение блока, модификация блока, запись байтов), то пользоваться ими беспроблемно не получится - время записи блока у флешей может быть достаточно большим (0.1 - 0.5 секунды), так что наваливать по десятку байт скорее всего окажется накладно - придется так или иначе учитывать специфику флеши.

Автор: gosu-art Apr 26 2011, 07:12

Здравствуете! Начинаю работать с Ниос!

Создал свой компонент, прицепил к ниосу, все нормально!

Далее начинаю писать по адресу (через указатель) - тоже все работает!

А вот чтение не получается! Может подскажете как надо!?

прилагаю код компонента:

Код
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity PC104 is
    port (
        ats_s0_address      : in    std_logic_vector(15 downto 0):=(others => 'Z');      
        ats_s0_read_n       : in    std_logic                     := '1';                              
        ats_s0_data         : inout std_logic_vector(15 downto 0) := (others => 'Z');
        ats_s0_chipselect_n : in    std_logic                     := '1';                          
        ats_s0_write_n      : in    std_logic                     := '1';                          
            
        clk                 : in    std_logic                     := '1';                            
        reset               : in    std_logic                     := '1';                            
        
        
        
        cos_RD_n            : out    std_logic                    := '1';  
        cos_WR_n            : out    std_logic                    := '1';
        cos_CS_n            : out    std_logic                    := '1';
    --    cos_data_ISA : inout std_logic_vector(15 downto 0) := (others => 'Z');
        cos_ADDR_ISA          : out std_logic_vector(15 downto 0) := (others => '0')
        

        
    );
end entity PC104;

architecture rtl of PC104 is
begin

    cos_RD_n<=ats_s0_read_n;
    cos_WR_n<=ats_s0_write_n;
    cos_CS_n<=ats_s0_chipselect_n;
    
    cos_ADDR_ISA<=ats_s0_address;
    
    --cos_data_ISA<=ats_s0_data when ats_s0_write_n='0' else (others => 'Z');
    --ats_s0_data<=cos_data_ISA when ats_s0_read_n='0' else (others => 'Z');

end architecture rtl; -- of new_component


И код программы:


Цитата
#include "sys/alt_stdio.h"
#include "system.h"
#include "alt_types.h"

int main()
{
alt_u16 *p=(alt_u16*) (0x20054);
alt_putstr("Hello from Nios II!\n");
alt_u16 a,b=0;

while(1)
{

a++;
*p=a;//работает

b+=5;
*p=b;//работает

a=*p;//не читает!!!

}


return 0;
}




UPD: попробовал вот так:

Цитата
while(1)
{

IOWR_16DIRECT(0x20054, 0, a);

c=IORD_16DIRECT(0x20054, 0);

}


Вроде пишет и читает, но почему при чтении происходит два обращения?




Автор: vadimuzzz Apr 26 2011, 12:27

Цитата(gosu-art @ Apr 26 2011, 14:12) *
Вроде пишет и читает, но почему при чтении происходит два обращения?

возможно, занята шина. надо еще waitrequest смотреть

Автор: gosu-art Apr 26 2011, 12:44

Почитал стандарт на авалон и вот что нашел:

Цитата
If the master is wider than the slave, data bytes in the master address space map to
multiple locations in the slave address space. For example, when a 32-bit master port
performs a read transfer from a 16-bit slave port, the system interconnect fabric
executes two read transfers on the slave side on consecutive addresses, and presents
32-bits of slave data back to the master port.


У меня компонент с 16ти разрядными данными на Авалоне, точнее на тристэйте! Получается, что при записи происходит одно обращение, т.к. переменная объявлена как 16ти разрядная (объявил указатель 32х.р. пошло 2е записи). При чтении же Ниосу нужно 32 разряда, поэтому он и обращается дважды. Придется доработать компонент.

Автор: gosu-art Apr 28 2011, 07:13

Заинтересовала меня вот эта штука Remote System Upgrade. Только не догоняю, она может полностью переконфигурировать плис (СIII)? Даже если новая прошивка будет без ниоса? Или тут какие то нюансы есть?

Автор: vadimuzzz Apr 28 2011, 07:18

Цитата(gosu-art @ Apr 28 2011, 14:13) *
Заинтересовала меня вот эта штука Remote System Upgrade. Только не догоняю, она может полностью переконфигурировать плис (СIII)? Даже если новая прошивка будет без ниоса? Или тут какие то нюансы есть?

да, может. ниос не обязателен, компонент в SOPC - это просто обертка к мегафункции. но с процом, конечно, удобнее

Автор: juvf May 10 2011, 09:45

Нужно сделать тестовый проект для самопроверки устройства на плис. нужно проверить всю периферию на борде. В том числе и озу (ддр2). Для проверки озу есть алгоритмы которые стирают/пишут/читают каждую ячейку озу. Можно тестовую программу разместить в он-чип и проверить внешнее озу. Но проверка всей остальной периферии не влезит в он-чип. Как тут быть? В голову приходит 2 мысли:
1) разбить программу на 2 части. проверку озу разместить в он-чип. ресет прерывания на он-чип. После ресета из epcs автоматом загрузится конфигурация и кусок программы в ончип. Стартует программа в ончипе. Проверится озу. если все в порядке, то нужно программно из епцс исполняемый код загрузить в озу и сделать jmp ADR_RAM; или что-то подобное. Такое реально сделать с ниосом/CIII/квартусом/IDE NIOS?
2) не делить программу а сразу всю её залить в внешнее озу и от туда стартовать. там же проверить все озу. только как? как-то же подобное делается в тестах типа memTest86. Как в подобных утилитах проверяется озу? Ведь сам исполняемый код находится в этом же озу. Или во время теста мемТест копирует исполняемый код из одного места в другое чтоб проверить всё озу полностью? кто нибудь знает как memTest86 работает?

Автор: vadimuzzz May 10 2011, 13:28

посмотрите http://electronix.ru/redirect.php?http://www.altera.com/literature/an/an458.pdf
вы можете сделать свой загрузчик из EPCS и встроить в него проверку SDRAM. после проверки SDRAM загрузчик должен скопировать туда код (включая проверку периферии) и передать управление

Автор: juvf May 13 2011, 06:40

Пробую свой загрузчик сделать по an458.pdf. Вроде все элементы танца сделал, всё залил - в итоге при включении борды моя прога не работает.

Решил постепенно понять что к чему. Создал простой проект хелловорд. разместил все секции в ончип. ресет ниоса на epcs контроллер (на загрузчик по умолчанию). вектор прерыванию на ончип. все собрал, залил в борду. Работает, т.е. при включении в консоль выхлапывает халоворд. Теперь нужно чтоб этот халоворд был аппаратно вшит в ончип. Т.е. делаю следующее

1 в SOPC билдере вектор ресета на ончип
2 указываю ончип инициализировать файлом boot_rom.hex
3 собираю ниос
4 компилирую проект квартуса
5 генерирую в эклипсе bsp
6 собираю программу халловорд для этого проекта и получаю elf
7 в консоли выполняю "elf2hex name.elf --base=0x1810000 --end=0x181c9f --width=32 --create-lanes=0 boot_rom.hex" и получаю хекс файл.
8 из квартуса заливаю sof в плис
9 запускаю терминал
10 жму кнопку ресет на борде

ожидаю увидеть Hallo World! в терминале

после 10 по идее ресетится проц, а ресет прерывания на он чип. в ончипе программа хелловрд. но она почему-то не выполняется.
прожег этот sof флэшпрограмматором в епцс, борду выкл\вкл\ресет - не помогает, тоже не вижу хэлловорда. что я делаю не так?

Автор: Reanimator++ May 13 2011, 07:09

Между 7-м и 8-м пунктом нужно выполнить ассемблер в квартусе (ну или полную компиляцию если не найдете) чтобы он подхватил .hex файл и встроил его в .sof. Вы заливаете в борду голое железо без ПО, собранное на 3-4 пункте.

И еще, 7-й пунк эклипс иногда делает автоматом (я наблюдал появление .hex файла при компиляции проекта с onchip).

И еще, уверены что Reset на борде относится именно к ниосу а не реконфегурирует всю плис например?

Автор: vadimuzzz May 13 2011, 07:10

сумбур какой-то. чтобы после сброса выполнился код из он-чип, достаточно вектор сброса туда нацелить. после этого достаточно залить sof и программа сразу запустится. если надо кинуть во флешку - пользуйтесь jic или sof2flash+nios2-flash-programmer.
примеры загрузчиков смотрели:
http://electronix.ru/redirect.php?http://www.altera.com/support/examples/nios2/exm-alt-boot-methods.html ?

Автор: juvf May 13 2011, 08:18

Цитата
Reset на борде относится именно к ниосу
именно к ниосу.
Цитата
примеры загрузчиков смотрели:
с него и начал. an458-ой до дыр перечитал. примеры от туда скачал - не работают они.

нашел я как из ниоса делать 7-ой пункт.

Цитата
Между 7-м и 8-м пунктом нужно выполнить ассемблер в квартусе (ну или полную компиляцию если не найдете) чтобы он подхватил .hex файл и встроил его в .sof.
??? не понял, а когда hex в ончип попадает? я думал что достаточно залить sof, и во время этой заливки hex подхватится.


Автор: naliwator May 13 2011, 08:48

Цитата(Reanimator++ @ May 13 2011, 11:09) *
Между 7-м и 8-м пунктом нужно выполнить ассемблер в квартусе (ну или полную компиляцию если не найдете) чтобы он подхватил .hex файл и встроил его в .sof. Вы заливаете в борду голое железо без ПО, собранное на 3-4 пункте.

Или можно поставить галку Use smart compilation и запустить компилятор.
Он должен обновить Hex файл конфигурации on-chip памяти.


Цитата
И еще, уверены что Reset на борде относится именно к ниосу а не реконфегурирует всю плис например?

Мне тоже так показалось. По идее после прошивки sof файлом процессор автоматически сбрасывается и должен исполнять программу.

Если хотите, есть http://electronix.ru/redirect.php?http://www.naliwator.narod.ru/les_nios.html#08.
И даже перевод http://electronix.ru/redirect.php?http://www.naliwator.narod.ru/nios_II.html#09.
santa2.gif

Автор: juvf May 13 2011, 09:13

Цитата
По идее после прошивки sof файлом процессор автоматически сбрасывается и должен исполнять программу.
а в программе printf("hallo wrld") в jtag-uart. поэтому чтоб увидеть выхлоп нужно после заливки соф запустить терминал и нажать ресет.

у меня уже проблема не с загрузчиком. Я уже забыл про него. Проблема локализовалась. Проблема в том, что: есть простая программа, хелловорд (или загрузчик, или тестер или мигание диодом - это уже не важно, просто программа). необходимо чтоб ресет был на ончипе и после ресета процессора выполнялась эта программа сразу, без всяких загрузок из флеш, т.е. она должна создаться в плисине при загрузке конфигурации. Не получается.

Цитата
Между 7-м и 8-м пунктом нужно выполнить ассемблер в квартусе
вот это я пропустил. Но сделав компиляции всего проекта после создание хекс файла - непомогло. не запускается программа.

Автор: naliwator May 13 2011, 10:15

Цитата(juvf @ May 13 2011, 13:13) *
а в программе printf("hallo wrld") в jtag-uart. поэтому чтоб увидеть выхлоп нужно после заливки соф запустить терминал и нажать ресет.

у меня уже проблема не с загрузчиком. Я уже забыл про него. Проблема локализовалась. Проблема в том, что: есть простая программа, хелловорд (или загрузчик, или тестер или мигание диодом - это уже не важно, просто программа). необходимо чтоб ресет был на ончипе и после ресета процессора выполнялась эта программа сразу, без всяких загрузок из флеш, т.е. она должна создаться в плисине при загрузке конфигурации. Не получается.

вот это я пропустил. Но сделав компиляции всего проекта после создание хекс файла - непомогло. не запускается программа.

Сейчас сделал - у меня всё запустилось.

Файл архива проекта почему то не могу прикрепить...

Вносим изменения в программу.
Конвертируем elf to hex.
Жмем smart compilation и вуаля!
1111493779.gif

 

Автор: Reanimator++ May 14 2011, 09:39

Но сделав компиляции всего проекта после создание хекс файла - непомогло. не запускается программа.

Тогда проверяйте что имя файла прописанное в свойствах ончип в сопц билдере (параметр memory initialization file) сопадает с именем того .hex файла который вы подсовываете квартусу после ниос иде.
В принципе если ничего не трогать то они автоматом совпадают, как у naliwator-а.

Автор: juvf May 16 2011, 03:08

Цитата(Reanimator++ @ May 14 2011, 15:39) *
Тогда проверяйте что имя файла прописанное в свойствах ончип в сопц билдере (параметр memory initialization file) сопадает с именем того .hex файла который вы подсовываете квартусу после ниос иде.
В принципе если ничего не трогать то они автоматом совпадают, как у naliwator-а.

Это я обнаружил. В общем по умолчанию для ончип-а sopc билдер дал имя onchip_memory2_0. Начал урок по своему загрузчику из an458.pdf - переименовал ончип в boot_rom. Потом в квартусе при компиляции среди over 9000 ворнингов не сразу заметил что квартус пытается подцепить onchip_memory2_0.hex. Ни как не мог ему объяснить что теперь нужен boot_rom.hex. Стояла галка Use smart compilation. Снял её и квартус сразу понял что теперь нужен boot_rom.hex. Ну ещё был ворнинг что найден boot_rom.v в разработке, но этот файл не является файлом проекта. Ручками удалил из проекта onchip_memory2_0.v и добавил boot_rom.v. Ворнингов стало на пару меньше, но пока при ресете он чип не инится моим хексом(или хекс кривой). Хотя в инфо вроде все красиво:
Код
Info: Instantiated megafunction "cpuNew:inst3|boot_rom:the_boot_rom|altsyncram:the_altsyncram" with the following parameter:
    Info: Parameter "byte_size" = "8"
    Info: Parameter "init_file" = "boot_rom.hex"
    Info: Parameter "lpm_type" = "altsyncram"
    Info: Parameter "maximum_depth" = "9000"
    Info: Parameter "numwords_a" = "9000"
    Info: Parameter "operation_mode" = "SINGLE_PORT"
    Info: Parameter "outdata_reg_a" = "UNREGISTERED"
    Info: Parameter "ram_block_type" = "AUTO"
    Info: Parameter "read_during_write_mode_mixed_ports" = "DONT_CARE"
    Info: Parameter "width_a" = "32"
    Info: Parameter "width_byteena_a" = "4"
    Info: Parameter "widthad_a" = "14"

Автор: juvf May 16 2011, 04:38

Обратно поставил галочку Use smart compilation - при компиляции снова получаю ворнинги

Код
Warning: Can't find design file epcs_flash_controller_boot_rom.hex
Warning: Can't find design file onchip_memory2_0.hex
Warning: Can't find design file epcs_flash_controller_boot_rom.hex
Warning: Can't find design file onchip_memory2_0.hex
Warning: Can't find design file epcs_flash_controller_boot_rom.hex
Warning: Can't find design file onchip_memory2_0.hex
Info: *******************************************************************
Info: Running Quartus II Analysis & Synthesis
    Info: Version 10.1 Build 197 01/19/2011 Service Pack 1 SJ Full Version
    Info: Processing started: Mon May 16 10:13:05 2011
Info: Command: quartus_map --read_settings_files=on --write_settings_files=off TestFrontEnd -c topLevel
Info: Parallel compilation is enabled and will use 4 of the 4 processors detected
Info: Found 1 design units, including 1 entities, in source file boot_rom.v
    Info: Found entity 1: boot_rom
Info: Found 2 design units, including 2 entities, in source file sdram.v
    Info: Found entity 1: sdram_input_efifo_module
    Info: Found entity 2: sdram
Info: Found 1 design units, including 1 entities, in source file pllsdram.v
    Info: Found entity 1: pllSdram
Info: Found 2 design units, including 2 entities, in source file epcs_flash_controller_0.v
    Info: Found entity 1: epcs_flash_controller_0_sub
    Info: Found entity 2: epcs_flash_controller_0
Info: Found 1 design units, including 1 entities, in source file cpu_0_test_bench.v
    Info: Found entity 1: cpu_0_test_bench
Info: Found 7 design units, including 7 entities, in source file uart_0.v
    Info: Found entity 1: uart_0_log_module
    Info: Found entity 2: uart_0_tx
    Info: Found entity 3: uart_0_rx_stimulus_source_character_source_rom_module
    Info: Found entity 4: uart_0_rx_stimulus_source
    Info: Found entity 5: uart_0_rx
    Info: Found entity 6: uart_0_regs
    Info: Found entity 7: uart_0
От куда этот onchip_memory2_0.hex? Почему квартус его хочет? в sopc билдере ончип раньше именовался onchip_memory2_0, но сейчас именуется boot_rom и инициализируется файлом по умолчанию boot_rom.hex.
И при компиляции всегда компиляется весь проект. Поечему? Скомпилял проект, тут же нажал компилять - опять все по новой. А должен вроде смарт понять что не было изменений и не компилять ни чего.

naliwator в моем выхлопе нет таких пунктов как у тебя
Код
Running Quartus II MIF/HEX Update
тоже не понятно почему?

Автор: naliwator May 16 2011, 06:09

Цитата(juvf @ May 16 2011, 07:08) *
переименовал ончип в boot_rom.
Ну ещё был ворнинг что найден boot_rom.v в разработке, но этот файл не является файлом проекта. Ручками удалил из проекта onchip_memory2_0.v и добавил boot_rom.v.

Вы поменяли исходные файлы проекта, поэтому
Цитата
Код
Info: Running Quartus II Analysis & Synthesis
    Info: Version 10.1 Build 197 01/19/2011 Service Pack 1 SJ Full Version
    Info: Processing started: Mon May 16 10:13:05 2011

и вы не можете видеть
Цитата
Код
Running Quartus II MIF/HEX Update

Собственно, почему на кошках не хотите потренироваться?

Автор: juvf May 16 2011, 08:15

Цитата
Собственно, почему на кошках не хотите потренироваться?
Да на кошках наверно с полпинка заведется. У меня тяжелый проект, которому нужно сделать ончип загрузчик. Можно сделать кошку и в неё заново проект собирать, все пины переназначать..... Но с этим нужно разобраться.

В общем получилось. Как - не могу понять. В прицепе можно на этом остановиться и писать программу дальше. Но..... Сейчас в сопц ончип именуется onchip_memory2_0. Соответственно в проекте есть файл onchip_memory2_0.v и ниос иде делает onchip_memory2_0.hex который скармливаю в sof файл. удалил из проекта файлы boot_rom.v. Удалил с диска файлы boot_rom.v и boot_rom.hex. Но теперь другие ворнинги:
Код
Warning: Can't find design file boot_rom.v
Warning: Can't find design file boot_rom.hex


Не могу понять как в квартусе управлять проектом? Почему квартус ищет файлы boot_rom? Где-то в записях какихто исходников очевидно есть ссылки на них. Но где? Как ими управлять этими ссылками/настройками?

Автор: naliwator May 16 2011, 08:31

Цитата(juvf @ May 16 2011, 12:15) *
Удалил с диска файлы boot_rom.v и boot_rom.hex. Но теперь другие ворнинги:
Код
Warning: Can't find design file boot_rom.v
Warning: Can't find design file boot_rom.hex


Не могу понять как в квартусе управлять проектом? Почему квартус ищет файлы boot_rom? Где-то в записях какихто исходников очевидно есть ссылки на них. Но где? Как ими управлять этими ссылками/настройками?

Assignments -> Settings -> Files

Автор: Reanimator++ May 16 2011, 09:05

Перед тем как делать большой проект лучше разобраться ху из ху. Вы путаете кислое с пресным.
Файл onchip_memory2_0.v является выхлопом генератора SOPC билдера и представляет из себя код нужной вам памяти на верилоге (иногда шифрованый). Собственно на его создании участие SOPC билдера заканчивается, дальше этот файл цепляет квартус и пытается компилировать.
Где-то внутри этого файла стоит ссылка на файл onchip_memory2_0.hex, либо любой другой, который вы укажете в SOPC билдере - см рисунок. При компиляции квартус пытается искать именно этот файл. А не какой либо другой. По умолчанию имя .hex файла равно имени .v файла и равно имени модуля в SOPC. Nios IDE по умолчанию генерит файл, прописанный в SOPC билдере. Просто сделайте чтобы они совпадали.

 

Автор: juvf May 16 2011, 09:11

Цитата(naliwator @ May 16 2011, 14:31) *
Assignments -> Settings -> Files

Первым делом туда полез

Цитата(Reanimator++ @ May 16 2011, 15:05) *
Перед тем как делать большой проект лучше разобраться ху из ху. Вы путаете кислое с пресным.
Файл onchip_memory2_0.v является выхлопом генератора SOPC билдера и представляет из себя код нужной вам памяти на верилоге (иногда шифрованый). Собственно на его создании участие SOPC билдера заканчивается, дальше этот файл цепляет квартус и пытается компилировать.
Где-то внутри этого файла стоит ссылка на файл onchip_memory2_0.hex, либо любой другой, который вы укажете в SOPC билдере - см рисунок. При компиляции квартус пытается искать именно этот файл. А не какой либо другой. По умолчанию имя .hex файла равно имени .v файла и равно имени модуля в SOPC. Nios IDE по умолчанию генерит файл, прописанный в SOPC билдере. Просто сделайте чтобы они совпадали.

Это я все понимаю. вот мои настройки ончипа. Но почему квартус просит файлы boot_rom.v и boot_rom.hex? Может, чтоб куартус забыл про boot_rom нужно сделать clearProject или rebuildAll? Но не могу такого найти в квартусе.

 

Автор: Reanimator++ May 16 2011, 09:22

А в сопц билдере генерацию делали после всех изменений?
Что написано в самом .v файле? Я там нашел строку - the_altsyncram.init_file = "onchip_memory.hex",

Автор: juvf May 16 2011, 09:50

Цитата(Reanimator++ @ May 16 2011, 15:22) *
А в сопц билдере генерацию делали после всех изменений?
Что написано в самом .v файле? Я там нашел строку - the_altsyncram.init_file = "onchip_memory.hex",

Конечно делал. Есть у меня такая строчка. Вот ещё что интересно - сделал поиск по всем файлам проекта текст "boot_rom.hex" .... вот что нашлось (см рис). В epcs_flash_controller.v нет boot_rom.hex, там найден epcs_flash_controller_boot_rom.hex
*.rpt - это выходные отчеты. *.qmsg - тоже. Почему квартус их просит? ???

 

Автор: vadimuzzz May 16 2011, 09:53

Цитата(juvf @ May 16 2011, 16:50) *
*.rpt - это выходные отчеты. *.qmsg - тоже. Почему квартус их просит? ???

он не просит, а пишет туда о проблемах. не может найти требуемые файлы.

Автор: juvf May 16 2011, 10:01

Цитата(vadimuzzz @ May 16 2011, 15:53) *
он не просит, а пишет туда о проблемах. не может найти требуемые файлы.
Ну это понятно, я и говорю выходные. Например вот что есть в файле topLevel.map.rpt
Код
D:/Work/Quartus/testBoot/db/cmpr_ifc.tdf                                   ;
; D:/Work/Quartus/testBoot/db/cntr_p1j.tdf                      ; yes            ; Auto-Generated Megafunction           ; D:/Work/Quartus/testBoot/db/cntr_p1j.tdf                                   ;
; D:/Work/Quartus/testBoot/db/cmpr_efc.tdf                      ; yes            ; Auto-Generated Megafunction           ; D:/Work/Quartus/testBoot/db/cmpr_efc.tdf                                   ;
; boot_rom.v                                                    ; yes            ; Auto-Found Verilog HDL File           ; boot_rom.v                                                                 ;
; D:/Work/Quartus/testBoot/db/altsyncram_7gb1.tdf               ; yes            ; Auto-Generated Megafunction           ; D:/Work/Quartus/testBoot/db/altsyncram_7gb1.tdf                            ;
; boot_rom.hex                                                  ; yes            ; Auto-Found Memory Initialization File ; boot_rom.hex
Кто-нибудь может из этого понять от куда ноги растут? От куда boot_rom берётся?

Автор: naliwator May 16 2011, 10:06

Цитата(juvf @ May 13 2011, 10:40) *
Пробую свой загрузчик сделать по an458.pdf. Вроде все элементы танца сделал, всё залил - в итоге при включении борды моя прога не работает.

Решил постепенно понять что к чему. Создал простой проект хелловорд. разместил все секции в ончип. ресет ниоса на epcs контроллер (на загрузчик по умолчанию). вектор прерыванию на ончип. все собрал, залил в борду. Работает, т.е. при включении в консоль выхлапывает халоворд. Теперь нужно чтоб этот халоворд был аппаратно вшит в ончип. Т.е. делаю следующее

1 в SOPC билдере вектор ресета на ончип
2 указываю ончип инициализировать файлом boot_rom.hex
3 собираю ниос

Это хвост модификаций вашего проекта.
Отследите, где и какая память до сих пор ссылается на него.

Автор: juvf May 16 2011, 12:41

Цитата(naliwator @ May 16 2011, 16:06) *
Это хвост модификаций вашего проекта.
Отследите, где и какая память до сих пор ссылается на него.

как бы отследить то? В сопц ни кто не ссылается. По крайней мере в окошках не видно. Удалил всю папку dd - не помогло. по файлам текст поискал - нашел boot_rom только в выходных файлах. sad.gif

Автор: naliwator May 16 2011, 12:57

Цитата(juvf @ May 16 2011, 16:41) *
как бы отследить то? В сопц ни кто не ссылается. По крайней мере в окошках не видно. Удалил всю папку dd - не помогло. по файлам текст поискал - нашел boot_rom только в выходных файлах. sad.gif

Вкладка Tasks -> Analysis & Synthesis -> View Report
далее ищите RAM Summary. Вас должно интересовать, что за память и какой MIF используется.

Автор: juvf May 17 2011, 06:21

Цитата(naliwator @ May 16 2011, 18:57) *
Вкладка Tasks -> Analysis & Synthesis -> View Report
далее ищите RAM Summary. Вас должно интересовать, что за память и какой MIF используется.
Сегодня утром включил комп, запустил компиляцию - нету этих boot_rom больше. Решил всётаки разобраться что это было. переименовал ончипПамять в bootRom. переключил ресеты на bootRom, проверил чтоб инициализация была bootRom.hex. Пересобрал проект - вроде всё гладко. Пересобрал BSP и прогу для ниоса, сгенерировал новый hex, опять пересобрал в квартусе проект, залил sof и вуаля - всё работает и нет ворнингов. Ну вот оно вроде счатье. Удалил уже ни кому не нужные onchip_memory2_0.v и onchip_memory2_0.hex. При очередной сборке посыпались варнинги что нету onchip_memory2_0.hex. Опять тоже самое, опять какой-то хвост. опять все перепроверил, поползал по всем файлам, удалил папку dd, проверил репорт компиляции - не могу понять от куда квартус решил что ему нужно onchip_memory2_0.hex?

naliwator, сейчас в RAM Summary нет ни каких упоминаний про onchip_memory2_0.hex. Более того, квартус пытается найти их до того, как запустится Analysis & Synthesis, см рис. Походу баг в квартусе (10.1 + sp1). Попробуйте кто-нибудь переименовать ончип, сгенерировать новые v и hex, а потом удалить старые как не нужные.

Походу дальше нет смысла искать от куда эти ворненги, главное что борда заработала.
Всем спасибо за помощь!!!


 

Автор: naliwator May 17 2011, 08:41

Цитата(juvf @ May 17 2011, 10:21) *
naliwator, сейчас в RAM Summary нет ни каких упоминаний про onchip_memory2_0.hex. Более того, квартус пытается найти их до того, как запустится Analysis & Synthesis, см рис. Походу баг в квартусе (10.1 + sp1). Попробуйте кто-нибудь переименовать ончип, сгенерировать новые v и hex, а потом удалить старые как не нужные.

Походу дальше нет смысла искать от куда эти ворненги, главное что борда заработала.
Всем спасибо за помощь!!!


Попробовал.
1. Переименовал память и .hex файл, сгенерировал систему.
2. Удалил с компьютера .v и .hex файлы предшествовавшей памяти.
3. Запустил полную компиляцию. Действительно, компилятор пытается найти удалённый .hex файл.
4. Удалил bsp проект с диска и собрал всё заново.
5. Получил .hex файл с новым именем, приложил его к проекту.
6. Запустил компиляцию. Печально, компилятор снова ссылается на не существующий .hex файл и запускает полную компиляцию вместо умной.
7. Смотрю в отчёт компилятора и нахожу, что в настройках компиляции остаются не существующие файлы.
8. Пробую удалить назначения проекта (Remove Assignents) и запускаю компиляцию - безрезультатно.
9. Папка инкрементной компиляции может хранить списки соединений (netlist) успешных компиляций. Эту папку рекомендовано удалять, когда нужно вернуться к исходникам. Удаляю папку. Компилирую. Закрываю Quartus II.
10. Открываю Quartus II и проект. Жму компиляцию - умная компиляция работает, т.к. .hex файл не был изменён, то время - 0, предупреждений - нет.
11. Меняю .hex файл, подсовываю проекту. Жму компиляцию - умная компиляция работает, предупреждений - нет.

 

Автор: juvf May 17 2011, 09:32

ага, тоже заработало. только в 10-ом пункте после удаления папки инкрементной_db во время компиляции по прежнему были ворненги. закрыл открыл квартус - пропали. Вчера чистил проект удалил db папку, возможно и inc_db тоже удалил, но не перезапускал квартус. Спасибо за помощь!!!

Автор: juvf May 23 2011, 09:32

не могу найти описание векторов прерывания в NIOS II. Например в SOPC билдере в процессоре указал вектор сброса на onchip-memory со смещением 0х00. Адрес onchip-memory = 0х1810000. Контроллер прерываний не добавлял. Что разместится по адресам 0х1810000 ... 0х1810020? Есть у альтеры описание векторов прерывания?

Автор: naliwator May 23 2011, 09:40

Цитата(juvf @ May 23 2011, 13:32) *
не могу найти описание векторов прерывания в NIOS II.


Посмотрите http://electronix.ru/redirect.php?http://www.naliwator.narod.ru/N2swHb8_0.pdf.

Цитата
Например в SOPC билдере в процессоре указал вектор сброса на onchip-memory со смещением 0х00. Адрес onchip-memory = 0х1810000. Контроллер прерываний не добавлял. Что разместится по адресам 0х1810000 ... 0х1810020? Есть у альтеры описание векторов прерывания?


Всё верно, внутренний контроллер прерываний поддерживает до 32 источников прерываний. Приоритет 0 - наивысший.

Автор: juvf May 23 2011, 09:58

Цитата(naliwator @ May 23 2011, 15:40) *
Посмотрите http://electronix.ru/redirect.php?http://www.naliwator.narod.ru/N2swHb8_0.pdf.


Посмотрел..... не нашел... Что разместится по адресам 0х1810000 ... 0х1810020? Конкретно.... по адресу 0х1810010 было значение 0х74. Потом стало 0х34. Что это значит? Как работает внутренний контроллер прерываний?

Автор: naliwator May 23 2011, 10:11

Цитата(juvf @ May 23 2011, 13:58) *
Как работает внутренний контроллер прерываний?

Устройство работы
Процессор Nios II может откликаться на исключения, включая программные исключения и аппаратные прерывания. Когда процессор Nios II отвечает на исключение, он выполняет следующие задачи:
1. Сохраняет регистр status в estatus. Это означает, что если разрешены аппаратные прерывания, то установлен бит PIE в регистре estatus.
2. Запрещает аппаратные прерывания.
3. Сохраняет следующий адрес исполнения в ea (r29).
4. Передаёт контроль на соответствующий адрес исключения, то есть:
Программное исключение или внутреннее аппаратное прерывания – на основной адрес исключения процессора Nios II.
Внешнее аппаратное прерывание – заданный для этого устройства адрес прерывания.

Работа внутреннего контроллера прерываний
В IIC доступно до 32 независимых сигналов аппаратных прерываний. Эти сигналы прерываний позволяют программно задавать приоритет прерываний, даже если сами по себе сигналы прерываний не имеют свойства приоритета.
В IIC исключения Nios II являются невекторными. Поэтому один адрес исключений принимает контроль над всеми типами исключений. Основной направитель (funnel) исключений по этому адресу должен определять тип программного исключения или аппаратного прерывания.

Автор: juvf May 23 2011, 10:19

это я прочитал. это понятно. не понятно причем тут адреса вектора сброса 0х1810000...0х1810020?

Что разместится по адресам 0х1810000 ... 0х1810020? Конкретно.... по адресу 0х1810010 было значение 0х74. Потом стало 0х34. Что это значит?

Автор: Stewart Little May 23 2011, 10:20

Цитата(juvf @ May 23 2011, 13:58) *
Посмотрел..... не нашел... Что разместится по адресам 0х1810000 ... 0х1810020? Конкретно.... по адресу 0х1810010 было значение 0х74. Потом стало 0х34. Что это значит? Как работает внутренний контроллер прерываний?

"Да Вы лентяй, Антуан!" (це)
1. Читайте описание программной модели Nuios II: http://electronix.ru/redirect.php?http://www.altera.com/literature/hb/nios2/n2cpu_nii51003.pdf (или ищите перевод на сайте ув. naliwator'а).
2. Как работает внутренний контроллер прерываний, описано тут : http://electronix.ru/redirect.php?http://www.alterawiki.com/wiki/IRQ_Code

bb-offtopic.gif Если бы Вы хотя бы часть того времени, что потратили на писанину сюда, отвели бы на чтение мануалов, пользы для дела было бы больше.

Автор: juvf May 23 2011, 11:10

Цитата
1. Читайте описание программной модели Nuios II: http://electronix.ru/redirect.php?http://www.altera.com/literature/hb/nios2/n2cpu_nii51003.pdf
эээ..... ну я так понял что в этих 32-х байтах вектора сброса исполняемый код. У меня есть машинный код, а как можно посмотреть ассемблер этого кода? Не могу в Nios II IDE найти View->Disassembler ((

Автор: naliwator May 23 2011, 13:19

Цитата(juvf @ May 23 2011, 15:10) *
эээ..... ну я так понял что в этих 32-х байтах вектора сброса исполняемый код. У меня есть машинный код, а как можно посмотреть ассемблер этого кода? Не могу в Nios II IDE найти View->Disassembler ((



 

Автор: juvf May 24 2011, 02:20

Window->Show View->Disassembler

Автор: MaxLucky May 27 2011, 10:39

Доброго время суток!

Не подскажете, как избавится от time-limited ядра NIOS в Q11.0. А то, для Q9.1 все было хорошо, а здесь не катит rolleyes.gif .
Заранее благодарен.

Автор: naliwator May 27 2011, 10:51

Цитата(MaxLucky @ May 27 2011, 14:39) *
Не подскажете, как избавится от time-limited ядра NIOS в Q11.0. А то, для Q9.1 все было хорошо, а здесь не катит rolleyes.gif .

Смотрите лицензию.

Автор: MaxLucky May 27 2011, 11:01

Лицензия, конечно, вещь не очень дорогая (для NIOSа), если удалось бы уговорить начальство. Но самому выкладывать 500$ + НДС как-то грустно. В принципе, меня устроило бы и ограничение по времени для тестирования, но Q11.0 не позволяет создавать .rbf файл и прочие, только .sof.

Автор: Kuzmi4 May 27 2011, 11:13

2 MaxLucky
эконом вариант бесплатный laughing.gif

Автор: naliwator May 27 2011, 11:21

Цитата(MaxLucky @ May 27 2011, 15:01) *
Лицензия, конечно, вещь не очень дорогая (для NIOSа), если удалось бы уговорить начальство. Но самому выкладывать 500$ + НДС как-то грустно. В принципе, меня устроило бы и ограничение по времени для тестирования, но Q11.0 не позволяет создавать .rbf файл и прочие, только .sof.

Поиск по форуму http://electronix.ru/forum/index.php?showtopic=90068?

Автор: MaxLucky May 27 2011, 11:51

Цитата(Kuzmi4 @ May 27 2011, 15:13) *
2 MaxLucky
эконом вариант бесплатный laughing.gif


Ну, эконом вариант - это только светодиодами помигать.
До недавнего времени проектировал все с использованием FSM, на ниос то времени не находилось, то обычная лень не давала blush.gif
Однако, с разрастанием проекта, как это, скорее всего, у всех бывает пришел к тому, что мозг уже не вмещает все машинки и надо как-то оптимизировать.

Цитата(naliwator @ May 27 2011, 15:21) *
Поиск по форуму http://electronix.ru/forum/index.php?showtopic=90068?


Пробовал. Проблема в том, что те лицензии которые (для NIOS) есть под Q11.0 не хотят работать. То ли это новая фича Qsys мешает, то ли еще что.

Автор: juvf Jun 1 2011, 04:51

Почему SOPC не может сам назначить правильно адреса? На рисунке адреса назначенные автоматически. Приходится руками все адреса назначать. В др. проекте такого не было.


 

Автор: Stewart Little Jun 1 2011, 08:19

Цитата(juvf @ Jun 1 2011, 08:51) *
Почему SOPC не может сам назначить правильно адреса? На рисунке адреса назначенные автоматически. Приходится руками все адреса назначать. В др. проекте такого не было.

Может. Меню System - Auto Assign Base Addresses, если мне склероз не изменяет.

Автор: juvf Jun 2 2011, 02:35

Цитата(Stewart Little @ Jun 1 2011, 14:19) *
Может. Меню System - Auto Assign Base Addresses, если мне склероз не изменяет.

Я так и делаю. На левом рисунке адреса назначены после Auto Assign Base Addresses. SOPC Builder почему-то на каждый SPI выделил по 0х20 адресов. А при компиляции ругается, что мало, что нужно по 0х40. Сейчас руками все адреса назначил и замки повесил. Но почему же сопс сам не правильно выделает адреса?

Автор: vadimuzzz Jun 2 2011, 02:39

Цитата(juvf @ Jun 2 2011, 09:35) *
Я так и делаю. На левом рисунке адреса назначены после Auto Assign Base Addresses. SOPC Builder почему-то на каждый SPI выделил по 0х20 адресов. А при компиляции ругается, что мало, что нужно по 0х40. Сейчас руками все адреса назначил и замки повесил. Но почему же сопс сам не правильно выделает адреса?

на других версиях квартуса не смотрели? я видел такую фигню однажды (версию не помню), когда отрезал медленную периферию через Pipeline Bridge, он тоже внутри адресного пространства бриджа не мог автоматом выставить. вам, кстати, тоже имеет смысл попробовать: отрежьте все SPI мостом, это положительно скажется на Fmax

Автор: juvf Jun 2 2011, 03:21

Цитата(vadimuzzz @ Jun 2 2011, 08:39) *
на других версиях квартуса не смотрели? я видел такую фигню однажды (версию не помню), когда отрезал медленную периферию через Pipeline Bridge, он тоже внутри адресного пространства бриджа не мог автоматом выставить.

Смотрел. этот эффект заметил в 10.1. Сейчас перешел на 11 - эффект есть. Другой проект, попроще - такого эффекта, на этих же квартусах, нет.
Цитата
вам, кстати, тоже имеет смысл попробовать: отрежьте все SPI мостом, это положительно скажется на Fmax

ээээ...... а как это делается?

Автор: vadimuzzz Jun 2 2011, 04:55

Цитата(juvf @ Jun 2 2011, 10:21) *
ээээ...... а как это делается?

вкратце: добавляете Pipeline Bridge, периферию цепляете к его master-порту, а data-master процессора к слейву моста.
подробности см. в Embedded Design Handbook, Section III/Ch. 6/Increasing system frequency

Автор: juvf Jun 7 2011, 05:54

есть массив int array[1024] в который положил оцифрованный сигнал. как в NIOS IDE посмотреть этот сигнал на графике?

Автор: vadimuzzz Jun 7 2011, 07:27

не слыхал про такое. как насчет сбросить массив на комп (например, через hostfs), а потом просмотреть график любой знакомой прогой?

Автор: juvf Jun 7 2011, 07:30

Цитата(vadimuzzz @ Jun 7 2011, 13:27) *
не слыхал про такое. как насчет сбросить массив на комп (например, через hostfs), а потом просмотреть график любой знакомой прогой?

Наверно так и придется. Просто видел такое в Code Compose Studio. Там это называется "Data visualization". Думал что для эклипса по любому должен быть плуг. Но что-то не нашел его ((

Автор: vadimuzzz Jun 7 2011, 08:12

еще вариант нагуглился:

Цитата
you can use gnuplot
via a gdb command.
Put the content of the plot1d.gdb from
http://electronix.ru/redirect.php?http://sourceware.org/gdb/wiki/PlottingFromGD%42%29 in your .gdbinit.
If you want to visualize an array called 'myarray' you activate the gdb
console in Eclipse and type:
plot1d *((myarray)+STARTIDX)@LENGTH

Of course, you have to substitute STARTIDX (first index to plot) and
LENGTH (number of elements to plot).
It is not very user-friendly, but at least a starting point.

Автор: Stewart Little Jun 7 2011, 08:15

Цитата(juvf @ Jun 7 2011, 09:54) *
есть массив int array[1024] в который положил оцифрованный сигнал. как в NIOS IDE посмотреть этот сигнал на графике?

Боюсь, что никак. Для этого ModelSim есть.

Автор: gosu-art Jun 28 2011, 11:09

Можно ли в nios console делать возврат каретки (alt_putstr("Connection_enable\r") как в гипертерминале?

Автор: gosu-art Jul 4 2011, 18:50

Цитата(gosu-art @ Jun 28 2011, 15:09) *
Можно ли в nios console делать возврат каретки (alt_putstr("Connection_enable\r") как в гипертерминале?

crying.gif Ну так как нить можно включить или нет! А то не работает \r.

Автор: vadimuzzz Jul 5 2011, 01:55

Цитата(gosu-art @ Jun 28 2011, 18:09) *
Можно ли в nios console делать возврат каретки (alt_putstr("Connection_enable\r") как в гипертерминале?

а что имеется в виду под "как в гипертерминале"?

Автор: gosu-art Jul 5 2011, 04:14

Цитата(vadimuzzz @ Jul 5 2011, 05:55) *
а что имеется в виду под "как в гипертерминале"?


Ну по крайней мере там эта штука работает, тут нет. rolleyes.gif Мне просто скорость передающего и принимающего канала отображать нужно в консоли. А как то не удобно каждый раз с новой строки начинать - информации накапливается много.

UPD:



Может это из-за small c library?

Автор: vadimuzzz Jul 5 2011, 04:56

Цитата(gosu-art @ Jul 5 2011, 11:14) *
Ну по крайней мере там эта штука работает, тут нет. rolleyes.gif Мне просто скорость передающего и принимающего канала отображать нужно в консоли. А как то не удобно каждый раз с новой строки начинать - информации накапливается много.

телепат из меня не очень, но подозреваю автоматическое добавление символа перевода строки <LF> к символу возврата каретки <CR>. на ум приходит 2 варианта: отключить эту опцию в настройках гипертерминала, тогда это не будет работать ни там, ни там (в определенном смысле это и будет "как в гипертерминале" sm.gif). соответственно в коде будете писать "\r\n", будет работать везде. второй вариант - доработать функцию alt_putstr, чтобы она делала такую замену. все-таки ниосовские тулзы изначально линуксовые, а в UNIX-подобных системах принято использовать "\n". так что я бы рекомендовал первый вариант.

Цитата(gosu-art @ Jul 5 2011, 11:14) *
Может это из-за small c library?

нет

Автор: gosu-art Jul 5 2011, 08:51

Мне нужно, чтобы вывод следующей строки заменил предыдущую! Получается работа происходит только в одной строке.



Автор: vadimuzzz Jul 5 2011, 12:48

Цитата(gosu-art @ Jul 5 2011, 15:51) *
Мне нужно, чтобы вывод следующей строки заменил предыдущую! Получается работа происходит только в одной строке.

я же говорю, что я не телепат!
Код
#include <stdio.h>
#include <unistd.h>
int main()
{
    int i;
    for(i=0;i<=100;i++)
    {
        printf("\r% 3d%%",i);
        fflush(stdout);
        sleep(1);
    }
    return 0;
}

так работает? (sleep замените на что-нибудь свое.)

upd: это багофича эклипсовского console view. можно обойти таким костылем: запустить nios2-terminal в отдельном окне и соответственно отключить console view в эклипсе.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)