Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NIOS для начинающих
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
vadimuzzz
это spansion. сама микросхема, видимо, снята с производства. ее более новая версия: http://www.spansion.com/Products/Pages/Pro...rodID=S29GL128P. вот даташит на старую: http://rapidshare.com/files/362755049/013-...032M10.pdf.html. из схематика http://www.altera.com/literature/manual/Cy...ev02_DB_SCH.zip (зачем наклейку отдирали ? smile.gif) видно, что подкючена в 8-битном режиме, это надо учесть в SOPC-билдере. по идее, там все как у интела, ну в крайнем случае override сделать. читайте тут: www.altera.com/literature/ug/ug_nios2_flash_programmer.pdf. вектор сброса ниоса нацелить на флеш.
S_Lee
Кто-то может подсказать как можно создать блок, дающий на вывод тактирование в 1кГц, у меня циклон первый, там 50МГц тактовая, счетчик такую не дает частоту, можно конечно в ниосе написать мелкую программку, которая будет тактировать в 1кГц, но возможно есть проще способ???
barabek
Цитата(S_Lee @ Mar 15 2010, 00:37) *
Кто-то может подсказать как можно создать блок, дающий на вывод тактирование в 1кГц, у меня циклон первый, там 50МГц тактовая, счетчик такую не дает частоту, можно конечно в ниосе написать мелкую программку, которая будет тактировать в 1кГц, но возможно есть проще способ???

У счетчика есть опция timeout_pulse.
Цитата
When this option is on, the core outputs a signal timeout_pulse. This signal pulses high for one
clock cycle whenever the timer reaches zero.
Я им, правда, не пользовался, но не вижу причин, почему он Вам не подходит. 50МГц/1кГц=50000 вполне реализуемое число на 32-х разрядном счетчике (требуется всего 16 разрядов).
S_Lee
как счетчик может дать 1КГц из 50МГц??? 16ти разрядный допустим -> (50 000 000 / (2^16=65536))=762 Гц
des00
Цитата(S_Lee @ Mar 20 2010, 03:40) *
как счетчик может дать 1КГц из 50МГц??? 16ти разрядный допустим -> (50 000 000 / (2^16=65536))=762 Гц

а поделить на число отличное от 2^16 ?
barabek
Цитата(S_Lee @ Mar 20 2010, 19:40) *
как счетчик может дать 1КГц из 50МГц??? 16ти разрядный допустим -> (50 000 000 / (2^16=65536))=762 Гц

Не берем 65536, берем 50000 и получаем ровно 1кГц. smile.gif
styuf
Вечер добрый)
Вопросы собственно такие:
-Научился работать с флэшкой (ну или почти научился), делаю так, что бы с неё по нажатию кнопки фактори (factory) грузился и проект в альтеру с ниосом, и программка к ниосу. Но возникает такая трудность - программа работает 5 минут и стопарится. то бишь просто перестает реагировать на что либо (в нормальных условиях она по нажатию кнопки на плате раз в секунду выдает данные из ниоса). У кого-нить была такая проблема или хотя бы идеи есть, а то третий день ничего придумать не могу.
- Чем отличаются режимы NIOS II EPCS, NIOS II USER, NIOS II FACTORY в флэш программере кроме адреса оффсета?

Данные о проекте чуть выше по топику.
vadimuzzz
Цитата(styuf @ Mar 22 2010, 13:20) *
- Чем отличаются режимы NIOS II EPCS, NIOS II USER, NIOS II FACTORY в флэш программере кроме адреса оффсета?

во флеш-программере, пожалуй, ничем. последние 2 имеют отношение к фиче циклона-3 - Remote Upgrade. пример для active parallel: www.altera.com/literature/an/AN521.pdf

по первому вопросу: ниос тоже висит или только программа? на flash-programmer откликается?
styuf
Цитата
во флеш-программере, пожалуй, ничем

Эти параметры по умолчанию выставляют разное смещение адреса. Я так понимаю, именно начиная с величины смещения и начинается писаться прошивка для альтеры (То бишь не с нулевого). Судя по всему у циклона есть контроллер, которые работает с флэшками и при включении питания тянет прошивку из определенного места. А как конфигурировать контроллер мне на глаза не попадалось(
Цитата
по первому вопросу: ниос тоже висит или только программа? на flash-programmer откликается?

Хм, я даже и не знаю. Посмотрю, тогда скажу. У меня подозрения на переполнение чего-нибудь (памяти). Так как программа работает ровно какое-то время в активном режиме (при нажатой кнопке). В пассивном режиме, когда ничего в логике альтеры не происходит, оно может стоять хоть сколько.
vadimuzzz
Цитата(styuf @ Mar 22 2010, 14:10) *
Судя по всему у циклона есть контроллер, которые работает с флэшками и при включении питания тянет прошивку из определенного места.

не только
Цитата
А как конфигурировать контроллер мне на глаза не попадалось(

http://www.altera.com/literature/hb/cyc3/c...e3_handbook.pdf секция 9
spectr
Только начал осваивать 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
Цитата(spectr @ Apr 14 2010, 05:32) *
Собственно, как выполнить пункт 5 (я так понимаю, именно в этом и затык) нигде не нашел упоминания.......

попробуйте в строке "Additional nios2-download arguments" в диалоговом окне Run, вкладка Main написать --go
vadimuzzz
Цитата
То есть, что получается при запуске программы - я в консоли 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
Цитата
попробуйте в строке "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
 По второй ошибке. Вообще-то тут у уважаемого 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_... не определена, я затрудняюсь ответить.
Аматер
Цитата(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);
vadimuzzz
да, это я неудачно скопипастил, правильный код такой:
Код
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
Все заработало!
Ошибка была в том, что я использовал неправильные адреса blush.gif
Сейчас, как и посоветовали, взял алиасы на них их из system.h (он, как я понимаю, генерится SOPC-билдером, да?) и все заработало.
Ключик "--go" тоже заработал (похоже что он и раньше работал, но т.к. я использовал некорректные адреса - то и не видел ничего).
Разрядность PIO также оказалась рабочей.

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

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

Пока что полет нормальный - все работает четко. Начинаю втыкать как использовать загрузку с флэшки.
spectr
Что-то аццкий 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
да, нужна лицензия
spectr
Я проверил в Quartus->Tools->License Setup у процессора стоит Expiration: permanent... Это означает что лицензия корректна?
vadimuzzz
в логах компиляции поищите "Opencores-бла-бла-бла" - если есть, значит лицензии нету.
spectr
Да, есть такое. Курю форум, понимаю что надо пофиксить фичу. Но что-то не пойму как. Просто везде пишут про 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
способа 2 - буржуйский и народный ) если интересует второй, давайте мыло
spectr
ilkz (at) yandex.ru
vadimuzzz
выслал
spectr
Все получил.

Компиляция прошла без упоминаний о триальности опенкорки, так что делаю вывод что все заработает на железке (это проверю завтра).

Спасибо за помощь!
spectr
Итак, все заработало как я и ожидал. Программка и Система была простейшая - бегущий светодиод (т.е., On-chip RAM, PIO-out, контроллер EPCS, System ID, CPU). Все работало и зашивалось в EPCS на ура.

Далее я решил поиграться с прерываниями. Всего-лишь в существующую систему добавил PIO-вход (кнопочки), настроил в нем прерывания и автоназначил их в SoPC-билдере. Компилю, зашиваю, делаю в Nios II IDE простейший проект для отработки прерывания, успешно его компилирую, а далее при попытке загрузить его в плату получаю следующее фи:

Код
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Pausing target processor: OK
Reading System ID at address 0x0000A020: verified
Initializing CPU cache (if present)
OK

Downloading 00004000 ( 0%)
Downloading 00009820 (96%)
Downloaded 13KB in 0.2s (65.0KB/s)

Verifying 00004000 ( 0%)
Verifying 00009820 (96%)
Verify failed between address 0x9820 and 0x99C7
Leaving target processor paused


Насколько я понял из альтеровских и ниосовских форумов, такая ошибка возникает как правило при неверном pinout, невыполнении таймингов для внешней памяти (но у меня-то вся память - OnChip...), наводках по линии ТCK у JTAG.

В чем может быть дело?
- Pinout (Assignments для всей платы одним файлом) взят с фирменного диска, работал с ним уже сто раз на не-ниосовских проектах - все разведено нормально.
- Никакой внешней памяти кроме EPCS я не использую. Более того, раньше с ней все работало (до того как я добавил в систему PIO-вход).
- Timing Analyzer, конечно, поругивается варнингами про отрицательные слэки, но раньше же все работало. Неужели из-за добавления простого порта все так уехало?
- Вроде как, судя по адресам - это как раз флэшка. Но какого хрена она тогда раньше нормально работала?

П.С.: на всякий прилагаю скриншот системы
П.П.С.: клок, если что, беру не с PLL, а напрямую с источника на плате (50 МГц).
vadimuzzz
такое впечатление, что либо бинарник большой, либо адреса левые. как будто что-то не пересобралось (system library?) куда-то он не туда пишет, ну и проверить естественно не может. выхлоп компилятора покажите
spectr
Вот отчет компилятора IDE:
CODE
**** Build of configuration Debug for project test_project ****

make -s all includes
Compiling main.c...
../main.c: In function `init_button_pio':
../main.c:34: warning: implicit declaration of function `alt_irq_register'
../main.c: At top level:
../main.c:39: warning: return type of 'main' is not `int'
../main.c: In function `main':
../main.c:41: warning: unused variable `value'
Linking test_project.elf...
Info: (test_project.elf) 13 KBytes program size (code + initialized data).
Info: 3120 Bytes free for stack + heap.
Creating generated_app.sh...
Post-processing to create ram_memory.hex
Hardware simulation is not enabled for the target SOPC Builder system.
Skipping creation of hardware simulation model contents and simulation
symbol files. (Note: This does not affect the instruction set simulator.)
Post-processing to create epcs_flash_controller_boot_rom.flash
Build completed in 27.984 seconds


Вот простыня исходника:
CODE
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"


//--------------------------------------------------------------
void delay(value)
{
int i=0;
for(i=0;i<value;i++);
}

//--------------------------------------------------------------
static void handle_button_interrupts(void* context, alt_u32 id)
{
volatile int* edge_capture_ptr = (volatile int*) context;
*edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE,0);
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTONS_BASE,0xF);
}

//--------------------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
volatile int edge_capture;

static void init_button_pio()
{
void* edge_capture_ptr = (void*) &edge_capture;
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTONS_BASE,0xF);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTONS_BASE,0);
alt_irq_register(BUTTONS_IRQ,edge_capture_ptr,handle_button_interrupts);
}

//--------------------------------------------------------------
void main(void)
{

int value = 0x00000001;

init_button_pio();

while (1)
{

if(edge_capture!=0)
{
switch(edge_capture)
{
case 0x1:
IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x1);
break;

case 0x2:
IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x2);
break;

case 0x4:
IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x4);
break;

case 0x8:
IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE , 0x8);
break;

default:
break;
}
}

}


Если это важно: в свойствах системной библиотеки параметры Program Memory и ReadOnly Memory установлены на On-Chip память.

Еще одно уточнение - процессор по сбросу и исключению уходит в память EPCS. Но в системной библиотеке, как я уже писал выше память программ и ROM-память указывают на OnChip-память. Может из-за этого косячить?

Во! Когда я изменил в свойствах системной библиотеки указание памяти программ и ROM с OnChip на EPCS, то компилятор выдал-таки ошибку, причем как раз с теми адресами, которые он выдавал при верификации:
Код
**** Build of configuration Debug for project test_project ****

make -s all includes
Compiling main.c...
../main.c: In function `init_button_pio':
../main.c:34: warning: implicit declaration of function `alt_irq_register'
../main.c: At top level:
../main.c:39: warning: return type of 'main' is not `int'
../main.c: In function `main':
../main.c:41: warning: unused variable `value'
Linking test_project.elf...
/cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: region epcs_flash_controller is full (test_project.elf section .text). Region needs to be 8908 bytes larger.
/cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: address 0xa2b4 of test_project.elf section .epcs_flash_controller is not within region epcs_flash_controller
/cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .rodata [00009820 -> 0000984b] overlaps section .exceptions [00009820 -> 000099c7]
/cygdrive/c/altera/81/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .rwdata [0000984c -> 0000a2b3] overlaps section .exceptions [00009820 -> 000099c7]
collect2: ld returned 1 exit status
make: *** [test_project.elf] Error 1
Build completed in 13.921 seconds


Похоже что ему мало памяти...
Sergey'F
Я немного не понял, что Вы делаете

Когда при запуске он пытается загрузить программу и пишет:
Downloading 00004000 ( 0%)
Downloading 00009820 (96%)
Downloaded 13KB in 0.2s (65.0KB/s),
он грузит ее как бы в ОЗУ и неудивительно, что при попытке верификации EPCS он выдает ошибки. Для программирования EPCS надо использовать Flash Programmer.

По сути, область памяти от 0x9800, выделенная на EPCS контроллер - это загрузчик, который перекачивает из EPCS в ОЗУ содержимое, зашитое Flash Programmer'ом в EPCS. Тогда при включении системы загрузчик сам перекачает код из EPCS в те секции памяти, которые надо инициализировать (т.е., секции, которые лежат во встроенном ОЗУ, внешнем ОЗУ и т.д.).

Поэтому и код, и exception вектор в настройках ядра процессора кладите в ram_memory, а reset - на EPCS контроллер. Тогда при reset код из EPCS будет загружаться загрузчиком, а при загрузке с кабеля при Run - загружаться в ram_memory через JTAG.

P.S. Это вроде как в теории, сам с системами на кристалле, использующими EPCS не работал.
vadimuzzz
Цитата
Если это важно: в свойствах системной библиотеки параметры Program Memory и ReadOnly Memory установлены на On-Chip память.

Еще одно уточнение - процессор по сбросу и исключению уходит в память EPCS. Но в системной библиотеке, как я уже писал выше память программ и ROM-память указывают на OnChip-память.

на EPCS должен указывать только вектор сброса. как уже писал Sergey'F, по этому адресу живет начальный загрузчик(там маленькое ОЗУ в компонент встроено+контроллер SPI), все остальное (и системная библиотека) должно располагаться в RAM. собственно запуск программы из ниос-иде не затрагивает загрузчик. а по памяти - вроде хватает, еще 3к свободно. хотя для того, что вы привели 13к как-то многовато.
barabek
 кроме всего вышесказанного предыдущими, при использовании прерываний подключайте файл sys/alt_irq.h
Porty
Добрый день,
возникла проблема с средой Eclipse:
Стал изучать NIOSII и начал с этих уроков (на которые ссылается сама альтера) http://www.nioswiki.com/Embedded_Systems_Lab благо плата CII starter kit была в наличии
выполнил согласно их даташиту все шаги но на последнем возникла проблема в том что непонял как залить програму в процессор и запустить, т.е. не смог выполнить:

Цитата
In the previous module you already downloaded the .SOF, so the FPGA is primed and ready to run the software application. Keeping the USB cable still plugged in to the DE1 board, you will download the application via the USB-JTAG link. To run the software project on the Nios II processor:

Right click on the software project directory and choose Run As and Nios II Hardware.

If the Run Configurations window appears:
Under the Project Tab: Verify Project and elf file name.
Under the Target Connection Tab: Select Refresh Connections
Select Run

т.к. фактически нет в Run Configurations пунктов отвечающих за JTAG програматор и отладчик.

Как его включить так чтоб он в среде програмирования появился?
vadimuzzz
Цитата(Porty @ Apr 30 2010, 14:45) *
Как его включить так чтоб он в среде програмирования появился?

зашейте из квартус-программера sof, потом в ниос-иде жмите Run. при включенном jtag`е и правильном sof эклипс увидит циклон и ниос в нем (все настройки в авто). чтобы создать конфигурацию, ткните в пункт Nios II Hardware
Porty
спасибо, запустил, но почему во время отладки при попытке прохода по шагам текущая выполняемая строка по F6 или F5 скачет достаточно странно (то всё линейно исполняется то назад проскакивает и тд)?
vadimuzzz
Цитата(Porty @ May 4 2010, 12:48) *
спасибо, запустил, но почему во время отладки при попытке прохода по шагам текущая выполняемая строка по F6 или F5 скачет достаточно странно (то всё линейно исполняется то назад проскакивает и тд)?

включена оптимизация кода по размеру (-Os)? для отладки лучше оставить debug (-Og)
Porty
спасибо, ещё вопрос: как освободить усб бластер занятый в среде ниойса для квартуса не выгружая самой среды ниойс еклипс? пробовал нажимать на красный квадрат остановки отладки/запуска не помогает.

Т.е. заливаеш в начале по джитагу прошивку из квартуса через байт бластер, потом запускаеш ниойс эклипс, заливаеш через него программу, останавливаеш выполнение, возврощаешся в квартус и пробуеш перезалить иную версию а он выдаёт:

Цитата
Info: Started Programmer operation at Thu May 06 10:27:01 2010
Error: Application Nios2 on 192.168.1.14 is using the target device
Error: Operation failed
Info: Ended Programmer operation at Thu May 06 10:27:01 2010


и пока среду разработки для ниойса вообще не закроеш квартус будет выдавать такую ошибку.
vadimuzzz
Цитата(Porty @ May 6 2010, 13:25) *
как освободить усб бластер занятый в среде ниойса для квартуса не выгружая самой среды ниойс еклипс?

должен освобождаться, если отладчиком не занят. похоже баг. а отладчик что пишет в окне, где процессы висят (там типа ""thread gdb running")? если нажать красную кнопку, там должно писаться "terminated". что за операционка?
Porty
win7 64bit
vadimuzzz
Цитата(Porty @ May 6 2010, 15:01) *
win7

не советуют
Porty
запустил один чип sdram памяти 256мегабит, 16 бит шина данных, но на плате стоит 2 чипа, с общими сигналами управления и адресом, с раздельными шинами данных (32битный модуль памяти в итоге), как их подключить в spoc билдере так чтоб одновременно шло обращение к обоим чипам в 32битном режиме?

просто выставить в настройках custom memory нельзя ибо сигналы маскирования байт будут уже для 32 бит т.е. на 4 байта, а не для 16 бит, объединять через тристейт мост авалона не хочу, т.к. насколько я понимаю они станут как 2 раздельных 16 разрядных банка памяти, а вот как их объединить в один 32битный банк памяти?
Kuzmi4
2 Porty
если у вас Cyclone II FPGA Starter Development Kit
то там нет сдвоенных SDRAM-ов smile.gif
там всего по одной штучке
Цитата
Memory:
8-Mb SDRAM
512-Kb SRAM
4-Mb flash
Porty
у меня своя плата, точнее набор. поспешили и сделали задел не продумав всю организацию памяти.
Kuzmi4
2 Porty
Тогда, наверно, дорога вам ковыряйть альтеровский SDRAM контроллер на свой лад unsure.gif
Porty
хочу сделать согласно этому рисунку (т.е. все сигналы адреса и управления в том числе и CS запаралелены у обоих модулей):
http://img708.imageshack.us/img708/3314/98895866.jpg
это кстати взято из официальной альтеровской документации (http://www.altera.com/literature/hb/nios2/n2cpu_nii51005.pdf) на sdram контроллер, но как включать такой режим и использовать упоминаний нет, просто сказано что вот он существует.
vadimuzzz
а что мешает взять custom memory и скоммутировать сигналы маскирования?
Porty
чтение понятно как можно скомутировать, а вот чтоб замаскировать запись необходимо либо как то не подавать сигнал записи на сам модуль что вообще невозможно без перепайки (наверное так и сделаю) ибо шины управления запаралелены, даже записывая 1 байт в память А идёт запись того же байта в память Б, т.е. нужно сделать буфер и как то сохранять те значения которые были что крайне сложно, да и смутила оригинальная документация на ip модуль памяти (что я выше выкладывал) по ней выходит что можно сделать средствами самой среды.
vetal
Вы сигналы маскирования объединили или нет?
vadimuzzz
Цитата(Porty @ May 7 2010, 23:39) *
чтение понятно как можно скомутировать, а вот чтоб замаскировать запись необходимо либо как то не подавать сигнал записи на сам модуль что вообще невозможно без перепайки (наверное так и сделаю) ибо шины управления запаралелены, даже записывая 1 байт в память А идёт запись того же байта в память Б, т.е. нужно сделать буфер и как то сохранять те значения которые были что крайне сложно, да и смутила оригинальная документация на ip модуль памяти (что я выше выкладывал) по ней выходит что можно сделать средствами самой среды.

а мне кажется, что просто половину DQMx на один чип завести, половину - на другой. и видиться 2 чипа x16 будут как один x32. разве нет? и во второй чип он не будет писать, если маска не установлена. или у вас на плате сигналы маскирования объединены? тогда - резать smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.