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

 
 
> NIOS для начинающих
AlexBel
сообщение Oct 12 2009, 17:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 12-10-09
Пользователь №: 52 894



Имею девборду Altera DE1 (Cyclone II 2C20). Хотел бы своими руками "пошшупать" NIOS. Где-нибудь можно найти что-то типа "курса для начинающих", желательно с использованием DE1? Чтобы и теория была и практика и доступные пониманию новичков примеры. Конечная цель - создание "железа" с SDRAM и видеоконтроллером и разработка софта под него.
Go to the top of the page
 
+Quote Post
43 страниц V  « < 37 38 39 40 41 > »   
Start new topic
Ответов (570 - 584)
AVR
сообщение Jan 10 2017, 14:10
Сообщение #571


фанат 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 не обязателен, я например в тексте это всё делаю sm.gif


--------------------
Go to the top of the page
 
+Quote Post
lostbegan
сообщение Jan 10 2017, 14:12
Сообщение #572


Участник
*

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



Огромное спасибо вам, постараюсь все переварить и прощупать. Кстати, какую лучше версию Quartus использовать? Сейчас есть QII 9.1sp2+AlteraModelSim к ней+для прошивки софт на WIN7x32. Так же есть Quartus Prime 16.1 Lite Edition на WIN10x64?
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Jan 10 2017, 17:12
Сообщение #573


Лентяй
******

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



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

Лучше всего v16.1 на Win7 x64 (ну или а Linux x64).


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
lostbegan
сообщение Jan 10 2017, 18:25
Сообщение #574


Участник
*

Группа: Участник
Сообщений: 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 - генерация прошла успешно
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Jan 10 2017, 18:46
Сообщение #575


Лентяй
******

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



Цитата(lostbegan @ Jan 10 2017, 21:25) *
при попытке построить в эклипсе hello_nios проект выдает ошибки:

Скорее всего или с адресным пространством и настройками bsp накосячили, или printf в имеющийся объем памяти не помещается.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 10 2017, 18:51
Сообщение #576


фанат Linux'а
*****

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



Цитата(lostbegan @ Jan 10 2017, 21:25) *
С чем связано? уже и объем подергал. в Qsys собрал следующее - самый дохлый ниос с первым дебаггером, рам на 16кб, два pio - генерация прошла успешно

Оно тупо не влезает... 16 Кбайт для такой ерунды не хватает - это правда.
Вместо printf я использую невесомую alt_putstr, вместо полноценных библиотек использую IORD_ALTERA_AVALON_UART_STATUS IORD_ALTERA_AVALON_UART_RXDATA и прочие функции (скорее макросы для обращения к регистрам Nios2 напрямую).


--------------------
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Jan 11 2017, 09:59
Сообщение #577


Лентяй
******

Группа: Свой
Сообщений: 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) - см. тот же документ.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
lostbegan
сообщение Jan 11 2017, 16:58
Сообщение #578


Участник
*

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



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

Понимаю, что вопросы полуриторические, мне просто нужно понимать в правильном ли направлении я двигаюсь
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 11 2017, 17:27
Сообщение #579


фанат 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'а и уже непосредственно организовать какой то конкретный алгоритм после чего моделировать МоделСим?

Понимаю, что вопросы полуриторические, мне просто нужно понимать в правильном ли направлении я двигаюсь

Направление абсолютно верно, двигаемся дальше sm.gif
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


--------------------
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Jan 11 2017, 19:39
Сообщение #580


Лентяй
******

Группа: Свой
Сообщений: 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-файл нужен для моделирования (он содержит данные, которыми при старте моделирования будет проинициализирована модель памяти).


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
lostbegan
сообщение Jan 17 2017, 15:51
Сообщение #581


Участник
*

Группа: Участник
Сообщений: 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 подключается библиотекой, которая и содержит методы. Но есть ли по ним какое то обьяснение, желательно на русском? или на русский в этой теме можно не рассчитывать biggrin.gif

Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 17 2017, 19:21
Сообщение #582


фанат Linux'а
*****

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



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

Документацию и научные статьи я бы рассчитывал видеть лишь в англоязычном варианте.


--------------------
Go to the top of the page
 
+Quote Post
lostbegan
сообщение Jan 22 2017, 12:59
Сообщение #583


Участник
*

Группа: Участник
Сообщений: 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;
}
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 22 2017, 17:57
Сообщение #584


фанат 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;
}



--------------------
Go to the top of the page
 
+Quote Post
lostbegan
сообщение Jan 23 2017, 16:01
Сообщение #585


Участник
*

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



я не очень понимаю. Обвязку в самом квартусе составлять? если так то у меня в *.bsf, который после Qsys, только один вход clk, то есть pio нет. И первый кусок кода, который вы написали, в какой файле находиться должен?
Go to the top of the page
 
+Quote Post

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

 


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


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