Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> C /C + + Programming >> .

Come modellare sistemi hardware in SystemC

sistemi hardware sono solitamente modellati con linguaggi di descrizione hardware come Verilog . Tali lingue sono destinati ad aiutare i progettisti a scrivere codice che è molto vicino all'hardware generato in modo che la catena strumento per la progettazione di chip in grado di utilizzare il codice per generare l' hardware finale . Lo svantaggio di questo approccio è la flessibilità di programmazione limitata in queste lingue . SystemC è un insieme di librerie di classi costruite sul linguaggio di programmazione C + + , e la sua intenzione è quella di sistemi hardware del modello e, allo stesso tempo , utilizzare tutte le caratteristiche del linguaggio di C + + . Cose che ti serviranno
compilatore C + + come g+ + Commercio sistema operativo
Mostra Altre istruzioni
Utilizzando SystemC
1

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 è " . Tgz " . Il pacchetto può essere spacchettato con i seguenti comandi :

gunzip tgz

tar - xvf tar
3 < . . p > Passare alla directory scompattato con il comando "cd " . In questa directory , un file chiamato " INSTALL " può essere trovato. Questo file fornisce le linee guida passo -passo per l'installazione del pacchetto . Seguire la procedura e installare SystemC . Una volta SystemC è installato, sistemi hardware possono essere modellati in lingua . Il pacchetto ha disegni di esempio nella directory " esempi " .
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 deque ;

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 CLK1 ;

sc_out clk2 ;

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 CLK1 ;

sc_signal clk2 ;

mybuf newbuf ( " buff " ) ;

newbuf.clk1 ( CLK1 ) ;

newbuf . clk2 ( clk2 ) ;

mybuf_tb 1 ;

}

 

Programmazione © www.354353.com