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

 
 
 
Reply to this topicStart new topic
> Программа для NIosII в EPCS, boot loader
torik
сообщение Jan 20 2008, 11:54
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Упустил, собственно, этот вопрос, а теперь хочу разобраться.

Необходимо, чтобы память программ ниоса располагалась в EPCS. Прочитал что обсуждалось на форуме:
http://electronix.ru/forum/index.php?showt...30842&st=15
И не понимаю, если память программ будет содержаться в EPCS, то как она будет выполняться - неужели прямо из этого флеша читаться? Тогда это медленно.

А если нет, то куда она собственно зальется и где возьмется boot loader для этого. Поясните, что да как в кратце и отправьте где читать...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
id_gene
сообщение Jan 20 2008, 13:10
Сообщение #2


carpe manana
***

Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659



Если секция TEXT лежит во флеше, то и читаться она будет из флеша.
А скорость вы уж сами считайте, хватает вам или нет.
Если нет, то ставьте reset адрес во флеш, а секции кладите в быструю память. Загрузчик в ИДЕ подцепится сам.
Читать Nios II Software Developer’s Handbook, разделы
Boot Sequence and Entry Point и Memory Usage.
Go to the top of the page
 
+Quote Post
vetal
сообщение Jan 20 2008, 13:37
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Встроенный бутлоадер скопирует программу из epcs в ту память, которая помечена как исполняемая при компиляции программы.
Например, если это будет sdram - программа будет скопирована из epcs в sdram и ей будет передано управление.
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 20 2008, 16:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Ничего себе - "секция TEXT", "исполняемая память при компиляции"... где это все? первый раз слышу.
А зачем нужна "ексцепшен" в сопсбидере указанная?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vetal
сообщение Jan 20 2008, 16:24
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
где это все?

Это в настройках проекта.
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 22 2008, 20:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Итак все-таки, прочитал что надо сделать чтобы зашить программу в епцс вместе с конфигурационным файлом. Но так и не вкурил следующее:

1) куда же эта программа при включении бутлоадится, в какое-то ОЗУ, которое входит в состав ниоса?
2) как я понимаю в версии 6.1 все-таки надо делать описание. Это точно? Ведь для заливки программы в CFI_FLASH я не делал описание, а просто дал название контроллеру (для епцс не дает дать название).

Альтернатива епцс и флешу - добавлять в SOPC onchipmemory и туда программу складывать, а потом указывать ей .hex для прошивки. Но это для конечного продукта, ведь ее можно залить только с перекомпиляцией проекта, а это долго. Кроме того годиться лишь для небольшой программы. Потому необходимо все-таки разбираться с епцс, чтобы снять этот вопрос раз и навсегда!
Еще, для ниоса пишу неособенно задумываясь программы на С, простенькие. Тут возникает непонятка - куда размещаются переменные-то? Надеюсь не по адресу 0, ибо там SDRAM в которой храниться картинка ))) Дизасемблер что-то лопатить не слишком хочется...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vetal
сообщение Jan 22 2008, 21:21
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Вы в настройках системной библиотеки указываете где размещается исполняемый код, где переменные и прочие гадости лежат.
Контроллер epcs это всего навсего ROM, содержащий код для загрузки программы из spi памяти(epcs) в то место, которое указано при компиляции программы. Если у вас программа во внутрикристальной памяти - этот контроллер не нужен, т.к. при подаче питания там уже все есть.
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 23 2008, 07:38
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Так, с этим вроде разобрался...
Теперь, т.к. у меня квартус 6.1, то мне приходится создавать описание платы дабы можно было в EPCS запихнуть программу для ниоса.

Создаю описание платы, как на рисунке. И флеш програмер говорит ошибку:
"SOF offset is invalid: java.lang.NumberFormatException: For input string: """
Ну, соответсвенно, не дает указать hardware image region... и вообще не програмирует. Что я не так со смещением сделал?

Е-мое, забыл рисунок-то добавить, как обычно. Добавляю...
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 24 2008, 07:20
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Отредактировал, рисунок добавил(


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 24 2008, 15:20
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Ладно, от этой темы можно пока отвлечся, т.к. это сейчас для меня не принципиально.

Теперь вопрос по программной части. Мне необходимо из флеш-памяти (CFI) перекопировать в память SDRAM область размером 640х480х2 (всмысле два байта на пиксель).
Далее я ее вывожу на монитор посредством обращения к памяти через шину авалон прямо из проекта квартусовского...
Так вот, вначале делал просто таким образом:
Код
alt_u16 *fff;             //указатель на флеш
alt_u16 *ddd;             //указатель на сдрам
   fff = (alt_u16*)(CFI_FLASH_0_BASE);
   ddd = (alt_u16*)(SDRAM_0_BASE);
   memcpy(ddd, fff, 614400);

И все вроде работало. Тот же результат, что и при копировании прямо через указатели. Картинка выводилась и т.п.
Но вот дальше обнаружилось что так прокатывает только один раз, далее функции
Код
memcpy, memset
работают уже неправильно, да и через указатели уже не получается.

Начал копать в сторону IOWR:
Код
    for (i = 0; i < 307200; i++) {
        dst_src = IORD_16DIRECT(CFI_FLASH_0_BASE, i);
       IOWR_16DIRECT(SDRAM_0_BASE, i, dst_src);
   }

И оказалось что и тут все не так. Копируется, но как-то неправильно, с пропусками. Даже если просто записывать в память 0...

Подскажите, что делать, как правильно сделать все это? Без ДМА.

Господа, простите. Это была паника, просто паника - все работает...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
RHnd
сообщение Jan 24 2008, 20:58
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Програму вы храните в епцс? Т.е. сама флеш-память полностью свободна? Ладно, с этим понятно.
Но вот не очень понятно, на каких правах вы так прото берете и перезаписываете данные по нулевому адресу сдрам? А если там уже что-то лежит? Вплоть до той же самой проги, которая выполняется. Или у вас в настройках библиотеки под оперативную память не сдрам предназначен, а какая-нить onchip?
Тут нужно как минимум делать malloc.

Кстати, вполне можно rtfm главу руководства квартуса, которая по встроенной переферии. Там, на сколько помню, есть вполне себе описание HAL для работы с flash.
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 25 2008, 05:53
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Спасибо за ответ...
1) С епцс не разобрался пока, отложил. Вот там вверху картинку выкладывал и на том застопорился.

2) Прога хранится во флеш-памяти, память программ, переменные и пр. - все в on_chip памяти, ибо программа пока небольшая.

3) СДРАМ предназначен только для хранения нескольких кадров (страниц), и вывод осуществляю аппаратно, потому распределяю память принудительно.
Думаю воспользоваться тем же malloc в дальнейшем, а адрес выделяемой памяти передавать через PIO. Но это не принципиально да и не необходимо на мой взгляд.

4) Про перефирию прочитал, потом прочитал HAL и выяснил, что главное использовать функции IOWR/IORD (и производные), если работать в обход кэша, для простоты.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 26 2008, 12:21
Сообщение #13


Гуру
******

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



Цитата(torik @ Jan 23 2008, 13:38) *
Теперь, т.к. у меня квартус 6.1, то мне приходится создавать описание платы дабы можно было в EPCS запихнуть программу для ниоса.

Создаю описание платы, как на рисунке. И флеш програмер говорит ошибку:
"SOF offset is invalid: java.lang.NumberFormatException: For input string: """
Ну, соответсвенно, не дает указать hardware image region... и вообще не програмирует. Что я не так со смещением сделал?

8) да,да помню я этот глюк. это не флеш програмер, а java корявая.
проблема решается очень просто, надо шить в консоли. почитайте user guide на flash_programmer.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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