deque ;
SC_HAS_PROCESS ( mybuf ) ;
mybuf ( sc_module_name nome) : sc_module (nome) {
initialize ();
SC_METHOD ( inserto) ;
sensibile < < clk1.pos ();
SC_METHOD ( rimuovi) ;
sensibile << clk2.pos (); }
vuoto inserisci ( ) ;
vuoto remove () ;
vuoto initialize ();
} ;
le seguenti righe di codice implementano l' inserimento e la rimozione metodi , insieme a un metodo di inizializzazione
vuoto mybuf :: initialize () {
values.clear (); }
vuoto mybuf . : : remove () {
se ( values.size ( ) > 0 ) {
std :: cout << sc_time_stamp ( ) << " " << values.front ( ) << endl;
values.pop_front (); }
}
vuoto mybuf :: insert ( ) {
se ( values.size ( ) == 0 ) {
int r = rand ( ) % 100 ;
values.push_back ( r) ;
}
}
il seguente segmento di codice implementa un banco di prova per l'esempio . Gli orologi clk1 e clk2 sono guidati da questo banco di prova
classe
mybuf_tb : sc_module pubblica {
pubblico : .
Sc_out CLK1 ;
< p > sc_out clk2 ;
SC_HAS_PROCESS ( mybuf_tb ) ;
mybuf_tb ( sc_module_name nome) : sc_module (nome) {
SC_THREAD ( clock1 ) ; < br
SC_THREAD > ( clock2 ) ;
}
vuoto clock1 ();
vuoto clock2 ();
} ;
< p > vuoto mybuf_tb :: clock1 ( ) {
while (true ) {
CLK1 = 0;
attesa ( 10 , SC_NS ) ;
CLK1 = 1;
attesa ( 10 , SC_NS ) ;
}
}
vuoto mybuf_tb :: clock2 ( ) {
< p > while (true ) {
clk2 = 0;
attesa ( 20 , SC_NS ) ;
clk2 = 1;
attesa ( 20 , SC_NS ) ;
}
}
Il seguente frammento di codice crea un'istanza del modulo di progettazione e il suo banco di prova . Poi si lega gli orologi in modo che il banco di prova fornisce i valori di clock per il modulo di disegno .
Int sc_main ( int argc , char * argv [ ] ) {
sc_signal CLK1 ;
sc_signal clk2 ;
mybuf newbuf ( " buff " ) ;
newbuf.clk1 ( CLK1 ) ;
newbuf . clk2 ( clk2 ) ;
mybuf_tb 1 ;
}