Verifique el valor de FSL_M_Control en MicroBlaze

0

Escribí un acelerador de hardware que se comunica con un MicroBlaze a través de FSL. En el código Microblaze C, me gustaría usar putfsl() en un bucle hasta que el acelerador de hardware indique al MicroBlaze que debe salir del bucle:

while( <FSL_M_Control is not 1> )
{
    putfsl(*foo, 0);
    foo++;
}

¿Es posible obtener el valor de FSL_M_Control y usarlo para salir del bucle? Si es así, ¿cómo podría hacer eso?

    
pregunta Gonçalo Ribeiro

1 respuesta

0

Solo para que quede claro, te refieres a FSL_M_Control de la IP, que es FSL_S_Control en el microblaze, ¿verdad? Porque FSL_M_Control es impulsado por el microblaze ...

La respuesta rápida es "no".

Sin embargo, las funciones cgetfsl y getfsl harán una lectura e informarán a FSL_S_Control a través del bit de acarreo, lo que significa que establecen el bit de acarreo si FSL_S_Control = ' 0 'cuando usas cgetfsl y viceversa. Tenga en cuenta que la transacción FSL tiene que ser válida, es decir, FSL_S_Exist debe dirigirse, de lo contrario estos bloques de funciones. Puede verificar el bit de acarreo con la macro fsl_isinvalid .

do {
    putfsl(*foo++, 0);
    getfsl(dummy, 0);
    fsl_isinvalid(dummy); /* fsl_isinvalid doesn't return a value, this assign the carry bit to the variable dummy. This has for effect to put the value of FSL_S_Control into dummy */
 } while(!dummy);
    
respondido por el Jonathan Drolet

Lea otras preguntas en las etiquetas