|
|
  |
Xilinx EDK, ошибка генерации bit файла |
|
|
|
Aug 29 2013, 10:38
|
Частый гость
 
Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354

|
Доброго времени суток. Использую microblaze с ddr2 sdram и UART. Все настроил, сгенерил IP ядро, все библиотеки в SDK тоже создал. Остались последние шаги. Генерация NetList и собственно сам bit файл(вкладка Hardware => Generate bitstream). NetList сгенерился без ошибок,а вот bit-файл нет. Не пойму что может быть не так. Прилагаю лог с ошибками. Помогите,пожалуйста, кто знает в чем дело
|
|
|
|
|
Aug 29 2013, 14:17
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Aug 30 2013, 14:33
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 3 2013, 15:14
|
Участник

Группа: Участник
Сообщений: 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); }  Как-то так
|
|
|
|
|
Sep 5 2013, 09:17
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 5 2013, 19:27
|
Участник

Группа: Участник
Сообщений: 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), кладутся в массив (т.е. в ОЗУ) и сравниваются с переданными.
|
|
|
|
|
Sep 10 2013, 09:02
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 10 2013, 21:03
|
Участник

Группа: Участник
Сообщений: 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 модуль, который до этого у вас был без микроблейза.
|
|
|
|
|
Sep 11 2013, 06:09
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|