Hardware systemer er normalt modelleret med hardware beskrivelse sprog såsom Verilog . Sådanne sprog er beregnet til at hjælpe designere skrive kode, der er meget tæt på den genererede hardware, så værktøjet kæden for chip-design kan bruge koden til at generere den endelige hardware. Ulempen ved denne fremgangsmåde er den begrænsede programmering fleksibilitet i disse sprog. SystemC er et sæt af klasse biblioteker bygget på C + + programmeringssprog, og dens intention er at modellere hardware-systemer og på samme tid , alle de sproglige funktioner i brug C + +. Ting du skal
C + + compiler som g+ + Online Operativsystem
Vis Flere Instruktioner
Brug SystemC
1
Hent SystemC pakke. SystemC kan frit downloades fra internettet. Inden du downloader , vil du blive bedt om at registrere med det SystemC samfund. Når registreringen er færdig, kan pakken hentes efter at have logget ind på hjemmesiden med det angivne brugernavn og adgangskode .
2
Pak den komprimerede pakke. Den komprimerede pakke vil have en filtype kaldet " tgz " . Antag at navnet på den pakke er " . Tgz " . Pakken kan pakkes med følgende kommandoer : Hej gunzip tgz
tar - xvf tar
3 < . . p> Skift til den udpakkede mappe ved at bruge " cd " kommando . I denne mappe , kan en fil kaldet "INSTALL " findes. Denne fil indeholder trin -for-trin retningslinjer for at installere pakken. Følg trinene og installere SystemC . Når SystemC er installeret, kan hardware-systemer modelleres i sproget. Pakken har eksempler på mønstre i " eksempler " bibliotek.
4 Brug følgende kode som eksempel til at modellere hardware-systemer . Eksemplet er, at et design af et system med to processer . Den første proces udfylder et én - dyb buffer , når den er tom . Den anden proces reddede og viser værdien af bufferen . De to processer opererer på forskellige klokfrekvenser . Koden er forklaret nedenfor : .
Medtag den nødvendige header filer
# include " systemc.h "
# include
# omfatte
Class " mybuf " er har to input ure, clk1 og CLK2 . To metoder nemlig indsætte og fjerne defineres , hvor " indsættes" kaldes på positive kant clk1 og "Fjern" kaldes på den positive kant " CLK2 "
klasse mybuf : . Offentlige sc_module {
offentlig : Hej
sc_in_clk clk1 ,
sc_in_clk CLK2 ,
std :: deque værdier
SC_HAS_PROCESS ( mybuf )
mybuf ( sc_module_name navn) : sc_module (navn) {
Initialiser ();
SC_METHOD (indsæt ),
følsomme < < clk1.pos ();
SC_METHOD ( remove )
følsomme << clk2.pos ();
}
void indsæt ();
void fjerne ();
void Initialize ();
};
følgende linjer kode implementere indsættelse og fjernelse metoder , sammen med en initialisering metode
void mybuf :: initialisere () {
values.clear ();
}
void mybuf . : : fjerne ( ) {
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 ),
}
}
følgende kode segment implementerer en prøvebænk for eksempel. Urene clk1 og CLK2 er fordrevet fra denne test - bænk
klasse mybuf_tb : public sc_module {
public: .
Sc_out clk1 ;
< p> sc_out CLK2 ,
SC_HAS_PROCESS ( mybuf_tb )
mybuf_tb ( sc_module_name navn) : sc_module (navn) {
SC_THREAD ( clock1 ) < br >
SC_THREAD ( clock2 )
}
void clock1 ();
void clock2 ();
};
< p> void mybuf_tb :: clock1 () {
while ( true) {
clk1 = 0;
vente ( 10 SC_NS )
clk1 = 1;
vente ( 10 SC_NS ),
}
}
void mybuf_tb :: clock2 () {
< p > while ( true) {
CLK2 = 0;
vente ( 20 SC_NS ),
CLK2 = 1;
vente ( 20 SC_NS ),
}
}
følgende kode segment instantierer design modulet og dets test - bænk. Derefter binder ure så prøvebænk giver uret værdier til design modulet.
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 ,
}