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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Таймер запустил, выход таймера 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

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

 

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Означает ли это, что по импульсу на 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я на начальном этапе делал так (работал в 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?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...