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

pepelats

Участник
  • Постов

    56
  • Зарегистрирован

  • Посещение

Весь контент pepelats


  1. Здравствуйте, Есть необходимость подключить плату SP605 к сети по оптике используя SFP модули и медаконвертер. У меня SFP модуль на плате подключается к другому SFP модулю, который вставлен в медиаконвертер, который по Ethernet подключен к сети. Как я пробовал запустить: Сначала собрал простой проект который подключается через стандартный Ethernet разъем на плате. Запустил приложение Echo server, все работает. Потом перевел корку AXI Ethernet в режим 1000Base-X и в UCF настроил выходы и клоки на SFP. Пересобрал и запустил тоже приложение. Ping не идет. Начитался инет, посмотрел сообщения с похожей тематикой. Щас в голове такая каша, уже не знаю куда че крутить. Да, модули насколько я знаю могут работать на гигабит. Я делал проверку с ними. Подключал компьютер через 2 медиаконвертера к сети. Все работало. А что за функции? Я использую XPS и насколько я знаю не получится залезть внутрь корки AXI Ethernet, а через ISE я не умею :( Насколько я знаю можно. Там подключается корка IIC_SFP Еще такой вопрос. В каком режиме все таки я должен использовать корку AXI Ethernet: SGMII или 1000Base-X ?
  2. Здравствуйте, Проблема в следующем: Есть плата SP605, на борту у нее есть SFP разъем. Необходимо плату используя SFP модули и медиаконвертер подключить к сети с целью обмена данными. Для начала собрал проект в XPS используя Microblaze + AXI Ethernet и стандартный Ethernet c PHY на плате. В качаестве программы в SDK выбрал lwIP echo server. Все работает. Теперь перевожу AXI Ethernet в SGMII режим (по умолчанию он работает в GMII) и в UCF переключаю корку на другие ножки для работы с SFP: NET "ETHERNET_TXP_pin" LOC = D13; NET "ETHERNET_TXN_pin" LOC = C13; NET "ETHERNET_RXP_pin" LOC = B14; NET "ETHERNET_RXN_pin" LOC = A14; NET "ETHERNET_MGT_CLK_P_pin" LOC = A12; NET "ETHERNET_MGT_CLK_N_pin" LOC = B12; пересобираю проект загружаю. Вначале выдало, что не может определить PHY speed. В настройках lwIP поставил что скорость фиксирована 1000. Визуально заработало: -----lwIP TCP echo server ------ TCP packets sent to port 6001 will be echoed back Board IP: 192.168.74.133 Netmask : 255.255.128.0 Gateway : 192.168.0.2 link speed: 1000 TCP echo server started @ port 7 Но ping не проходит и не подключается. В интернет всречал, что подобное делают и тоже были проблемы, но почему то решение проблем нигде не описано. Если соединить 2 медиаконвертера подключенными к сети используя эти SFP модули, то все работает, сеть есть. Подскажите куда копать? :cranky:
  3. Здравствуйте, Нашел немного времени поразбираться с проблемой прерываний. Все оказалось не так как казалось :cranky: Сами по себе прерывания работают, просто я привык запускать программу в режиме Debug, т.е. через меню Debug As..., при этом в самом обработчике прерываний делал вывод на экран. Раньше все работало. В версии 14.7 они что то сломали и на экран, в момент когда должно сработать прерывание, ничего не выводится. Может конечно при этом прерывание и не срабатывает (не стал заморачиваться с проверкой на какой нить GPIO). Но если приложение запустить в режиме Run As..., то все становится нормально и на экран выводится сообщение из обработчика. Пробовал и на Linux машине и на Windows. Результат одинаковый. Так что будьте внимательны. :smile3046:
  4. Я не плисовед к сожалению/счастью :laughing: . Да и как например мониторить AXI-lite если мне надо прочитать ее состояние в момент записи микроблейзом данных? Я собираю схему из готовых корок и программирую ее. Так же дебажу шины данных, чтобы видеть что где застревает.
  5. Версия 14.6. В Vivado отладка происходит проще.
  6. Здравствуйте, Проблема такая. Необходимо посмотреть чипскопом AXI шину в момент записи данных через Microblaze. Т.е. тут надо бы зайти в режим отладки Microblaze, поставить точку останова, потом взвести триггер на чипскопе и запустить выполнение программы дальше. Но такая фишка не поддерживается через JTAG. Работает что то одно, или Debug или ChipScope. Это дико неудобно. Приходится зашивать программу и срабатывание ее в нужном месте обеспечивать с помощью какой нить GPIO ожидая нажатие кнопки. Есть ли какие то решения помимо этого? А то очень много времени убивается на такую отладку.
  7. Да, что то подобное делается когда прошивается SREC bootloader. Спасибо, основное я вроде понял. :beer: Да, я делал такое и наступал на грабли со скоростью загрузки. Особенно когда скрость стоит 9600 :smile3046:
  8. Это точно? Насколько я себе представлял, что проц находится в bitstream, а в ELF файле находится полностью моя софт программа пускай даже с мусором. Но что значит там находится и проц? Помимо FPGAшной реализации есть еще и софтовая часть? OK, если это так, то очень хорошо. :) Кстати как раз вопрос. Подскажите, где можно почитать как надо зашить ELF файл во FLASH (желательно Platform Flash), чтобы он по старту питания загрузился в BRAM и начал исполнение? Я находил и делал только с BPI flash, которой нужен SREC загрузчик и много танцев с бубном.
  9. Но в любом случае все это пришлось бы размещать в BRAM если бы понадобилось отказаться от DDR ? У меня как раз загвоздка в этом. Вот тут кстати помогло. Поставил галочку omit all symbol information и размер файла уменьшился до ~9 кбайт. Надо будет проверить заведется с ним или нет. Спасибо! :a14:
  10. вот вывод в консоль списка файлов. Файл dummy_hi_unit.elf это сам бинарник как я понимаю. По крайней мере в Linux так. Размер как видно показывает 48869. /Release> ls -l итого 224 -rwxr-xr-x 1 enovikov users 48869 апр 2 08:55 dummy_hi_unit.elf -rw-r--r-- 1 enovikov users 247 апр 2 08:55 dummy_hi_unit.elf.elfcheck -rw-r--r-- 1 enovikov users 107 апр 2 08:55 dummy_hi_unit.elf.size Че то не нашел, это в какой вкладке?
  11. Сорри, что не предупредил. То что я выложил уже не Hello World, т.к. подумал, что даже если его и уменьшу, реально мало мне о чем скажет, поэтому взял свой реальный проект. В проекте используется AXI Memory Mapped FIFO на примем и передачу. Работаю с ней по прерыванию. Данные получаю с Aurora, отправляю тоже через нее. Суть программы в получении пакета, его разбора и отправке пакета ответа. Больше кода там пока как раз в работе с FIFO, т.к. обмен происходит через AXI Lite по описанному в примере от Xilinx алгоритму. Если имеется в виду версия Debug и Release, то сейчас у меня 48 кбайт в Release варианте. Если что то еще можно дебажное сократить, было бы здорово. Вообще как думаете, реально подобный софт вместить в 4 кбайта или самый край 8 кбайт? С учетом что сейчас у меня не все реализовано в программе. Необходимо будет добавить алгоритмы работы по SPI, для конфигурирования периферии данными полученными "сверху". Вот что при сборке выводится: Invoking: MicroBlaze Print Size mb-size dummy_hi_unit.elf |tee "dummy_hi_unit.elf.size" text data bss dec hex filename 8532 336 3404 12272 2ff0 dummy_hi_unit.elf Finished building: dummy_hi_unit.elf.size Тут как раз возникает еще вопрос. Получается, что в сумме секции дают 12272. Это вообще откуда? Почему реально там файл 48869 ? P.S. Да вызовы из библиотек делаются. Как раз по работе с FIFO больше всего. Еще вот смог получить инфу: readelf --sections ./dummy_hi_unit.elf Имеется 27 заголовков раздела, начиная со смещения 0xa9bc: Заголовки разделов: [Нм] Имя Тип Адрес Смещ Разм ES Флг Сс Инф Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .vectors.reset PROGBITS 00000000 000094 000008 00 AX 0 0 4 [ 2] .vectors.sw_excep PROGBITS 00000008 00009c 000008 00 AX 0 0 4 [ 3] .vectors.interrup PROGBITS 00000010 0000a4 000008 00 AX 0 0 4 [ 4] .vectors.hw_excep PROGBITS 00000020 0000b4 000008 00 AX 0 0 4 [ 5] .text PROGBITS a8000000 0000bc 001cac 00 WAX 0 0 4 [ 6] .init PROGBITS a8001cac 001d68 000034 00 AX 0 0 4 [ 7] .fini PROGBITS a8001ce0 001d9c 00001c 00 AX 0 0 4 [ 8] .ctors PROGBITS a8001cfc 001db8 000008 00 WA 0 0 4 [ 9] .dtors PROGBITS a8001d04 001dc0 000008 00 WA 0 0 4 [10] .rodata PROGBITS a8001d0c 001dc8 000438 00 A 0 0 4 [11] .sdata2 NOBITS a8002144 002200 000004 00 WA 0 0 1 [12] .data PROGBITS a8002148 002200 000140 00 WA 0 0 4 [13] .bss NOBITS a8002288 002340 000544 00 WA 0 0 4 [14] .heap NOBITS a80027cc 002340 000404 00 WA 0 0 1 [15] .stack NOBITS a8002bd0 002340 000400 00 WA 0 0 1 [16] .debug_line PROGBITS 00000000 002340 001e9f 00 0 0 1 [17] .debug_info PROGBITS 00000000 0041df 0028b0 00 0 0 1 [18] .debug_abbrev PROGBITS 00000000 006a8f 000fba 00 0 0 1 [19] .debug_aranges PROGBITS 00000000 007a50 0002f8 00 0 0 8 [20] .debug_frame PROGBITS 00000000 007d48 000520 00 0 0 4 [21] .debug_loc PROGBITS 00000000 008268 001728 00 0 0 1 [22] .debug_ranges PROGBITS 00000000 009990 000348 00 0 0 1 [23] .debug_str PROGBITS 00000000 009cd8 000bcb 01 MS 0 0 1 [24] .shstrtab STRTAB 00000000 00a8a3 000117 00 0 0 1 [25] .symtab SYMTAB 00000000 00adf4 000990 10 26 42 4 [26] .strtab STRTAB 00000000 00b784 000761 00 0 0 1 Обозначения флагов: W (запись), A (назнач), X (исполняемый), M (слияние), S (строки), I (инфо), L (порядок ссылок), G (группа), T (TLS), E (исключён), x (неизв.) O (треб. доп. обработка ОС) o (специфич. для ОС), p (специф. для процессора) интересно что за секции .debug_* и можно ли их как то порезать.
  12. Да, спасибо! Действительно помогло. Обнаружил где затесался malloc, который съел кучу памяти и еще по мелочам. Еще добавил ключи которые советовали, убрал все xil_printf. В итоге вместо 160 кбайт получилось 48 кбайт. Интересно, можно еще как то сократить? test.map.txt
  13. да, забыл указать что не использую при этом printf и даже xil_printf. Использую print который вообще вроде как занимает копейки по сравнению с printf. Function Size Limitations -------------- ------- ------------------ printf() 51788 None, full featured iprintf() 18294 No floating point, reentrant xil_printf() 2953 No floating point, not reentrant(single thread only), no longlong(64 bit) putnum() 284 Integer to HEX only, no other formats print() 185 No numbers output, just strings All of these functions can be prototyped by including <stdio.h>. Программа Hello World создается из визарда в SDK. И выглядит так: #include <stdio.h> #include "platform.h" void print(char *str); int main() { init_platform(); print("Hello World\n\r"); return 0; } и вот это у меня вытягивает на 14 кбайт
  14. Здравствуйте, Скажете, сколько может весить самая простая программа для Microblaze в релизе и с оптимизацией. Например программа уровня Hello World. Схема при этом самая минимальная. У меня получается ~14 кбайт. Это нормально? Можно как то уменьшить эти показатели?
  15. Ну что я могу сказать чтобы не сматериться. :maniac: Почти ничего. Решил на удачу поставить предыдущую версию ISE DS 14.6 и проделать все тоже самое. И вуа ля. Все заработало. Обработчик прерывания вызвался 3 раза как положено. Причем заметно, что в XPS проект выглядит несколько иначе по шинам и портам. Так что всем спасибо за помощь. :beer: В общем индусы "жгут напалмом" :01:
  16. Да почему то у меня уже подозрения, что возможно проблема где то у них. Т.к. я пытался исключить свою потенциальную криворукость/невнимательнось используя чисто ихние примеры и визарды. Попробовал для интереса создать визард на шине PLB, так там еще интереснее вышло. В XPS я не могу подключить Interrupt xps_intc к INTERRUPT входу Microblaze, т.к. выход Irq у xps_intc описан в портах и виден в портах. То ли кривые MPD файлы, то ли я чего то не понимаю. Я использую версию EDK 14.7
  17. Подключен та же фигня :( Посмотрел примеры там все так же как я делаю. Да, так и приходится делать, поэтому проектов уже вагон... Попробуй ваш пример, но чую что результат будет тот же.
  18. Проверил, XIntc_InterruptHandler не вызывается. Так же прочитал ISR регистр Interrupt контроллера microblaze_intc. Там тоже видно, что появляется бит означающий что сработало прерывание. TESTAPP_GEN у меня не определен, с этим все нормально. В общем получается, что прерывание доходит до контроллера прерываний, но Microblaze упорно не хочет этого замечать :05: Пробовал добавлять как некоторые советуют microblaze_enable_interrupts() тоже никакого эффекта.
  19. Пока посмотрел следующее: 1. Почитал регистр Timer 0 Counter Register (TCR0). Видно что таймер тикает. 2. Почитал Timer 0 Control and Status Register (TCSR0). Видно что через некоторое время взводится бит T0INT, что соответствует тому что Interrupt has occurred. Теперь вопрос по вашему совету посмотреть вызывается ли екцепшен и вообще какие либо калбеки. Как это посмотреть?
  20. Попробовал. Что то совсем не пруха. Тоже не работает. Что я сделал: Создал в XPS через визард проект с Microblaze и AXI шиной. Указал там что мне нужен axi timer с использованием interrupt. Схема создалась автоматически. Я синтезировал и все сгенерил, после чего сделал export в SDK. Там создал standalone проект типа Hello World, и заменил файл на вот такой: http://www.cs.indiana.edu/hmg/le/project-h..._intr_example.c в нем только добавил вывод на экран сообщения в обработчике прерывания void TimerCounterHandler(void *CallBackRef, u8 TmrCtrNumber) { XTmrCtr *InstancePtr = (XTmrCtr *)CallBackRef; print("TimerCounterHandler\n"); чтобы видно было что он срабатывает. После чего все собрал, зашил bitstream и запустил программу. В итоге ничего... Судя по всему обработчик опять не вызывается. :cranky: Что еще я мог сделать не так, непонятно. На всякий случай выкладываю MHS файл. Может собрал че не так. Хотя собирал все wizard. system.mhs.txt Люди добрые, дайте пожалуйста рабочий пример с Microblaze и прерыванием.
  21. Я не оговорился, именно PlanAhead. Но он используется в основном как менеджер проекта. Сама схема собирается в XPS как и раньше, просто XPS вызывается из PlanAhead'a. Это такой промежуточный вариант между голым XPS и нынешним Vivado. К слову сказать, после Vivado, XPS это просто разрыв мозга . Но Vivado правда тоже сыроват.
  22. Спасибо за ответ! В принципе я все именно так и делал, только вместо таймера использовал другую корку и вектора прерываний соответственно использовал от нее. Например был вариант c AXI FIFO Memory Mapped. Попробую завтра Ваш вариант с таймером, может он заведется.
  23. Здравствуйте, Я в соседней ветке уже задавал вопрос по поводу проблемы с прерываниями на Miroblaze. Решить я ее пока так и не могу. Я к сожалению не ПЛИСовед, а программист, которому приходится собирать проект в PlanAhead'e + XPS, потом перегонять в SDK и это дело программить. В данный момент никак не могу заставить Microblaze реагировать на прерывания. Перепробовал разные проекты которые предлагает Xilinx, никакого эффекта. :cranky: Microblaze мне нужен с AXI шиной. Пробовал использовать как отдельную корку AXI Interrupt Controller, так и какой то Microblaze Interrupt Controller который он добавляет в Wizard'e если указать что необходимо обрабатывать прерывания. Сам проблему уже решить не могу, а решить ее надо срочно, т.к. встала работа из-за этого. Хотелось бы попросить, может есть у кого простенький проект для Spartan 6, который имеет на борту Microblaze c AXI шиной и контроллер прерываний ну и корка какая нить, которая тупо генерит периодически прерывание. И код на Си ко всему этому который инициализирует контроллер прерываний, и по прерыванию выводит сообщение на экран. Пробовал делать как описано тут http://www.xilinx.com/support/answers/51138.html, там каждые 15 секунд должно срабатывать прерывание и выводиться сообщение на экран. Ждал минут 20, ничего не случилось. Только надпись: ****************************** * User Peripheral Self Test ****************************** User logic slave module test... - slave register write/read passed - slave register write/read passed - slave register write/read passed - slave register write/read passed Soft reset test... - write 0x0000000A to software reset register - soft reset passed Wait for Interrupts.... Буду очень признателен.
  24. Выкладываю код программы. Это пример от Xilinx по работе с FIFO. А также MHS файл проекта. xllfifo_interrupt_example.txt system.mhs.txt
  25. Здравствуйте, Возникла проблема с использованием прерываний на Microblaze. Имеется плата SP605 и простейшая схема: Microblaze + axi_intc + AXI FIFO Memory Mapped. В FIFO выход AXI_STR_TXD включен на вход AXI_STR_RXD. AXI Lite подключен к Microblaze, interrupt подключен через axi_intc к Microblaze. Программу для Microblaze использовал из примера xllfifo_interrupt_example.c без изменений. Она настраивает обработчик прерываний, отправляет данные, потом получает и сравнивает между собой. В итоге у меня на отправке все застревает, т.к. бесконечно ждет прерывание. Если убрать ожидание прерывания и считать данные, то все ОК они совпадают с тем что отправил. Что не так с контроллером прерываний? Кто сталкивался? Собирал подобные вещи на Zynq 7045 под Vivado, никаких проблем не было. Правда там контроллер прерываний другой и вместо Microblaze используется ARM :laughing: Наверно я не в ту ветку второпях закинул. Если кто может перекиньте пожалуйста.
×
×
  • Создать...