Pregunta

Tengo el código siguiente en Specman que heredé:

some_method() is {
    var a: bool;

    if (!a) {
        a = some_other_method();
    };
};

Mi entendimiento es que cada vez que se llama some_method(), a se genera de nuevo, y no hay sentido en la comprobación de valor de a antes de que sea asignado. Sin embargo, puede ser que me falta algo aquí. Por ejemplo, si a es estático, entonces este código tiene sentido, lo que me lleva a mi pregunta:

¿Hay alguna manera de que una variable sea estática en Specman?

¿Fue útil?

Solución

No existen variables estáticas como en C. Una variable en un método tiene su valor por defecto (False en este caso) si no se ha iniciado, por lo que debe ser if (!a) derecho siempre debe ser True.

Las cosas serían diferentes si a era un miembro de la estructura, a continuación, al igual que en otros lenguajes orientados a objetos que retendría hay valor en varias llamadas de método y el cheque tendría más sentido:

struct some_struct_s {
    a : bool;
    some_method() is {
        if (!a) {
            a = some_other_method();
        };
    };
};

Puede comprobar cosas como esta también en el modo interactivo:

Specman> var a : bool;
Specman> print a
  a = FALSE

Hay la ayuda interactiva es también muy agradable, por ejemplo probar:

Specman> help variable

y seleccione la entrada (por número) sn_eref: variables : declaring. Allí encontrará toda la información relevante de tu pregunta.

Cheers, Daniel

Otros consejos

Los miembros de la estructura estática (eventos, campos, métodos) se añadieron a la lengua en Specman v15.2. Un campo estático no se puede generar, físico (%) o utilizado en cuando subtipos.

struct some_struct_s {
    a : bool;
    some_method() is {
        if (!a) {
            a = some_other_method();
        };
    };
};

-- Change field 'a' for all instances
on xxx { some_struct_s::a = TRUE; };

Aquí hay algunos comentarios del blog teamspecman: Los miembros estáticos en e

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top