spectr 0 13 апреля, 2010 Опубликовано 13 апреля, 2010 · Жалоба Только начал осваивать 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 0 13 апреля, 2010 Опубликовано 13 апреля, 2010 · Жалоба Собственно, как выполнить пункт 5 (я так понимаю, именно в этом и затык) нигде не нашел упоминания....... попробуйте в строке "Additional nios2-download arguments" в диалоговом окне Run, вкладка Main написать --go Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 14 апреля, 2010 Опубликовано 14 апреля, 2010 · Жалоба То есть, что получается при запуске программы - я в консоли 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 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба попробуйте в строке "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 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба По второй ошибке. Вообще-то тут у уважаемого 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_... не определена, я затрудняюсь ответить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amater 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 (изменено) · Жалоба По второй ошибке. Вообще-то тут у уважаемого 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); Изменено 13 мая, 2010 пользователем Omen_13 Оформление кода. Omen_13 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба да, это я неудачно скопипастил, правильный код такой: 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 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба Все заработало! Ошибка была в том, что я использовал неправильные адреса Сейчас, как и посоветовали, взял алиасы на них их из system.h (он, как я понимаю, генерится SOPC-билдером, да?) и все заработало. Ключик "--go" тоже заработал (похоже что он и раньше работал, но т.к. я использовал некорректные адреса - то и не видел ничего). Разрядность PIO также оказалась рабочей. В общем, почти все косяки были из-за обращений к некорректным адресам ))) Спасибо за помощь! Пока что полет нормальный - все работает четко. Начинаю втыкать как использовать загрузку с флэшки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба Что-то аццкий 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 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба да, нужна лицензия Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба Я проверил в Quartus->Tools->License Setup у процессора стоит Expiration: permanent... Это означает что лицензия корректна? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба в логах компиляции поищите "Opencores-бла-бла-бла" - если есть, значит лицензии нету. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба Да, есть такое. Курю форум, понимаю что надо пофиксить фичу. Но что-то не пойму как. Просто везде пишут про 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 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба способа 2 - буржуйский и народный ) если интересует второй, давайте мыло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 15 апреля, 2010 Опубликовано 15 апреля, 2010 · Жалоба ilkz (at) yandex.ru Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться