Unter bestimmten Bedingungen kann es zu einer ACP-Abhängigkeitssperre in Arria®- und Cyclone®-SoCs kommen. Im Folgenden finden Sie einige Beispielszenarien, wie dies passieren könnte:
- Die ARM-CPU greift über den Zugriff auf den Gerätespeicher auf FPGA Fabric zu. Diese Art des Zugriffs führt dazu, dass die CPU-Pipeline blockiert wird, bis der Zugriff abgeschlossen ist.
- Der FPGA Fabric State Machine gibt kohärenten Zugriff auf HPS über ACP aus, um auf den HPS-Zugriff reagieren zu können.
- Der ACP erhält Zugriff, erfordert jedoch, dass SCU einen Cachewartungsvorgang durchführt, um ihn abzuschließen. Der Cache-Wartungsvorgang kann jedoch nicht abgeschlossen werden, da die CPU-Pipeline blockiert ist – das System ist blockiert.
Vermeiden Sie es, kohärent über ACP vom Fabric auf den HPS zugreifen zu müssen, um den Zugriff von HPS abzurufen, da dies zu einer Sackgasse führen kann.
Sie können das gleiche Ergebnis erzielen, indem Sie die Funktionalität in kleinere Teile zerlegen. Starten Sie z. B. einen Vorgang mit Zugriff und verwenden Sie dann einen zweiten Zugriff, um den Status des Vorgangs zu bestimmen.