|
загрузка NIOS при включении питания, загрузка NIOS из EPCS, SDRAM - для хранения инструкций |
|
|
|
Feb 20 2013, 18:13
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 21 2013, 06:45
|
Группа: Участник
Сообщений: 11
Регистрация: 19-02-13
Пользователь №: 75 680

|
PLL из входного клока 16,9344 МГц делает 2, умножая на 3, сдвига фаз нет. Файл .sdc прикрепил
|
|
|
|
|
Feb 21 2013, 19:10
|
Знающий
   
Группа: Свой
Сообщений: 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 оживает.... Вот это дает повод усомниться в полезности моего совета  Да, интересно - в чем же все таки дело?
|
|
|
|
|
Feb 22 2013, 06:36
|
Группа: Участник
Сообщений: 11
Регистрация: 19-02-13
Пользователь №: 75 680

|
При сдвиге фаз в 90 градусов, соблюдения констрайтнов никак не удается достичь. Но при сдвиге -70 градусов, все соблюдается с приличным запасом, но процессор по-прежнему не стартует... Для того, чтобы хранить инструкции и данные в SDRAM не нужет какой-то особенный bootloader, может контроллер SDRAM просто не проинициализирован к моменту запуска bootloader-а? Дело в том, что в отладке я можгу писать/читать в/из SDRAM, все работает корректно
Спасибо всем за ответы! Неужели стандартный загрузчик EPCS контроллера не может загружать в SDRAM?
Vadimuzz, я пробовал с помощью Flash programmer залить elf и sof в одну флешку, результат такой же...
|
|
|
|
|
Feb 22 2013, 13:27
|

Участник

Группа: Свой
Сообщений: 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
|
|
|
|
|
Feb 23 2013, 03:15
|

Гуру
     
Группа: Свой
Сообщений: 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).
|
|
|
|
|
Feb 24 2013, 17:35
|
Знающий
   
Группа: Участник
Сообщений: 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, но наверняка придется...
|
|
|
|
|
Feb 25 2013, 03:23
|
Группа: Участник
Сообщений: 11
Регистрация: 19-02-13
Пользователь №: 75 680

|
Проверил сигналы на SDRAM при помощи осциллографа, все времена прекрасно соблюдаются, из отладчика SDRAM читается и пишется без единой ошибки, так же хорошо читается и пишется флешка из-под отладчика. Но при включении питания на ногах SDRAM тишина, будто туда загрузчик вообще не пытается ничего прописать...
Про вариант со своим загрузчиком: в "alternative boot methods" есть пример под названием small_boot_copier, так вот в самом начале своей работы этот загрузчик считывает по базовому адресу EPCS 32-битное число и сравнивает его с 0xA5A5A5A5, что объявлено заранее под именем VALID_BOOT_SIGNATURE, но значения эти не совпадают, т загрузчик вываливается. Что бы это могло значить? Ведь под отладкой флешка прекрасно работает.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|