Domanda

Ho il seguente codice nel Specman che ho ereditato:

some_method() is {
    var a: bool;

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

La mia comprensione è che ogni volta che viene chiamato some_method(), a viene generato di nuovo, e non c'è alcun senso nel controllo del valore di a prima che sia assegnato. Tuttavia, può essere che mi manca qualcosa qui. Per esempio, se a è statico, allora questo codice ha un senso, che mi porta alla mia domanda:

C'è un modo per una variabile di essere statica in Specman?

È stato utile?

Soluzione

non ci sono variabili statiche come in C. Una variabile in un metodo ha il suo valore di default (False in questo caso), se non inizializzato, così si dovrebbe essere if (!a) destra dovrebbe essere sempre True.

le cose sarebbero diverse se a era un membro struct, quindi come in altri linguaggi OO che manterrebbe ci valore su più chiamate di metodo e la verifica avrebbe più senso:

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

È possibile controllare cose come questa anche sul prompt interattivo:

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

C'è l'aiuto interattivo è anche bello, ad esempio provare:

Specman> help variable

e selezionare la voce (per numero) sn_eref: variables : declaring. Vi si possono trovare tutte le informazioni utili per la tua domanda.

Saluti, Daniel

Altri suggerimenti

Static membri struct (eventi, campi, metodi) sono stati aggiunti alla lingua in Specman v15.2. Un campo statico non può essere generato, fisico (%) o utilizzato in quando sottotipi.

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; };

Ecco alcuni commenti dal blog teamspecman: membri statici in e

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top