Процессор одновременно читает PCI
Я работаю над проектом, который использует процессор LEON2 (SparcV8), и у нас есть шина PCI, которая соединяет другие FPGA и процессор.
Для этого у нас есть многозадачное приложение, использующее RTEMS и написанное на C.
Сейчас я совсем не знаком с архитектурой процессора и pci, поэтому я прихожу к вам, ребята, для просветления.
Проблема заключается в следующем: учтите, что у нас есть одна задача RTEMS, которая выполняет чтение памяти на шине PCI. На нашей плате доступ по PCI составляет примерно 2us. Теперь мой коллега поднял вопрос, что если во время этого чтения PCI планировщик задач RTEMS решит, что пришло время запустить другую задачу, и что эта задача также должна выполнить чтение PCI. Он считает, что первое чтение PCI, выполненное до переключения задач, будет повреждено вторым чтением PCI, которое будет выполнено вторым заданием до того, как будет выполнено первое.
Может ли это случиться?
Моя точка зрения состоит в том, что эта проблема не должна возникать, потому что для меня чтение PCI похоже на любое другое чтение памяти, только то, что вместо чтения локальной оперативной памяти, например, по адресу 0x4000'0000, мы читаем адрес 0xA020'0000. Затем процессор преобразует это как адрес на шине PCI и выполняет чтение через шину. Конечно, это чтение дольше, чем чтение из локальной памяти, но этот процесс не должен прерываться в середине. Мое понимание вполне может быть полностью нарушено, в этом случае не стесняйтесь поправлять меня!
1 ответ
Примечание: я имею в виду PCI Express (PCIe). PCI может быть немного другим - я не знаком с ним.
Это зависит от ядра (модуля) PCIe, которое выполняет чтение.
В основном для чтения из памяти ядро PCIe отправляет пакет MemRd на шину, которая помечена. Сами данные поступают в пакете завершения с тем же тегом. Таким образом, чтение не "повреждено".
Теперь ядро PCIe может блокировать ЦП до тех пор, пока не будет получен пакет Завершения, или может освободить ЦП сразу после отправки пакета MemRd. В таком случае ядро PCIe должно будет иметь возможность обрабатывать несколько одновременных отложенных чтений.