waarden ; SC_HAS_PROCESS
( mybuf ) ;
mybuf
( sc_module_name naam ) : sc_module ( naam ) {
initialize ( ) op ;
SC_METHOD
( insert ) ;
gevoelige < < clk1.pos ( ) ;
SC_METHOD
( verwijder) ;
gevoelige << clk2.pos ( ) op ;
}
leegte
voegen ( ) ;
leegte
verwijderen ( ) ;
leegte initialize ( ) op ;
} ;
de volgende coderegels uitvoering van de inbrengen en verwijderen methoden , samen met een initialisatie methode
leegte mybuf
:: initialize ( ) {
values.clear ( ) op ;
}
leegte mybuf
. : : verwijder ( ) {
if ( values.size ( ) > 0 ) {
std
:: cout << sc_time_stamp ( ) << " " << values.front ( ) << endl ;
values.pop_front
( ) ;
}
leegte mybuf
}
:: insert ( ) {
if ( values.size ( ) == 0 ) {
int r = rand ( ) % 100 ; values.push_back
( r ) ;
}
}
de volgende code segment implementeert een test - bank voor het voorbeeld . De klokken CLK1 en CLK2 worden verdreven uit deze test - bench
klasse
mybuf_tb : openbare sc_module {
publiek : .
Sc_out CLK1 ;
sc_out CLK2 ; SC_HAS_PROCESS
( mybuf_tb ) ;
mybuf_tb
( sc_module_name naam ) : sc_module ( naam ) {
SC_THREAD
( clock1 ) ; < br
SC_THREAD > ( clock2 ) ;
}
leegte
clock1 ( ) ;
leegte
clock2 ( ) ;
} ;
leegte mybuf_tb :: clock1 ( ) {
while (true ) {
CLK1 = 0 ;
wachten
( 10 , SC_NS ) ;
CLK1 = 1 ;
wachten
( 10 , SC_NS ) ;
}
}
leegte mybuf_tb
:: clock2 ( ) {
while (true ) {
CLK2 = 0 ;
wachten
( 20 , SC_NS ) ;
CLK2 = 1 ;
wachten
( 20 , SC_NS ) ;
}
}
de volgende code segment instantieert de ontwerp -module en de testbank . Dan bindt hij de klokken , zodat de test - bank biedt de klok waarden aan het ontwerp module .
Int sc_main ( int argc , char * argv [ ] ) {
sc_signal
CLK1 ; sc_signal CLK2
; mybuf newbuf
( " mybuffer " ) ;
newbuf.clk1 ( CLK1 ) ;
newbuf
. CLK2 ( CLK2 ) ;
mybuf_tb
1 ;
}