Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прошивка программы в DDR3
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
electronik1979
Есть отладка с kintex7 kc705. Написал простенькую программу на си мигания светодиода и вывода надписи через rs232. Если прошиваю эту программу в брам все работает, если в настройках линкер скрипта указываю ддр3 то после прошивки программа не работает. Версия ise 13_4. Помогите, что я не так делаю?
Opex
Внешняя память, вообще, работает? Проверяли каким-нибудь мемтестом?
Apast
Цитата(electronik1979 @ Aug 2 2012, 10:28) *
Есть отладка с kintex7 kc705. Написал простенькую программу на си мигания светодиода и вывода надписи через rs232. Если прошиваю эту программу в брам все работает, если в настройках линкер скрипта указываю ддр3 то после прошивки программа не работает. Версия ise 13_4. Помогите, что я не так делаю?


А как она туда попадет. Это надо загрузчик который вычитает программу из (загрузочной памяти, флаш и пр.) и загрузит ее в ДДР, а затем передаст управление туда.
С брам проще программа там гразиться вместе с прошивкой, т.е. она находится в прошивке.
electronik1979
А разве через XMD консоль программа не может быть загружена прямо в ддр?
Alex77
Цитата(electronik1979 @ Aug 2 2012, 16:33) *
А разве через XMD консоль программа не может быть загружена прямо в ддр?

временно - да. (проверено на edk 12.4)
Но автор задал вопрос без объяснений что ему надо.
electronik1979
Извините, не уточнил, пробую разбираться с отладочной платой, пишу простые программы и гружу через xmd консоль прямо из SDK. Может какие-нибудь настройки забыл указать, кроме линкер скрипта. Аппаратная платформа взята готовая в EDK просто выбрал отладочную кс705.
Flood
Вообще, после загрузки программы в DDR через XMD работать она должна. Стоит проверить, что:
- DDR доступна (пишется/читается в XMD, причем читается то, что туда записали);
- процессор (microblaze?) имеет доступ к DDR на исполнение (есть доступ через порт IC, диапазон разрешен для работы кэша программ);
- линкер компонует программу в нужные адреса.

Кстати, вместо простых программ мигания светодиодом можно всунуть в BRAM целый u-boot - дела пойдут значительно веселее.
electronik1979
Цитата(Opex @ Aug 2 2012, 15:22) *
Внешняя память, вообще, работает? Проверяли каким-нибудь мемтестом?

Сегодня проверил, в тесте память работает

В консоли выдается такое при загрузке и запуске из ддр3

XMD% connect mb mdm

JTAG chain configuration
--------------------------------------------------
Device ID Code IR Length Part Name
1 33651093 6 XC7K325T

MicroBlaze Processor Configuration :
-------------------------------------
Version............................8.20.b
Optimization.......................Performance
Interconnect.......................AXI-LE
MMU Type...........................No_MMU
No of PC Breakpoints...............1
No of Read Addr/Data Watchpoints...0
No of Write Addr/Data Watchpoints..0
Instruction Cache Support..........on
Instruction Cache Base Address.....0xc0000000
Instruction Cache High Address.....0xc7ffffff
Data Cache Support.................on
Data Cache Base Address............0xc0000000
Data Cache High Address............0xc7ffffff
Exceptions Support................off
FPU Support.......................off
Hard Divider Support...............off
Hard Multiplier Support............on - (Mul32)
Barrel Shifter Support.............on
MSR clr/set Instruction Support....on
Compare Instruction Support........on
Data Cache Write-back Support......off
Fault Tolerance Support............off
Stack Protection Support...........off

Connected to "mb" target. id = 0
Starting GDB server for "mb" target (id = 0) at TCP port no 1235
XMD% dow empty_cpp_0/debug/empty_cpp_0.elf
Downloading Program -- empty_cpp_0/debug/empty_cpp_0.elf
section, .vectors.reset: 0x00000000-0x00000007
section, .vectors.sw_exception: 0x00000008-0x0000000f
section, .vectors.interrupt: 0x00000010-0x00000017
section, .vectors.hw_exception: 0x00000020-0x00000027
section, .text: 0xc0000000-0xc0000ecb
section, .init: 0xc0000ecc-0xc0000f07
section, .fini: 0xc0000f08-0xc0000f23
section, .ctors: 0xc0000f24-0xc0000f2b
section, .dtors: 0xc0000f2c-0xc0000f33
section, .rodata: 0xc0000f34-0xc0001331
section, .sdata2: 0xc0001332-0xc0001337
section, .data: 0xc0001338-0xc0001473
section, .eh_frame: 0xc0001474-0xc0001477
section, .jcr: 0xc0001478-0xc000147b
section, .bss: 0xc0001480-0xc00014a3
section, .heap: 0xc00014a4-0xc00018a7
section, .stack: 0xc00018a8-0xc0001ca7
Setting PC with Program Start Address 0x00000000
System Reset .... DONE

XMD% run

RUNNING> 0
XMD% state
--------------------------------------------------------
System(1) - Hardware System on FPGA(Device 1) Targets:
--------------------------------------------------------
Blocked on Mem Instr Target(0) - MicroBlaze(1) Debug Target*


XMD%
XMD% rst
System reset successfully

0
XMD% run
ERROR: Debug Operation Not Supported on the Target
MicroBlaze Pipeline Stalled on a Blocking Instruction or Invalid Bus Access
Stalled PC: 0x00000008
Try Resetting the Processor to Continue..

fox12
electronik1979, исходя из того что Вы представили:

Цитата
section, .vectors.reset: 0x00000000-0x00000007
section, .vectors.sw_exception: 0x00000008-0x0000000f
section, .vectors.interrupt: 0x00000010-0x00000017
section, .vectors.hw_exception: 0x00000020-0x00000027

и
Цитата
section, .text: 0xc0000000-0xc0000ecb


Вам следует указать в lscript.ld адреса векторов сброса, прерывания
и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),
а начиная с 0xС0000000 (там где адресуется ваша DDR3).

Цитата
SECTIONS
{
.vectors.reset 0xС0000000 : {
*(.vectors.reset)
}

.vectors.sw_exception 0xС0000008 : {
*(.vectors.sw_exception)
}

.vectors.interrupt 0xС0000010 : {
*(.vectors.interrupt)
}

.vectors.hw_exception 0xС0000020 : {
*(.vectors.hw_exception)
}
electronik1979
Цитата(fox12 @ Aug 3 2012, 19:14) *
electronik1979, исходя из того что Вы представили:


и

Вам следует указать в lscript.ld адреса векторов сброса, прерывания
и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),
а начиная с 0xС0000000 (там где адресуется ваша DDR3).


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

Цитата(fox12 @ Aug 3 2012, 19:14) *
electronik1979, исходя из того что Вы представили:


и

Вам следует указать в lscript.ld адреса векторов сброса, прерывания
и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),
а начиная с 0xС0000000 (там где адресуется ваша DDR3).


А не подскажете, где можно поменять эти параметры, в линкер скрипте что-то не получается.
Вы уверены что эти адреса надо менять, у меняесть пример xapp472 так там программа храниться в ддр3 а адреса этих секций такие же
Alex77
Цитата(fox12 @ Aug 3 2012, 18:14) *
electronik1979, исходя из того что Вы представили:


и

Вам следует указать в lscript.ld адреса векторов сброса, прерывания
и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),
а начиная с 0xС0000000 (там где адресуется ваша DDR3).

Этого совершенно не надо делать.
electronik1979
Добавил в проект файлы platform.c и platform.h и программа стала запускаться, при выполнении по шагам в консоли почему-то указывается одна и та же команда add r0 , r0 , r0 . Что это может значить?

XMD% stp
C0000074: 00000070 add r0 , r0 , r0

XMD% stp
C0000078: 00000078 add r0 , r0 , r0

XMD% stp
C000007C: 00000078 add r0 , r0 , r0

XMD% stp 2
C0000084: 00000080 add r0 , r0 , r0

XMD% stp
C0000088: 00000088 add r0 , r0 , r0
electronik1979
Спасибо всем за ответы, я толком не разобрался в чем была проблема, но взяв новую аппаратную платформу от примера kc705_bist программа стала запускаться из ДДР.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.