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

    

farbius

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о farbius

  • Звание
    Местный
  • День рождения 03.04.1985

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Минск, Беларусь

Старые поля

  • skype
    farbius85

Посетители профиля

1 585 просмотров профиля
  1. Проблема решилась заменой DMA на FIFO, собственно как и указано в форуме Xilinx.
  2. Здравствуйте! Уважаемые специалисты кто нибудь сталкивался со следующей проблемой: SoC - Microblaze - Axi DMA - Ethernet Sub system (my_system.pdf), запускаю Lwip Echo server пример и в терминале получаю ошибку: axidma_recv_handler: Error: axidma error interrupt is asserted Статусный регистр указывает на SGIntErr. SGIntErr Scatter Gather Internal Error. Internal Error detected by Scatter Gather AXI DataMover. This error occurs if a descriptor with the Complete bit already set is fetched. This indicates to the SG Engine that the descriptor is a tail descriptor. This error condition causes the AXI DMA to halt gracefully. The DMACR.RS bit is set to 0, and when the engine has completely shut down, the DMASR.Halted bit is set to 1. Проверил маппирование DMA и SG буфера: отмаппированны в ДДР. Stack & Heap также находятся в ДДР, соответственно указатели на каждый pbuf для ДДР. На сайте Xilinx аналогичную проблему описывали, но как всегда конкретики нет https://forums.xilinx.com/t5/Networking-and-Connectivity/LwIP-VC707-Echo-problem/td-p/712886 https://forums.xilinx.com/t5/Embedded-Processor-System-Design/AXI-DMA-error-interrupt-is-asserted/td-p/673832
  3. Возник вот такой вопрос по lwip UDP\IP стеку. Запускаю на Microblaze с EthernetLight IP свой UDP клиент. Ставлю таймер для измерения времени на выполнения основных функций lwip. Оказывается время выполнения udp_send_to функции ограничивает пропускную способность стека до ~11 Мбит\с. // start timer XTmrCtr_SetControlStatusReg(PLATFORM_TIMER_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK| XTC_CSR_AUTO_RELOAD_MASK); // 170 clocks psnd = pbuf_alloc(PBUF_TRANSPORT, 1024, PBUF_POOL); // 1180 clocks memcpy(psnd->payload, buf_1st, 1024); // 10207 clocks err = udp_sendto(pcb, psnd, &RemoteAddr, RemotePort); // read timer counter register xil_printf("Load register %d \n", XTmrCtr_GetTimerCounterReg(PLATFORM_TIMER_BASEADDR, 0)); // 68585 clocks pbuf_free(psnd); switch_buf = 0; // 69267 clocks Xil_DCacheFlush(); // 73033 clocks Ускориться возможно?
  4. Как оказалось, в тестовом проекте сигнал Microblaze процессора Interrupt_Ack[0:1] был притянут к земле, видимо поэтому прерывание от EthernetLight IP не срабатывало. Собрал Microblaze с настройками по дефолту и все заработало!
  5. Добрый день! Уважаемые товарищи, может кто нибудь запускал lwip Echo Server на Microblaze с EthernetLight IP? Проблема в следующем: запускаю пример lwip Echo Server на Microblaze в Artix 7, в терминал по UART сообщение согласно примера выдается, но при попытке пинговать, на ПК заданный узел недоступен и сниффер показывает, что нет ответа на ARP запрос от ПК. Регистры EthernetLight IP проверял, прерывания есть и в приемном буфере наличие пакета показывает. По аппаратной части проблем быть не должно, т.к. на этом же проекте запускал TCP\IP стек на PentaLinux и передачу UDP на ПК в BareMetal конфигурации. Очень похоже, что не срабатывает прерывания от Ethernet Light IP на передачу и прием. Проверил platform.c библиотеки lwip, прерывания настроены правильно. Более того, отладка на которой запускаюсь от trenz TE0710-02 c ARTIX 7 100, а перед этим получилось запустить lwip tcp\ip стек на avnet board с A50T.
  6. В 2017.4 vivado заново пересобрал проект и ошибка пропала. Скорее всего среда что то подтягивает от предыдущих попыток сборки.
  7. Собираемый выходной кадр необходимо хранить во внешней памяти, а у меня условие использовать только внутренние ресурсы ПЛИС.
  8. Приходит кадр из 720 строк, за длительность кадра необходимо выдать подряд 360 строк. Причем 360-ую строку буду формировать во время прихода 719 и 720. То есть в любом случае необходимо копить линии, т.к. нельзя выдать одну линию, следующую не выдавать (сигналы hsync и valid бланкированы). VESA стандарт pdf VESA_standart.pdf
  9. Сигнал valid в HDMI в течении линии будет прерываться, если я правильно понял. То есть записали в buf3 данные рассчитали первый выходной пиксель, как сумму четного, нечетного пикселя 1-ой и 2-ой строки, деленную на 4. Ждем пока запишется в buf3 четный пиксель второй строки, рассчитываем второй выходной пиксель. Когда ожидаем в сигнале valid разрыв. Кадр не отобразится на мониторе.
  10. Вывод это я для себя сделал) Если на две пришедшие выходит одна, то бланкирование через линию неизбежно при уменьшении в два раза, в этом случае монитор кадры не воспринимает.
  11. Данное усреднение или прореживание актуально только по горизонтальной развертке, тогда действительно пару буферов на 640 точек будет достаточно. Но как быть с вертикальной разверткой? Просто бланкировать каждую вторую линию для получения 360-ти линий не получится: зона active pixels должна быть без пропусков.
  12. У меня задача попроще чем у ТС. Входной поток 1280х720 60 Гц (74.25 МГц пиксельклок). Необходимо масштабировать с коэффициентом равным 2, т.е. получить 640х360 разрешение. При этом алгоритм использует только внутреннюю память ПЛИС, т.е. места для хранения всего кадра нет. Решение вижу следующее: 1. Генерировать пиксельклок ниже чем 74.25 (при этом как прочитал выше значение частоты выбирается согласно стандарта VESA), использовать буферизацию только по одной линии и расставлять согласно стандарта vsync, hsync со своими back\front porch'ами и длительностями. При этом в буфер записывать каждый второй пиксель. Кто нибудь реализовывал аналогичным способом или есть другой вариант? Собрал свой источник видеосигнала 1280х720 60 Гц, уменьшал зону active pixel в несколько раз, монитор кадры отображает. Если в зоне active pixel бланкировать через линию и в линии через пиксель (для масштабирования на 2), то монитор не отображает видео кадр. Отсюда вывод: зона active pixel должна быть без разрывов.
  13. Решаю аналогичную задачу, только интерфейс HDMI. Действительно porch можно менять в определенных пределах. Масштабирование получилось только если выдавать синхросигналы все на своих местах (кроме datavalid), изменять только datavalid сигнал, причем сначала необходимо выдавать все активные пиксели. Можно поподробней про "отскалируйте". Как я понимаю делаем следующее: прореживаем каждую линию видео кадра, буферизируем полученный масштабированный кадр и выдаем его на экран 800х600. А если необходимо обойтись без внешней памяти для буферизации? менять пиксельклок?
  14. Большое спасибо! Сегодня только рассуждали, как видеокарта определяет наличие монитора. Данные сигналы заведены в ПЛИС на hdmi mojo shield