;
SC_HAS_PROCESS ( mybuf ) ;
mybuf ( sc_module_name nombre): sc_module ( nombre) {
initialize ();
SC_METHOD (insert) ;
sensible < < clk1.pos ();
SC_METHOD ( quitar) ;
sensible << clk2.pos (); }
void insertar ();
void remove () ;
void initialize (); }
;
las siguientes líneas de código implementan la inserción y extracción métodos , junto con un método de inicialización
void mybuf :: initialize () {
values.clear (); }
void mybuf . : : remove () {
if ( values.size ()> 0 ) {
std :: cout << sc_time_stamp () << " " << values.front () << endl ;
values.pop_front (); }
}
void mybuf :: insert () {
if ( values.size () == 0 ) {
int r = rand ()% 100 ;
values.push_back ( r ) ;
}
}
el segmento de código siguiente se implementa un banco de pruebas para el ejemplo. Los relojes clk1 y clk2 son expulsados de este banco de pruebas
clase
mybuf_tb : sc_module pública {
pública : .
Sc_out clk1 ;
< p> sc_out clk2 ;
SC_HAS_PROCESS ( mybuf_tb ) ;
mybuf_tb ( sc_module_name nombre): sc_module ( nombre) {
SC_THREAD ( clock1 ) ; < br >
SC_THREAD ( clock2 ) ;
}
clock1 void ();
clock2 void (); }
;
< p> void mybuf_tb :: clock1 () {
while ( true) {
clk1 = 0 ;
wait ( 10 , SC_NS ) ;
clk1 = 1 ;
wait ( 10 , SC_NS ) ;
}
}
void mybuf_tb :: clock2 () {
< p > while ( true) {
clk2 = 0 ;
wait ( 20 , SC_NS ) ;
clk2 = 1 ;
wait ( 20 , SC_NS ) ;
}
}
el siguiente segmento de código crea una instancia del módulo de diseño y su banco de pruebas . Luego se une a los relojes para que el banco de pruebas proporciona los valores de reloj para el módulo de diseño .
Sc_main int (int argc, char * argv [ ] ) {
sc_signal clk1 ;
sc_signal clk2 ;
mybuf newbuf ( " mybuffer ");
newbuf.clk1 ( clk1 ) ;
newbuf . clk2 ( clk2 ) ;
mybuf_tb 1 ;
}