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

 
 
 
Reply to this topicStart new topic
> Xilinx EDK, ошибка генерации bit файла
vitali36
сообщение Aug 29 2013, 10:38
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Доброго времени суток. Использую microblaze с ddr2 sdram и UART. Все настроил, сгенерил IP ядро, все библиотеки в SDK тоже создал. Остались последние шаги. Генерация NetList и собственно сам bit файл(вкладка Hardware => Generate bitstream). NetList сгенерился без ошибок,а вот bit-файл нет. Не пойму что может быть не так. Прилагаю лог с ошибками. Помогите,пожалуйста, кто знает в чем дело
Прикрепленные файлы
Прикрепленный файл  bitstream_log.rar ( 4.18 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
sorok-odin
сообщение Aug 29 2013, 14:17
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 23-12-12
Пользователь №: 74 946



Цитата
Not enough valid sites to place the following IOBs

Кончились подходящие ножки. Уверены, что шину my_custom_ip_0_slv_reg0_output_pin<*> надо выводить наружу?


Цитата
This may be due to either an insufficient number of sites available on the
device, too many prohibited sites,
or incompatible I/O Standards locked or range constrained to I/O Banks with
valid sites.
This situation could possibly be resolved by one (or all) of the
following actions:
a) Grouping IOBs of similar standards into a minimum amount of I/O Banks by
using LOC or range constraints.
b ) Maximizing available I/O Banks resources for special IOBs by choosing
lower capacity I/O Banks if possible.
c) If applicable, decreasing the number of user prohibited sites or using a
larger device.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Aug 29 2013, 18:45
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Нет, не уверен. Делал я все строго по туториалам Xilinx EDK с youtube. Там несколько частей. Нигде ошибки не выскакивали. Вот только в самом конце, при генерация bit-файла. Много исправлять придется и в каких местах? На видео из туториала плата Spartan 3a DSP 1800a, а у меня spartan 3an starter kit - единственное различие.

Сообщение отредактировал vitali36 - Aug 29 2013, 18:48
Go to the top of the page
 
+Quote Post
sorok-odin
сообщение Aug 30 2013, 14:33
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 23-12-12
Пользователь №: 74 946



Те туториалы не видел, но думаю, что для подключения ddr2 sdram и UART не нужно делать самодельных ядер, все готовое есть в EDK. Откройте EDK и удалите из проекта my_custom_ip_0. Там возникнет вопрос, удалять ли идущие к нему цепи, скажите чтоб удалял. Как-то так.

А вообще, раз уж у вас есть отладочная плата, и вы указали ее тип (платы, не ПЛИС) при создании проекта в прожект навигаторе (вы ведь так и сделали, да?), тогда при создании нового EDK проекта среда автоматически создаст проект с процессором и подключенными к нему ядрами всего, что есть на вашей плате, в том числе DDR и UART. Компилироваться и работать должно без всяких лишних телодвижений.

Сообщение отредактировал sorok-odin - Aug 30 2013, 15:24
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 2 2013, 09:03
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



sorok-odin. Создал новый проект, как ты сказал. Без Ip ядра. Все сгенерил без ошибок, в т.ч bit файл. Затем создал новый проект в ise ( файл top.vhd , порты пока не прописывал, кроме clk и reset ) и добавил (Add Source) System.vhi ( мой edk проект ). В этом system.vhi есть компонент system, в котором указаны все порты ( порты ddr2 , rs232, и т.д) . Их я скопировал в entity top-файла, а также добавил сам компонент в top и связал port map'ом.
Далее Generate programming file прошел успешно и ТЕПЕРЬ ВОПРОС: Как мне теперь протестировать память и uart. Где описана логика? Ну допустим я хочу в память записать число и после успешной записи к примеру зажигаю светодиод.
Go to the top of the page
 
+Quote Post
sorok-odin
сообщение Sep 3 2013, 15:14
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 23-12-12
Пользователь №: 74 946



Цитата(vitali36 @ Sep 2 2013, 13:03) *
sorok-odin. Создал новый проект, как ты сказал. Без Ip ядра. Все сгенерил без ошибок, в т.ч bit файл. Затем создал новый проект в ise ( файл top.vhd , порты пока не прописывал, кроме clk и reset ) и добавил (Add Source) System.vhi ( мой edk проект ). В этом system.vhi есть компонент system, в котором указаны все порты ( порты ddr2 , rs232, и т.д) . Их я скопировал в entity top-файла, а также добавил сам компонент в top и связал port map'ом.
Далее Generate programming file прошел успешно

Раз Generate programming file прошел успешно, значит похоже все сделали верно, не знаю. В моем случае процесс создания EDK был попроще:
1. В прожект навигаторе - new source - embedded processor
2. Cделать EDK проект. Так как у вас отладочная плата - мастер все сделает сам.
3. В прожект навигаторе выбрать файл EDK проекта и внизу generate top HDL source
4. попробовать все это скомпилировать - Generate programming file

Далее для вас дальнейший путь:
5. Если все хорошо, в прожект навигаторе выбрать файл EDK проекта и Export hardware design to SDK with bitstream
6. В SDK создать новый проект Xilinx - Application project, выбрать из списка примеров peripheral tests - там кратко описано подключение и проверка работы ядер.

Цитата(vitali36 @ Sep 2 2013, 13:03) *
ТЕПЕРЬ ВОПРОС: Как мне теперь протестировать память и uart. Где описана логика? Ну допустим я хочу в память записать число и после успешной записи к примеру зажигаю светодиод.

Это все делается в SDK программно.
В общих чертах: про uart и светодиод поковыряйтесь в проекте peripheral tests. Еще в SDK после создания проекта (и после автоматического создания bsp) откроете файл system.mss - там ссылки на документацию и примеры работы ядер.
ДДР память проще, она работает для вас прозрачно - на Си создаете переменную или массив, пишете туда и читаете.

Прямой ответ на вопрос:
Подключаете GPIO как в проекте peripheral tests, и пишете
int i = 123;
if (i==123){
XGpio_DiscreteWrite(&GpioOutput, 1, 0x1);
}
sm.gif
Как-то так
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 5 2013, 09:17
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



sorok-odin. Создал я проекты memory test, peripheral test. Вот, например результат работы в консоле.

--Starting Memory Test Application--
NOTE: This application runs with D-Cache disabled.As a result, cacheline requests will not be generated
Testing memory region: DDR2_SDRAM
Memory Controller: mpmc
Base Address: 0x44000000
Size: 0x04000000 bytes
32-bit test: PASSED!
16-bit test: PASSED!
8-bit test: PASSED!
--Memory Test Application Complete--

Я так понял результат показывает что память инициализирована и работает? И то, что мы хотим видеть в результате мы должны писать в сишном файле?
Но все-таки не пойму как к примеру записать число и считать его. Добавил в main() код, который ты написал, ругается на функцию XGpio_DiscreteWrite. И как я могу узнать что число, к примеру то же 123 записалось в память и считалось? Вообщем расскажи пожалйста, как это все управляется. Ниже выкладываю этот сишный файлик ( можешь там написать впринципе ). Как бы там не было, благодарю за помощь)

Сообщение отредактировал vitali36 - Sep 5 2013, 09:20
Прикрепленные файлы
Прикрепленный файл  memorytest.rar ( 1.3 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
sorok-odin
сообщение Sep 5 2013, 19:27
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 23-12-12
Пользователь №: 74 946



Цитата(vitali36 @ Sep 5 2013, 13:17) *
sorok-odin. Создал я проекты memory test, peripheral test. Вот, например результат работы в консоле.

--Starting Memory Test Application--
NOTE: This application runs with D-Cache disabled.As a result, cacheline requests will not be generated
Testing memory region: DDR2_SDRAM
Memory Controller: mpmc
Base Address: 0x44000000
Size: 0x04000000 bytes
32-bit test: PASSED!
16-bit test: PASSED!
8-bit test: PASSED!
--Memory Test Application Complete--

Я так понял результат показывает что память инициализирована и работает? И то, что мы хотим видеть в результате мы должны писать в сишном файле?

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

Цитата(vitali36 @ Sep 5 2013, 13:17) *
Но все-таки не пойму как к примеру записать число и считать его. Добавил в main() код, который ты написал, ругается на функцию XGpio_DiscreteWrite. И как я могу узнать что число, к примеру то же 123 записалось в память и считалось? Вообщем расскажи пожалйста, как это все управляется. Ниже выкладываю этот сишный файлик ( можешь там написать впринципе ). Как бы там не было, благодарю за помощь)

Если бы вы писали обычную программу под windows, как бы вы узнали, что что-то записалось и считалось из ОЗУ? Грубо говоря, если программа не вылетела и продолжает исполняться, то память работает. Так что не занимайтесь записью в память, пишите в переменную/массив.
Зря мы начали с GPIO, его надо подключить и инициализировать, см пример в папке с установленной средой /Xilinx/14.6/ISE_DS/EDK/sw/XilinxProcessorIPLib/drivers/gpio_v3_01_a/examples/xgpio_example.c .
Как все управляется: поковыряйте примеры работы с uart, /Xilinx/14.6/ISE_DS/EDK/sw/XilinxProcessorIPLib/drivers/uartlite_v2_01_a/examples/index.html, особенно начните с xuartlite_polled_example.c - то что доктор прописал - данные из массива (т.е. ОЗУ) посылаются по uart, принимаются им же (соедините перемычкой Rx и Tx), кладутся в массив (т.е. в ОЗУ) и сравниваются с переданными.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 10 2013, 09:02
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Я так понял за мою память ddr2 c плис "отвечает" некий массив, в который мы записываем данные. ( записываем в масссив - следовательно записываем и в озу ). В xuartlite_polled_example.c (на всякий случай выложу ниже) есть массивы для передачи и приема (SendBuffer[TEST_BUFFER_SIZE] и RecvBuffer[TEST_BUFFER_SIZE]) и всё. Создал пустой проект в SDK, добавил этот сишный файл, запустил - консоль пуст.
Плюс к этому такой вопрос: до этого я сделал проект, в котором подавался сигнал извне на АЦП, оцифровывался и по UART данные приходили на комп. Но при прямой передаче сразу с АЦП по UART данные приходят некорректно. Поэтому я и решил задействовать память. Свой проект я сделал таким образом: vhdl файл описания работы АЦП, vhdl файл работы UART и top файл где я объединяю предыдущие два. Теперь я сделал Microblaze проект с памятью, да еще и UART. Как мне теперь указать что данные с АЦП идут в память, а потом по UART на комп? Получается ведь что к Microblaze проекту нужно добавить еще файл работы АЦП. Иначе моему Microblaze нету реального применения...(


Сообщение отредактировал vitali36 - Sep 10 2013, 09:09
Прикрепленные файлы
Прикрепленный файл  xuartlite_polled_example.rar ( 3.04 килобайт ) Кол-во скачиваний: 11
 
Go to the top of the page
 
+Quote Post
sorok-odin
сообщение Sep 10 2013, 21:03
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 23-12-12
Пользователь №: 74 946



Цитата(vitali36 @ Sep 10 2013, 13:02) *
Я так понял за мою память ddr2 c плис "отвечает" некий массив, в который мы записываем данные. ( записываем в масссив - следовательно записываем и в озу ). В xuartlite_polled_example.c (на всякий случай выложу ниже) есть массивы для передачи и приема (SendBuffer[TEST_BUFFER_SIZE] и RecvBuffer[TEST_BUFFER_SIZE]) и всё. Создал пустой проект в SDK, добавил этот сишный файл, запустил - консоль пуст.

Пуста консоль которая stdout? Ну так программа туда и не выводит ничего, читайте код. У вас есть опыт программирования? Мне кажется, с такими вопросами вы далеко не пройдете. Прилагаю файл, который кое-что выводит.

Цитата(vitali36 @ Sep 10 2013, 13:02) *
Плюс к этому такой вопрос: до этого я сделал проект, в котором подавался сигнал извне на АЦП, оцифровывался и по UART данные приходили на комп. Но при прямой передаче сразу с АЦП по UART данные приходят некорректно. Поэтому я и решил задействовать память.

Когда что-то не получилось в простом проекте, вы решили его усложнить, залезая в незнакомые дебри. Странный путь, сначала убедитесь что у вас хотя бы правильно работают АЦП и ваша программа приемник на компе. Почему вы думаете, что добавление внешней памяти вам поможет? Насколько я понял, в итоге вам нужна просто память под буфер (какого объема?), почему обычное фифо не подошло?

Цитата(vitali36 @ Sep 10 2013, 13:02) *
Как мне теперь указать что данные с АЦП идут в память, а потом по UART на комп? Получается ведь что к Microblaze проекту нужно добавить еще файл работы АЦП. Иначе моему Microblaze нету реального применения...(

Да, добавить файл работы с АЦП. Путь влоб: данные с АЦП писать в обычное фифо, из него программно считывать микроблейзом через gpio. Проще отладить, но медленно и неэффективно. С таким же успехом данные с фифо посылать сразу на ваш uart модуль, который до этого у вас был без микроблейза.
Прикрепленные файлы
Прикрепленный файл  xuartlite_polled_example.zip ( 1.95 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
vitali36
сообщение Sep 11 2013, 06:09
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Цитата
Когда что-то не получилось в простом проекте, вы решили его усложнить, залезая в незнакомые дебри. Странный путь, сначала убедитесь что у вас хотя бы правильно работают АЦП и ваша программа приемник на компе
Да, ацп и приемник работают правильно. посылаю синусоиду - на графике выводится синусоида в цифровом виде. не идеальная конечно. мне просто дали задание, попробовать вывести график, используя память.
Цитата
Прилагаю файл, который кое-что выводит
Так там просто ты выводишь строчку print'ом. память то никак не задействована. По поводу программирования: на C# программирую достаточно хорошо. На чистом C не писал. на C++ пробовал. А так C#. Да и программу, которая принимала данные по uart и выводила график я писал на C#. У меня и плата управляется из этой программы.
Цитата
С таким же успехом данные с фифо посылать сразу на ваш uart модуль, который до этого у вас был без микроблейза.

Зачем мне использовать старый uart модуль, если у меня уже microblaze реализован uart и он работает? Как добавить vhdl модуль с АЦП к этому microblaze. Не пойму, как интегрируют microblaze проект и ISE. Мне же нужно в ISE проект собрать, либо добавить в edk мой модуль. Извини уж, просто реально первый раз с этим microblaze работаю, поэтому достаточно сложно дается. Может стоит использовать LogiCORE IP FIFO Generator ?

Сообщение отредактировал vitali36 - Sep 11 2013, 09:54
Go to the top of the page
 
+Quote Post

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

 


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


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