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

Как добавить программу Microblaze в конфигурационный файл PROM?

Программа написана в Xilinx SDK, откомпилирована.

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

 

Далее нужно запрограммировать PROM. Для этого захожу в XPS, добавляю свой скомпилированный проект в формате elf и ставлю на нем галку Mark to Initialize BRAMs. Выбираю в меню Update bitstream.

После чего XPS пишет ошибку:

Microblaze.make:75: *** multiple target patterns. Stop.

Done!

 

На этом все останавливается.

Даже если снять галку Mark to Initialize BRAMs с этого проекта, то все равно ругается, пока не удалишь его полностью.

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


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

Программа написана в Xilinx SDK, откомпилирована.

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

 

Далее нужно запрограммировать PROM. Для этого захожу в XPS, добавляю свой скомпилированный проект в формате elf и ставлю на нем галку Mark to Initialize BRAMs. Выбираю в меню Update bitstream.

После чего XPS пишет ошибку:

Microblaze.make:75: *** multiple target patterns. Stop.

Done!

 

На этом все останавливается.

Даже если снять галку Mark to Initialize BRAMs с этого проекта, то все равно ругается, пока не удалишь его полностью.

Каков размер elf-файла и BRAMs в проекте ?

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


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

Каков размер elf-файла и BRAMs в проекте ?

 

BRAM - 16кб

 

Размер elf файла 29кб..

 

Но, когда запускаю программу из SDK (в FPGA залит бутлоадер) у меня все влазит в память и работает (в линкере размер исполняемой части показывает в районе 6 кб). И когда в SDK собираю файл конфигурации (вместо бутлоадера выбираю исполняемый файл), чтобы его залить в FPGA тоже все собирается и работает.

 

Может я вообще что-то не то делаю?

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


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

подойдём с другой стороны

http://comments.gmane.org/gmane.comp.gcc.c...compiling/10857

и (или)

http://www.edaboard.com/ftopic147769.html

 

edk/ise/sdk всё делают через make-файл.

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


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

подойдём с другой стороны

http://comments.gmane.org/gmane.comp.gcc.c...compiling/10857

и (или)

http://www.edaboard.com/ftopic147769.html

 

edk/ise/sdk всё делают через make-файл.

 

Я понимаю, что через make все делается.. Только я не владею достаточными знаниями, чтобы разобраться с этим. Пути в проекте все прописаны корректно, никаких русских букв, никаких пробелов и подозрительных символов, сам файл программы копировал в ту же папку, где все остальное лежит. Это не помогло.

 

По ссылкам в обоих случаях упоминается знак ":", но мне это ни о чем не говорит.

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


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

Прошить флэш вашей программой можно из XPS или SDK, в зависимости от версии, там должно быть что-то вроде

Program Flash. Там же вам предложат создать программу загрузчика (bootloader). Загрузчик нужен для того, что

вытащить вашу программу из флэша (как правило это Intel StrataFlash) и переписать в оперативную память

с последующей передачей управления на адрес первой инструкции вашей программы.

 

После компиляции проекта загрузчика, получается такой же elf файл (bootloader.elf).

Вот этот файл вами надо скрестить с битстримом (.bit) и получить mcs файл для

заливки платформенной prom (XCF....).

 

Для того чтобы скрестить файлы нужно почитать про утилиту data2mem.

В соответствующем УГ все доступно написано UG642.

 

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


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

Я понимаю, что через make все делается.. Только я не владею достаточными знаниями, чтобы разобраться с этим. Пути в проекте все прописаны корректно, никаких русских букв, никаких пробелов и подозрительных символов, сам файл программы копировал в ту же папку, где все остальное лежит. Это не помогло.

 

По ссылкам в обоих случаях упоминается знак ":", но мне это ни о чем не говорит.

Содержимое Microblaze.make в студию.

По той информации что Вы дали можно предположить кривизну в создании make-файла и поэтому make.exe ругается.

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


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

Прошить флэш вашей программой можно из XPS или SDK, в зависимости от версии, там должно быть что-то вроде

Program Flash. Там же вам предложат создать программу загрузчика (bootloader).

....

Для того чтобы скрестить файлы нужно почитать про утилиту data2mem.

В соответствующем УГ все доступно написано UG642.

 

Вы не поняли. Я не храню программу во флэше, мне нужно, чтобы программа хранилась в конфигурации FPGA и хранилась в PROM вместо бутлоадера, т.е. нужно, чтобы в FPGA конфигурация заливалась сразу с программой.

 

За UG642 спасибо, почитаю.

 

Alex77

Содержимое Microblaze.make в студию.

 

#################################################################
# Makefile generated by Xilinx Platform Studio 
# Project:E:\projects\FPGA\ISE121\AD9985_Flash\AD9985_Flash_ISE\Microblaze\Microblaze.xmp
#
# WARNING : This file will be re-generated every time a command
# to run a make target is invoked. So, any changes made to this  
# file manually, will be lost when make is invoked next. 
#################################################################

# Name of the Microprocessor system
# The hardware specification of the system is in file :
# E:\projects\FPGA\ISE121\AD9985_Flash\AD9985_Flash_ISE\Microblaze\Microblaze.mhs
# The software specification of the system is in file :
# E:\projects\FPGA\ISE121\AD9985_Flash\AD9985_Flash_ISE\Microblaze\Microblaze.mss

include Microblaze_incl.make

#################################################################
# PHONY TARGETS
#################################################################
.PHONY: dummy
.PHONY: netlistclean
.PHONY: bitsclean
.PHONY: simclean
.PHONY: exporttosdk

#################################################################
# EXTERNAL TARGETS
#################################################################
all:
    @echo "Makefile to build a Microprocessor system :"
    @echo "Run make with any of the following targets"
    @echo " "
    @echo "  netlist  : Generates the netlist for the given MHS "
    @echo "  bits     : Runs Implementation tools to generate the bitstream"
    @echo "  exporttosdk: Export files to SDK"
    @echo " "
    @echo "  libs     : Configures the sw libraries for this system"
    @echo "  program  : Compiles the program sources for all the processor instances"
    @echo " "
    @echo "  init_bram: Initializes bitstream with BRAM data"
    @echo "  ace      : Generate ace file from bitstream and elf"
    @echo "  download : Downloads the bitstream onto the board"
    @echo " "
    @echo "  sim      : Generates HDL simulation models and runs simulator for chosen simulation mode"
    @echo "  simmodel : Generates HDL simulation models for chosen simulation mode"
    @echo "  behavioral_model : Generates behavioral HDL models with BRAM initialization"
    @echo "  structural_model : Generates structural simulation HDL models with BRAM initialization"
    @echo "  timing   : Generates timing simulation HDL models with BRAM initialization"
    @echo " "
    @echo "  netlistclean: Deletes netlist"
    @echo "  bitsclean: Deletes bit, ncd, bmm files"
    @echo "  hwclean  : Deletes implementation dir"
    @echo "  libsclean: Deletes sw libraries"
    @echo "  programclean: Deletes compiled ELF files"
    @echo "  swclean  : Deletes sw libraries and ELF files"
    @echo "  simclean : Deletes simulation dir"
    @echo "  clean    : Deletes all generated files/directories"
    @echo " "
    @echo "  make <target> : (Default)"
    @echo "      Creates a Microprocessor system using default initializations"
    @echo "      specified for each processor in MSS file"


bits: $(SYSTEM_BIT)

ace: $(SYSTEM_ACE)

exporttosdk: $(SYSTEM_HW_HANDOFF_DEP)

netlist: $(POSTSYN_NETLIST)

libs: $(LIBRARIES)

program: $(ALL_USER_ELF_FILES)

download: $(DOWNLOAD_BIT) dummy
    @echo "*********************************************"
    @echo "Downloading Bitstream onto the target board"
    @echo "*********************************************"
    impact -batch etc/download.cmd

init_bram: $(DOWNLOAD_BIT)

sim: $(DEFAULT_SIM_SCRIPT)

simmodel: $(DEFAULT_SIM_SCRIPT)

behavioral_model: $(BEHAVIORAL_SIM_SCRIPT)

structural_model: $(STRUCTURAL_SIM_SCRIPT)

clean: hwclean swclean simclean
    rm -f _impact.cmd

hwclean: netlistclean bitsclean
    rm -rf implementation synthesis xst hdl
    rm -rf xst.srp $(SYSTEM).srp
    rm -f __xps/ise/_xmsgs/bitinit.xmsgs

netlistclean:
    rm -f $(POSTSYN_NETLIST)
    rm -f platgen.log
    rm -f __xps/ise/_xmsgs/platgen.xmsgs
    touch __xps/ise/$(SYSTEM).xpssyn
    rm -f $(BMM_FILE)

bitsclean:
    rm -f $(SYSTEM_BIT)
    rm -f implementation/$(SYSTEM).ncd
    rm -f implementation/$(SYSTEM)_bd.bmm 
    rm -f implementation/$(SYSTEM)_map.ncd 
    rm -f __xps/$(SYSTEM)_routed

simclean: 
    rm -rf simulation/behavioral
    rm -f simgen.log
    rm -f __xps/ise/_xmsgs/simgen.xmsgs
    touch __xps/ise/$(SYSTEM).xpssim

swclean: libsclean programclean
    touch __xps/ise/$(SYSTEM).xpsupb

libsclean: $(LIBSCLEAN_TARGETS)
    rm -f libgen.log
    rm -f __xps/ise/_xmsgs/libgen.xmsgs

programclean: $(PROGRAMCLEAN_TARGETS)

#################################################################
# SOFTWARE PLATFORM FLOW
#################################################################


$(LIBRARIES): $(MHSFILE) $(MSSFILE) __xps/libgen.opt
    @echo "*********************************************"
    @echo "Creating software libraries..."
    @echo "*********************************************"
    libgen $(LIBGEN_OPTIONS) $(MSSFILE)


microblaze_0_libsclean:
    rm -rf microblaze_0/

#################################################################
# SOFTWARE APPLICATION TESTAPP_MEMORY_MICROBLAZE_0
#################################################################

TestApp_Memory_microblaze_0_program: $(TESTAPP_MEMORY_MICROBLAZE_0_OUTPUT) 

$(TESTAPP_MEMORY_MICROBLAZE_0_OUTPUT) : $(TESTAPP_MEMORY_MICROBLAZE_0_SOURCES) $(TESTAPP_MEMORY_MICROBLAZE_0_HEADERS) $(TESTAPP_MEMORY_MICROBLAZE_0_LINKER_SCRIPT) \
                    $(LIBRARIES) __xps/testapp_memory_microblaze_0_compiler.opt
    @mkdir -p $(TESTAPP_MEMORY_MICROBLAZE_0_OUTPUT_DIR) 
    $(TESTAPP_MEMORY_MICROBLAZE_0_CC) $(TESTAPP_MEMORY_MICROBLAZE_0_CC_OPT) $(TESTAPP_MEMORY_MICROBLAZE_0_SOURCES) -o $(TESTAPP_MEMORY_MICROBLAZE_0_OUTPUT) \
    $(TESTAPP_MEMORY_MICROBLAZE_0_OTHER_CC_FLAGS) $(TESTAPP_MEMORY_MICROBLAZE_0_INCLUDES) $(TESTAPP_MEMORY_MICROBLAZE_0_LIBPATH) \
    $(TESTAPP_MEMORY_MICROBLAZE_0_CFLAGS) $(TESTAPP_MEMORY_MICROBLAZE_0_LFLAGS) 
    $(TESTAPP_MEMORY_MICROBLAZE_0_CC_SIZE) $(TESTAPP_MEMORY_MICROBLAZE_0_OUTPUT) 
    @echo ""

TestApp_Memory_microblaze_0_programclean:
    rm -f $(TESTAPP_MEMORY_MICROBLAZE_0_OUTPUT) 

#################################################################
# SOFTWARE APPLICATION TESTAPP_PERIPHERAL_MICROBLAZE_0
#################################################################

TestApp_Peripheral_microblaze_0_program: $(TESTAPP_PERIPHERAL_MICROBLAZE_0_OUTPUT) 

$(TESTAPP_PERIPHERAL_MICROBLAZE_0_OUTPUT) : $(TESTAPP_PERIPHERAL_MICROBLAZE_0_SOURCES) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_HEADERS) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_LINKER_SCRIPT) \
                    $(LIBRARIES) __xps/testapp_peripheral_microblaze_0_compiler.opt
    @mkdir -p $(TESTAPP_PERIPHERAL_MICROBLAZE_0_OUTPUT_DIR) 
    $(TESTAPP_PERIPHERAL_MICROBLAZE_0_CC) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_CC_OPT) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_SOURCES) -o $(TESTAPP_PERIPHERAL_MICROBLAZE_0_OUTPUT) \
    $(TESTAPP_PERIPHERAL_MICROBLAZE_0_OTHER_CC_FLAGS) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_INCLUDES) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_LIBPATH) \
    $(TESTAPP_PERIPHERAL_MICROBLAZE_0_CFLAGS) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_LFLAGS) 
    $(TESTAPP_PERIPHERAL_MICROBLAZE_0_CC_SIZE) $(TESTAPP_PERIPHERAL_MICROBLAZE_0_OUTPUT) 
    @echo ""

TestApp_Peripheral_microblaze_0_programclean:
    rm -f $(TESTAPP_PERIPHERAL_MICROBLAZE_0_OUTPUT) 

#################################################################
# SOFTWARE APPLICATION AD9985
#################################################################

AD9985_program: $(AD9985_OUTPUT) 

$(AD9985_OUTPUT) : 
    @echo "Sw App AD9985: No C-sources specified, but marked for BRAM initialization. Make sure elf file is compiled outside XPS"

#################################################################
# BOOTLOOP ELF FILES
#################################################################



$(MICROBLAZE_0_BOOTLOOP): $(MICROBLAZE_BOOTLOOP)
    @mkdir -p $(BOOTLOOP_DIR)
    cp -f $(MICROBLAZE_BOOTLOOP) $(MICROBLAZE_0_BOOTLOOP)

#################################################################
# HARDWARE IMPLEMENTATION FLOW
#################################################################


$(BMM_FILE) \
$(WRAPPER_NGC_FILES): $(MHSFILE) __xps/platgen.opt \
                      $(CORE_STATE_DEVELOPMENT_FILES)
    @echo "****************************************************"
    @echo "Creating system netlist for hardware specification.."
    @echo "****************************************************"
    platgen $(PLATGEN_OPTIONS) $(MHSFILE)

$(POSTSYN_NETLIST): $(WRAPPER_NGC_FILES)
    @echo "Running synthesis..."
    bash -c "cd synthesis; ./synthesis.sh"

$(SYSTEM_BIT): 
    @echo "This project has been instantiated in Xilinx ISE Project Navigator. Please use ProjNav to generate the bitstream. "

$(DOWNLOAD_BIT): $(SYSTEM_BIT) $(BRAMINIT_ELF_FILES) __xps/bitinit.opt
    @cp -f implementation/$(SYSTEM)_bd.bmm .
    @echo "*********************************************"
    @echo "Initializing BRAM contents of the bitstream"
    @echo "*********************************************"
    bitinit -p $(DEVICE) $(MHSFILE) $(SEARCHPATHOPT) $(BRAMINIT_ELF_FILE_ARGS) \
    -bt $(SYSTEM_BIT) -o $(DOWNLOAD_BIT)
    @rm -f $(SYSTEM)_bd.bmm

$(SYSTEM_ACE):
    @echo "In order to generate ace file, you must have:-"
    @echo "- exactly one processor."
    @echo "- opb_mdm, if using microblaze."

#################################################################
# EXPORT_TO_SDK FLOW
#################################################################


$(CYG_SYSTEM_HW_HANDOFF): $(MHSFILE) __xps/platgen.opt
    mkdir -p $(SDK_EXPORT_DIR)
    psf2Edward.exe -inp $(SYSTEM).xmp -edwver 1.2 -xml $(SDK_EXPORT_DIR)/$(SYSTEM).xml $(GLOBAL_SEARCHPATHOPT)
    xdsgen.exe -inp $(SYSTEM).xmp -report $(SDK_EXPORT_DIR)/$(SYSTEM).html $(GLOBAL_SEARCHPATHOPT) -make_docs_local

exporttosdk: $(SYSTEM_HW_HANDOFF_DEP)
    @echo "This project has been instantiated in Xilinx ISE Project Navigator. Please use ProjNav to generate the bitstream and then copy the $(SYSTEM)_bd.bmm and $(SYSTEM).bit files manually... "

#################################################################
# SIMULATION FLOW
#################################################################


################## BEHAVIORAL SIMULATION ##################

$(BEHAVIORAL_SIM_SCRIPT): $(MHSFILE) __xps/simgen.opt \
                          $(BRAMINIT_ELF_FILES)
    @echo "*********************************************"
    @echo "Creating behavioral simulation models..."
    @echo "*********************************************"
    simgen $(SIMGEN_OPTIONS) -m behavioral $(MHSFILE)

################## STRUCTURAL SIMULATION ##################

$(STRUCTURAL_SIM_SCRIPT):
    @echo "Structural simulation of complete design (including toplevel) flow should be done in ProjNav"


################## TIMING SIMULATION ##################

$(TIMING_SIM_SCRIPT):
    @echo "Timing simulation of complete design (including toplevel) flow should be done in ProjNav"

dummy:
    @echo ""

 

Собственно, мое приложение в секции "SOFTWARE APPLICATION AD9985" описано.

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


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

BRAM - 16кб

 

Размер elf файла 29кб..

 

По моему, цифры не сходятся или информация не актуальна?

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


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

 

AD9985_program: $(AD9985_OUTPUT)

 

$(AD9985_OUTPUT) :

@echo "Sw App AD9985: No C-sources specified, but marked for BRAM initialization. Make sure elf file is compiled outside XPS"

 

Если действовать на ощупь - то между текстом $(AD9985_OUTPUT) и : есть пробел (али ещё что-либо) - убрать авось заработает. Иначе надо копать "глубже".

PS; EDK обязательно должно быть версией 12.1 ? или может лучше взять что нибудь более стабильное и менее глючное типа 10 или 11 ? Тем паче что есть 12.2.

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


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

По моему, цифры не сходятся или информация не актуальна?

 

Информация актуальна. Мне на самом деле, тоже не понятно, в SDK, когда смотрю размер модулей программы (правой кнопкой по проекту, дальше Generate Linker Script), размер исполняемой части всего 5.6 кб, плюс стек, плюс данные.. ну еще 3 кб наберется.

Самое главное, программа то исполняется на этом размере BRAM, тогда как, если бы она не влазила, то компилятор не смог бы ее скомпилировать (проходил много раз). Значит я делаю вывод, что в elf файл при упаковки его еще что-то засовывается.

Я не знаю, каким образом в mcs файл добавляется программа, поэтому не берусь судить о необходимых размерах..

 

Alex77

между текстом $(AD9985_OUTPUT) и : есть пробел (али ещё что-либо) - убрать авось заработает

попробую

 

PS; EDK обязательно должно быть версией 12.1 ?

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

 

пробел то я убрал, только файл пересоздается автоматом, когда пытаюсь Update bitstream сделать..

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


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

Читайте UG, о котором говорилось выше, найдете ответы на все вопросы.

data2mem берет три аргумента .bit, .elf. bmm (файл с описанием физического расположения брам на кристалле)

на выходе отдает .mcs который содержит битстриим в котором блочная память проинициализирована вашей программой.

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


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

Проблему решил немножко иначе.. Подумав, что SDK перед заливкой в FPGA должна формировать bit файл содержащий программу, порылся в ее папках и нашел его. download.bit называется. Его и добавил в mcs.

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


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

А если она не влазит в блочную память, что делать?

"В трёх литровую банку не налить четыре литра пива"

Вопрос: Что делать ???

Ответ: искать бутыль или пить меньше пива.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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