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

Lutovid

Свой
  • Постов

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

  • Посещение

Репутация

1 Обычный

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

  • Звание
    Частый гость
    Частый гость
  • День рождения 17.05.1992

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

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

2 950 просмотров профиля
  1. Вы были правы! Я ориентировался на то, что визард DDS показывает SFDR, Но вот в условиях такой некратности это видимо оценка не корректная. Либо я ее не правильно интерпретирую... Да - если построить спектр по вменяемому числу точек, то амплитуда втьорой гармоники будет в теоретических пределах, но на реальных измерениях на большой длительность это уплывание приводит к вот такой нестабильности второй гармоники
  2. Спасибо за идею! да уплывание очень медленное и поэтому я запутался немного. Сейчас буду изучать как вы написали в этом сообщении
  3. Ввел в заблуждение предыдущим комментом - посмотрел внимательнее - когерентные, все ок, просто не то смотрел
  4. Нет, DDS не дает когерентности для этого конфига - это не всегда одни и те же точки на период Я вроде бы видел это сообщение на форуме ti, но там была речь про компрессию, емнип
  5. Использую младшие 8 бит. Я уверен, что не перепутал байты потому что увеличивая амплитуду DDS в 2-4-6 раз основная палка растет фифо не в байпасе, как я понимаю его нельзя байпасить если DAТАCLK и DACCLK разные по величине. У меня 300 и 1200МГц Про третью гармонику и Fig 4, Fig 5 отпишусь завтра, когда буду у прибора
  6. Приветствую! Есть непонимание причины проблемы - просьба подсказать что может быть не так: Есть кастомный дизайн - ПЛИС подключена к цап DAC3482. Плис конфигурирует эту цап. Тактовая цап = 1200МГц, режим интерполяции в 4 раза. Клок данных 300МГц соответственно. Канал Q не используется - только I(дублирую I и Q в плис, а в железе смотрю выход только с I), PLL в цап отключена. На плис поднят DDS от Xilinx, который генерирует 60МГц частоту на тактовой 300МГц. Амплитуда синуса выбрана так что бы уложить ее в 8 бит. Итого SFDR этой настройки визард обещает 48дБ. НО на выходе из цап вторая гармоника скачет от 27дБ от основной до 45дБ. Что я пробовал: 1)Построил спектр данных из ila - того что идет непосредственно в цап, получил обещанные 48дБ 2)Реализовал проверку по сетапу/холду при помощи встроенной проверки паттерна Картинка со спектроанализатора вот такая, но она меняется секунд 20 такая, затем может стать лучше/хуже. Наихудший кейс - 27дБ разница с основным пиком. Основная палка стабильна, меняется именно вторая гармоника. Интересно что конфиг ни цапа ни плис в это время не меняется, то есть нет причин внутри плис такого поведения(изменения амплитуды второй гармоники). Так же скачкообразные резкие изменения гармоники наводят на мысль, что природа эффекта цифровая. Я так понимаю, что если для текущего конфига проходит проверка тест паттерна, то тайминг соблюден и проблем синхронизации нет. Если увеличить амплитуду DDS, то соответственно улучшается SFDR и на анализаторе итог тоже улучшается, но не линейно. Алармов внутри цап тоже не наблюдаю, фильтр inv_sync пытался туда-сюда отключать/включать - не влияет. При такой амплитуде не идет разговор о компрессии какой-то. Уже даже не знаю в какую сторону копать.
  7. Спасибо! Помоделировал - действительно результаты хорошие, буду знать теперь
  8. Всем привет. Возник вопрос при использовании векторных генераторов разных производителей. Есть такая опция генерации AWGN. И у этой опции зачастую есть параметр полосы. То есть мы можем ограничить полосу генерируемого шума. Вот пример: https://scdn.rohde-schwarz.com/ur/pws/dl_downloads/dl_common_library/dl_manuals/gb_1/s/smbv/SMBV100A_OperatingManual_en_18.pdf стр. 311 Scalable low-pass filters are used to produce a noise power with both a broad dynamic range and a broad bandwidth range (from 1 kHz to 60 MHz). И я не понимаю, что это за фильтр такой, который может от 60MHz до 1kHz менять свою полосу пропускания еще и с маленьким шагом. То есть вот у нас есть AWGN с плоским спектром от -Fs/2 до Fs/2, мы хотим от него получить например 1/60000 часть. Я не супер про в этой области, но мне знакомы такие варианты: 1)FIR интерполятор - для случая узкой полосы будет неадекватно много коэффициентов. 2)CIC интерполятор - разоримся на FIR компенсаторе. 3)Farrow на основе интерполяции Лагранжа - мой первый опыт с ним в моделях - матлаб позволяет максимум 4 порядок для своей внутренней функции, в итоге получается АЧХ с боковиками на 30дБ ниже основного колокола + в итоге полученный шум будет иметь далеко не прямоугольный спектр. При чем это как для 3, так для 4 порядка. clear all close all frc = dsp.FarrowRateConverter(); frc.PolynomialOrder=3; frc.InputSampleRate = 3; frc.OutputSampleRate = 7; figure; [h,f] = freqz(frc); plot(f,20*log10(abs(h))) hold on frc.PolynomialOrder=4; [h,f] = freqz(frc); plot(f,20*log10(abs(h))) frc.PolynomialOrder=2; [h,f] = freqz(frc); plot(f,20*log10(abs(h))) 4)Какая-то хитрая схема ФВЧ+DDS+ФНЧ+DDS, но я что-то не пойму как эту схему сделать гибкой и чтоб зеркала не вылезли. Мне слабо верится, что это как-то решается аналоговыми перестраиваемыми YIG фильтрами например. Буду рад любой полезной информации, спасибо!
  9. https://support.xilinx.com/s/question/0D52E00006hpi7ySAA/microblaze-dual-ethernet-problem-with-lwip?language=en_US Кто искал ответ на тот же вопрос что и я - в примере выше dma, но с fifo то же самое
  10. https://lwip.fandom.com/wiki/Network_interfaces_management Как я понимаю если у нас есть уже один рабочий netif, то его не должно выбивать добавление нового Но я вижу обратное static struct netif server_netif; static struct netif server_netif2; struct netif *echo_netif; struct netif *echo_netif2; XUartLite UartLite; struct ip_addr ipaddr, netmask, gw; struct ip_addr ipaddr2, netmask2, gw2; /* the mac address of the board. this should be unique per board */ unsigned char mac_ethernet_address[] = { 0x00, 0x0a, 0x35, 0x00, 0x01, 0x02 }; unsigned char mac_ethernet_address2[] = { 0x00, 0x0a, 0x35, 0x00, 0x01, 0x03 }; void ProcUartCommand(u8 inp) { if(inp == '1') { xil_printf("adding netif\n\r"); if (!xemac_add(echo_netif2, &ipaddr2, &netmask2, &gw2, mac_ethernet_address2, XPAR_AXI_ETHERNET_1_BASEADDR)) { xil_printf("Error adding N/W interface\n\r"); } } } int main() { u8 UARTRecvBuffer[UART_BUFFER_SIZE]; u8 ReceivedCount = 0; XUartLite_Initialize(&UartLite, XPAR_UARTLITE_0_DEVICE_ID); echo_netif = &server_netif; echo_netif2 = &server_netif2; /* Define this board specific macro in order perform PHY reset on ZCU102 */ init_platform(); /* initliaze IP addresses to be used */ IP4_ADDR(&ipaddr, 192, 168, 7, 10); IP4_ADDR(&netmask, 255, 255, 255, 0); IP4_ADDR(&gw, 192, 168, 7, 1); IP4_ADDR(&ipaddr2, 192, 168, 7, 11); IP4_ADDR(&netmask2, 255, 255, 255, 0); IP4_ADDR(&gw2, 192, 168, 7, 1); print_app_header(); lwip_init(); /* Add network interface to the netif_list, and set it as default */ if (!xemac_add(echo_netif, &ipaddr, &netmask, &gw, mac_ethernet_address, XPAR_AXI_ETHERNET_0_BASEADDR)) { xil_printf("Error adding N/W interface\n\r"); return -1; } // if (!xemac_add(echo_netif2, &ipaddr2, &netmask2, // &gw2, mac_ethernet_address2, // XPAR_AXI_ETHERNET_1_BASEADDR)) { // xil_printf("Error adding N/W interface\n\r"); // return -1; // } netif_set_default(echo_netif); /* now enable interrupts */ platform_enable_interrupts(); /* specify that the network if is up */ netif_set_up(echo_netif); print_ip_settings(&ipaddr, &netmask, &gw); /* start the application (web server, rxtest, txtest, etc..) */ start_application(); /* receive and process packets */ while (1) { if (TcpFastTmrFlag) { tcp_fasttmr(); TcpFastTmrFlag = 0; } if (TcpSlowTmrFlag) { tcp_slowtmr(); TcpSlowTmrFlag = 0; } ReceivedCount += XUartLite_Recv(&UartLite,UARTRecvBuffer,UART_BUFFER_SIZE); if (ReceivedCount != 0) { ReceivedCount=0; ProcUartCommand(UARTRecvBuffer[0]); } xemacif_input(echo_netif); transfer_data(); } /* never reached */ cleanup_platform(); return 0; } Вот мой участок кода, который я правлю
  11. Всем привет. У меня возникла необходимость подключить 2 axi ethernet subsystem к одному microblaze. С одним я работал, а вот с двумя не доводилось. Решил танцевать от примера echo, но пока меня интересует только ответ на ping. Подключил оба интерфейса. Запустил пример - все пингуется. Как только добавляю строки if (!xemac_add(echo_netif2, &ipaddr2, &netmask2, &gw2, mac_ethernet_address2, XPAR_AXI_ETHERNET_1_BASEADDR)) { xil_printf("Error adding N/W interface\n\r"); return -1; } Что бы добавить новый netif в lwip, отваливается и первый интерфейс. Кто это реализовывал? может у меня есть какое-то принципиальное недопонимание? Любой подсказке буду рад
  12. Удалось. В консоли более подробные описания ошибок оказались, так как это проблемы сборки именно библиотеки(до этого смотрел просто эррор репорт) - нужно было еще в паре мест make файлы поправить.
  13. Всем привет! Появилась необходимость поднять snmp агент на microblaze. Я полазил в lwip, который в xsdk подключается - там есть функции snmp, но такой опции в gui bsp settings нет. Среда Vivado17.1/xsdk17.1 Что бы включить этот функционал надо задефайнить LWIP_SNMP в lwipopts.h. Но это автогенерируемый файл - пришлось править скрипт tcl создания этого хедера(https://support.xilinx.com/s/article/35787?language=en_US - вот по этому примеру добавил этот дефайн) прямо в папке библиотеки там где установлен xsdk После того как дефайн прошел - повалились ошибки: cannot find -llwip4 main_processing C/C++ Problem expected expression before ';' token standalone_bsp_0 line 536 C/C++ Problem Кто этот функционал включал? Может этот функционал был частично обрезан? Или я просто делаю что-то не так? P/S запуллил из гита соответствующую версию lwip/ Ничего там не выпилино вроде как, кроме ppp
  14. Ну там действительно должен иметься высокодобротный фильтр пилота, его удобно делать через IIR, но задержки нужно будет конечно учитывать. В общем, можно сделать вывод что функционал не доступен пока, как я понимаю...
×
×
  • Создать...