MENTOR GRAPHICS QuickVHDL (Version B.1)

 

 

ΠΕΡΙΕΧΟΜΕΝΑ

Προετοιμάζοντας VHDL μοντέλα για εξομοίωση

Χρήση του QuickVHDL εξομοιωτή

Ορισμός τεστ εισόδου Stimuli (Forces)

Αρχεία διαταγών (Command Files)

Debugging VHDL Models

Παράδειγμα

QuickVHDL Simulator Command Summary

 

 

1. Προετοιμάζοντας VHDL μοντέλα για εξομοίωση

 

Ο κατάλογος εργασίας

Δημιουργούμε έναν κατάλογο εργασίας (working project directory) , στον οποίο θα τοποθετούμε τα VHDL πηγαία αρχεία (source files) και τα αρχεία διαταγών εξομοίωσης (simulation command files).

Παράδειγμα : Ο κατάλογος εργασίας μας είναι ~/nelson/ee530.

 

Βιβλιοθήκη VHDL σχεδιάσεων

Ο VHDL compiler τοποθετεί όλα τα μεταφρασμένα (compiled) αρχεία και τα σχετιζόμενα δεδομένα (data) σε έναν ειδικό κατάλογο βιβλιοθήκης σχεδιάσεων, ο οποίος ονομάζεται “work”, και θα πρέπει να βρίσκεται μέσα στον κατάλογο εργασίας μας. Ο εξομοιωτής QuickHDL θα τοποθετεί αυτόματα όλα τα μοντέλα σε αυτόν τον κατάλογο.

cd ee530

qhlib work

  • Στην βιβλιοθήκη μας, βάζουμε σε μία λίστα τις σχεδιαστικές μονάδες (design units) με την εντολή καταλόγου QuickHDL (QuickHDL Directory command) : qhdir.
  • Για να σβήσουμε σχεδιαστικές μονάδες από την βιβλιοθήκη σχεδιάσεων, χρησιμοποιούμε την εντολή διαγραφής QuickHDL (QuickHDL Delete command) :

    qhdel m1 : για να διαγράψουμε την οντότητα m1 και όλες τις αρχιτεκτονικές της

    qhdel m1 a1 : για να διαγράψουμε μόνο την αρχιτεκτονική α1 της οντότητας m1.

    ΠΟΤΕ δεν χρησιμοποιούμε εντολές του Unix ή το Windows File Manager για να μετακινήσουμε (move), αντιγράψουμε (copy) κλπ κάποιο αρχείο μέσα στον κατάλογο βιβλιοθήκης σχεδιάσεων “work”. Πάντα χρησιμοποιούμε την εντολή qhdel.

  • Δημιουργία VHDL μοντέλων

    Χρησιμοποιούμε έναν κειμενογράφο για να δημιουργήσουμε τα VHDL μοντέλα και τα τοποθετούμε στο κατάλογο εργασίας. Για κάθε VHDL σχεδιαστική μονάδα τοποθετούμε την οντότητά της (entity) και την αρχιτεκτονική της (architecture) σε ένα μονό αρχείο και χρησιμοποιούμε το όνομα της οντότητας σαν το όνομα του αρχείου, με την προέκταση “.vhd”.

    Παράδειγμα:

    Όνομα οντότητας : entity model1 is …

    Όνομα αρχείου : model1.vhd

     

    Μετάφραση (compiling) VHDL μοντέλων

    Μεταφράζουμε κάθε σχεδιαστική μονάδα με την εντολή qvhcom με έναν από τους παρακάτω τρόπους:

    qvhcom model1.vhd

    qvhcom –source model1.vhd

    Ο δεύτερος τρόπος εμφανίζει μία γραμμή πηγή (source line) με κάθε μήνυμα λάθους, ενώ ο πρώτος εμφανίζει μόνο μηνύματα λάθους. Το μεταφρασμένο μοντέλο αυτόματα τοποθετείται στην βιβλιοθήκη.

    Σημείωση: Ένα ‘make file’ μπορεί να δημιουργηθεί για την βιβλιοθήκη εργασίας με την εντολή : qhmake. Η εκτέλεση του make file κάνει όλα τα out-of-date VHDL αρχεία στην βιβλιοθήκη να μεταφρασθούν πάλι (recompiled).

     

     

    2. Χρήση του QuickVHDL εξομοιωτή

     

    Overview of VHDL Model Simulation

    Μία μοντελοποιημένη σχεδιαστική ενότητα δοκιμάζεται και εκτιμάται με τον καθορισμό ενός δοκιμαστικού διεγέρτη (test stimuli) ο οποίος εφαρμόζεται σε όλες τις εισόδους της, εξομοιώνοντας την λειτουργίας της μονάδας καθώς εφαρμόζεται το stimuli, και πιάνοντας τιμές από τις εξόδους και άλλα σήματα μέσα στην μονάδα τα οποία μπορούν να εξεταστούν για να καθορίσουμε αν η μονάδα συμπεριφέρθηκε κατάλληλα.

    Ο εξομοιωτής QuickHDL φορτώνει ένα μεταφρασμένο VHDL μοντέλο, επιτρέπει να ορισθούν test stimuli (τα οποία ονομάζονται “forces”) είτε αλληλεπιδραστικά (interactively) είτε μέσω ενός “command file”, και τότε εξομοιώνει την λειτουργία της σχεδίασης, εμφανίζοντας καθορισμένα σήματα σε μορφή λίστας και/ή σαν χρονικά διαγράμματα κυματομορφών. Οι τιμές των σημάτων μπορούν να εξετασθούν μέσα στον εξομοιωτή ή να σωθούν σε αρχεία και να εξετασθούν off-line. Κάποια ή και όλα τα σήματα σε ένα μοντέλο μπορούν να επιλεχθούν και να εμφανισθούν. Είναι σημαντικό να συλλέξουμε όσο το δυνατόν περισσότερες πληροφορίες για τα σήματα για να απλοποιήσουμε την διόρθωση (debugging) ενός μοντέλου.

    Για να εκσφαλματώσουμε (debug) ένα VHDL μοντέλο, ο χρήστης πρέπει να αλληλεπιδράσει (interact) με τον εξομοιωτή ορίζοντας “breakpoints”, τα οποία σταματούν την εξομοίωση σε επιλεγμένες VHDL δηλώσεις (statements) μέσα στο μοντέλο, και σε αυτό το σημείο ο χρήστης μπορεί να εξετάσει σήματα και/ή να αλλάξει τιμές των σημάτων.

    Καθώς βρίσκονται σφάλματα σε ένα μοντέλο, το VHDL πηγαίο αρχείο μπορεί να συνταχθεί (edited), επαναμεταφρασθεί (recompiled) και επαναφορτωθεί (reload) στον εξομοιωτή. Η εξομοίωση μπορεί τότε να επαναληφθεί μέχρι να επιτευχθούν επιθυμητά αποτελέσματα.

     

    Τυπική διαδικασία εξομοίωσης

    Κλήση του εξομοιωτή (simulator) και φόρτωμα (load) του VHDL μοντέλου.

    Εμφάνιση του VHDL μοντέλου ανοίγοντας ένα παράθυρο Source.

    Εμφάνιση σημάτων σε ένα μοντέλο ανοίγοντας ένα παράθυρο Signal.

    Ανοίγουμε ένα παράθυρο List για να εμφανίσουμε επιλεγμένες (captured) τιμές σημάτων σε μορφή πίνακα κατά την διάρκεια της εξομοίωσης και/ή ένα παράθυρο Wave για να εμφανίσουμε τιμές σημάτων με την μορφή κυματομορφών λογικού αναλυτή.

    Ορίζουμε input stimuli (διεγέρτη εισόδων ή αλλιώς “forces”) για κάθε σήμα εισόδου.

    Τρέχουμε την εξομοίωση για τον επιθυμητό αριθμό χρονικών μονάδων.

    Μελετάμε τα αποτελέσματα στα παράθυρα List / Wave.

    Σώζουμε το παράθυρο List σε ένα εκτυπώσιμο αρχείο.

    Κάνουμε πάλι την εξομοίωση για νέο input stimuli ή διορθώνουμε και κάνουμε πάλι compile το μοντέλο και μετά επαναλαμβάνουμε την εξομοίωση.

     

    Κλήση του εξομοιωτή (simulator)

    Στο Unix shell command πληκτρολογούμε qhsim για να εμφανίσουμε το παρακάτω Startup παράθυρο.

    εικόνα 1

     

    “Simulator resolution” : κάνουμε κλικ στην επιθυμητή μονάδα χρόνου (“ns” είναι η default επιλογή).

    “Library” : αν δεν είναι ήδη καταχωρημένη σαν default, εισάγουμε “work”.

    “Entity” : κάνουμε κλικ στην top-level οντότητα (entity) του μοντέλου που θα εξομοιωθεί.

    “Architecture” : αν υπάρχουν περισσότερες από μία αρχιτεκτονικές για την επιλεγμένη οντότητα, κάνουμε κλικ στην συγκεκριμένη αρχιτεκτονική που πρόκειται να εξομοιωθεί.

    Κάνουμε κλικ στο κουμπί Load για να φορτώσουμε το μοντέλο και να εμφανίσουμε το παράθυρο Main.

    Για να γλιτώσουμε χρόνο, το παράθυρο Startup μπορεί να παρακαμθεί με το να περιλάβουμε το όνομα της οντότητας στη Unix command line: qhsim model1.

     

    Το παράθυρο Main του QuickHDL εξομοιωτή

    Η κλήση του εξομοιωτή QuickHDL παράγει το παράθυρο Main, όπως φαίνεται παρακάτω. Οι εντολές εξομοίωσης μπορούν να εισαχθούν μέσω της μπάρας μενού που υπάρχει κατά μήκος της κορυφής του παραθύρου ή πληκτρολογώντας αυτές στο prompt μέσα στο παράθυρο ή διαβάζοντας αυτές από ένα αρχείο διαταγών (command file).

    εικόνα 2

     

    Η μπάρα των μενού περιέχει pull-down menus και κουμπιά για φόρτωμα (load) μοντέλων, για εμφάνιση VHDL δομών (structures) και πηγαίου κώδικα (source code), για εμφάνιση σημάτων και μεταβλητών και των τιμών τους κατά την διάρκεια της εξομοίωσης, για το τρέξιμο και επανεκκίνηση εξομοιώσεων.

    File pull-down menu:

    Restart design : Επαναφορτώνει (reload) το μοντέλο εξομοίωσης και επανατοποθετεί (reset) το χρόνο στο 0.

    Load new design : Εμφανίζει ένα νέο παράθυρο Startup.

    Execute command file: Επιλογή από pop-up menu, ενός αρχείου διαταγών για να εκτελεσθεί.

    Quit : Έξοδος από τον εξομοιωτή χωρίς σώσιμο δεδομένων.

    View pull-down menu: Ανοίγει άλλα παράθυρα του εξομοιωτή.

    Properties button: Παράγει ένα pop-up menu για να θέσουμε :

    Α. Default μήκος του τρεξίματος της εξομοίωσης.

    Β. Όριο στον αριθμό των “deltas” μέσα σε μία χρονική μονάδα (για αποτροπή ταλαντώσεων).

    Step button : Εξομοιώνει μία VHDL πρόταση (αν έχει σταματήσει –paused- η εξομοίωση).

    Step Over button : Το ίδιο με το Step, αλλά εκτελεί μία ολόκληρη VHDL λειτουργία (function) ή διαδικασία (procedure) σαν μία απλή πρόταση.

    Run pull-down menu: Τρέχει την εξομοίωση για ένα ορισμένο χρόνο:

    n time units : εξομοιώνει για n μονάδες χρόνου.

    Time’High: εξομοιώνει για έναν αριθμό μονάδων χρόνου ο οποίος είναι ίσος με τον μέγιστο ακέραιο σε υπολογιστή SUN.

    Continue: Επαναφέρει την εκτέλεση σε μία σταματημένη (paused) εξομοίωση.

    Break button : Παύει (break – pause) την τρέχουσα εξομοίωση.

     

    Εμφάνιση VHDL μοντέλων

    Κατά την διάρκεια της εξομοίωσης και του debugging, είναι χρήσιμο να εμφανίζουμε την ιεραρχία των μοντέλων και VHDL προτάσεις στα παράθυρα Structure και Source αντίστοιχα.

    Ένα παράθυρο Source, όπως φαίνεται παρακάτω, εμφανίζει πηγαίες (source) VHDL προτάσεις για την ενεργή σχεδιαστική μονάδα, με αριθμούς γραμμής αριστερά και scroll bars για να κοιτάξουμε στο μοντέλο. Σε αυτό το παράθυρο, μπορούμε να θέσουμε breakpoint για debugging κάνοντας κλικ σε έναν αριθμό γραμμής και να επιλέξουμε σήματα για να τα εξετάσουμε ή να τα αλλάξουμε, κατά την διάρκεια της εξομοίωσης.

    εικόνα 3

     

    Μπορούμε να ανοίξουμε ένα Source παράθυρο είτε από την μπάρα μενού του παραθύρου Main επιλέγοντας View -> Source ή πληκτρολογώντας την εντολή : view source.

    Ένα παράθυρο Structure εμφανίζει την δομική ιεραρχία μιας σχεδίασης όπως φαίνεται παρακάτω.

    εικόνα 4

    Ανοίγουμε ένα παράθυρο Structure είτε από την μπάρα μενού του παραθύρου Main επιλέγοντας View -> Structure ή πληκτρολογώντας την εντολή view structure.

    Kάθε στοιχείο στην ιεραρχία της σχεδίασης εμφανίζεται ως :

    instantiation_label:entity(architecture).

    Κάνοντας κλικ στο όνομα μιας σχεδιαστικής μονάδας στο παράθυρο Structure επιλέγουμε αυτό σαν “current design unit” (τρέχουσα σχεδιαστική μονάδα), για να εμφανισθεί στο παράθυρο Source.

    Η ιεραρχία μπορεί να επεκταθεί ή να συσταλεί ως εξής:

    [+] Name: κάνουμε κλικ στο [+] για να επεκτείνουμε ένα κομμάτι, να δούμε τα δομικά στοιχεία που αυτό περιέχει.

    [-] Name: κάνουμε κλικ στο [-] για συστολή

    [ ] Name: Το κομμάτι δεν περιέχει lower-level στοιχεία.

     

    Εμφάνιση τιμών των VHDL σημάτων

    Ο σκοπός της εξομοίωσης είναι να εκτιμήσουμε την ορθότητα ενός VHDL μοντέλου. Αυτό γίνεται με την εμφάνιση διαφόρων σημάτων μέσα στο μοντέλο, εφαρμόζοντας stimuli στα εξωτερικά σήματα εισόδου, παρατηρώντας τις τιμές των σημάτων κατά την διάρκεια της εξομοίωσης και συγκρίνοντας τις παρατηρημένες τιμές με τις αναμενόμενες τιμές.

    Το παράθυρο Signals εμφανίζει όλα τα ονόματα των σημάτων μέσα στην τρέχουσα περιοχή (current region) καθώς και τις εξομοιωμένες τιμές τους. Η τρέχουσα περιοχή επιλέγεται μέσω του παραθύρου Structure όπως περιγράφηκε παραπάνω).

    εικόνα 5

     

    Ανοίγουμε ένα παράθυρο Signal είτε από τη μπάρα μενού, του παραθύρου Main επιλέγοντας View -> Signal ή πληκτρολογώντας την εντολή: view signals.

    Τα ονόματα των σημάτων εμφανίζονται με ιεραρχικό τρόπο. Τα σύνθετα (composite) σήματα μπορούν να εμφανιστούν σε ατομικά (individual) στοιχεία:

    [+] Name: κάνουμε κλικ στο [+] για επέκταση, να δούμε τα στοιχεία που αυτό περιέχει.

    [-] Name: κάνουμε κλικ στο [-] για συστολή

    [ ] Name: Το σήμα δεν είναι σύνθετο (δεν επεκτείνεται)

    Μπορούμε να επιλέξουμε ένα σήμα κάνοντας κλικ σε αυτό, και να το αφήσουμε πάλι κάνοντας κλικ.

    Το παράθυρο Signals παρέχει τα παρακάτω buttons και pull-down menus:

    Props: αλλάζει τη διαμόρφωση εμφάνισης (display format).

    Force: αλλάζει την τιμή ενός επιλεγμένου σήματος.

    Wave: προσθέτει επιλεγμένα σήματα στο παράθυρο Wave.

    List: προσθέτει επιλεγμένα σήματα στο παράθυρο List.

    Log: προσθέτει επιλεγμένα σήματα στο αρχείο Log.

     

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

    εικόνα 6

     

    Το παράθυρο List το ανοίγουμε είτε από την μπάρα μενού του Main επιλέγοντας : View -> List ή πληκτρολογώντας την εντολή : view list.

    Ο χρόνος εξομοίωσης δίνεται στην επιλεγμένη μονάδα χρόνου (default είναι σε ns) συν κάποιο αριθμό VHDL “delta” (απειροελάχιστα μικρή, μη-μηδενική χρονική αύξηση).

    Το format και/ή τα περιεχόμενα του παραθύρου List μπορούν να σωθούν μέσω του μενού του παραθύρου List.

    File -> Write to file : Σώζει ολόκληρο το List παράθυρο σε ένα αρχείο ASCII το οποίο μπορεί να εξεταστεί και να τυπωθεί.

    File -> Save configuration : Σώζει την λίστα των ονομάτων των σημάτων και τα format τους σε ένα αρχείο, το οποίο μπορεί να εκτελεστεί αργότερα σαν αρχείο διαταγών (command file) και να αναπαράγει το format του παραθύρου List.

    Το format του παραθύρου List μπορεί να αλλαχθεί μέσω της ακόλουθης List Signals φόρμας, η οποία παράγεται κάνοντας κλικ στο Signals του παραθύρου List.

    εικόνα 7

     

    Για να αλλάξουμε τον τρόπο που ένα σήμα εμφανίζεται στο παράθυρο List, επιλέγουμε το σήμα στη φόρμα List Signals. Τότε, οι παρακάτω ιδιότητες (properties) του σήματος μπορούν να αλλαχθούν.

    Το μενού Edit της φόρμας List Signals, μπορεί να χρησιμοποιηθεί για cut και paste σημάτων, έτσι ώστε να επαναπροσδιορίσουμε την σειρά που τα σήματα εμφανίζονται στο παράθυρο List.

     

    Το παράθυρο Wave εμφανίζει τις τιμές των επιλεγμένων σημάτων, σαν κυματομορφές λογικού αναλυτή.

    εικόνα 8

     

    Τα παράθυρο Wave το ανοίγουμε είτε από το μενού του παραθύρου Main επιλέγοντας : View - > Wave ή πληκτρολογώντας την εντολή : view wave.

    Το παράθυρο Wave έχει τις παρακάτω επιλογές :

    Τα scroll bars χρησιμοποιούνται για να μετακινούμε την εικόνα δεξιά, αριστερά, πάνω και κάτω.

    Στα αριστερά κάθε σήματος υπάρχει ένα κουτί:

     

     

    3. Ορισμός τεστ εισόδου Stimuli (Forces)

    Το “force value” είναι ένα ζευγάρι τιμής-καθυστέρησης το οποίο ορίζει ένα διεγέρτη (stimulus) που θα εφαρμοσθεί σε ένα σήμα και το χρόνο στον οποίο θα εφαρμοσθεί. Ο χρόνος εκφράζεται σαν μία καθυστέρηση από τον τρέχοντα χρόνο εξομοίωσης. Πολλαπλά ζεύγη χρόνου-καθυστέρησης μπορούν να ορισθούν με μία εντολή “force”, και αν επιθυμούμε ένα σχέδιο (pattern) μπορεί να επαναλαμβάνεται.

    force signal_name value1 time1, value2 time2, … [-rep n]

    Αν το προαιρετικό –rep n ορίζεται, το pattern επαναλαμβάνεται με μία περίοδο n χρονικών μονάδων.

    Παραδείγματα : (υποθέτουμε ότι ο τρέχον χρόνος είναι Τ)

    Force σήμα “abc” στη λογική τιμή ‘1’ στο χρόνο Τ+20: force abc 1 20

    Force “abc” στο ‘0’ σε χρόνο Τ, ‘1’ σε χρόνο Τ+20 και ‘0’ σε χρόνο Τ+40:force abc 0 0 , 1 20, 0 40

    Δημιουργία μίας κυματομορφής ρολογιού στο σήμα “clk” με περίοδο 40, με τιμή ‘0’ για το πρώτο μισό και ‘1’ για το δεύτερο μισό: force clk 0 0, 1 20 -rep 40

    Για παράδειγμα ο δεκαδικός αριθμός 123 μπορεί να εκφρασθεί ως:

    Decimal : 123 ή 10#123

    Hexadecimal: 16#7Β

    Binary: 2#1111011

    Παράδειγμα: Να γεμίσουμε (float) ένα 32-bit data bus για το χρόνο 25:

    force data ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 25

    Παραδείγματα:

    clk - σήμα clk στο τρέχον περιβάλλον

    /clk - σήμα clk στο top-level μοντέλο

    /blk1/clk - σήμα clk μέσα στο μπλοκ blk1

    /blk1/blk2/clk - σήμα clk μέσα στο μπλοκ blk2 του μπλοκ blk1

    Παράδειγμα διαδικασίας:

    1. Ορίζουμε τιμές force για το βήμα 1, σε σχέση με το χρόνο 0.
    2. Τρέχουμε την εξομοίωση για Τ1 χρονικές μονάδες (ο χρόνος τώρα είναι Τ1).
    3. Ορίζουμε τιμές force για το βήμα 2, σε σχέση με το χρόνο Τ1.
    4. Τρέχουμε την εξομοίωση για Τ2 χρονικές μονάδες (ο χρόνος τώρα είναι Τ1+Τ2 )

       

    Τρέξιμο της εξομοίωσης

    Μία εξομοίωση μπορεί να τρέξει για προκαθορισμένο χρονικό διάστημα, να τρέξει μέχρι να μην υπάρχουν άλλα δρομολογημένα γεγονότα ή να τρέξει μέχρι να φτάσει σε κάποιο breakpoint.

    Από το παράθυρο Main επιλέγουμε: Run -> n time units , ή πληκτρολογούμε την εντολή : run n , όπου n είναι ο αριθμός των χρονικών μονάδων που θα εξομοιωθούν.

    Από το παράθυρο Main επιλέγουμε : Run -> Time’High , το οποίο τρέχει για ένα αριθμό χρονικών μονάδων που είναι ίσος με τον μέγιστο ακέραιο σε ένα SUN.

    Κουμπί Step από το παράθυρο Main: Εξομοιώνει μία πρόταση VHDL (αν η εξομοίωση έχει σταματήσει). Αυτό γίνεται και με την εντολή step.

    Κουμπί Step Over από το παράθυρο Main: Το ίδιο με το Step, με την διαφορά ότι μεταχειρίζεται μία ολόκληρη VHDL function ή procedure σαν μία πρόταση. Το ίδιο γίνεται και με την εντολή step over.

    Για να ανακτήσουμε συνεχή εξομοίωση, από το μενού του παραθύρου Main επιλέγουμε Continue ή πληκτρολογούμε την εντολή continue.

     

    Αλλαγή και/ή επανεξομοίωση (resimulating) ενός VHDL μοντέλου

    Μετά την εκτέλεση μίας εξομοίωσης, μπορεί να είναι επιθυμητό να θέλουμε να εξομοιώσουμε πάλι το μοντέλο με διαφορετικό input stimuli ή να το επανεξομοιώσουμε αφού έχουμε κάνει διορθώσεις σε αυτό.

    Επανεξομοίωση του ίδιου μοντέλου:

    Ο χρόνος εξομοίωσης μπορεί να επανακαθορισθεί (reset) στο 0 και το μοντέλο να εξομοιωθεί πάλι. Παρόλα αυτά όλες οι force statements πρέπει να εισαχθούν πάλι ή να διαβασθούν από ένα αρχείο διαταγών (command file).

    1. Από το μενού του παραθύρου Main επιλέγουμε: File -> Restart design ή πληκτρολογούμε την εντολή restart.
    2. Η επανεκκίνηση σβήνει όλες τις τιμές των σημάτων, αλλά όλα τα format των παραθύρων διατηρούνται.

    Διόρθωση και επανεξομοίωση ενός μοντέλου:

    Αν κάποιο λάθος βρεθεί σε ένα μοντέλο, το διορθώνουμε, το μεταφράζουμε πάλι (recompile) και μετά το επανεξομοιώνουμε.

     

     

    4. Αρχεία διαταγών (Command Files)

    Ένα αρχείο διαταγών είναι ένα αρχείο κειμένου το οποίο περιέχει μία λίστα διαταγών του εξομοιωτή οι οποίες εκτελούνται με την έκδοση μιας εντολής “DO”. Αυτό παρέχει ένα βολικό τρόπο για την ανάπτυξη ενός τεστ για το VHDL μοντέλο, το οποίο μπορεί να ξαναχρησιμοποιηθεί για πολλαπλές εξομοιώσεις, όπως συνήθως χρειάζονται κατά την διάρκεια του debugging. Αυτό μας γλιτώνει από το να γράφουμε όλες τις εντολές για κάθε εξομοίωση.

    Παράδειγμα αρχείου διαταγών:

    list rd wr

    list -hex abus dbus

    force wr 0 0

    force rd 0 0 , 1 20 -rep 40

    force dbus ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 0

    force abus 16#000 0, 16#004 40, 16#008 80, 16#00C 120

    run 150

    Αυτό το αρχείο διαταγών ανοίγει ένα list window, εμφανίζει σήματα ενός bit, τα “wr” και “rd”, εμφανίζει multi-bit σήματα “abus” και “dbus” σε δεκαεξαδική μορφή, δημιουργεί κυματομορφές για τα τέσσερα σήματα και εξομοιώνει για 150 χρονικές μονάδες.

     

     

    5. Debugging VHDL Models

    Αν ένα VHDL μοντέλο δεν συμπεριφέρεται όπως αναμένεται, ο εξομοιωτής μας παρέχει έναν αριθμό χαρακτηριστικών που βοηθούν στην ανίχνευση του προβλήματος.

    Εμφάνιση όλων των σημάτων

    Συλλογή (capture) και εμφάνιση όλων των σημάτων που μπορεί να σχετίζονται με το μέρος που περιέχει το λάθος, σε παράθυρο List/Wave . Δεν υπάρχει η ανάγκη να μαντέψουμε τι κάνει ένα σήμα, όταν οι τιμές του μπορούν να εμφανισθούν και να εξετασθούν.

    Χρήση Breakpoints

    Ένα “breakpoint” είναι μία τοποθεσία σε ένα μοντέλο στο οποίο η εξομοίωση μπορεί να ανασταλεί προσωρινά. Όταν αναστέλλεται η εξομοίωση, η κατάσταση ενός μοντέλου μπορεί να εξετασθεί και/ή να αλλαχθεί και μετά να συνεχισθεί η εξομοίωση.

    Παράδειγμα:

    on break examine wr , rd ;

    continue

     

    Το παράθυρο Process

    Μπορούμε να παρακολουθήσουμε ποιές διεργασίες (processes) είναι ενεργές και ποιες έχουν δρομολογηθεί για να εκτελεσθούν μέσω του παραθύρου Process, το οποίο εμφανίζει μία λίστα από διεργασίες καθώς και τις VHDL διαδρομές (paths) τους. Μπορούμε να επιλέξουμε μέσω δύο κουμπιών:

    Πρόσθετες πληροφορίες εμφανίζονται στα αριστερά των ονομάτων των διεργασιών:

     

     

    6. Παράδειγμα

    Παρακάτω υπάρχει ένα sample source file new_wm.vhdl το οποίο είναι ένας ελεγκτής για ένα πλυντήριο:

     

    LIBRARY ieee,arithmetic;

    USE ieee.std_logic_1164.ALL;

    Use arithmetic.std_logic_arith.ALL;
    ENTITY new_wm IS PORT (clk :IN std_ulogic; 
                           ober :IN BOOLEAN; 
                           coin :IN BOOLEAN;
                           double:IN BOOLEAN; 
                           T :IN BOOLEAN; 
                           reset :IN std_ulogic;
                           count :OUT bit); 
    END new_wm;

    ARCHITECTURE style_case OF new_wm IS

    TYPE states IS (idle,soak,wash,rins,spin,espera);

    SIGNAL present_state : states := idle;

    BEGIN

    washing : PROCESS (clk)

    BEGIN

    IF (clk = '1' AND clk'LAST_VALUE ='0') THEN

    IF (reset = '0') THEN

    present_state <= idle;

    ELSE CASE present_state IS

    WHEN idle => IF coin THEN present_state <= soak;

    ELSE present_state <= idle;

    END IF;

    WHEN soak => IF T THEN present_state <= wash;

    ELSE present_state <= soak;

    END IF;

    WHEN wash => IF T THEN present_state <= rins;

    ELSE present_state <= wash;

    END IF;

    WHEN rins => IF (T AND double)

    THEN present_state <= wash;

    else case T is

    when true => present_state <= spin;

    when false => present_state <= rins;

    end case;

    END IF;

    WHEN spin => IF T THEN present_state <= idle;

    else case ober is

    when true => count <= '0';

    present_state <= espera;

    when false => present_state <= spin;

    end case;

    END IF;

    WHEN espera => IF (ober) THEN present_state <= espera;

    ELSE count <= '1';

    present_state <= spin;

    END IF;

    END CASE;

    END IF;

    END IF;

    END PROCESS washing;

    END style_case;

     

    Για compile και κλήση QuickVHDL για το παραπάνω παράδειγμα:

    $ qvhcom -93 -synth -nosynchk src/new_wm.vhdl

    $ qhsim new_wm style_case

     

    7. QuickVHDL Simulator Command Summary

    ABORT
    Halt execution of a macro file
    BD <filename> <line>
    Delete breakpoint at indicated line of VHDL source file
    BP [<filename>] [<line>] [<command> {;<command>}]
    Set breakpoint at indicated line of VHDL source file and execute one or more simulation commands. List all breakpoints if no filename/line given.
    CHANGE <variable> <value>
    Change the value of a variable or signal. (Simulator must be paused at a breakpoint or after STEP)
    CONTINUE
    Continue execution after a STEP command or breakpoint.
    DESCRIBE <variable_name>
    Display info about the type of a variable or signal
    DO <filename> {<parameter_value>...}
    Execute commands from a macro file. Can pass up to nine parameters, designated in the macro file as $1 ... $9.
    DRIVERS <signal_name>
    Display the current value and scheduled future values for all drivers of the specified signal.
    ECHO <text_string>
    Display a message in the Transcript window.
    ENVIRONMENT [<pathname>]
    Display or change the current signal environment.
    EXAMINE <name>
    Display current value of named signal. (Simulator must be paused at a breakpoint or after STEP)
    EXIT [-FORCE]
    Exit simulator. If -FORCE specified, then quit without asking if you want to save data.
    FIND [-RECURSIVE] [-IN] [-OUT] [-INOUT] [-INTERNAL] [-PORT] <signal_name>
    Display full pathnames of all signals whose names match the signal name specification.
    FORCE <signal_name> <value> [<time>] {,<value><time>} [-REPEAT period]
    Force signal to indicated values at indicated times. Optionally repeat the pattern. (eg. for clocks)
    FORMAT LIST <filename> and
     
    FORMAT WAVE <filename>
    Record list of signal names currently in List/Wave window to a file. This file may be invoked with a DO command to recreate the window.
    IF <expression> {<command>} {;<command>} {ELSE {<command>} {;<command>} ENDIF
    Execute selected commands if certain conditions are true.
    LIST [-STROBE [<first_strobe>,]<period>] [-COLLAPSE] [-DELTA | -NODELTA] [{-RECURSIVE -IN -OUT -INOUT -INTERNAL -PORT -<radix> -TRIGGER -NOTRIGGER -WIDTH <n> {<signal_name> ...}]
    List signals and their values in the List Window.
    LOG [-RECURSIVE] [-IN] [-OUT] [-INOUT] [-PORT] [-INTERNAL] <signal_name> {<signal_name>...}
    Create a log file containing simulation data for all listed signals. All signals in List/Wave Windows are automatically included. (The log file is the source of data for List/Wave windows.)
    NOFORCE <signal_name> {<signal_name>...}
    Cancel a repeating force on a signal.
    NOLIST <signal_name> {<signal_name>...}
    NOWAVE <signal_name> {<signal_name>...}
    Remove signals from List/Wave Window.
    ONBREAK [<command> ; {<command>}]
    Specify command to be executed when a breakooint is encountered during simulation.
    QUIT [-FORCE]
    Exit simulator without saving data, after confirmation. (Confirmation not requested if -FORCE specified.)
    RESTART [-FORCE] [-NOBREAKPOINT] [-NOLIST] [-NOLOG] [-NOWAVE]
    Reload design and reset simulation time to 0.
    RESUME
    Resume execution of a macro file after a breakpoint.
    RUN [<time_units>...] [-all]
    Execute the simulation for the specified number of time units. If no time specified - run for default time. If -all specified, run until there are no events scheduled.
    SET [<variable_name> <value>]
    Create a user-defined variable and set it to the indicated value. If no argument - display all current user-defined variables.
    SHIFT
    Shift macro parameter values down one place. (Parameter $2 is assigned to $1, $3 to $2, etc.)
    SHOW [<pathname>]
    List signals and subregions visible from the current signal environment.
    SOURCE [<filename>]
    Display VHDL source file.
    STEP [-OVER]
    Step to the next VHDL statement. If -OVER specified, treat procedures/functions as single statements (do not step through them).
    SYSTEM <unix_command>
    Execute one UNIX shell command.
    Ex. >SYSTEM cp vector2.dat vectors.dat
    TB
    Display stack trace for the current process.
    TRANSCRIPT [ON | OFF]
    Echo to Transcript window commands being executed from a macro file.
    VIEW [LIST] [PROCESS] [SIGNAL] [SOURCE] [STRUCTURE] [VARIABLE] [WAVE]
    Open one or more designated simulation windows. "VIEW *" will open ALL of the above windows.
    WAVE {[-RECURSIVE] [-IN] [-OUT] [-INOUT] [-INTERNAL] [-PORT] [-<radix> -<format> [-OFFSET <n>] [-SCALE <n>] [-COLOR <color_name>] {<signal_name>...}}
    Add signals to a Wave Window.
    WHERE
    Display info about system environment (current directory, project file, and work library.)
    WRITE LIST <filename>
    Record contents of List Window in an output file.
    WRITE REPORT <filename>
    Print summary of design being simulated to output file.
    WRITE WAVE <filename>
    Record contents of Wave Window in an output file in PostScript format.

     

     

    Eπιστροφή στο Mentor Graphics Tools