Перейти к содержанию
    

Организация работы с памятями в NIOS`е

Здравствуйте.

 

Собственно не вопрос а вопросы -

 

Ниос, я так понял имеет линейнное адресное пространство - правильно? (всмысле никакими хитросятими кроме программного метода (лапками банки переключать там) нельзя расширить больше чем на 4гб?).

 

Дальше хочется сделать такую вещь - имеем флеш память, SDRAM (например) и SD-card.

Память изначально находится во флеш. При старте в AS моде с EPCS подчитывается конфигурационный SOF-файл. Далее - когда сконфигурится FPGA(типа процессор уже создан) - у меня в on_chipmem cидит загрузчик который копирует(ну потестить сдрам надо обязательно + можно добавить тест другой периферии по желанию) с флеша в SDRAM программу (в процессе создания on_chipmem в SoPC Buildere указываем , что её инициализировать надо - вот тут первая непонятка - что и куда надо записывать будет дополнительно - ведь SOF -это только процессор ). Когда загрузчик закончит делать своё дело имем в SDRAMе нашу программу - и вот тут дальше вообсче для меня тёмный лес - как заставить ниос выполняться с скопированного кода в SDRAM ? :smile3046:

Я дак думаю в выставить в этой опции - SDRAM

post-25329-1207912016_thumb.jpg

По идее начнётся выполнение с 0 ячейки срама - так ?

 

Далее под Heap и Stack выделю отдельную область в on_chipmem (другая есссно чем для загрузчика)

А вот как быть с rodata и rwdata - это как понимать? Я так понимаю rwdata это как раз мои переменные. А rodata - что туда ложится :wacko: ?

 

Далее вопрос касательно SD-Card - в результате просмотра документаций и всего прочего(в том числе примеров что идут к девкитам) пришёл к выводу что протокол обмена с карточкой реализовывается в ниосе - :crying: - то есть нельзя карточку прикрутить к адресному пространству ?? Тобто можно пойти 2мя путями - или поррубить SPI -и сотворить как на мегах - фат там и все дела. А можно прост овлепить 4 лапы и софтварно наваять на ниосе драйвер обсчения по SD-шному протоколу ?

В принципе есчё можно порится на опенкоресах - но там есть

SD/MMC/SPIflash FPGA Config

SD/MMC Bootloader

Вроде не то ??

Посоветуйте как бы прикрутить SD-Card с наименьшими траблами.

 

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

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начнем с малого.

в процессе создания on_chipmem в SoPC Buildere указываем , что её инициализировать надо - вот тут первая непонятка - что и куда надо записывать будет дополнительно - ведь SOF -это только процессор ).
Память можно иницилизировать любым нужным вам содержанием. Для этого вам понадобится hex файл. В итоге SOF у вас будет содержать как процессор с памятью и контроллерами, так и содержимое памятей. Это все работает.

Также можно инициализировать памяти mif файлами (если так вам удобнее), но при этом придется покопаться в настройках, потому что билдер хочет hex.

 

Когда загрузчик закончит делать своё дело имем в SDRAMе нашу программу - и вот тут дальше вообсче для меня тёмный лес - как заставить ниос выполняться с скопированного кода в SDRAM ?
Обычно загрузчик тоже кладут во флеш, и указывают reset address процессора туда же. Т.е. после сброса процессор идет по указанному адресу, а там лежит загрузчик. Если при этом указать расположение секций в sdram - то IDE должен сам вставить загрузчик, который скопировал бы программу из flash в SDRAM.

 

Вы же хотите поместить загрузчик в onchip память. Боюсь, придется вам руками вставлять функции загрузки секций (alt_load, alt_load_section), зато вы сможете вставить тесты памяти до вызова копирования.

 

Я так понимаю rwdata это как раз мои переменные. А rodata - что туда ложится :wacko: ?
ну, константы всякие, read-only data.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 id_gene - спасибо за развёрнутые ответы, однако всё равно есть непонятки..

 

Значит касательно SOF - файла - а как мне засунуть в него инициализационный HEX для оnchip_mem написанный ручками (потому как загрузчик который сам с флеши перекладывает в сдрам хорошо, но хотелось бы сначала удостоверится что СДРАМ и другие прибамбасы на месте и не битые) ? И как передать управление коду что находится в срам( скопировался который) от загрузчика ? В принципе интуитивно догадываюсь что-то типа "jmp" инструкция, но хотелось бы услышать хоть какие либо подробности от людей делавших это..

 

Далее касательно загрузчика который IDE должен сам вставить - хотелось бы узнать последовательность действий - написал прогу в IDE, указал ресет-вектор на флеш, а расположение памяти в сдрам (в первом посте картинка), и тогда при заливке программы флеш лоадером IDE положит в начало программы загрузчик, так?

 

Ну и последний вопрос, только не бейте сильно - а где можно почитать как на асме кодить в NIOS II IDE ? :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит касательно SOF - файла - а как мне засунуть в него инициализационный HEX для оnchip_mem написанный ручками
Проще всего залезть в верилог этой памяти и посмотреть название файла "onchip_mem".hex в параметрах altsyncram. Ваш файл должен иметь такое же имя. Вообще-то hex должен появиться в папке xxx_sim.

 

И как передать управление коду что находится в срам( скопировался который) от загрузчика ? В принципе интуитивно догадываюсь что-то типа "jmp" инструкция, но хотелось бы услышать хоть какие либо подробности от людей делавших это..
Я не делал. Альтеровский загрузчик делает, кажется, br.

 

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

 

написал прогу в IDE, указал ресет-вектор на флеш, а расположение памяти в сдрам (в первом посте картинка), и тогда при заливке программы флеш лоадером IDE положит в начало программы загрузчик, так?
да

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 id_gene - касательно инициализационного HEX для оnchip_mem - в бандерлоге нашёл строчку вида

 

the_altsyncram.lpm_type = "altsyncram",

 

И более ничего. Однако упоминания про оnchip_mem.hex нашёл в

 

generated_app.mk и CPU3.ptf

 

Не могли бы вы объяснить что это за altsyncram и с чем его здесь едят ?

 

На счёт секций - спасибо - буду иметь на заметке.

 

На счёт загрузчиков вообсче - хотелось конечно написать на асме, чтоб меньше места, но товарисчи с саппорта подкинули тут такие материалы

 

http://www.altera.com/literature/an/an458.pdf

http://www.altera.com/literature/an/an458_...ample_files.zip

http://www.altera.com/literature/an/defaul...der_sources.zip.

 

Выдержка -

I think BOOT_CFI_FROM_ONCHIP_ROM mode is right what you want to have.

 

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

На крайняк вспомним молодость - поковыряем тот загрузчик что IDE нам подсунет - переработаем там, но как то это .... не есть гут...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

the_altsyncram.lpm_type = "altsyncram",

 

И более ничего. Однако упоминания про оnchip_mem.hex нашёл в

 

generated_app.mk и CPU3.ptf

 

Не могли бы вы объяснить что это за altsyncram и с чем его здесь едят ?

altsyncram - это мегфункция альтеры, которая синтезируется в какую-либо память в зависимости от параметров.

Для инициализации используется параметр the_altsyncram.init_file - читайте хелп на мегафункцию. В отчетах синтеза в разделе памяти есть сведения об использованном файле инициализации.

 

Кстати, возможно не все кристаллы поддерживают инициализацию памяти. проверьте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попытался попробовать стандартный загрузчик ниоса - установил ресет вектор на CFI а программу расположил в SDRAM.

Открываю Flash Programmer хочу залить

post-25329-1208438364_thumb.jpg

В результате получаю в консоли IDE

 

#!/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 C:/altera/72/PROJECTS/2c20/prj8/SW/BL_TST/BL_TST/Debug

 

# Creating .flash file for the project

"$SOPC_KIT_NIOS2/bin/elf2flash" --base=0x01400000 --end=0x17fffff --reset=0x1400

000 --input="BL_TST.elf" --output="cfi_flash.flash" --boot="C:/altera/72/ip/nios

2_ip/altera_nios2/boot_loader_cfi.srec"

 

# Programming flash with the project

"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --base=0x01400000 "cfi_flash.flash

"

Using cable "USB-Blaster [uSB-0]", device 1, instance 0x00

Resetting and pausing target processor: OK

No CFI table found at address 0x01400000

Leaving target processor paused

 

Собсно процессор

post-25329-1208438494_thumb.jpg

post-25329-1208438371_thumb.jpg

 

Может кто нибудь объяснить - что за таблицу он там не нашёл ?

(осцыла нет - тыкануться не могу чтоб посмотреть достукивается он до CFI или нет, но лапы прально соединил)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага - таблицу он не нашёл -а она там должна быть - запустил прогер с ключом дебуг и в результате

0riginal contents (after writing 0xF0 and 0xFF to address 0x01400000):

0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

Contents after writing 0x98 to address 0x014000AA:

Same after writing 0x0098 to address 0x01400154:

Same after writing 0x00000098 to address 0x014002A8:

Same after writing 0x98 to address 0x01400055:

Same after writing 0x0098 to address 0x014000AA:

Same after writing 0x00000098 to address 0x01400154:

Same after writing 0x98 to address 0x01400154:

Same after writing 0x0098 to address 0x014002A8:

Same after writing 0x00000098 to address 0x01400550:

0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

 

Короче накрылась таблица - или её вообсче не было.... :crying:

Однако тесты проходят на ура(те чт ос девбордом шли).. :07:

Кто знает как победить это ? :smile3046:

(только не отсылайте к http://electronix.ru/forum/index.php?showtopic=40573 - был - все незаюзаныые выводы на землю, сдрам нормально пашет(если прогу грузить с ниоса в сдрам - работает).. ) ..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у флешей есть некая унифицированная таблица с параметрами. Чтобы до нее достучаться нужно провести какую-то команду (запись кокнетного числа по конкретному адресу) - команду смотреть в даташите на вашу м/с флеш-памяти.

Похоже, что ИДЕ пытался перебором команд попасть в эту таблицу.

Может команду можно где-то настроить при создании проекта?

 

А если процессором можете в таблицу попасть? В смысле написать маленьку прогу, чтоб она во флеш залезла и почитала таблицу, вывела-бы через jtag-uart?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 id_gene -

Действительно в ДШ есть похожее :

This device enters the CFI Query mode when the system writes the CFI Query command, 98h, to address 55h in word mode (or address AAh in byte mode), any time the device is ready to read array data.

 

То есть насколько я понял - мне надо указать чтоб записалось 98h по адресу AAh и будет мне счастие...

Будем искать где указывать..... :smile3046:

 

 

 

Хотя - выше приведён листинг -

Same after writing 0x0098 to address 0x014000AA:

 

Тобто было уже...

:wacko:

 

Уже даже выставлял такие параметры

post-25329-1208529961_thumb.jpg

Всё равно таблицу не видит...

:crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В обсчем дошёл до абсурда - :01: - открутил стёклышко с девборда, и прозвонил все контакты с флеши что мог на наличие контактов с дорожками - проверил наличие соединения. Дальше пересобрал прожект - проштудировав ДШ на мою флешу и пришёл к выводу что Setup Hold Wait параметры должны быть по 100 нс - выставил - сгенерил проц, дальше сварганил простенький прожект в ИДЕ - сотворил его с стандартным загрузчиком ИДЕ, залил проц с квартуса, запустил флеш-програмер указал на всякий случай ключик дебуг - и О ЧЮДО!! оно нашло таблицу и залилось и даже заработало как надо!...

:smile3046:

 

В принципе начал копать в сторону an458 - взял смал бутлодырь на 200 байт, чуть дополнил - скомпилолось - залилось - работает ("NIOS II Command Shell.bat" решил все вопросы - как запускать, билдить правильно и тд)

Так что в принципе вопрос решён...

:yeah:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Первое, что касается инициализации памяти - дык прям в сопц билдере правой кнопкой щелк на памяти, там галку поставили и указали свой .hex. Этот самый .hex прямо в квартусе создали и в корень своего проекта запихали. Но... придется перекомпилировать проект.

 

Второе, "No CFI table found at address 0x01400000", это дело в проекте. Надо смотреть, может где-то критикальный варнинг выскочил или еще чего. Или с ресетом чего не так... Просто внимательно проверяем свой проект, не надо пропаивать микросхемки на плате...

 

Далее - нафиг вам этот бутлоадер сдался. Не мое конечно дело, но судя по всему вы только начали тоже с этим всем разбираться, проще взять чего попроще. Не?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 torik - так уже освоил.. в принципе ничего сложного - главное литературу найти было...

А счас так и юзаю - понравилось ..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...