Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Да, действительно, конкретный стандарт я не указал. Исправлю.
В целом, получается так, что physical layer, data link layer и даже часть transcation layer предоставляются как есть, от изготовителя ПЛИС. Они берут на себя отладку того, что предоставляют. На стороне разработчика остаётся только дополнить это логикой под конкретное приложение. Все потенциальные проблемы будут именно здесь.
Во-первых, длина запросов ограничена одним двойным словом (DWORD).Это не так. Спецификация (данные из спецификации на ревизию 3.0) указывает, что количество DW в TLP может быть от 1 до 1024. Драйвер AHCI от Microsoft для Windows 7 (версию драйвера не помню за давностью лет) умеет посылать в PIO режиме запросы размером в 2 DW.
Первая группа особенностей связана со способами, которые позволяют сконфигурировать ПЛИС в течение 100 мс по требованиям PCIe.Отсчет времени ведется от того момента, когда все напряжения питания выйдут на стабильный уровень. При работе с большими ПЛИС достаточно жесткий критерий.
Напоследок, разработчикам настоятельно рекомендуется использовать информацию о доступных кредитах для исходящих пакетовИз ядра есть выводы с DLL, которые показывают наличие свободных буферов у устройства-партнера (Flow Control)?
Во-первых, длина запросов ограничена одним двойным словом (DWORD).Это не так. Спецификация (данные из спецификации на ревизию 3.0) указывает, что количество DW в TLP может быть от 1 до 1024. Драйвер AHCI от Microsoft для Windows 7 (версию драйвера не помню за давностью лет) умеет посылать в PIO режиме запросы размером в 2 DW.
Первая группа особенностей связана со способами, которые позволяют сконфигурировать ПЛИС в течение 100 мс по требованиям PCIe.Отсчет времени ведется от того момента, когда все напряжения питания выйдут на стабильный уровень. При работе с большими ПЛИС достаточно жесткий критерий.
Напоследок, разработчикам настоятельно рекомендуется использовать информацию о доступных кредитах для исходящих пакетовИз ядра есть выводы с DLL, которые показывают наличие свободных буферов у устройства-партнера (Flow Control)?
С другой стороны, возникает ситуация, когда какой-то пакет забивает передающий канал. Ядро опустит флаг «tx_ready», и никакие другие пакеты пройти не смогут. Моя позиция в том, чтобы отслеживать выходы Flow Control и не допускать подобных заторов.Спорная ситуация. Я не читал полностью спецификацию PCI-Express, но у меня сложилось мнение, что пока устройство не получит подтверждение на какой-то пакет, оно будет слать его вечно. И отслеживая выводы Flow Control, чего Вы добьетесь? Зная, что на DLL уровне осталось место под пару пакетов, прекратите формирование пакетов на TLP уровне? Так для этих целей и есть флаг tx_ready.
Аппаратные ядра PCI Express ПЛИС V-й серии фирмы Intel представлены в двух вариантах исполнения: с интерфейсом Avalon-MM и интерфейсом Avalon-ST. Последний, хотя и требует от разработчика больше усилий, позволяет получить наибольшую пропускную способностьБегло посмотрел спецификацию по интерфейсам. Avalon-MM похож на AXI4, Avalon-ST похож на AXI4-Stream. В MM есть поддержка burst транзакций, пропускную способность должен обеспечивать. Его использование для взаимодействия с ядром PCI-Expess выглядит избыточным, поскольку весь обмен осуществляется пакетами, и формирование адресов для данных неуместно.
Спорная ситуация. Я не читал полностью спецификацию PCI-Express, но у меня сложилось мнение, что пока устройство не получит подтверждение на какой-то пакет, оно будет слать его вечно.
И отслеживая выводы Flow Control, чего Вы добьетесь? Зная, что на DLL уровне осталось место под пару пакетов, прекратите формирование пакетов на TLP уровне? Так для этих целей и есть флаг tx_ready.
Determine if the credit field associated with the current TLP type in the tx_cred bus is less than the requested credit value. When insufficient credits are available, the core waits for the link partner to release the correct credit type. Sufficient credits may be unavailable if the link partner increments credits more than expected, creating a situation where the Cyclone V Hard IP for PCI Express IP Core credit calculation is out-of-sync with the link partner.
А теперь предположим, что для приемной стороны текущие лимиты достигли максимума. Будет ли она отправлять передатчику (в нашем случае, ядру) пакет DLLP с новыми пределами? Как я понимаю, в этом случае приемник ничего отправлять не будет, так как для него лимиты уже на максимуме. Для ядра при этом лимиты оказываются меньше, чем нужно. Выходит, что имеем затор до тех пор, пока не обнулим счетчики ядра. Так как счетчики кредитов работают от времени инициализации линка, то единственный способ обнулить их — повторять инициализацию.
PCI Express в ПЛИС V-й серии Intel: основы интерфейса и особенности аппаратных ядер