ΕΞΟΜΟΙΩΣΗ VHDL ΜΟΝΤΕΛΩΝ ΣΤΟ QUICKSIM II
ΠΕΡΙΕΧΟΜΕΝΑ
QUICKSIM II COMMAND BUTTON PALETTES
ΕΜΦΑΝΙΣΗ ΤΙΜΩΝ ΤΩΝ ΣΗΜΑΤΩΝ ΚΑΙ ΚΥΜΑΤΟΜΟΡΦΩΝ
ΔΗΜΙΟΥΡΓΙΑ INPUT STIMULI - “FORCES” WAVEFORM DATA BASE (WDB)
SIMULATION TIMING MODES (Gate-Level σχεδιάσεις)
ΕΚΤΕΛΕΣΗ ΚΑΙ ΕΛΕΓΧΟΣ ΜΙΑΣ ΕΞΟΜΟΙΩΣΗΣ
ΜΕΛΕΤΗ ΚΑΙ ΕΚΤΥΠΩΣΗ ΤΩΝ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΤΗΣ ΕΞΟΜΟΙΩΣΗΣ
ΕΚΤΕΛΩΝΤΑΣ ΕΞΟΜΟΙΩΣΕΙΣ ΤΟΥ QUICKSIM II ΣΕ “BATCH” MODE
Παράδειγμα:
Unix command line : quicksim multiplier ή Design Manager : επιλέγουμε multiplier στο παράθυρο navigator και από το pop-up menu επιλέγουμε : open -> quicksim.
Schematic Sheet : σχηματικό διάγραμμα
VHDL Sheet : VHDL πηγαίος κώδικας αρχιτεκτονικών
Trace : τιμές σημάτων (μορφή λογικού αναλυτή)
List : τιμές σημάτων (μορφή πίνακα)
Monitor : τιμές σημάτων (μόνο τρέχουσες τιμές)
Report : διάφορες πληροφορίες για την εξομοίωση και το μοντέλο
3. QUICKSIM II COMMAND BUTTON PALETTES
Η παλέτα των function buttons που εμφανίζεται είναι μία από έξι που μπορούν να εμφανισθούν. Κάθε μία περιέχει λειτουργίες (functions) που αφορούν μία συγκεκριμένου τύπου δραστηριότητα. Εμείς θα χρησιμοποιήσουμε μόνο τις SETUP, STIMULUS και DBG VHDL (debug VHDL) παλέτες.
- SETUP : session control
- STIMULUS : ορισμός test stimuli (forces)
- WF EDITOR : σύνταξη (edit) κυματομορφών εισόδου / εξόδου
- DESIGN CHG : κάνουμε μικρές σχεδιαστικές αλλαγές
- DBG GATES : gate-level debugger
- DBG VHDL : VHDL debugger
- RUN : τρέξιμο της εξομοίωσης
- RESET : κάνει reset στην κατάσταση εξομοίωσης
- TRACE : ανοίγει ένα παράθυρο Trace και/ή προσθέτει σήματα σε αυτό
- LIST : ανοίγει ένα παράθυρο List και/ή προσθέτει σήματα σε αυτό
- DELETE, CHANGE, COPY, MOVE : χειρισμός σημάτων σε ένα παράθυρο
- UNSELECT ALL : άρει την επιλογή όλων των τρεχόντων επιλεγμένων αντικειμένων (objects)
- SELECT COUNTS : δίνει μία αναφορά όλων των τρεχόντων επιλεγμένων αντικειμένων
Τα υπόλοιπα κουμπιά στο κάτω μέρος της παλέτας αφορούν μόνο μία συγκεκριμένου τύπου λειτουργία (gate-level ή VHDL debugging, ορισμό stimulus , κλπ).
Σημείωση : Όλες οι εντολές μπορούν να εκτελεσθούν μέσω pop-up και/ή pull-down μενού, από την μπάρα μενού.
4. ΕΜΦΑΝΙΣΗ ΤΟΥ COMPONENT DESIGN
Είναι χρήσιμο να εμφανίζουμε την σχεδίαση που εξομοιώνεται, γιατί μας βοηθάει στην εκτίμηση της συμπεριφοράς των σημάτων μέσα στην σχεδίαση.
Σχηματικό διάγραμμα:
- SETUP palete : κάνουμε κλικ στο κουμπί OPEN SHEET
- ή από την μπάρα μενού : File -> Open Sheet
VHDL πηγαίος κώδικας (source code):
- Κάνουμε κλικ στη ετικέτα (label) του εξαρτήματος για να το επιλέξουμε
- Από το pop-up menu: Open -> Down
5. ΕΜΦΑΝΙΣΗ ΤΙΜΩΝ ΤΩΝ ΣΗΜΑΤΩΝ ΚΑΙ ΚΥΜΑΤΟΜΟΡΦΩΝ
Τιμές σημάτων στο QuickSim II
Οι τιμές των σημάτων αναπαριστώνται σαν συνδυασμός μίας από τρεις καταστάσεις (states) και μίας από τέσσερις δυνάμεις (strengths).
s : strong (ισχυρή)
r : resistive (αντίστασης)
z : high impedance (μεγάλη εμπέδηση)
i : indeterminate (ακαθόριστη)
0s = strongly pulled down to logic 0
1r = resistively pulled up to logic 1
Xi = άγνωστη state / strength
Εμφάνιση τιμών των σημάτων
Οι καταστάσεις των σημάτων (signal states) δείχνονται με την θέση κάθε γραμμής σε σχέση με τα “tic” marks (σημάδια) :
0 = κάτω από τα tic marks
1 = πάνω από τα tic marks
X = μέσα στα tic marks
Οι δυνάμεις των σημάτων (signal strengths) δείχνονται με τον τύπο της γραμμής και το χρώμα :
s = solid light blue
i = solid yellow
r = dashed medium blue
z = dotted green
Επιλογή (selecting) / και άρση επιλογής (unselecting) σημάτων
Ένα σήμα επιλέγεται σε οποιοδήποτε παράθυρο κάνοντας κλικ σε αυτό (γίνεται highlighted). Μπορούμε να επιλέξουμε περισσότερα από ένα σήματα τη φορά.
Εμφάνιση των τιμών των σημάτων σε παράθυρα Trace, List, Monitor
- Παράθυρο Trace : κάνουμε κλικ στο TRACE button στην παλέτα ή από το pop-up menu επιλέγουμε : Add -> Traces.
- Παράθυρο List : κάνουμε κλικ στο LIST button στην παλέτα ή από το pop-up menu επιλέγουμε : Add -> Lists.
- Παράθυρο Monitor : από το pop-up menu επιλέγουμε : Add -> Monitors.
- Από το pop-up menu επιλέγουμε : Add -> Bus.
- Στο dialog box εισάγουμε το επιθυμητό όνομα του bus και τα σήματα που απαρτίζουν το bus και πατάμε κάνουμε κλικ στο ΟΚ.
Παράδειγμα : Για ένα 8-bit data bus :
- Bus name : D
- Components: D7, D6, D5, D4, D3, D2, D1, D0
- Επιλέγουμε το παράθυρο στο οποίο πρέπει να εμφανίζεται το bus:
- Παράθυρο Trace : κάνουμε κλικ στο TRACE button στην παλέτα ή από το pop-up menu επιλέγουμε: Add -> Traces -> Specified
- Παράθυρο List : κάνουμε κλικ στο LIST palette button ή από το pop-up menu επιλέγουμε : Add -> Lists -> Specified
- Παράθυρο Monitor : επιλέγουμε : Add -> Monitors -> Specified.
- Στο dialog box, φαίνεται το format εμφάνισης:
- Εισάγουμε το όνομα του bus.
- Κάνουμε κλικ στο επιθυμητό radix για τις εμφανιζόμενες τιμές (Hex, Octal, Binary, Decimal).
- Κάνουμε κλικ στο ΟΚ.
- Επιλέγουμε το σήμα σε αυτό το παράθυρο.
- Κάνουμε κλικ στο DELETE button στην παλέτα.
Χειρισμός του παραθύρου Trace
- Επιλέγουμε το σήμα σε αυτό το παράθυρο.
- Κάνουμε κλικ στο MOVE button στην παλέτα. (Ένα κόκκινο σταυρόνημα εμφανίζεται).
- Μετακινούμε το σταυρόνημα στην επιθυμητή θέση και κάνουμε κλικ. (Το σήμα τοποθετείται πάνω από το σήμα που είναι κάτω από το σταυρόνημα).
- Από το pop-up menu επιλέγουμε : Setup -> Window.
- Εισάγουμε την επιθυμητή αύξηση χρόνου στο κουτί “Domain label”.
- Εισάγουμε την επιθυμητή απόσταση μεταξύ των time labels στο κουτί “Domain pixels/interval”.
- Κάνουμε κλικ στο ΟΚ, όταν τελειώσουμε.
Χειρισμός του παραθύρου List
Χρησιμοποιούμε το “List Setup Window” για να αλλάξουμε την εμφάνιση στο παράθυρο List.
6. ΔΗΜΙΟΥΡΓΙΑ INPUT STIMULI - “FORCES” WAVEFORM DATA BASE (WDB)
Η “Forces Waveform Database” (WDB) περιέχει κυματομορφές από τιμές σημάτων που πρόκειται να εφαρμοσθούν στις εισόδους του κυκλώματος κατά την διάρκεια της εξομοίωσης. Μπορεί να δημιουργηθεί αλληλεπιδραστικά (interactively) ή να φορτωθεί από ένα αρχείο (νωρίτερα σωσμένου binary ή ASCII αρχείου). Ακόμη στην WDB κάθε κυματομορφή σήματος μπορεί να τροποποιηθεί όπως επιθυμούμε.
Interactive δημιουργία των Forces
Signal name : load
Time: 10 Value: 0
Time: 40 Value: 1
Time: 70 Value: 0
Αυτό δίνει στο σήμα “load” τιμή 0 στο χρόνο 10, τιμή 1 στο χρόνο 40 και τιμή πάλι 0 στο χρόνο 70.
Ορισμός ενός ρολογιού “Clock” (επαναλαμβανόμενου) σήματος
- Εισάγουμε το όνομα του σήματος (αν δεν το έχουμε κάνει πιο πριν).
- Εισάγουμε την περίοδο του ρολογιού.
- Εισάγουμε τους σχετικούς χρόνους μέσα στην περίοδο, στους οποίους το ρολόι πρέπει να αλλάζει σε 1 και σε 0.
- Κάνουμε κλικ στο ΟΚ για να το σώσουμε στην Forces WDB.
Signal Name : clk
Period : 40
Transitions
Time : 20 Value: 1
Time : 0 Value : 0
Αυτό ορίζει ένα ρολόι με περίοδο 40 ns, όπου το πρώτο μισό της περιόδου είναι 0 και το δεύτερο μισό είναι 1.
Ώθηση μίας γραμμής σήματος σε μία τιμή στον τρέχοντα χρόνο
Διαγραφή τιμών Force από την Forces WDB
- Αν στο dialog box το : forces (Force Target) δεν είναι highlighted, τότε κάνουμε κλικ σε αυτό.
- Κάνουμε κλικ στο ΟΚ.
Σημείωση: αυτό το βήμα απαιτείται στην προετοιμασία για να φορτώσουμε ένα νέο force file ή μία WDB που έχουμε σώσει νωρίτερα.
Τροποποιώντας (editing) κυματομορφές στην Forces WDB
Η Forces WDB μπορεί να συνταχθεί (edited) για να αλλάξουμε τα τρέχοντα patterns εισόδου. (Η Forces WDB μπορεί να σωθεί επίσης σαν ASCII πηγαίο αρχείο, να συνταχθεί (edited) με έναν κειμενογράφο (text editor) και κατόπιν να ξαναφορτωθεί όπως περιγράφηκε παραπάνω).
- Επιλέγουμε “WF EDITOR” Palette.
- Επιλέγουμε τα σήματα που θα εμφανισθούν.
- Κάνουμε κλικ στο κουμπί EDIT WAVEFORM στην παλέτα.
ADD TOGGLE : κάνουμε κλικ στην θέση για να κάνουμε toggle το σήμα (bit)
ADD PULSE : σύρουμε (drag) ένα παραλληλόγραμμο για να αναπαραστήσουμε ένα παλμό.
ADD EDGE : μία καινούργια αλλαγή τιμής σήματος ενός bus.
CHANGE VALUE : αλλαγή τιμής του σήματος ενός bus.
MOVE EDGE : σύρσιμο της αιχμής (edge) σε νέα θέση.
SHIFT EDGES : μετατόπιση ολόκληρης της κυματομορφής.
CUT EDGES : εξάλειψη και σώσιμο μιας αλλαγής σήματος.
COPY EDGES : σώσιμο μιας αλλαγής σήματος χωρίς την εξάλειψή της.
PASTE EDGES : προσθήκη μιας σωσμένης αλλαγής σήματος.
DELETE EDGES : απομάκρυνση μιας αλλαγής.
Saving / Restoring την Forces WDB (εσωτερική μη-ASCII φόρμα)
- Κάνουμε κλικ στο SAVE WDB ή από το pull-down menu επιλέγουμε : File -> Save -> Waveform DB.
- Στο dialog box κάνουμε κλικ στο “forces (Force Target)”, αν δεν είναι ήδη highlighted.
- Στο κουτί “Pathname”, εισάγουμε το επιθυμητό path/file όνομα.
- Δίπλα στο “File Type”, κάνουμε κλικ στο κουμπί “WDB”.
- Κάνουμε κλικ στο ΟΚ.
- Κάνουμε κλικ στο κουμπί LOAD WDB που βρίσκεται στην παλέτα Stimulus ή από το pull-down menu επιλέγουμε: File -> Load -> Waveform DB.
- Μέσα στο dialog box το οποίο εμφανίζεται:
- Μέσα στο κουτί “Pathname”, εισάγουμε το όνομα του αρχείου ή χρησιμοποιούμε το navigator για να το επιλέξουμε.
- Κάνουμε κλικ στο κουμπί “Load into Forces WDB”.
- Κάνουμε κλικ στο ΟΚ.
ASCII Force files
Ένα “force file”είναι ένα αρχείο κειμένου,που δημιουργείται από οποιοδήποτε κειμενογράφο,
Το οποίο περιέχει μία λίστα από force commands όπως αυτά μπορεί να βγαίνουν από το Quicksim.
force signal_name state-value time.
Παραδείγματα:
force inbus 22 0
force inbus a5 20
force inbus 3f 40
force start 0 0
force start 1 10
force start 0 20
set clock period 40
force clk 1 20 -repeat
force clk 0 0 -repeat
Σημείωση: Οι τρεις τελευταίες γραμμές περιγράφουν ένα σήμα ρολογιού “clk” όπως θα μπορούσε να ορισθεί με την force διαταγή “Add Clock”όπως περιγράφηκε νωρίτερα. Προσέχουμε την χρήση του –repeat.
- Από το pull-down menu επιλέγουμε : Force -> From File.
- Στο dialog box που εμφανίζεται, εισάγουμε το όνομα του αρχείου ή χρησιμοποιούμε τον navigator για να επιλέξουμε το αρχείο και κάνουμε κλικ στο ΟΚ.
- Κάνουμε κλικ στο SAVE WDB ή από το pull-down menu επιλέγουμε : File -> Save -> Waveform DB.
- Στο dialog box, κάνουμε κλικ στο “forces (Force Target)” αν δεν είναι ήδη highlighted.
- Στο κουτί “Pathname” εισάγουμε το επιθυμητό file / path όνομα.
- Δίπλα από το “File Type”, κάνουμε κλικ στο κουμπί Forcefile.
- Εισάγουμε τους χρόνους αρχής (start) και τέλους (stop), οριοθετώντας το τμήμα του Forces WDB που πρόκειται να σωθεί.
- Κάνουμε κλικ στο ΟΚ.
7. SIMULATION TIMING MODES (Gate-Level σχεδιάσεις)
Καθορισμός παραμέτρων εξομοίωσης χρονισμού (timing) και περιορισμού (constraint)
Επιλογή του simulatin timing mode :
Unit – all rise/fall times = 1 unit (.1 ns) (αγνοούνται όλες οι χρονικές παράμετροι των πυλών).
Delay – χρήση όλων των χρονικών παραμέτρων των πυλών
- min : χρήση ελαχίστων χρόνων ύψωσης/πτώσης (use minimum rise/fall times)
- typ : χρήση τυπικών χρόνων ύψωσης/πτώσης (use typical rise/fall times)
- max: χρήση μεγίστων χρόνων ύψωσης/πτώσης (use maximum ris/fall times)
Constraint – χρήση όλων των χρονικών παραμέτρων των πυλών και έλεγχος για spikes, setup/hold times, κλπ.
Αλλαγή του τρόπου λειτουργίας του πυρήνα (kernel) της εξομοίωσης
- “Timing Mode”
- Επιλέγουμε minimum, typical ή maximum rise/fall time
- Ενεργοποιούμε ή απενεργοποιούμε (enable/disable) την ανίχνευση spike και hazard.
8. ΕΚΤΕΛΕΣΗ ΚΑΙ ΕΛΕΓΧΟΣ ΜΙΑΣ ΕΞΟΜΟΙΩΣΗΣ
Τρέξιμο της εξομοίωσης για ένα δοσμένο αριθμό μονάδων χρόνου
For Time : (εισάγουμε τον αριθμό των χρονικών μονάδων (time units) )
Until Time : (εισάγουμε τον χρόνο τέλους (ending time) )
Until Stop : (μέχρι η εξομοίωση να σταματήσει μόνη της)
Επανακαθορισμός (reset) της κατάστασης της εξομοίωσης στο ξεκίνημα (για παράδειγμα να δοκιμάσουμε διαφορετικές force τιμές)
Τροποποίηση του σχεδίου και επανεξομοίωση
- Κάνουμε αλλαγές στο σχηματικό.
- Ελέγχουμε το σχηματικό.
- Το σώζουμε.
Αυτό φορτώνει το διορθωμένο μοντέλο του κυκλώματος, αντικαθιστώντας το προηγούμενο.
Single Stepping (χρήση κουμπιών από την παλέτα DBG VHDL)
Step End => βηματική εξομοίωση μέχρι τι τέλος του τρέχοντος βήματος χρόνου
Step Event => συνέχιση μέχρι το επόμενο συμβάν (event)
Step Iteration => συνέχιση μέχρι την επόμενη επανάληψη
Step Into => συνέχεια, βηματικά μέσα στην ενεργή πρόταση
Step Over => συνέχεια, βηματικά πάνω από ενεργές προτάσεις
Step Return => συνέχεια, βηματικά πάνω από ενεργές προτάσεις μέχρι να βρεθεί μία πρόταση return/wait και να εκτελεσθεί.
Special VHDL debugging windows
9. ΜΕΛΕΤΗ ΚΑΙ ΕΚΤΥΠΩΣΗ ΤΩΝ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΤΗΣ ΕΞΟΜΟΙΩΣΗΣ
Μελετώντας τα αποτελέσματα της εξομοίωσης στο παράθυρο Traces
- Από το pop-up μενού επιλέγουμε Cursrors->Add και εισάγουμε μία τιμή χρόνου για τοποθετήσουμε έναν νέο κέρσορα σε αυτό το σημείο του χρόνου.
- Αν δύο κέρσορες εμφανίζονται, ο χρόνος μεταξύ αυτών επίσης φαίνεται.
- Για να μετακινήσουμε έναν κέρσορα, από το pop-up menu επιλέγουμε : Cursors -> Slide. Αυτό κάνει να εμφανισθεί ένας κόκκινος μετακινήσιμος κέρσορας, τον οποίο μετακινούμε στο επιθυμητό σημείο και κάνουμε κλικ όταν είναι σε αυτό.
Για να πάρουμε ένα hard copy από το παράθυρο List (όπως ένα αρχείο ASCII)
- Στο dialog box, εισάγουμε το όνομα του αρχείου.
- Κάνουμε κλικ στο “Highlight” button αν θέλουμε να έχουμε σημαδεμένα highlighted σήματα στην εκτύπωση.
- Εισάγουμε τους χρόνους αρχής και τέλους που πρόκειται να τυπωθούν.
- Κάνουμε κλικ στο ΟΚ.
Για να πάρουμε ένα hard copy από το παράθυρο Trace
10. ΕΚΤΕΛΩΝΤΑΣ ΕΞΟΜΟΙΩΣΕΙΣ ΤΟΥ QUICKSIM II ΣΕ “BATCH” MODE
Το QuickSim II μπορεί να τρέξει σε “batch mode”, εξαλείφοντας τον χρόνο που χρειάζεται για να φέρει το παράθυρο εμφάνισης. Αυτό είναι χρήσιμο κυρίως αν δεν υπάρχει debugging στην σύνοδο εξομοίωσης (simulation session). Η εξομοίωση batch mode χρησιμοποιείται κυρίως για την παραγωγή μίας λίστας εξόδων εξομοίωσης (simulation output listing) για ένα δοσμένο σετ από διανύσματα ελέγχου (test vectors).
Για να καλέσουμε το QuickSim II σε batch mode, εκτελούμε το παρακάτω από την γραμμή εντολών του Unix:
quicksim my_component –NODisplay <forces_dofile
Όπου:
my_component => το εξάρτημα (component) που πρόκειται να εξομοιωθεί
forces_dofile => Batch file το οποίο περιέχει μία λίστα από quicksim εντολές για τον εξομοιωτή που πρέπει να ‘κάνει’ (“do”).
Παράδειγμα : Δείγμα forces_dofile για να κάνει ένα απλό τρέξιμο εξομοίωσης.
add lists clock clear b c d out
dofile force_file
run 1000
$set_active_window(“List”);
write report report_listing 0 1000 –Highlight
Οι παραπάνω εντολές εκτελούνται από το QuickSim ως εξής :
Δημιουργεί ένα list window για τα έξι σήματα που έχουν καταγραφεί.
Εκτελεί force διαταγές από το ASCII αρχείο “force_file”
Τρέχει την εξομοίωση για 1000 χρονικές μονάδες.
Ενεργοποιεί το παράθυρο List.
Γράφει ένα ASCII αρχείο “ report_listing ”, από το παράθυρο List για χρονική περίοδο 0-1000 και κάνει highlight το σήμα που αλλάζει.