Jump to content

    

Recommended Posts

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

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

 

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

Share this post


Link to post
Share on other sites

Таймер запустил, выход таймера interrupt повесил на вход моста intx_msi_request. На порт моста msi_vector_num[4:0] повесил константу 0. В Jungo Windriver собрал драйвер для системы, при запуске Listen Interrupt считает прерывания, но показывает Interrupt Number = 7. За что тогда отвечает msi_vector_num?

post-63539-1437573911_thumb.png

Share this post


Link to post
Share on other sites

Вопрос, что всё же подаётся на порт моста msi_vector_num[4:0]? Если 0, то Windriver видит прерывание от моста. Пробовал поменять (поставил 24) Windriver не видит прерывание, но таймер его постоянно генерит.

Share this post


Link to post
Share on other sites
Приветствую.

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

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

 

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

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

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

 

 

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

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

Share this post


Link to post
Share on other sites

Счас ядро сгенерено с опциями (см. рисунок).

Означает ли это, что по импульсу на intx_msi_request ядро выдаст прерывание только если msi_vector_num[4:0] = 0?

Т.е. может генерить один вектор и его номер 0. Если хочу использовать №24, то надо выбрать опцию "32 vectors" для Multiple Message Capability и тогда msi_vector_num[4:0] = 24?

 

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

Спасибо, проверим ещё раз.

post-63539-1437719763_thumb.jpg

Share this post


Link to post
Share on other sites
Означает ли это, что по импульсу на intx_msi_request ядро выдаст прерывание только если msi_vector_num[4:0] = 0?

 

я вообще не задействовал msi_vector_num. Прерывания работают, windrive их видит

 

Share this post


Link to post
Share on other sites
я вообще не задействовал msi_vector_num. Прерывания работают, windrive их видит

Надо затянуть это прерывание в Linux. Пока не понимаю, как это вообще будет выглядеть и как ему назначить какой-либо номер. Посмотрел, что в системе №24 вроде свободен, поэтому и хочу его назначить.

Share this post


Link to post
Share on other sites

PCI Configuration Space Header содержит поле Intr Line.

1) Кто его заполняет и как возможно его изменить (счас он 11, Linux и Win7 показывают одинаковый номер)?

2) Обработчик прерывания со стороны драйвера привязывается к лини прерывания с данным номером?

Share this post


Link to post
Share on other sites

Не могу найти ответ на вопрос:

-как система (Linux) назначает номера линий прерывания для устройств? Моему устройству в системе назначается линия прерывания №16.

 

Share this post


Link to post
Share on other sites
А поток с ПЛИС пишу через datamover.

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

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

 

Share this post


Link to post
Share on other sites
Приветствую.

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

 

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

Share this post


Link to post
Share on other sites
Спасибо, просто упёрся в потолок 8.5-8.7 Gbit/s для Gen2 x4, хотел сравнить c Вашим результатом.

 

Для коммерческих не предел. Я для Kintex-7 в TRD мерял 12 Gbit/s, а с примером из Northwest Logic 14 Gbit/s.

Share this post


Link to post
Share on other sites
Я на начальном этапе делал так (работал в 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)

 

Расскажите как получилось собрать систему без микроблейза? Я так понимаю как то удалось использовать исходники из XSP и собрать свой проект для pci-to-AXI?

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this