Процессор одновременно читает PCI - PullRequest
2 голосов
/ 09 сентября 2011

Я работаю над проектом, в котором используется процессор LEON2 (SparcV8), и у нас есть шина PCI, которая соединяет другие ПЛИС и процессор.

На этом у нас есть многозадачное приложение, использующее RTEMS и написанное на C.

Теперь я совсем не знаком с архитектурой процессора и pci, поэтому я прихожу к вам, ребята, для просветления.

Проблема заключается в следующем: учтите, что у нас есть одна задача RTEMS, которая выполняет чтение памяти на шине PCI. На нашей плате доступ по PCI составляет примерно 2us. Теперь мой коллега поднял вопрос, что если во время этого чтения PCI планировщик задач RTEMS решит, что пришло время запустить другую задачу, и что эта задача также должна выполнить чтение PCI. Он считает, что первое чтение PCI, выполненное до переключения задач, будет повреждено вторым чтением PCI, которое будет выполнено вторым заданием перед выполнением первого.

Может ли это случиться?

Моя точка зрения состоит в том, что эта проблема не должна возникать, потому что для меня чтение PCI похоже на любое другое чтение памяти, только то, что вместо чтения локальной оперативной памяти, которая находится, например, по адресу 0x4000'0000, мы читаем адрес 0xA020'0000 процессор затем преобразует это как адрес на шине PCI и выполняет это чтение через шину. Конечно, это чтение дольше, чем чтение из локальной памяти, но этот процесс не должен прерываться в середине. Мое понимание может быть совершенно неверным, в этом случае не стесняйтесь меня поправлять!

1 Ответ

2 голосов
/ 08 июня 2012

Примечание. Я имею в виду PCI Express (PCIe).PCI может немного отличаться - я не знаком с ним.

Это зависит от ядра (модуля) PCIe, который выполняет чтение.

В основном для выполнения чтения из памяти, ядра PCIeотправляет пакет MemRd на шину, которая помечена.Сами данные поступают в пакете завершения с тем же тегом.Таким образом, чтение не «повреждено».

Теперь ядро ​​PCIe может блокировать ЦП до тех пор, пока не получен пакет Завершения, или может освободить ЦП сразу после отправки пакета MemRd.В таком случае ядро ​​PCIe должно будет иметь возможность обрабатывать несколько одновременных ожидающих чтений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...