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

 
 
 
Reply to this topicStart new topic
> Как добавить программу Microblaze в конфигурационный файл PROM?, bit + elf = mcs
Alex_VI
сообщение Aug 18 2010, 12:14
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 17-11-08
Из: Москва
Пользователь №: 41 710



Программа написана в 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 с этого проекта, то все равно ругается, пока не удалишь его полностью.
Go to the top of the page
 
+Quote Post
Alex77
сообщение Aug 19 2010, 05:25
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(Alex_VI @ Aug 18 2010, 16:14) *
Программа написана в 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 в проекте ?
Go to the top of the page
 
+Quote Post
Alex_VI
сообщение Aug 19 2010, 06:52
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 17-11-08
Из: Москва
Пользователь №: 41 710



Цитата(Alex77 @ Aug 19 2010, 09:25) *
Каков размер elf-файла и BRAMs в проекте ?


BRAM - 16кб

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

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

Может я вообще что-то не то делаю?
Go to the top of the page
 
+Quote Post
Alex77
сообщение Aug 19 2010, 07:31
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



подойдём с другой стороны
http://comments.gmane.org/gmane.comp.gcc.c...compiling/10857
и (или)
http://www.edaboard.com/ftopic147769.html

edk/ise/sdk всё делают через make-файл.
Go to the top of the page
 
+Quote Post
Alex_VI
сообщение Aug 19 2010, 09:14
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 17-11-08
Из: Москва
Пользователь №: 41 710



Цитата(Alex77 @ Aug 19 2010, 11:31) *
подойдём с другой стороны
http://comments.gmane.org/gmane.comp.gcc.c...compiling/10857
и (или)
http://www.edaboard.com/ftopic147769.html

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


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

По ссылкам в обоих случаях упоминается знак ":", но мне это ни о чем не говорит.
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Aug 20 2010, 10:03
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Прошить флэш вашей программой можно из XPS или SDK, в зависимости от версии, там должно быть что-то вроде
Program Flash. Там же вам предложат создать программу загрузчика (bootloader). Загрузчик нужен для того, что
вытащить вашу программу из флэша (как правило это Intel StrataFlash) и переписать в оперативную память
с последующей передачей управления на адрес первой инструкции вашей программы.

После компиляции проекта загрузчика, получается такой же elf файл (bootloader.elf).
Вот этот файл вами надо скрестить с битстримом (.bit) и получить mcs файл для
заливки платформенной prom (XCF....).

Для того чтобы скрестить файлы нужно почитать про утилиту data2mem.
В соответствующем УГ все доступно написано UG642.
Go to the top of the page
 
+Quote Post
Alex77
сообщение Aug 20 2010, 10:53
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(Alex_VI @ Aug 19 2010, 13:14) *
Я понимаю, что через make все делается.. Только я не владею достаточными знаниями, чтобы разобраться с этим. Пути в проекте все прописаны корректно, никаких русских букв, никаких пробелов и подозрительных символов, сам файл программы копировал в ту же папку, где все остальное лежит. Это не помогло.

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

Содержимое Microblaze.make в студию.
По той информации что Вы дали можно предположить кривизну в создании make-файла и поэтому make.exe ругается.
Go to the top of the page
 
+Quote Post
Alex_VI
сообщение Aug 20 2010, 11:48
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 17-11-08
Из: Москва
Пользователь №: 41 710



Цитата(Mad_max @ Aug 20 2010, 14:03) *
Прошить флэш вашей программой можно из 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" описано.
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Aug 20 2010, 12:12
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(Alex_VI @ Aug 19 2010, 10:52) *
BRAM - 16кб

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


По моему, цифры не сходятся или информация не актуальна?
Go to the top of the page
 
+Quote Post
Alex77
сообщение Aug 20 2010, 12:13
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695




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.
Go to the top of the page
 
+Quote Post
Alex_VI
сообщение Aug 20 2010, 12:48
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 17-11-08
Из: Москва
Пользователь №: 41 710



Цитата(Mad_max @ Aug 20 2010, 16:12) *
По моему, цифры не сходятся или информация не актуальна?


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

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

попробую

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

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

пробел то я убрал, только файл пересоздается автоматом, когда пытаюсь Update bitstream сделать..
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Aug 20 2010, 12:51
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Читайте UG, о котором говорилось выше, найдете ответы на все вопросы.
data2mem берет три аргумента .bit, .elf. bmm (файл с описанием физического расположения брам на кристалле)
на выходе отдает .mcs который содержит битстриим в котором блочная память проинициализирована вашей программой.
Go to the top of the page
 
+Quote Post
Alex_VI
сообщение Aug 24 2010, 12:14
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 17-11-08
Из: Москва
Пользователь №: 41 710



Проблему решил немножко иначе.. Подумав, что SDK перед заливкой в FPGA должна формировать bit файл содержащий программу, порылся в ее папках и нашел его. download.bit называется. Его и добавил в mcs.
Go to the top of the page
 
+Quote Post
slkhome
сообщение Aug 10 2011, 22:42
Сообщение #14


Участник
*

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



А если она не влазит в блочную память, что делать?
Go to the top of the page
 
+Quote Post
Alex77
сообщение Aug 11 2011, 06:50
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(slkhome @ Aug 11 2011, 02:42) *
А если она не влазит в блочную память, что делать?

"В трёх литровую банку не налить четыре литра пива"
Вопрос: Что делать ???
Ответ: искать бутыль или пить меньше пива.
Go to the top of the page
 
+Quote Post

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

 


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


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