Jump to content

    

exigo

Участник
  • Content Count

    51
  • Joined

  • Last visited

Community Reputation

0 Обычный

About exigo

  • Rank
    Участник

Recent Profile Visitors

1037 profile views
  1. добрый день, подскажите какую геометрию антенны использовать, чтоб сделать антенну двухдиапазонную 400-800 мгц. Пытался от вайфай 3.2-5Ггц увеличивать габариты, но пока нет хорошего результата, а размеры уже большие. Мыслиться на текстолите вырезать. Прикладываю идею геометрии от вайфай антенны.
  2. провели разные эксперименты с драйверами, и подключили другое устройство работающее на нашем драйвере. Все хорошо, но там не наше устройство, виртекс стоит и прошивка не известно как организована. Поэтому склоняемся в ошибке в прошивке ПЛИС. Как и говорили, видимо на ген2 тепличные условия и все работает, а на двух других материнках с ген3 нет. Врятли может быть проблема в формирование тлп запроса, может другие нюансы есть?
  3. Просто ПК прогой не я занимаюсь, и пока нет возможности уточнить :( .sys файл только и вот эти функции вызова. Но функции чтения/записи в бар работают, адреса тоже возвращает, этот же драйвер на других ПК с ген2 работает, есть вероятность, что драйвер неправильно работает на этой материнке?
  4. Код сверху как раз по полям TLP запроса раскидан последовательно, -- комментарии надо было затереть, чтобы не сбивали) Драйвер писали другие люди, и раз на других материнках работает, не смотрел туда, но уже начал грешить туда. Прилагаю функции выделения памяти и получения стартового адреса: unsigned __int64 PPMapBuf(HANDLE PPDev) { ULONGLONG nBuf2; ULONG nBuf; ULONG nOutput; LPFN_ISWOW64PROCESS fnIsWow64Process; BOOL bIsWow64 = FALSE; if (sizeof(PULONG)==8) { DeviceIoControl(PPDev, PP_IOCTL_MAPBUF, NULL,0, &nBuf2,8,//sizeof(PULONG), &nOutput,NULL); } else // if (sizeof(PULONG)==4) { fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); if (NULL != fnIsWow64Process) { fnIsWow64Process(GetCurrentProcess(),&bIsWow64); if (bIsWow64) { DeviceIoControl(PPDev, PP_IOCTL_MAPBUF, NULL,0, &nBuf2,8,//sizeof(PULONG), &nOutput,NULL); } else { DeviceIoControl(PPDev, PP_IOCTL_MAPBUF, NULL,0, &nBuf,4,//sizeof(PULONG), &nOutput,NULL); nBuf2 = 0 + nBuf; } } else { DeviceIoControl(PPDev, PP_IOCTL_MAPBUF, NULL,0, &nBuf,4,//sizeof(PULONG), &nOutput,NULL); nBuf2 = 0 + nBuf; } } return nBuf2; } unsigned __int64 PPGetAdr(HANDLE PPDev) { ULONGLONG nBuf2; ULONG nBuf; ULONG nOutput; LPFN_ISWOW64PROCESS fnIsWow64Process; BOOL bIsWow64 = FALSE; if (sizeof(PULONG)==8) { DeviceIoControl(PPDev, PP_IOCTL_GETADR, NULL,0, &nBuf2,8,//sizeof(PULONG), &nOutput,NULL); } else // if (sizeof(PULONG)==4) { fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); if (NULL != fnIsWow64Process) { fnIsWow64Process(GetCurrentProcess(),&bIsWow64); if (bIsWow64) { DeviceIoControl(PPDev, PP_IOCTL_GETADR, NULL,0, &nBuf2,8,//sizeof(PULONG), &nOutput,NULL); } else { DeviceIoControl(PPDev, PP_IOCTL_GETADR, NULL,0, &nBuf,4,//sizeof(PULONG), &nOutput,NULL); nBuf2 = 0 + nBuf; } } else { DeviceIoControl(PPDev, PP_IOCTL_GETADR, NULL,0, &nBuf,4,//sizeof(PULONG), &nOutput,NULL); nBuf2 = 0 + nBuf; } } return nBuf2; } #define PP_IOCTL_GETADR CTL_CODE(FILE_DEVICE_UNKNOWN, 0x806, METHOD_BUFFERED, FILE_ANY_ACCESS) #define PP_IOCTL_GETSIZE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x807, METHOD_BUFFERED, FILE_ANY_ACCESS) #define PP_IOCTL_MAPBUF CTL_CODE(FILE_DEVICE_UNKNOWN, 0x808, METHOD_BUFFERED, FILE_ANY_ACCESS)
  5. запросы на чтение/запись в БАР обрабатываются, через них задаю адрес и управляющие значения. но мои тлп записи в память уходят в ПК (кредиты тратяться, потом восстанавливаются), но в памяти пусто. прилагаю запрос записи, заготовок, а потом идут данные. s_axis_tx_tdata <= ( dma_addr(31 downto 0) &--lo addr dma_addr(63 downto 32)& --X"00000000" & --hi addr completer_id&--X"0000" & --X"0600" & tx_tag&--tx_tag & --"10000000" "1111" & "1111" & "01100000" & --0100 '0' & "000" & "0000" & '0' & '0' & "10" & "00" & "0000100000" --0000100000 ) after TCQ; s_axis_tx_tlast <= '0' after TCQ; s_axis_tx_tvalid <= '1' after TCQ; s_axis_tx_tkeep <= x"FFFF" after TCQ; tx_tag<=tx_tag+1;
  6. Приветствую всех, хорошо тема pcie как раз актуальна. У меня ситуация следующая: Камень kintex7. Писал проект в ISE на основе ядра 7 Series Integrated Block. Модернизировал EP_TX, добавил формирование tlp запросов по заданным адресам писал в память ПК. Все прекрасно работает. На ПК используется разъем pcie gen2. Перешел на другой ПК с разъемом pcie gen3 (в биосе везде выставил ген2). И устройство видится, читаю/записываю в БАР, но ПК мои запросы игнорирует - в памяти пусто. Установил последнюю вивадо, запустил dma stream example - работает, начал думать на изменения в ядре, организовал тот же проект на основе обновленного ядра 7 Series Integrated Block в вивадо, а нет, так же не работает, а на старом ПК все четко. Проанализировал линии dma stream example "в процессе" - пакеты формируются такие же. Не пойму какие еще надстройки требуются? Перечитав тему смотрю затрагивается MSI - не заострял на этом моменте внимание. Возможно как раз такого сигнала и не хватает для указания, что пришла посылка? Как его формировать в коде, что за ножка? Возможно ли, что в новой материнке это требуется?
  7. Вот решение одной из важных запарок. Надеюсь кому-то поможет. https://www.xilinx.com/support/answers/56276.html
  8. Всем снова привет, в автомате памяти, 50% времени происходит в ожидание сигнала app_rdy. Ну не должен он так долго быть недоступен. От того и КПД работы с памятью 50%. Расскажите, где копать, и у кого какие результаты получалось выжимать при работе с ddr(думаю не особо важно ddr2,3,4). Особо интересно было бы взглянуть на временные диаграммы. upd скоростные показатели из сообщения выше не актуальны (не могу скорректировать)
  9. BUrst mode 8 (адрес соответственно ++8), шина 256, записываю 64 посылки(каждая отдельный цикл записи). Потом считываю 8 раз по 8. При чтение 1.2 GB(теоретическая 1.6) достигается, а запись хромает (в районе 500-600), экспериментирую и оптимизирую автомат, и записываю по несколько посылок последовательно (2,4,8). Но начинает падать wdf_rdy и app_rdy, и в итоге то на то и выходит по пропускной способности. Может с величиной посылок попробовать, 8 писать, потом 8 читать, чтобы входной буфер памяти перекуривал, вот интересны рекомендации.
  10. ага, это понял. app_rdy часто в '0', КПД маловато, так и есть, или в настройках и режимах работы можно оптимизировать.
  11. Всем привет, снова вернулся к ДДР3, уперлись в скорость. Используем микросхемы MT41K64M16TW-107. Среда ISE, MIG 1.9 В настройках не позволяет изменить рабочую частоту (Clock Period) выше 400 Mhz. Не пойму от какого параметра пределы зависит и как поднять до максимальной частоты. И вообщем подскажите рекомендации, реализован колцьевой буфер, но память частенько скидывает app_rdy. и простаивается автомат. Как выжать максимум кпд?
  12. В чипскоп завел проект, tx_buf заканчиваются и встает автомат в ожидание, но самое, что все команды на запись, что идут в ПК, по адресам ноль. Вот не как не пойму на что может повлиять другой комп и материнка. RID какой выставляется? Самое интересное, что пробники pcie в VIVADO даже не дают зашить прошивку, на 99% комп колом встает, и только хард ресет спасает. А на старом ПК все шикарно работает. Попробав разные машины, вывод что безупречно работает в портах pcie 2gen, а в gen3 нет, но надо как-то это исправлять.
  13. В последних версиях еще отслеживаю кредиты (tx_buf) Но дело в том, что комп быстрее стал, и раньше когда не хватало кредитов он не зависал. И интересно, что xilinx примеры не запускаются.
  14. Всем привет, благополучно юзал pcie. Но тут мне обновили ПК и на новом железе все перестало работать. Мой проект успешно позволяет записать управляющие адреса и размер буфера в БАР, но после включения ДМА устройство отваливается и в БАР 0xffffffffff все, или и того виснет комп. Решил проверить на xilinx примерах дма стримера и дма передачи(от которых отталкивался и они работали на старом ПК), после загрузки в железо комп сразу зависает, даже драйвер не дает поставить. Подскажите пожалуйста, в какую сторону копать? В устройстве проблем нет, подключил к компу схожим на мой старый, все путем.
  15. Вернул на минимальную паузу в один такт между TLP, добавил в этот такт доп проверку tx_buf (количество свободных буферов ядра), не даю им опуститься ниже 8, если опускается то в отдельном состояние автомата ожидает, пока ядро переварит и продолжает запись. Добился 1.6 ГБ/с. И еще, материнка определила max payload как 128, хотя в ядре 512, в биосе что-то не нарыл как изменить, так бы еще удалось разогнать