Werte ;
SC_HAS_PROCESS ( mybuf );
mybuf ( sc_module_name Name) : sc_module (name) {
initialize ( );
SC_METHOD (Einsatz) ;
empfindlich < < clk1.pos ();
SC_METHOD (Entfernen) ;
empfindlich << clk2.pos (); }
nichtig insert () ;
void remove ();
void Initialisiere (); }
;
Die folgenden Zeilen Code implementieren das Einsetzen und Herausnehmen Methoden , zusammen mit einer Initialisierung Verfahren
nichtig mybuf :: initialize () {
values.clear (); }
nichtig mybuf . : : remove () {
if ( values.size () > 0) {
std :: cout << sc_time_stamp ( ) << "" << values.front () << endl;
values.pop_front (); }
}
nichtig mybuf :: insert () {
if ( values.size () == 0) {
int r = rand ()% 100;
values.push_back (r) ;
} }
der folgende Code -Segment implementiert einen Prüfstand für das Beispiel. Die Uhren clk1 und clk2 werden aus diesem Prüfstand gefahren
Klasse mybuf_tb : public sc_module {
public: .
Sc_out clk1 ;
< p> sc_out clk2 ;
SC_HAS_PROCESS ( mybuf_tb );
mybuf_tb ( sc_module_name Name) : sc_module (name) {
SC_THREAD ( clock1 );
SC_THREAD ( clock2 ); }
nichtig clock1 ();
nichtig clock2 (); }
;
< p> Leere mybuf_tb :: clock1 () {
while ( true) {
clk1 = 0;
wait ( 10 , SC_NS );
clk1 = 1;
wait ( 10 , SC_NS );
} }
nichtig mybuf_tb :: clock2 () {
< p > while ( true) {
clk2 = 0;
wait ( 20 , SC_NS );
clk2 = 1;
wait ( 20 , SC_NS ); }
}
Der folgende Code -Segment instanziiert das Design-Modul und seine Prüfstand . Dann bindet die Uhren , so dass der Prüfstand um die Uhr Werte bietet das Design -Modul .
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 ; }