Перейти к содержанию
    

AlexBel

Леш, я запустил ниос пройдя "Nios II Hardware Development Tutorial" - http://www.altera.com/literature/tt/tt_nio...re_tutorial.pdf

Просто по порядку делай что там написано и все )

 

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

 

использовал программатор Игоря - http://www.speccyland.net/forum/viewtopic.php?f=13&t=9

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Не "мастер шину", а "мастер на шину". Шина - она стандартная (Авалон), на ней бывают мастеры и слейвы.

Мастер - это тот, кто может инициировать транзакцию (т.е. передачу данных). Стандартные мастеры - это, к примеру, ядро NiosII, или блок DMA.

Слейв - тот, кто поддерживает транзакцию (т.е. принимает или передает даные в соответствии с поступившим ему запросом).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые гуру, подскажите - как "объяснить" 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" и т.п.. Где искать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Евгений Николаев

В 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...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

inco, спасибо!

Сегодня попробую. Честно говоря, считал, что перейду с 7.2 на 9.1 за один день, но 9-ый, в отличие от 7-го, не интуитивно понятен.

---

Работает! :a14:

Кстати, переход начал поэтапно - сначала поставил 9-ый квартус, но пользовался 7-ым NIOS IDE - на первый взгляд всё нормально, с портов читает, выводит, но почему-то перестали работать прерывания от внутреннего обработчика.

Сейчас с 9-ым всё заработало. Видимо, альтеровцы частично что-то сменили внутри (кривые руки разработчика - тоже не исключаются, конечно :) ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Reanimator++

Рома, спасибо, извини, что не отреагировал сразу, но причину знаешь :(

Обязательно это попробую, как закончу проект...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите. Есть система, картинка во вложении. 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 - не работает, сбоит.

post-29831-1261274184_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

похоже, сбоит запись в память(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 и есть дата кэш, описанный выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...