Jump to content

    

Aleksei_Rostov

Свой
  • Content Count

    312
  • Joined

  • Last visited

Posts posted by Aleksei_Rostov


  1. Приветствую.

    Подскажите, какую скорость передачи данных удалось получить на Вашей системе?

     

    В буфер ПСИе пишу поток со скоростью примерно 300-400 Мб/с. Можно и быстрее. Поясню: скорость шины с коркой псие 100 Мгц, датамувер кидает по 4 Мб в один из двух буферов отмапированных в памяти ПК. Скорость шины можно повысить до 200 МГц (виртекс 6 прекрасно работает на 200, проблемы начинаются от 250-300 Мгц, все это конечно условно). У меня необходимости в бОльшей скорости не возникало

  2. здравствуйте. Может кто нибудь сталкивался со следующей проблемой.

     

    Запускаю axi fifo mm to stream 3.00a, из ДДР контроллером ПДП пересылаю данные в axi fifo mm to stream ядро, далее записываю в контрольный регистр фифо размер пакета и согласно даташиту должен получить радость в виде данных на выходе stream интерфейса.

     

    Проблема в следующем: ядро работает только с пакетом размером до 112 байт включительно. Задаю больше -- перестает реагировать.

    А интерфейс control sream выдает только единицы, и это при наличии в нем стробов валид и реади

  3. Образец анкеты:

    1) farbius/Алексей Ростов

    2) Цифровая обработка радиолокационных сигналов

    3) 3 года

    4) Построение встраиваемых процессорных систем

    5) farbiusсобакаmail.ru

  4. Каким образом необходимо раскладывать 28 бит по четырем линиям? В частности интересуют служебные сигналы FVAL, LVAL, DVAL.

    В разных источниках указано по разному, например

     

    https://en.wikipedia.org/wiki/Camera_Link#Signal_data

    http://www.volkerschatz.com/hardware/clink.html

    Служебные сигналы подаются в X3 +/-.

     

    https://en.wikipedia.org/wiki/File:Camera_l...rialization.jpg

    Служебные сигналы подаются в X2 +/-.

     

     

     

     

  5. Приветствую.

    Нужно ещё пояснение по поводу BAR-ов. Может ли PCIe:BAR0 отличаться по размеру от AXI:BAR0? Как понял, это независимые адресные пространства, но проект для разных их размеров собираться не захотел.

    У меня размеры разные. Все работает.

     

    Пока собрал систему с GPIO (светодиод), прикрутил его к PCIe:BAR0 и сделал простенький драйвер под Linux, который при запуске зажигает светодиод, при удалении - гасит. Счас хочу добавить прерывание (от таймера), но не пойму, как это прикрутить к мосту PCIe?

    У таймера есть выход interrupt, у моста - вход intx_msi_request. Достаточно ли их соединить и запустить таймер, чтоб мост начал генерить прерывания от таймера?

    intx_msi_request (в данном случае legacy интерапт, по импульсу) на этот вход я подаю импульс как только закончена транзакция через pcie в PC (в физ память ПК)

     

     

    За что тогда отвечает msi_vector_num?

    Событийные прерывания. Помимо прерывания еще и указывают, чем это прерывание вызвано. В датащите есть расшифровка

  6. Ищу разработчика для проекта на max10, надо сделать прототип, от схемы до прошивки.

    Нахожусь в Украине, прототип буду тестировать при встрече, так что предпочтения кандидатам с Украины и тем кто работал с max10.

    Пишите на почту - devcor80@gmail.com

    Спасибо :smile3046:

     

    Актуально?

  7. После переустановки Windows ситуация не изменилась. Windriver устанавливает INF-файл, в системе появляется созданное устройство, но при попытке выполнить для данного INF-файла uninstall комп виснет.

    Пересоберите проект, проверьте параметры ядра

  8. Может кто пояснит правило задания параметров для PCIe:BARs и AXI:BARs для ядра AXI to PCIe bridge? Что-то никак не могу понять, как это правильно делается.

    Я все параметры оставил по умолчанию, за исключением адресов.

    Для axi:bar все просто. В параметрах для адреса прописываете адреса мапируемых областей вашей axi системы (Вы так делали на скриншотах).

     

    Как понимаю, для PCIe:BARs надо ещё память в системе создать, куда ядро будет писать данные полученные по PCIe или читать по запросу PCIe. Но как адрес и размер данной памяти увязать с параметрами PCIe:BARs?

    Создаете память физическую с начальным адресом например AddrPhys (адрес возвращает функция из драйвера windrive). Далее в соответствующие контрольные регистры моста пишете адрес следующий AddrPhys & (Buffersize - 1), где Buffersize - размер выделяемого буфера.

    Если необходимо читать из PCIe:BARs с помощью ДМА, то в регистр источника ДМА пишете адрес PCIe:BAR в системе с axi + AddrPhys & (Buffersize - 1)

  9. Немного не то. Имел ввиду (просто интересно) возможно ли задачу переброса данных переложить на железо компьютера или это будет сложнее и менее производительно? Что-то типа драйвера управляющего DMA центрального процессора который и отвечает за переброс данных по PCIe. Или доступ к чужому железу не получить?

    Такая идея была, но вариант со внешним dma вполне устраивает)

     

  10. Передачу большого потока данных для PCIe всегда будет выполнять DMA в системе FPGA (возможно несколько) или тут можно заюзать какой-либо ресурс (тот же DMA) системы ПК?

    читаю данные с ПК через ДМА, пишу поток datamover ом.

    То есть ПК пишет в регистры ДМА откуда(физическая память ПК), куда (в моем случае ДДР на ПЛИС или непосредственно на логику ПЛИС) и сколько.

    А поток с ПЛИС пишу через datamover.

  11. Тогда ещё спрошу, а можно ли с помощью WinDriver или ещё какой-то стандартной проги выделить эту память (под AXI BARs), чтоб проверить работу Mastera со стороны FPGA? Или тут уже только разбираться с написанием драйвера?

     

    Нужно писать программу. там функция что то типа allocate_buffer_dma. Про нее почитайте. Она должна возвратить адрес физической памяти, который нужно записать в контрольные регистры pcie корки. Контрольные регистры необходимо отмапировать "в себя", т.е. на BAR0 например. И записывать адрес в режиме pcie мастер

     

  12. Вот тут ещё не совсем понимаю.

    BAR0, что на рисунке окна WinDriver (адреса 0xF73F_8000 - 0х73FF_FFFF), - это только для работы со стороны ПК, т.е. ПК (а далее Bridge PCIe Master) задаёт что будет писать/читать? На ПК под него памяти нет, память внешняя в ПЛИС?

    Попробую объяснить как понял сам. Могу ошибаться, знающие поправят).

    Мост подразумевает отображение адресного пространства ПЛИС в ПК и наоборот.

     

    Итак режим pcie мастер. При перезагрузке компьютера и инициализации платы с PCIe операционная система "видит" BAR0 и мапирует его свою память. Если посмотрите в диспетчер устройств, ОС определяет плату как контроллер памяти. В вашем случае адреса 0xF73F_8000 - 0х73FF_FFFF.

     

    Как выделяется адресное пространство (память на ПК) доступное на запись/чтение со стороны AXI Master?

     

    Режим axi мастер (например cdma мастер). В настройках корки pcie выставляются буфера на axi2pcie. При перезагрузке система ничего не выделяет. Тут работает драйвер. Он при запуске выделяет область физической памяти и возвращает динамический адрес этой памяти, кот необходимо записать в контрольные регистры pcie корки.

    На плис у вас будут на шине выделены axibar со своими адресами. С этими адресами и работает CDMA. А корка транслирует адреса физической памяти в адресное пространство системы на ПЛИС.

    Как то так)

  13. Вопрос по WinDriver (см рисунок), каким образом задаётся адрес BAR0 0xF73F8000 и что это за адрес? Его размер 32 кБ как и буфера PF0_BAR0 в настройках PCIe:BARs (рисунок в сообщении #5). Т.е. система (WinDriver) определяет наличие буфера (адресного пространства), на которое ссылается мост, адреса назначает по своему усмотрению?

    ВЕРНО, Это транслированный адрес из системы с axi4 в системе ПК.

  14. Спасибо, картинка немного вырисовывается.

    Драйвер со стороны ПК без использования может писать память FPGA (медленно, но может). Вот пробую реализовать это, но что-то делаю не так.

    Использую Vivado 2015.1 и новое ядро моста и оно немного отличается от того, что описано в xapp1171. Вопрос, что делаю не так?

    В системе есть MicroBlaze + local memory, ядро моста, AXI BRAM controller. Карта памяти полученной системы и настройки моста на рисунке. На ПК запускаю Jungo.WinDriver, но что-то в нем только Configuration Space и Interrupt (см. рисунок), если плату не перепрошивать, то есть ещё и область Memory (видимо загружается какой-то factory образ).

    Я на начальном этапе делал так (работал в XPS 14.7 для ml605.)

    Собрал проект: только pcie корка с дма (можно и без) и светодиоды. У меня на 32 р системе программа pcietree.

     

    Pcie Bars брал только bar 0, задав его объем (у вас 32 килобайта). В pci2axi записал адрес своих leds (gpio) на шине (у вас там записано число 0х12340).

    Прошил, перезагрузил ПК. Открываю pcietree, вижу свою плату как контроллер памяти с BAR0. В bar 0 c ПК пишу число например c нулевым оффсетом, такая запись аналогична записи в регистр gpio корки также с нулевым офсетом. Так зажигаю светодиоды.

    Все.

     

    Систему можно собрать для axi4 без микроблейза, т.к. мастер у вас есть (pcie) и слейв (gpio)

     

     

  15. Или CDMA "через мост" (pcie slave) получает доступ к буферам на ПК, и сразу принимая данные от моста запихивает их в DDR3?

    Совершенно верно, именно поэтому есть axi bar и pcie bar. На ПК драйвер выделяет буфер, адрес которого пишется в контрольные регистры pcie.

    Далее в дма пишется адрес axi bar источника и назначение адрес ддр.

  16. Отдельно завёл DDR3, CDMA. Не могу понять принцип работы собранной в xapp1171 системы (сама система и карта памяти на рисунке). Есть CDMA, а кто им управляет?

    Контрольные регистры ДМА мапируются в BAR pcie. Таким образом pcie как мастер пишет в контрольные регистры CDMA.

     

    Правильно ли понимаю, что это должен делать драйвер со стороны компа?

    Совершенно верно, комп через pcie мастер пишет в контрольные регистры cdma, давая команду на передачу данных, и адреса куда и откуда.

     

     

    Обязательно ли использовать CDMA? Возможно ли просто подключить к мосту память, чтобы он сам записывал/считывал в/из неё данные? Как понимаю, мост записывает данные в какую-то область памяти (translation_bram), а потом CDMA должен перекинуть их в DDR3.

    Обязательно, тк CDMA позволяет работать burst ами, а pcie мастер работает на подобие процессора одиночными транзакциями

     

  17. Правильно разложить вот так:

    o_lval <= s_x_serdes_data(18);

    o_fval <= s_x_serdes_data(19);

    o_dval <= s_x_serdes_data(20);

    o_spare <= s_x_serdes_data(27);

    o_porta <= s_x_serdes_data(22) & s_x_serdes_data(21) & s_x_serdes_data(5 downto 0);

    o_portb <= s_x_serdes_data(24) & s_x_serdes_data(23) & s_x_serdes_data(11 downto 6);

    o_portc <= s_x_serdes_data(26) & s_x_serdes_data(25) & s_x_serdes_data(17 downto 12);

     

    Спасибо. Можно немного по подробнее. Постараюсь уточнить вопрос. Я понял следующее сигналы с o_porta, o_portb, o_portc, o_lval , o_fval, o_spare собираются в 28 битный сигнал s_x_serdes_data, который меняется по клоку clk1x. Причем каждый бит s_x_serdes_data соответствует определенному биту из сигналов o_porta, o_portb, o_portc, o_lval , o_fval, o_spare(как вы описали выше). По clk7x данный сигнал раскладывается по 4-м линиям, например tx_A, tx_B, tx_C, tx_D.

     

    Вопрос вот в чем: как последовательно во времени раскладывается s_x_serdes_data по 4-м линиям?

     

    Например

    в tx_A выдаю s_x_serdes_data(0), s_x_serdes_data(1), s_x_serdes_data(2), s_x_serdes_data(3), s_x_serdes_data(4),..., s_x_serdes_data(6)

    в тоже время в tx_B выдаю s_x_serdes_data(7), s_x_serdes_data(8), s_x_serdes_data(9), s_x_serdes_data(10), s_x_serdes_data(11),..., s_x_serdes_data(13)

    и т.д.

     

    или как то иначе?

  18. Здравствуйте. Подскажите кто работал с протоколом Camera link Base. Не совсем ясно следующее:

    Сделал сериализатор, чтобы отправить данные с платы на фреймграббер.

    На вход сериализатора поступают данные 28 бит (байты с port A, B, C и FVAL, DVAL, LVAL и SPARE). На выходе по clk7x данные сериализуются по 4-м сигналам.

     

    Как правильно разложить входной 28-битный сигнал по 4-м сигналам? Просто выдавать последовательно в первый tx_data[6.. 0], во второй tx_data[13.. 7] и т.д.?

     

    Какой клок выдавать по LVDS clk1x или clk7x?

  19. А pcie tree будет работать только под 32-х разрядной системой?

    pcie tree только для 32-х разрядной системы. Данную программу использовал исключительно для отладки PCIe моста на ПЛИС, чтобы программист мог начать работать с winDrive.

     

    Есть задача, данные приходят по 10G Ethernet (используется Virtex 7) и надо их запихнуть в ПК (скорее всего под управлением Linux). Для ядра 10G Ethernet user-интерфейс - это AXI4 Stream. Что лучше в данном случае использовать: ядро AXI4 to PCIe bridge или "голое" ядро Gen3 Integrated Block for PCI Express, где интерфейсы AXI4 Stream?

     

    Для bridge PCIe вам необходимо будет делать переход из stream в memory mapped. Data mover вам в помощь. По поводу Gen3 Integrated Block for PCI Express сказать ничего не могу.

  20. Впринципе у меня та же задача. Записать в регистр, прочитать из регистра.

    Как по Вашему? Было геморойно разобраться? Может стоит сделать на какой либо микросхеме контроллере?

    В XPS все довольно просто: собирается проект где мастер pcie, слейв например leds. Мапировал leds на bar pcie. На ПК запускал программу pcie tree , с её помощью зажигал диоды на плате.

    Посмотрите форум, я выкладывал даже скриншот проекта