реклама на сайте
подробности

 
 
43 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> NIOS для начинающих
spectr
сообщение Apr 13 2010, 18:17
Сообщение #61


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



Только начал осваивать 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 (я так понимаю, именно в этом и затык) нигде не нашел упоминания.......
Причина редактирования: Оформление цитаты. Omen_13
Go to the top of the page
 
+Quote Post
barabek
сообщение Apr 13 2010, 23:29
Сообщение #62


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



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

попробуйте в строке "Additional nios2-download arguments" в диалоговом окне Run, вкладка Main написать --go
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 14 2010, 00:37
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



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

это будет работать независимо от наличия кэша
Go to the top of the page
 
+Quote Post
spectr
сообщение Apr 15 2010, 06:33
Сообщение #64


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



Цитата
попробуйте в строке "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-системе выровнены автоматически, если что.
Go to the top of the page
 
+Quote Post
barabek
сообщение Apr 15 2010, 06:49
Сообщение #65


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



 По второй ошибке. Вообще-то тут у уважаемого 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_... не определена, я затрудняюсь ответить.
Go to the top of the page
 
+Quote Post
Аматер
сообщение Apr 15 2010, 07:07
Сообщение #66


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616



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


Сообщение отредактировал Omen_13 - May 13 2010, 15:45
Причина редактирования: Оформление кода. Omen_13
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 15 2010, 08:21
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



да, это я неудачно скопипастил, правильный код такой:
Код
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-билдера. пины в квартусе правильно разведены, варнингов при компиляции не кидал про ноги? лог компиляции в квартусе тоже давайте на всякий случай.
Go to the top of the page
 
+Quote Post
spectr
сообщение Apr 15 2010, 09:09
Сообщение #68


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



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

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

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

Пока что полет нормальный - все работает четко. Начинаю втыкать как использовать загрузку с флэшки.
Go to the top of the page
 
+Quote Post
spectr
сообщение Apr 15 2010, 13:25
Сообщение #69


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



Что-то аццкий 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".........
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 15 2010, 14:20
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



да, нужна лицензия
Go to the top of the page
 
+Quote Post
spectr
сообщение Apr 15 2010, 14:24
Сообщение #71


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



Я проверил в Quartus->Tools->License Setup у процессора стоит Expiration: permanent... Это означает что лицензия корректна?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 15 2010, 15:29
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



в логах компиляции поищите "Opencores-бла-бла-бла" - если есть, значит лицензии нету.
Go to the top of the page
 
+Quote Post
spectr
сообщение Apr 15 2010, 15:33
Сообщение #73


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



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

. Как быть?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 15 2010, 15:46
Сообщение #74


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



способа 2 - буржуйский и народный ) если интересует второй, давайте мыло
Go to the top of the page
 
+Quote Post
spectr
сообщение Apr 15 2010, 15:47
Сообщение #75


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



ilkz (at) yandex.ru
Go to the top of the page
 
+Quote Post

43 страниц V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 06:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01551 секунд с 7
ELECTRONIX ©2004-2016