Является ли запись на атомную шину P CIe c? - PullRequest
1 голос
/ 10 марта 2020

Я новичок ie в P CIe, так что это может быть глупый вопрос. Кажется, это довольно базовая c информация о интерфейсах P CIe, но у меня возникают проблемы с поиском ответа, поэтому я предполагаю, что упускаю некоторую информацию, которая делает ответ очевидным.

У меня есть система, в которой у меня ARM-процессор (хост), подключенный к Xilinx So C через P CIe (устройство). Конечная точка в So C также является процессором ARM.

Drawing showing a Xilinx SoC logically containing two blocks: FPGA Logic and ARM Processor. Each block is connected to a PCIe bus which is then leaves the SoC and connects to an external ARM processor acting as the PCIe host

Внешний процессор ARM (хост) будет выполнять запись в регистровое пространство процессора ARM (устройства) So C через P CIe. Это заставит Со C делать разные вещи. Это пространство регистров будет доступно только для чтения по отношению к So C (устройству). Внешний процессор ARM (хост) выполнит запись в это пространство регистров, а затем подаст сигнал прерывания, чтобы указать So C, что были записаны новые параметры, и он должен их обработать.

Мой вопрос : гарантируется ли запись, сделанная внешним ARM (хостом), атомами c относительно операций чтения со C (устройства)? В обычных ситуациях с общей памятью запись в один байт гарантированно является операцией atomi c (т. Е. Никогда не может быть ситуации, когда читатель прочитал первые 2 бита байта, но до того, как он прочитает последний 6 битов писатель заменяет их новым значением, приводящим к мусорным данным). Это относится и к P CIe? И если да, то что такое «единица» атомистичности? Все байты в одной транзакции атомы c относительно всей транзакции, или каждый байтовый атом c только по отношению к себе?

Имеет ли этот вопрос смысл?

В основном я хочу знать, в какой степени защита памяти необходима в моей ситуации. Если это вообще возможно, я бы хотел избежать блокировки областей памяти, так как оба процессора работают в ОСРВ, а избежание блокировок памяти сделало бы проект более простым.

1 Ответ

1 голос
/ 12 марта 2020

Итак, в вопросе атомарности спецификация P CIe 3.0 (только у меня есть) упоминается несколько раз.

Сначала у вас есть РАЗДЕЛ 6.5 Заблокированные транзакции это, вероятно, не то, что вам нужно, но я все равно хочу это задокументировать. По сути, это наихудший сценарий того, что вы описывали ранее.

Требуется поддержка заблокированных транзакций для предотвращения тупиковых ситуаций в системах, использующих устаревшее программное обеспечение, которое вызывает доступ к устройствам ввода-вывода

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

Если какое-либо чтение, связанное с заблокированной последовательностью, завершилось неудачно, Запрашивающий должен предположить, что атомарность блокировки не равна гарантированно, что путь между запросчиком и завершителем больше не заблокирован

С учетом сказанного Раздел 6.15 Atomi c Операции (AtomicOps) намного больше похоже на то, что вы заинтересованы в. Есть 3 типа операций, которые вы можете выполнять с помощью инструкции AtomicOps.

FetchAdd (выборка и добавление): запрос содержит один операнд, значение «add»

Swap (безусловный обмен): запрос содержит один операнд, значение «swap»

CAS (Сравнить и поменять): запрос содержит два операнда, значение «сравнение» и значение «своп»

Чтение Раздел 6.15.1 мы обратите внимание, что эти инструкции в основном реализованы для случаев, когда на единственной шине существует несколько производителей / потребителей.

AtomicOps обеспечивают расширенные механизмы синхронизации, которые особенно полезны, когда есть несколько производителей и / или нескольких потребителей, которые должны быть синхронизированы неблокирующим способом. Например, несколько производителей могут безопасно поставить в очередь в общую очередь без какой-либо явной блокировки.

При поиске в остальной части спецификации я нахожу мало упоминаний об атомарности за пределами разделов, относящихся к этим AtomicOps. Это означало бы для меня, что spe c обеспечивает такое поведение только при использовании этих операций, однако контекст вокруг того, почему это было реализовано, предполагает, что они ожидают таких вопросов только тогда, когда существует среда с несколькими производителями / потребителями, чего, очевидно, нет у вас.

Последнее место, на котором я бы хотел ответить на ваш вопрос, это Раздел 2.4 Порядок транзакций К сведению, я вполне уверен, что идея "передачи" других транзакций имеет смысл только с переключателями в середине. так как эти коммутаторы могут принимать такие решения, как только вы положите биты на шину, в вашем случае уже нет пути назад. Так что это, вероятно, применимо только в том случае, если вы разместите там переключатель. enter image description here

Ваша проблема в том, может ли запись обойти чтение. Напишите, что отправлено, прочитано, что не отправлено.

A3, A4 A Posted Request must be able to pass Non-Posted Requests to avoid deadlocks.

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

Учитывая это, я не верю, что запись может обойти чтение на вашем система, так как на шине нет устройства для переупорядочения этой транзакции. Поскольку у вас есть ОСРВ, я очень сомневаюсь, что они запрашивают транзакции P CIe и переупорядочивают их перед отправкой, хотя я не рассматривал это лично.

...