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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> загрузка NIOS при включении питания, загрузка NIOS из EPCS, SDRAM - для хранения инструкций
a.v.yastrebov
сообщение Feb 20 2013, 18:13
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 19-02-13
Пользователь №: 75 680



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

На плате установлены:
1. EP3C40Q240-C8
2. SDRAM MT48LC4M32B2
3. EPCS M25P54 в количестве двух штук, одна из которых подключена к конфигурационным ногам ПЛИС, вторая - к regulag I/O (соответствует EPCS контроллеру в qsys)

В qsys добавлено следующее:

1. on-chip memory
2. nios 2 processor
3. sysid
4. JTAG UART
5. EPCS flash controller
6. PIO
7. SDRAM controller (для MT48LC4M32B2 есть установка по умолчанию)

Вектор сброса процессора установлен на базовый адрес EPCS flash controller
Вектор обработчика исключений - на on-chip memory
В Eclips создан проект, зажигающий светодиод на плате

Задача: использовать SDAM для хранения инструкций и данных

Для этого в BSP Editor во вкладке Linker области .text, .rodata, .rwdata, .heap, .stack, .bss указаны на SDRAM; .entry и .exeptions - на EPCS и on-chip соответственно.

.elf-файл с программной частью зашивается в EPCS при помощи NIOS 2 Flash Programmer.
.jic-файл с аппаратной частью зашивается при помощи стандартного Quartus Programmer.

После передергивания питания NIOS не подает признаков жизни.

Если же в BSP Editor во вкладке Linker области .text, .rodata, .rwdata, .heap, .stack, .bss указать на on-chip, после передергивания питания NIOS оживает....

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

Да, забыл сказать, что система нормально работает под отладкой в Eclipse, когда все области в BSP Editor указаны в SDRAM
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 21 2013, 05:47
Сообщение #2


Гуру
******

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



проблема в констрйенах клоков и/или I/O на SDRAM. покажите настройки PLL и констрейны
Go to the top of the page
 
+Quote Post
a.v.yastrebov
сообщение Feb 21 2013, 06:45
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 19-02-13
Пользователь №: 75 680



PLL из входного клока 16,9344 МГц делает 2, умножая на 3, сдвига фаз нет. Файл .sdc прикрепил
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 21 2013, 06:48
Сообщение #4


Гуру
******

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



Цитата(a.v.yastrebov @ Feb 21 2013, 13:45) *
сдвига фаз нет.

на чип SDRAM надо подавать клок, сдвинутый по фазе. обычно используют сдвинутый на 90 гр.
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Feb 21 2013, 19:10
Сообщение #5


Знающий
****

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



Цитата(a.v.yastrebov @ Feb 20 2013, 22:13) *
...
.elf-файл с программной частью зашивается в EPCS при помощи NIOS 2 Flash Programmer.
.jic-файл с аппаратной частью зашивается при помощи стандартного Quartus Programmer.

После передергивания питания NIOS не подает признаков жизни.
...

А правильно ли расположен .elf-файл в EPCS? Не проще ли использовать NIOS II Flash Programmer для прошивки и .sof и .elf? Тогда NIOS II Flash Programmer автоматически расположит в EPCS .elf сразу же после .sof и загрузчик сможет найти и загрузить .elf.

Цитата(a.v.yastrebov @ Feb 20 2013, 22:13) *
..Если же в BSP Editor во вкладке Linker области .text, .rodata, .rwdata, .heap, .stack, .bss указать на on-chip, после передергивания питания NIOS оживает....

Вот это дает повод усомниться в полезности моего совета laughing.gif
Да, интересно - в чем же все таки дело?
Go to the top of the page
 
+Quote Post
Apast
сообщение Feb 22 2013, 01:44
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 22-06-04
Из: Новосибирск
Пользователь №: 87



Я с Altera и с NIOS не работал, но есть достаточный опыт с Xilinx и Microblaze.
Судя по тому что вы пишите код программы вы не меняетет, только переставляете указания линкеру
с внутренней памяти на внешнюю и наоборот. Тогда возникает вопрос а есть ли у вас кусок программы который грузит
исполняемый код во внешнюю память, сам он туда не попадет, и я сильно сомневаюсь что Quartus делает это сам.
В том случае когда указана внутренняя память то код по вкючению питания (после загрузки FPGA) уже лежит там
и все работает. В случае внешней памяти вы должны сделать это сами и этот кусок программы (начальный загрузчик)
должен лежать во внутреней памяти.
Отладчик, я думаю как и у Xilinx, как раз и грузит код во внешнюю память через свой загрузчик.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 22 2013, 03:20
Сообщение #7


Гуру
******

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



Я как-то упустил, что программа работает в отладчике, значит дело не в SDRAM. Тогда 2 вопроса: стоит ли в настройках EPCS-контроллера галка "Automatically select dedicated active serial interface" и зачем вам 2 флешки - можно ведь все в одну запихать.
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Feb 22 2013, 04:56
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Я выкрутился так http://electronix.ru/forum/index.php?showt...4&hl=sdram*, Хоть и довольно таки геморно, но со стандартным бутлодером у меня не получилось грузится в SDRAM.
Go to the top of the page
 
+Quote Post
a.v.yastrebov
сообщение Feb 22 2013, 06:36
Сообщение #9





Группа: Участник
Сообщений: 11
Регистрация: 19-02-13
Пользователь №: 75 680



При сдвиге фаз в 90 градусов, соблюдения констрайтнов никак не удается достичь. Но при сдвиге -70 градусов, все соблюдается с приличным запасом, но процессор по-прежнему не стартует... Для того, чтобы хранить инструкции и данные в SDRAM не нужет какой-то особенный bootloader, может контроллер SDRAM просто не проинициализирован к моменту запуска bootloader-а? Дело в том, что в отладке я можгу писать/читать в/из SDRAM, все работает корректно

Спасибо всем за ответы! Неужели стандартный загрузчик EPCS контроллера не может загружать в SDRAM?

Vadimuzz, я пробовал с помощью Flash programmer залить elf и sof в одну флешку, результат такой же...
Go to the top of the page
 
+Quote Post
wpost
сообщение Feb 22 2013, 13:27
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-04-10
Из: СПб
Пользователь №: 56 354



Цитата(a.v.yastrebov @ Feb 22 2013, 10:36) *
При сдвиге фаз в 90 градусов, соблюдения констрайтнов никак не удается достичь. Но при сдвиге -70 градусов, все соблюдается с приличным запасом, но процессор по-прежнему не стартует... Для того, чтобы хранить инструкции и данные в SDRAM не нужет какой-то особенный bootloader, может контроллер SDRAM просто не проинициализирован к моменту запуска bootloader-а? Дело в том, что в отладке я можгу писать/читать в/из SDRAM, все работает корректно

Спасибо всем за ответы! Неужели стандартный загрузчик EPCS контроллера не может загружать в SDRAM?

Vadimuzz, я пробовал с помощью Flash programmer залить elf и sof в одну флешку, результат такой же...


Скорее всего у вас проблемы с таймингами SDRAM контроллера. у меня с MT48 прекрасно все работает и никуда частоту не сдвигаю.
Еще возможно у вас частота с pll для ОЗУ появляется поздно. т.е. загрузчик сунулся, а клоков еще нет и ОЗУ не работает еще.

Еще момент, есть у меня впечатление документально не подтвержденное, что в ядре EPCS flash controller жестко системные ноги прописаны. Для начала попробуйте проверить .elf и .jic случайно не один поверх другого прожегаются в железе?

Сообщение отредактировал wpost - Feb 22 2013, 13:33
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Feb 22 2013, 14:34
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



У меня когда-то была ситуация, что загрузчик не мог скопировать программу в 8-битную внешнюю SRAM. А в 16-битную копировал нормально (или наоборот, забыл уже). Сама память при этом работала нормально. Так что может так какие-то проблемы с реализацией операции копирования в зависимости от разрядности шины данных.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 23 2013, 03:15
Сообщение #12


Гуру
******

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



Цитата(a.v.yastrebov @ Feb 22 2013, 13:36) *
При сдвиге фаз в 90 градусов, соблюдения констрайтнов никак не удается достичь.

значит констрейны кривые, т.к. частоты явно не запредельные. вот пример для K4S561632 (16-битная SDRAM), частота 75МГц, дорожки предполагаются выровненными
CODE

set main_clk u1|altpll_component|auto_generated|pll1|clk[0]
set sdram_clk u1|altpll_component|auto_generated|pll1|clk[1]
create_generated_clock -name sdram_clk_pin -source $sdram_clk
set_clock_groups -exclusive -group [list $main_clk $sdram_clk sdram_clk_pin]
#**************************************************************
# sdram timings
#**************************************************************
set tAC 5.4
set tOH 3
set tCM_Hold 0.8
set tCM_Setup 1.5
set tD_Hold 0.8
set tD_Setup 1.5
set tA_Hold 0.8
set tA_Setup 1.5
set_input_delay -max -clock sdram_clk_pin $tAC [get_ports {sdram_dq[*]}]
set_input_delay -min -clock sdram_clk_pin $tOH [get_ports {sdram_dq[*]}]
set_output_delay -max -clock sdram_clk_pin $tD_Setup [get_ports {sdram_dq[*]}]
set_output_delay -min -clock sdram_clk_pin $tD_Hold [get_ports {sdram_dq[*]}]
set_output_delay -max -clock sdram_clk_pin $tCM_Setup [get_ports {sdram_cas_n sdram_ras_n sdram_we_n sdram_cs_n sdram_cke sdram_dqm[*]}]
set_output_delay -min -clock sdram_clk_pin $tCM_Hold [get_ports {sdram_cas_n sdram_ras_n sdram_we_n sdram_cs_n sdram_cke sdram_dqm[*]}]
set_output_delay -max -clock sdram_clk_pin $tA_Setup [get_ports {sdram_addr[*] sdram_ba[*]}]
set_output_delay -min -clock sdram_clk_pin $tA_Hold [get_ports {sdram_addr[*] sdram_ba[*]}]
#**************************************************************
# Set Multicycle Path
#**************************************************************
set_multicycle_path -from [get_clocks {sdram_clk_pin}] -to [get_clocks $main_clk] -setup -end 2
set_multicycle_path -from [get_clocks {sdram_clk_pin}] -to [get_clocks $main_clk] -hold -end 0

обратите внимание на 2 последние строки.
Цитата
Неужели стандартный загрузчик EPCS контроллера не может загружать в SDRAM?

может. но загрузчик можно и свой поставить. смысла в этом в вашем случае я не вижу: ПЛИС конфигурируется, значит как минимум 1 интерфейс в цепочке загрузчика рабочий, разбираемся со вторым (sdram).
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Feb 24 2013, 17:35
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Недавно имел похожую ситуацию http://electronix.ru/forum/index.php?showtopic=109862 Все работало нормально в SDRAM из отладчика. Но после прошивки EPCS (после включения питания) не работал .elf.
Все нормально заработало в SDRAM только при прошивке EPCS из flash программера, но не вовсех случаях (не работало при переходе на оптимизированный вариант Release).
Поэтому думаю полезно прислушаться к советам vadimuzzz по поводу констрейнов для sdram (это помимо сдвига фазы который должен быть обязательно в соответствии с документацией по подключению в систему SDRAM). Сам пока не выставлял констрейны sdram, но наверняка придется...
Go to the top of the page
 
+Quote Post
a.v.yastrebov
сообщение Feb 25 2013, 03:23
Сообщение #14





Группа: Участник
Сообщений: 11
Регистрация: 19-02-13
Пользователь №: 75 680



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

Про вариант со своим загрузчиком: в "alternative boot methods" есть пример под названием small_boot_copier, так вот в самом начале своей работы этот загрузчик считывает по базовому адресу EPCS 32-битное число и сравнивает его с 0xA5A5A5A5, что объявлено заранее под именем VALID_BOOT_SIGNATURE, но значения эти не совпадают, т загрузчик вываливается. Что бы это могло значить? Ведь под отладкой флешка прекрасно работает.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 25 2013, 07:15
Сообщение #15


Гуру
******

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



Цитата(a.v.yastrebov @ Feb 25 2013, 10:23) *
Про вариант со своим загрузчиком: в "alternative boot methods" есть пример под названием small_boot_copier, так вот в самом начале своей работы этот загрузчик считывает по базовому адресу EPCS 32-битное число и сравнивает его с 0xA5A5A5A5, что объявлено заранее под именем VALID_BOOT_SIGNATURE, но значения эти не совпадают, т загрузчик вываливается. Что бы это могло значить? Ведь под отладкой флешка прекрасно работает.

параметры FLASH_BASE и BOOT_IMAGE_OFFSET передаются через make, проверьте их значения
Go to the top of the page
 
+Quote Post

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

 


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


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