Problema crítico
Leitura e leitura de E/S da função RapidIO MegaCore Avalon-MM portas de gravação podem apresentar transações de leitura e gravação no Avalon-MM interface em uma ordem diferente do que eles apareceram no RapidIO Link. Mais especificamente, se o núcleo rapidIO IP receber uma leitura pacote de solicitação no link RapidIO logo após receber vários pacotes de solicitação de gravação, a transação de leitura pode ser concluída antes todas as transações de gravação concluídas.
A figura a seguir ilustra um exemplo de circunstâncias em que o problema pode ocorrer.
Na figura, o core IP RapidIO Avalon-MM porta tem uma transação de solicitação de gravação w0 pronta para enviar para Avalon-MM slave 0, ea porta de leitura mestre rapidIO IP Avalon MM tem uma transação de solicitação de leitura r5 pronta para enviar para o mesmo Avalon-MM escravo, Avalon mm escravo 0. A numeração da transação indica o ordem em que as transações chegaram a partir da camada de transporte, que é a ordem em que as transações devem ser concluídas. No entanto o pedido de transação é perdido no seguinte cenário de exemplo:
- A porta de gravação mestre envia a solicitação w0 para Avalon-MM slave 0.
- Avalon-MM slave 0 responde afirmando
waitrequest. - A porta de leitura mestre envia a solicitação r5 para Avalon-MM escravo 0.
- Avalon-MM slave 0 recupera e transfere os dados para a porta Avalon-MM mestre de leitura em resposta à solicitação de r5 — antes a transação w0 é concluída.
O mesmo cenário pode ocorrer com w1, w2, w3 ou w4 sendo Adiada. Da mesma forma, w0 pode ser diferido, mas ainda completo antes r5, mas w1 não concluído antes de r5, e assim por diante. O mesmo cenário também pode ocorrer teoricamente com uma transação de leitura r0 e w1 transação de gravação. No entanto, a especificação RapidIO não exclui uma transação de gravação a partir da aprovação de uma transação de leitura.
Para evitar que uma NREAD transação passe
qualquer em uma sequência de transações NWRITE que precedem
ele, garantir um atraso adequado entre as transações de gravação e
a transação de leitura no link RapidIO. Por exemplo, você poderia
tornar a transação final NWRITE uma NWRITE_R transação
em vez disso, e enviar a NREAD transação apenas no link
após receber a NWRITE_R resposta.
Este problema será corrigido em uma versão futura do RapidIO Função MegaCore.