Scarica il pacchetto SystemC . SystemC può essere scaricato gratuitamente da Internet . Prima di scaricare , vi verrà richiesto di registrarsi con la comunità SystemC . Una volta che il processo di registrazione è completo, il pacchetto può essere scaricato dopo l'accesso al sito con il nome utente e la password specificati .
2
Estrarre il pacchetto compresso . Il pacchetto compresso avrà una estensione file " tgz " . Si supponga che il nome del pacchetto è "
gunzip
tar - xvf
3 < . . p > Passare alla directory scompattato con il comando "cd
4
Usa il seguente codice come esempio di sistemi hardware del modello. L'esempio è quello di un disegno di un sistema con due processi . Il primo processo riempie un buffer da un profondo ogni volta che è vuota . Il secondo processo libera e visualizza il valore del buffer . I due processi funzionano a differenti frequenze di clock . Il codice è spiegato di seguito : .
Includere i file di intestazione necessari
# include " systemc.h "
# include
# includere
Class " mybuf " è ha due orologi di ingresso , clk1 e clk2 . Due metodi cioè , inserire e rimuovere sono definiti , in cui "inserire" viene richiamato al fronte positivo di CLK1 , e "Rimuovi ", viene richiamato al fronte positivo del " clk2 "
classe
mybuf : . Sc_module pubblico {
pubblico :
sc_in_clk CLK1 ;
sc_in_clk clk2 ;
std :: valori
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
sc_out
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 ();
} ;
vuoto mybuf_tb :: clock1 ( ) {
while (true ) {
CLK1 = 0;
attesa ( 10 , SC_NS ) ;
CLK1 = 1;
attesa ( 10 , SC_NS ) ;
}
}
vuoto mybuf_tb :: clock2 ( ) {
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
sc_signal
mybuf newbuf ( " buff " ) ;
newbuf.clk1 ( CLK1 ) ;
newbuf . clk2 ( clk2 ) ;
mybuf_tb 1 ;
}
Programmazione © www.354353.com