;
SC_HAS_PROCESS ( mybuf ) ;
mybuf ( sc_module_name nom) : sc_module (nom) {
initialize ();
SC_METHOD (insert) ;
sensible < < clk1.pos ();
SC_METHOD ( supprimer) ;
sensible << clk2.pos (); }
vide insert () ;
vide remove () ;
void initialize (); }
;
les lignes de code suivantes implémentent l' insertion et le retrait méthodes , avec une méthode d'initialisation
vide mybuf :: initialize () {
values.clear (); }
vide mybuf . : : remove () {
if ( values.size () > 0) {
std :: cout << sc_time_stamp () << " " << values.front () << endl;
values.pop_front (); }
}
vide mybuf :: insert () {
if ( values.size () == 0) {
int r = rand ()% 100;
values.push_back (r) ;
} }
le segment de code suivant implémente un banc d'essai pour l'exemple. Les horloges Clk1 et clk2 sont chassés de ce banc d'essai
classe
mybuf_tb : de sc_module publique {
publique : .
Sc_out clk1 ;
< p> sc_out clk2 ;
SC_HAS_PROCESS ( mybuf_tb ) ;
mybuf_tb ( sc_module_name nom) : sc_module (nom) {
SC_THREAD ( clock1 ) ; < br >
SC_THREAD ( clock2 ) ;
}
vide clock1 ();
vide clock2 (); }
;
< p> vide mybuf_tb :: clock1 () {
while ( true) {
clk1 = 0;
attente (10, SC_NS ) ;
clk1 = 1;
attente (10, SC_NS ) ;
} }
vide mybuf_tb :: clock2 () {
< p > while ( true) {
clk2 = 0;
attente (20, SC_NS ) ;
clk2 = 1;
attente (20, SC_NS ) ;
} }
le segment de code suivant instancie le module de conception et de son banc d'essai . Ensuite, il lie les horloges de sorte que le banc d'essai fournit les valeurs d'horloge au module de conception .
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;
}