|
NIOS для начинающих |
|
|
|
 |
Ответов
(570 - 584)
|
Jan 10 2017, 14:10
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(lostbegan @ Jan 10 2017, 16:50)  Где можно найти информацию по этим "специальным дергающим" функциям? Если можете предложить помощь, буду рад совершенно любой информации, пока все никак не может собраться в общую картину Когда в Nios EDK (или как там) будете формировать BSP, то эти фукнции там будут уже готовые, достаточно лишь header подключить к программе и указывать этим функциям BASE ADDRESS периферийного блока. Например ALT_GPIO_WR(GPIO_0, 0x1234); <- название функции от балды, но они как-то там называются, нужно просто покопать .h файлы в каталоге проекта BSP Цитата(lostbegan @ Jan 10 2017, 17:06)  то есть процессор+память можно обставить двумя PIO на вх/вых и программно в прошивке с них бросать данные, обрабатывать и посылать на второй PIO. Потом моделировать в modelSim? Тогда Quartus как участвует? BlockSchematicFile вообще предполагается при таком раскладе? Да да, именно так. Modelsim отдельно от Quartus. BlockSchematicFile не обязателен, я например в тексте это всё делаю
--------------------
|
|
|
|
|
Jan 10 2017, 14:12
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 6-01-17
Пользователь №: 94 893

|
Огромное спасибо вам, постараюсь все переварить и прощупать. Кстати, какую лучше версию Quartus использовать? Сейчас есть QII 9.1sp2+AlteraModelSim к ней+для прошивки софт на WIN7x32. Так же есть Quartus Prime 16.1 Lite Edition на WIN10x64?
|
|
|
|
|
Jan 10 2017, 18:25
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 6-01-17
Пользователь №: 94 893

|
при попытке построить в эклипсе hello_nios проект выдает ошибки:
[BSP build complete] Info: Linking prosh.elf nios2-elf-g++ -T'../prosh_bsp//linker.x' -msys-crt0='../prosh_bsp//obj/HAL/src/crt0.o' -msys-lib=hal_bsp -L../prosh_bsp/ -Wl,-Map=prosh.map -O0 -g -Wall -mno-hw-div -mno-hw-mul -mno-hw-mulx -mgpopt=global -o prosh.elf obj/default/proch.o -lm -msys-lib=m c:/intelfpga_lite/16.1/nios2eds/bin/gnu/h-x86_64-mingw32/bin/../lib/gcc/nios2-elf/5.3.0/../../../../../H-x86_64-mingw32/nios2-elf/bin/ld.exe: address 0x86d0 of prosh.elf section `.rwdata' is not within region `onchip_memory' c:/intelfpga_lite/16.1/nios2eds/bin/gnu/h-x86_64-mingw32/bin/../lib/gcc/nios2-elf/5.3.0/../../../../../H-x86_64-mingw32/nios2-elf/bin/ld.exe: address 0x9114 of prosh.elf section `.bss' is not within region `onchip_memory' c:/intelfpga_lite/16.1/nios2eds/bin/gnu/h-x86_64-mingw32/bin/../lib/gcc/nios2-elf/5.3.0/../../../../../H-x86_64-mingw32/nios2-elf/bin/ld.exe: address 0x86d0 of prosh.elf section `.rwdata' is not within region `onchip_memory' c:/intelfpga_lite/16.1/nios2eds/bin/gnu/h-x86_64-mingw32/bin/../lib/gcc/nios2-elf/5.3.0/../../../../../H-x86_64-mingw32/nios2-elf/bin/ld.exe: address 0x9114 of prosh.elf section `.bss' is not within region `onchip_memory' collect2.exe: error: ld returned 1 exit status make: *** [prosh.elf] Error 1
С чем связано? уже и объем подергал. в Qsys собрал следующее - самый дохлый ниос с первым дебаггером, рам на 16кб, два pio - генерация прошла успешно
|
|
|
|
|
Jan 11 2017, 09:59
|

Лентяй
     
Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843

|
Цитата(lostbegan @ Jan 10 2017, 21:25)  С чем связано? уже и объем подергал. в Qsys собрал следующее - самый дохлый ниос с первым дебаггером, рам на 16кб, два pio - генерация прошла успешно Смотрите раздел Reducing Code Footprint in Embedded Systems в Nios II Gen2 Software Developer's HandbookИ рекомендацию уважаемого AVR относительно alt_putstr (ну или alt_printf) - см. тот же документ.
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Jan 11 2017, 16:58
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 6-01-17
Пользователь №: 94 893

|
Расширил память до 128кб. Проект построился, *.elf сформировался. 1. Как я понимаю это именно файл прошивки? 2. Увидеть приветствие применяя Run AS NiosII Hardware не удалось, так как нет подключенных устройств, но я так понимаю это не самая большая проблема. 3. Теперь нужно в этом файле прошивки, который *.С нужно соорудить оперирование с регистрами NIOS'а и уже непосредственно организовать какой то конкретный алгоритм после чего моделировать МоделСим?
Понимаю, что вопросы полуриторические, мне просто нужно понимать в правильном ли направлении я двигаюсь
|
|
|
|
|
Jan 11 2017, 17:27
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(lostbegan @ Jan 11 2017, 19:58)  Расширил память до 128кб. Проект построился, *.elf сформировался. 1. Как я понимаю это именно файл прошивки? 2. Увидеть приветствие применяя Run AS NiosII Hardware не удалось, так как нет подключенных устройств, но я так понимаю это не самая большая проблема. 3. Теперь нужно в этом файле прошивки, который *.С нужно соорудить оперирование с регистрами NIOS'а и уже непосредственно организовать какой то конкретный алгоритм после чего моделировать МоделСим?
Понимаю, что вопросы полуриторические, мне просто нужно понимать в правильном ли направлении я двигаюсь Направление абсолютно верно, двигаемся дальше  0. "Расширил память до 128кб" - и правильно, ведь это не железо, можно какой угодно размер увеличить 1. Да, но точнее это https://ru.wikipedia.org/wiki/Executable_and_Linkable_Format - формат универсальный, и для прошивок микроконтроллеров годится, из него можно в другой преобразовать если надо 2. Да, это только для живых ниосов в работающей ПЛИС, подключенных через JTAG например 3. Да, нужно оперировать регистрами. Конкретно для параллельных GPIO в Nios2 нужно читать ug_embedded_ip.pdf раздел 11 PIO core. Там есть еще Register Map, это значит что по смещению 1 лежит регистр для настройки "направления" работы порта GPIO: на вход или на выход. Смещение - от чего оно? От того адреса что мы автоматически назначили в Nios2 и теперь видим в файле system.h проекта BSP, это так называемый базовый адрес (base address, например #define PIO_0_BASE 0x5020) периферийного блока. В файле типа altera_avalon_pio_regs.h можно увидеть эти смещения, для удобства они в виде констант там. Ну а дальше работаем через функции (макросы на самом деле) IORD_ALTERA_AVALON_PIO*** указывая при обращении базовый адрес (ведь оно же должно знать с каким блоком PIO работаем, ведь их может быть много, а есть не только PIO). 4. Да, а потом этот ELF файл назначаем процессору Nios2, чтобы при загрузке прошивки и старте ПЛИС (или старте симуляции) в ней уже была программа по которой ей работать, ведь как "загрузить в симуляцию" прошивку для Nios2 я не знаю как делается если это возможно, поэтому задаем заранее жестко эту привязку процессора и прошивки. Затем моделируем в Modelsim
--------------------
|
|
|
|
|
Jan 11 2017, 19:39
|

Лентяй
     
Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843

|
Цитата(AVR @ Jan 11 2017, 20:27)  4. Да, а потом этот ELF файл назначаем процессору Nios2, чтобы при загрузке прошивки и старте ПЛИС (или старте симуляции) в ней уже была программа по которой ей работать, ведь как "загрузить в симуляцию" прошивку для Nios2 я не знаю как делается если это возможно, поэтому задаем заранее жестко эту привязку процессора и прошивки. Затем моделируем в Modelsim Так, конечно, тоже можно. Но это не лучший вариант, т.к. он предполагает запуск квартусовского P&R, ну или, в лучшем случае, ассемблера. А это дополнительное время. Обычно для проведения моделирования в ниосовском эклипсе создают таргет mem_init_geneate, который преобразует elf в hex- и dat-файлы. Dat-файл нужен для моделирования (он содержит данные, которыми при старте моделирования будет проинициализирована модель памяти).
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Jan 17 2017, 15:51
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 6-01-17
Пользователь №: 94 893

|
Цитата(AVR @ Jan 11 2017, 18:27)  3. Да, нужно оперировать регистрами. Конкретно для параллельных GPIO в Nios2 нужно читать ug_embedded_ip.pdf раздел 11 PIO core. Там есть еще Register Map, это значит что по смещению 1 лежит регистр для настройки "направления" работы порта GPIO: на вход или на выход. Смещение - от чего оно? От того адреса что мы автоматически назначили в Nios2 и теперь видим в файле system.h проекта BSP, это так называемый базовый адрес (base address, например #define PIO_0_BASE 0x5020) периферийного блока. В файле типа altera_avalon_pio_regs.h можно увидеть эти смещения, для удобства они в виде констант там. Ну а дальше работаем через функции (макросы на самом деле) IORD_ALTERA_AVALON_PIO*** указывая при обращении базовый адрес (ведь оно же должно знать с каким блоком PIO работаем, ведь их может быть много, а есть не только PIO). "Прочитал" файл, что вы советовали. В кавычках, потому что английский, к сожалению не хватает знаний языка для того что бы вникнуть. Возможно есть что то похожее не русском? И что то мне подсказывает что должна быть инструкция по конкретным методам обращения к регистрам. Пока только понял что altera_avalon_pio_regs.h подключается библиотекой, которая и содержит методы. Но есть ли по ним какое то обьяснение, желательно на русском? или на русский в этой теме можно не рассчитывать
|
|
|
|
|
Jan 17 2017, 19:21
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(lostbegan @ Jan 17 2017, 18:51)  "Прочитал" файл, что вы советовали. В кавычках, потому что английский, к сожалению не хватает знаний языка для того что бы вникнуть. Возможно есть что то похожее не русском? И что то мне подсказывает что должна быть инструкция по конкретным методам обращения к регистрам. Пока только понял что altera_avalon_pio_regs.h подключается библиотекой, которая и содержит методы. Но есть ли по ним какое то обьяснение, желательно на русском? или на русский в этой теме можно не рассчитывать  Ну вот документ: https://www.altera.com/en_US/pdfs/literatur...rst_nios_sw.pdf Там написано про IOWR_ALTERA_AVALON_PIO_DATA(base, data) это записывает данные в параллельный порт, а IORD считывает (WR write, RD read). Аналогичные функции для настройки направления работы параллельных портов. Документацию и научные статьи я бы рассчитывал видеть лишь в англоязычном варианте.
--------------------
|
|
|
|
|
Jan 22 2017, 12:59
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 6-01-17
Пользователь №: 94 893

|
Ну в общем то с PIO вроде обстановка примерно понятна. У меня два блока в Qsys'е собиралось вх/вых. В коде попытался каждый дернуть. Теперь буду пробовать симулировать. Вот только вопрос, для того что бы в IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE); что то бросить, надо же создавать схему (уже в Квартусе) и там каким то образом подсовывать значения? CODE #include <stdio.h> #include "altera_avalon_pio_regs.h" #define PIO_0_BASE 0x41000 #define PIO_BASE 0x41010 //Скопировал адреса с system.h
int main() { int in; in = IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE);//Предполагаю в переменную записать число in=in+1;//Минимальные действия с числом IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE, in);//Вывод получившегося значения return 0; }
|
|
|
|
|
Jan 22 2017, 17:57
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(lostbegan @ Jan 22 2017, 15:59)  Ну в общем то с PIO вроде обстановка примерно понятна. У меня два блока в Qsys'е собиралось вх/вых. В коде попытался каждый дернуть. Теперь буду пробовать симулировать. Вот только вопрос, для того что бы в IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE); что то бросить, надо же создавать схему (уже в Квартусе) и там каким то образом подсовывать значения? Разумеется, надо создать обвязку вокруг процессора, чтобы она вводила значения. Можно просто на входе повесить одно значение, а можно выход на вход подать - и будет оно так бесконечно инкрементировать по кругу, что можно будет легко увидеть в симуляторе. Код wire [31:0] my_loop; my_cpu cpu( .clock(clock50mhz), .reset(my_reset), .input_pio(my_loop), .ouput_pio(my_loop) ); Только с reset это отдельный разговор - он должен продержать уровень после включения схемы и затем сняться. Код я бы немного изменил: CODE #include <stdio.h> #include "altera_avalon_pio_regs.h" #define PIO_0_BASE 0x41000 #define PIO_BASE 0x41010 //Скопировал адреса с system.h
int main() { int in;
while(1) { // пусть бесконечно крутится для начала, а то отработает и замолчит in = IORD_ALTERA_AVALON_PIO_DATA(PIO_0_BASE);//Предполагаю в переменную записать число in=in+1;//Минимальные действия с числом IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE, in);//Вывод получившегося значения } return 0; }
--------------------
|
|
|
|
|
Jan 23 2017, 16:01
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 6-01-17
Пользователь №: 94 893

|
я не очень понимаю. Обвязку в самом квартусе составлять? если так то у меня в *.bsf, который после Qsys, только один вход clk, то есть pio нет. И первый кусок кода, который вы написали, в какой файле находиться должен?
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|