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

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

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


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

Собственно, как выполнить пункт 5 (я так понимаю, именно в этом и затык) нигде не нашел упоминания.......

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

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


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

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

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

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


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

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

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


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

 По второй ошибке. Вообще-то тут у уважаемого 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_... не определена, я затрудняюсь ответить.

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


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

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

Изменено пользователем Omen_13
Оформление кода. Omen_13

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


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

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

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

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


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

Все заработало!

Ошибка была в том, что я использовал неправильные адреса :blush:

Сейчас, как и посоветовали, взял алиасы на них их из system.h (он, как я понимаю, генерится SOPC-билдером, да?) и все заработало.

Ключик "--go" тоже заработал (похоже что он и раньше работал, но т.к. я использовал некорректные адреса - то и не видел ничего).

Разрядность PIO также оказалась рабочей.

 

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

 

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

 

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

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


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

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

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


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

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

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


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

Да, есть такое. Курю форум, понимаю что надо пофиксить фичу. Но что-то не пойму как. Просто везде пишут про 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"

 

. Как быть?

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


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

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

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

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

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

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

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

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

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

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