Problème critique
Une fonction E/S RapidIO MegaCore Avalon-MM pour la lecture et la lecture les ports d’écriture peuvent présenter des transactions de lecture et d’écriture sur le Avalon-MM interface dans un ordre différent de celui indiqué sur le RapidIO Lien. Plus précisément, si le cœur IP de RapidIO reçoit une lecture demander un paquet sur le lien RapidIO peu après avoir reçu plusieurs paquets de demande d’écriture, la transaction en lecture peut se terminer avant toutes les transactions en écriture sont terminées.
Le chiffre suivant illustre un exemple de circonstances dans laquelle le problème peut survenir.
Dans le chiffre, l’écriture du cœur IP rapidIO Avalon-MM port a une transaction de demande d’écriture w0 prête à être envoyée à Avalon-MM slave 0, et le cœur IP rapidIO Avalon-MM maître a une transaction de demande en lecture r5 prête à être envoyée au même Avalon-MM esclave, esclave Avalon MM esclave 0. La numérotation de la transaction indique la l’ordre dans lequel les transactions sont arrivées de la couche Transport, c’est-à-dire l’ordre dans lequel les transactions doivent être effectuées. Cependant la commande de transaction est perdue dans le scénario suivant :
- Le port d’écriture maître envoie la demande w0 à Avalon-MM esclave 0.
- Avalon-MM slave 0 répond en mettant en avant
waitrequest
. - Le port de lecture maître envoie la demande r5 à Avalon-MM esclave 0.
- Avalon-MM slave 0 récupère et transfère les données à le port de lecture du maître Avalon-MM en réponse à la demande r5 - avant la transaction w0 est terminée.
Le même scénario peut se produire avec w1, w2, w3 ou w4 étant Différé. De même, le w0 peut être différé mais toujours complet avant r5, mais w1 ne sont pas complets avant r5, et ainsi de passe. Le même scénario peut également se produire théoriquement avec une transaction en lecture r0 et avec le w1 écrire une transaction. Cependant, la spécification RapidIO n’exclut pas une transaction en écriture provenant d’une transaction en lecture.
Pour empêcher la NREAD
transmission d’une transaction
toutes dans une séquence de NWRITE
transactions qui précèdent
assurer un délai suffisant entre les transactions en écriture et
la transaction en lecture sur le lien RapidIO. Par exemple, vous pourriez
effectuer la transaction finale NWRITE
une NWRITE_R
transaction
au lieu de cela, et envoyez la NREAD
transaction sur le lien uniquement
après avoir reçu la NWRITE_R
réponse.
Ce problème sera résolu dans une version ultérieure du RapidIO Fonction MegaCore.