Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Πώς να Μοντέλο Systems Hardware σε SystemC

συστήματα Hardware μοντελοποιείται συνήθως με γλώσσες περιγραφής υλικού , όπως Verilog . Τέτοιες γλώσσες στόχο να βοηθήσει τους σχεδιαστές να γράψουν κώδικα που είναι πολύ κοντά στο υλικό που παράγεται έτσι ώστε η αλυσίδα εργαλείο για το σχεδιασμό chip μπορεί να χρησιμοποιήσει τον κωδικό για τη δημιουργία του τελικού υλικού . Το μειονέκτημα αυτής της προσέγγισης είναι η ευελιξία περιορίζεται προγραμματισμού σε αυτές τις γλώσσες . SystemC είναι ένα σύνολο βιβλιοθηκών κατηγορίας χτισμένο στην γλώσσα προγραμματισμού C + + , και η πρόθεσή της είναι να διαμορφώσει συστήματα hardware και την ίδια στιγμή , να χρησιμοποιήσει όλα τα χαρακτηριστικά της γλώσσας C + + . Τα πράγματα που θα χρειαστείτε
C + + compiler , όπως g+ +
Λειτουργικό σύστημα

Παρουσίαση Περισσότερες οδηγίες
Χρησιμοποιώντας SystemC
Η 1

λήψη του πακέτου SystemC . SystemC μπορεί να κατεβάσει ελεύθερα από το Internet . Πριν από τη λήψη , θα σας ζητηθεί να εγγραφείτε με την κοινότητα SystemC . Μόλις η διαδικασία ολοκληρωθεί η εγγραφή , το πακέτο μπορεί να βρεθεί μετά την είσοδο στην ιστοσελίδα με το συγκεκριμένο όνομα χρήστη και τον κωδικό πρόσβασης . 2

Βγάλτε το συμπιεσμένο πακέτο . Το συμπιεσμένο πακέτο θα έχει μια επέκταση αρχείου που ονομάζεται " tgz " . Ας υποθέσουμε ότι το όνομα του πακέτου είναι " . Tgz » . Το πακέτο μπορεί να αποσυμπιεστεί με τις ακόλουθες εντολές :

gunzip tgz

πίσσα - xvf πίσσα
εικόνων 3 <. . p > Αλλαγή στον κατάλογο αποσυμπίεσης με τη χρήση του " cd " εντολή . Σε αυτόν τον κατάλογο , ένα αρχείο που ονομάζεται " ΕΓΚΑΤΑΣΤΑΣΗ" μπορεί να βρεθεί . Αυτό το αρχείο παρέχει βήμα προς βήμα οδηγίες για την εγκατάσταση του πακέτου . Ακολουθήστε τα βήματα και να εγκαταστήσετε SystemC . Μόλις εγκατασταθεί SystemC , συστήματα υλικού μπορεί να διαμορφωθεί στη γλώσσα . Το πακέτο έχει δείγμα σχέδια στο " παραδείγματα " κατάλογο .
Η 4

Χρησιμοποιήστε τον ακόλουθο κώδικα ως παράδειγμα το μοντέλο συστήματα hardware . Το παράδειγμα είναι ότι από ένα σχεδιασμό ενός συστήματος με δύο διαδικασίες . Η πρώτη μέθοδος γεμίζει ένα- βαθύ ρυθμιστικό όποτε είναι άδειο. Η δεύτερη διαδικασία καθαρίζει και εμφανίζει την τιμή του ρυθμιστικού διαλύματος . Οι δύο μέθοδοι λειτουργούν σε διαφορετικές συχνότητες ρολογιού . Ο κώδικας εξηγείται παρακάτω :

Συμπεριλάβετε τα απαραίτητα αρχεία header

# include " systemc.h "

# include

# . περιλαμβάνουν

Class " mybuf " είναι δύο ρολόγια εισόδου , ​​CLK1 και CLK2 . Δύο μέθοδοι δηλαδή , τοποθέτηση και αφαίρεση ορίζεται , όπου " εισάγετε " γίνεται επίκληση στο θετικό άκρο της CLK1 , και «αφαίρεση» γίνεται επίκληση στο θετικό άκρο της " CLK2 "

τάξη mybuf : . Δημόσια sc_module {

δημόσια :

sc_in_clk CLK1 ?

sc_in_clk CLK2 ?

std :: deque τιμές ?

SC_HAS_PROCESS ( mybuf ) ?

mybuf (όνομα sc_module_name ) : sc_module (όνομα ) {

προετοιμασία ( ) ?

SC_METHOD ( ένθετο ) ?

ευαίσθητα <

SC_METHOD (αφαίρεση) ?

ευαίσθητα <


κενό εισάγετε ( ) ?

void remove ( ) ?

άκυρη αρχικοποιούν ( ) ? }

?

Οι παρακάτω γραμμές κώδικα εφαρμογή της εισαγωγής και αφαίρεσης μεθόδους , μαζί με μια μέθοδο προετοιμασίας

void mybuf :: προετοιμασία ( ) {

values.clear ( ) ? }


άκυρη mybuf . : : αφαίρεση ( ) {

αν ( values.size ( ) > 0 ) {

std :: cout <

values.pop_front ( ) ? }


}

άκυρη mybuf :: εισάγετε ( ) {

αν ( values.size ( ) == 0 ) {

int r = rand () % 100 ?

values.push_back ( r ) ?

} }


Το ακόλουθο τμήμα κώδικα υλοποιεί μια δοκιμαστική πάγκο για παράδειγμα . Η CLK1 ρολόγια και CLK2 οδηγούνται από αυτή τη δοκιμή πάγκο

τάξη mybuf_tb : δημόσια sc_module {

κοινό: .

Sc_out CLK1 ?

sc_out CLK2 ?

SC_HAS_PROCESS ( mybuf_tb ) ?

mybuf_tb (όνομα sc_module_name ) : sc_module (όνομα ) {

SC_THREAD ( clock1 ) ?

SC_THREAD ( clock2 ) ?

}

άκυρη clock1 ( ) ?

άκυρη clock2 ( ) ? }

?

void mybuf_tb :: clock1 ( ) {

ενώ η (πραγματική ) {

CLK1 = 0 ?

περιμένει ( 10 , SC_NS ) ?

CLK1 = 1 ?

περιμένει ( 10 , SC_NS ) ?

} }


άκυρη mybuf_tb :: clock2 ( ) {

ενώ η (πραγματική ) {

CLK2 = 0 ?

περιμένει ( 20 , SC_NS ) ?

CLK2 = 1 ?

περιμένει ( 20 , SC_NS ) ?

} }


Το ακόλουθο τμήμα κώδικα εμφανίζει την ενότητα του σχεδιασμού και δοκιμών πάγκο της . Στη συνέχεια, δεσμεύει τα ρολόγια , έτσι ώστε η δοκιμή πάγκο παρέχει τις τιμές του ρολογιού στην ενότητα του σχεδιασμού .

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 ?

}
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα