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

Несоответствие железной и софтовой части NIOS2 в Quartus 18.1

Привет всем.

Есть платка с чипом EP4CE10E22C8, на которой решил попробовать NIOS (несколько лет с плисами не работал, а последним был xilinx). Использовал обучающий проект niosII_hw_dev_tutorial (tt_nios2_hardware_tutorial). Собирал пол года назад этот проект (в 17.0), он заработал и я его забросил. А тут делал другой проект в 18.1, который запускаться не захотел и я решил старый проект перенести в 18.1 и попробовать. Всё перегенерил, и qsys и fpga и программный проект (шаблон CountBinary) - всё работает. По UART выдаётся текст stdout, светодиоды мигают (8 шт.). После этого решил запустить NIOS на частоте 100МГц (было 50), для чего добавил в систему (qsys) PLL с умножением на 2. В схеме системы поднял PLL вверх, переключил клоки на выход PLL, перегенерил адреса (они поменялись) и всю систему. Потом сгенерил BSP, пересобрал проект софта и прошил всё во флешку EPCS. В итоге проект заработал лишь частично: по UART всё выдаётся, а светодиоды не горят. Начал разбираться, оказалось, что отладчик софта почему-то показывает старый адрес PIO (в тултипе и при разворачивании макроса), который был в варианте без PLL. Причём, в файле system.h значение корректное. Что только не делал, очистку проектов, всё перегенерировал и пересобирал - светодиоды не горят. В итоге попробовал сделать такой финт - в схеме системы опустил PLL вниз, обновил адреса, в результате адрес PIO стал таким же, как был раньше. После этого снова всё пересобрал и перепрошил - светодиоды заработали!

Тогда возникает вопрос: как корректно делать обновление системы, чтобы подобных глюков не было?

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


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

Добрый день. А можете .qsys выложить? Никогда с таким поведением не сталкивался. Ради интереса собрал count_binary из туториала на 17.1 с PLL внутри Qsys (я обычно ставлю его в toplevel) - все работает нормально.

 

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


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

Дык всё работало нормально, пока не стал менять Qsys. Сейчас ещё другой проект делал, так в нём уже после изменения Qsys тупо удалял весь софт и генерил его с нуля для перестраховки. Qsys  приложил, в нём "фарш" из pll, nios2, epcs, i2c, spi, uart, jtag-uart, led*8, button, LCD 16x2.

Что касается LCD 16x2, то я его добавил только вчера, захотел попробовать тоже подключить. Однако после этого пример CountBinary перестал собираться из-за такой ошибки:

Quote

In function `main':
D:\Projects\PLM\Altera\niosprog\software\CountBinary/count_binary.c:348: undefined reference to `fopen'

Я в NIOS-ах пока не силён и не знаю каким образом реализуется потоковая передача на LCD. Но компиляция валится на строке, где использован макрос открытия потока:

#define LCD_OPEN() fopen("/dev/lcd_display", "w")

Может предполагается наличие какой-то операционки? Но я что-то в туториалах такого не заметил. Как решается эта проблема?

nios.qsys

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


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

Прояснил проблему с fopen. Оказалось, надо было снять с BSP опции по уменьшению кода. Однако теперь проект CountBinary не собирается из-за нехватки памяти, ибо на моей плате памяти нет, а внутренней не хватает, превышение аж на 56456 байта. Не судьба использовать LCD с NIOS.

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


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

Здравствуйте, не стал темы плодить, напишу здесь. Заметил при отладке кода в Eclipse debugger странности. Использую версию: Mars.2 Release (4.5.2)
Build id: 20160218-0600. Суть проблемы: в режиме отладки указатель текущего положения при пошаговом исполнении кода( жму F5) движется странным образом- то откатывается назад, то пропускает строки или даже зацикливается, там где нет никаких циклов. Причем код достаточно простой, мигаю светодиодами. Привожу типичный проблемный момент: 

void leds_flash0(alt_u32 led_base, int prd)
{
    static alt_u8 led_pattern;//Начальное значение
    int i,itr;
    led_pattern=0b1111;
    IOWR(led_base,0,led_pattern);
    itr=prd*0xFFF;
    for(i=0;i<itr;i++){}
    led_pattern=0b0000;
    IOWR(led_base,0,led_pattern);

    for(i=0;i<itr;i++){}
  }

Дебаггер при отработке этой функции пропускает циклы FOR. И указатель текущей строки часто движется назад и зацикливается на строках:

     led_pattern=0b1111;
    IOWR(led_base,0,led_pattern);

Это глюк Eclipse, или я что-то не понимаю? P.S. Если все писать в main for работает, но указатель строки тоже прыгает неадекватно.

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


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

On 5/12/2020 at 9:13 PM, IgorVrn89 said:

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

....

Это глюк Eclipse, или я что-то не понимаю? P.S. Если все писать в main for работает, но указатель строки тоже прыгает неадекватно.

Предполагаю, вы все это наблюдаете в C Source View? Переключитесь в Assembler View (или как он там правильно называется - чтобы видеть инструкции процессора, а не только C-шные строки) - и сразу все станет на свои места. Наблюдаемый эффект - это из-за оптимизации C-кода, так вьюер пытается как-то по своему разумению отрабатывать соответствие между исходником и результатом компиляции.

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


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

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

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

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

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

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

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

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

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

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