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

    

farbius

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

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

  • Посещение

Репутация

0 Обычный

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

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

Контакты

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

Информация

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

Старые поля

  • skype
    farbius85

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

1 642 просмотра профиля
  1. Здравствуйте! Уважаемые товарищи подскажите пожалуйста, какие варианты решения для следующей задачки: необходимо последовательно запустить два elf файла на microblaze, который загружается из FLASH памяти. Сейчас создаю свой bootloader в виде bit файла с проинициализированной BRAM (16 КБайт), который записываю во FLASH (адресом выше записываю основной elf файл для работы процессора ). При подаче питания в ПЛИС подгружается bit файл и запускается elf из BRAM памяти, который вычитывает основной elf в DDR и сбрасывает Microblaze для выполнения кода уже из DDR. Тут все просто. Теперь возникла необходимость перед запуском основного elf файла записать массив user data во FLASH (выше bit, elf). Проинициализировать BRAM bootloader'ом и массивом user data не получится, т.к. 16 кБайт BRAM недостаточно, а увеличить нельзя. Вот и необходимо сделать так: подали питание, загрузили bit с инициализированной BRAM, процессор вычитал в DDR elf с массивом user data и вычитал elf с основным ПО, выполнил elf с массивом user data (записал данные во FLASH), потом сбросили процессор и сказали ему выполнять код уже из основного elf файла. Как указать microblaze на указатель откуда в DDR выполнять код?
  2. Возник вот такой вопрос по 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 Ускориться возможно?
  3. Как оказалось, в тестовом проекте сигнал Microblaze процессора Interrupt_Ack[0:1] был притянут к земле, видимо поэтому прерывание от EthernetLight IP не срабатывало. Собрал Microblaze с настройками по дефолту и все заработало!
  4. Добрый день! Уважаемые товарищи, может кто нибудь запускал 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.
  5. В 2017.4 vivado заново пересобрал проект и ошибка пропала. Скорее всего среда что то подтягивает от предыдущих попыток сборки.
  6. Собираемый выходной кадр необходимо хранить во внешней памяти, а у меня условие использовать только внутренние ресурсы ПЛИС.
  7. Приходит кадр из 720 строк, за длительность кадра необходимо выдать подряд 360 строк. Причем 360-ую строку буду формировать во время прихода 719 и 720. То есть в любом случае необходимо копить линии, т.к. нельзя выдать одну линию, следующую не выдавать (сигналы hsync и valid бланкированы). VESA стандарт pdf VESA_standart.pdf
  8. Сигнал valid в HDMI в течении линии будет прерываться, если я правильно понял. То есть записали в buf3 данные рассчитали первый выходной пиксель, как сумму четного, нечетного пикселя 1-ой и 2-ой строки, деленную на 4. Ждем пока запишется в buf3 четный пиксель второй строки, рассчитываем второй выходной пиксель. Когда ожидаем в сигнале valid разрыв. Кадр не отобразится на мониторе.
  9. Вывод это я для себя сделал) Если на две пришедшие выходит одна, то бланкирование через линию неизбежно при уменьшении в два раза, в этом случае монитор кадры не воспринимает.
  10. Данное усреднение или прореживание актуально только по горизонтальной развертке, тогда действительно пару буферов на 640 точек будет достаточно. Но как быть с вертикальной разверткой? Просто бланкировать каждую вторую линию для получения 360-ти линий не получится: зона active pixels должна быть без пропусков.
  11. У меня задача попроще чем у ТС. Входной поток 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 должна быть без разрывов.
  12. Решаю аналогичную задачу, только интерфейс HDMI. Действительно porch можно менять в определенных пределах. Масштабирование получилось только если выдавать синхросигналы все на своих местах (кроме datavalid), изменять только datavalid сигнал, причем сначала необходимо выдавать все активные пиксели. Можно поподробней про "отскалируйте". Как я понимаю делаем следующее: прореживаем каждую линию видео кадра, буферизируем полученный масштабированный кадр и выдаем его на экран 800х600. А если необходимо обойтись без внешней памяти для буферизации? менять пиксельклок?
  13. Большое спасибо! Сегодня только рассуждали, как видеокарта определяет наличие монитора. Данные сигналы заведены в ПЛИС на hdmi mojo shield
  14. HPD это сигнал для микросхемы типа ADV7513, мне на вход ПЛИС TMDS сигналы и i2c приходят на прямую.