MENTOR GRAPHICS AUTOLOGIC II

 

 

ΠΕΡΙΕΧΟΜΕΝΑ

Εισαγωγή

Προετοιμασία

Διαδικασία

Σύνθεση

Βελτιστοποίηση

Αποθήκευση της σχεδίασης

Εξομοίωση και Layout

Παράδειγμα

 

 

 

1. Εισαγωγή

Αυτό το tutorial σκοπό έχει να γνωρίσουμε το Autologic II το οποίο μας επιτρέπει να συνθέσουμε και να βελτιώσουμε τις VHDL ή VERILOG HDL σχεδιάσεις και να τις δούμε με την τεχνολογία που επιθυμούμε.

 

 

2. Προετοιμασία

LIBRARY ieee , arithmetic ;

USE ieee.std_logic_1164.ALL ;

USE arithmetic.std_logic_arith.ALL ;

 

 

3. Διαδικασία

Προτείνεται να δημιουργήσουμε έναν υποκατάλογο για να τοποθετούμε όλα τα αρχεία που σχετίζονται με το Autologic II , π.χ. autolog . Πηγαίνουμε στο νέο κατάλογο με την εντολή :

$ cd autolog .

Δημιουργούμε έναν υποκατάλογο για να τοποθετούμε τα VHDL αρχεία (vhdl),$mkdir src. Τα ονόματα των αρχείων των σχεδιάσεων πρέπει να έχουν το όνομα της οντότητας με την κατάληξη .vhdl .

Δημιουργούμε δύο υποκαταλόγους, έναν για τοποθετούμε τα δικτυώματα (netlist) και ένα για να τοποθετούμε τα αρχεία EDDM

$mkdir netlist

$mkdir eddm

Δημιουργούμε μία τοπική βιβλιοθήκη : $ qhlib <directory_pathname>.Για παράδειγμα:

$ qhlib work

Κάνουμε map την βιβλιοθήκη : $ qhmap <logical_name> <path>.Για παράδειγμα, αν το τρέχον directory είναι το autolog:

$ qhmap work ./work

Ο υποκατάλογος work θα δημιουργηθεί αυτόματα κάτω από τον autolog. Η εντολή qhmap γράφει ένα αρχείο αρχικοποίησης, το οποίο καλείται quickvhdl.ini και περιγράφει το περιβάλλον εργασίας μας. Μπορούμε να ελένξουμε την ύπαρξη του work και του αρχείου .ini δίνοντας την εντολή ls στο unix prompt.

Κάνουμε compile το αρχείο VHDL , ορίζοντας το στάνταρ 93 σαν επιλογή

$ qvhcom –93 –synth –nosynchk <filename>.vhdl .

Μηνύματα που αφορούν την δουλειά του compiler, θα εμφανισθούν. Αν δεν υπάρχουν λάθη, τα μηνύματα θα δείξουν η οντότητα (entity) και η αρχιτεκτονική (architecture) έχουν γίνει compiled.

 

 

4. Σύνθεση

  1. Για να καλέσουμε το Autologic II πηγαίνουμε στον κατάλογο autolog και δίνουμε την εντολή : $ alui &.
  2. Για σχεδιάσεις verilog HDL δίνουμε την ίδια εντολή, αλλά δεν χρειάζεται να πάμε σε κάποιο συγκεκριμένο κατάλογο.

    Το βασικό παράθυρο του Autologic II θα εμφανισθεί

Eικόνα 1

 

3. Για σχεδιάσεις VHDL : Από το μενού του Autologic II επιλέγουμε : File ->Read New INI File και επιλέγουμε quickvhdl.ini.

4. Για VERILOG σχεδιάσεις επιλέγουμε : File -> Open -> Design και εμφανίζεται το παρακάτω παράθυρο

Εικόνα 2

 

Επιλέγουμε το όνομα της σχεδίασης και το File Format το επιλέγουμε ως Verilog

και κάνουμε κλικ στο ΟΚ. Αυτό θα συνθέσει την verilog σχεδίαση και στο τέλος

θα εμφανισθεί το παράθυρο Design browser.

Επιλέγουμε Setup > destination technology, και επιλέγουμε την βιβλιοθήκη

στόχο.

 

Εικόνα 3

 

Οι επόμενες τρεις διαδικασίες είναι μόνο για VHDL σχεδιάσεις :

  1. Ανοίγουμε την βιβλιοθήκη σχεδιάσεων (design library): File -> Open ->VHDL Library και επιλέγουμε work.

    Το παράθυρο VHDL Library Browser θα εμφανισθεί όπως φαίνεται στην εικόνα 4. Αυτό παρουσιάζει τις σχεδιαστικές μονάδες (design units) που περιέχονται στην βιβλιοθήκη work. Κάνοντας κλικ στο ‘+’ δίπλα από την κάθε οντότητα, μπορούμε να δούμε τις σχετιζόμενες αρχιτεκτονικές.

    Εικόνα 4

  2. Μέσα από το VHDL Library Browser, επιλέγουμε την οντότητα σχεδίασης (design entity) κάνοντας κλικ στην αντίστοιχη μπλε μπάλα για να κάνουμε την οντότητα ενεργή. Μπορούμε να ορίσουμε μία τεχνική κωδικοποίησης για μηχανές πεπερασμένων καταστάσεων και να ορίσουμε τιμές για όποια generics υπάρχουν στην σχεδίαση, επιλέγοντας : Synthesis -> VHDL Options.
  3. Μπορούμε να συνθέσουμε την σχεδίαση επιλέγοντας από το μενού του VHDL Design Browser : Synthesis -> Synthesize VHDL Design.

Πρέπει να δούμε τα μηνύματα που παρέχουν πληροφορίες για την σύνθεση και στο τέλος του τρεξίματος της σύνθεσης, θα ανοίξει αυτόματα το παράθυρο Design Browser, όπως φαίνεται στην εικόνα 5. Το παράθυρο που βλέπουμε αφορά ένα παράδειγμα ενός πλυντηρίου , το οποίο δίδεται αργότερα.

Εικόνα 5

 

Στο παράθυρο Design Browser το Current Root είναι library/cell/view. Για το παράδειγμά μας θα είναι work:new_wm:style_case.

Μπορούμε να διαλέξουμε αντικείμενα από το current root χρησιμοποιώντας το παράθυρο Netlist. Η λειτουργία των εικονιδίων είναι ίδια με το παράθυρο VHDL Library Browser. Επίσης μπορούμε να κάνουμε ενέργειες όπως σε ένα επιλεγμένο αντικείμενο, όπως : Reports -> Design -> Area.

 

5. Βελτιστοποίηση (Optimization)

Πριν κάνουμε βελτίωση (optimizing), πρέπει να σιγουρευτούμε ότι όλα τα αντικείμενα του Netlist είναι μη-επιλεγμένα. Από το παράθυρο Design Browser επιλέγουμε : Unselect All.

Για να κάνουμε map τις σχεδιάσεις μας στο Xilinx FPGA, πρέπει να προσθέσουμε Ι/Ο buffers σε όλες τις πόρτες. Από το μενού του Autologic II επιλέγουμε: Optimize -> Optimize ->Add/Remove IO και επιλέγουμε All ports και add. Στην συνέχεια προχωράμε όπως παρακάτω.

Για βελτιστοποίηση χώρου (optimize area) επιλέγουμε από το μενού του Autologic II : Optimize -> Optimize -> Area και εν συνεχεία την επιλογή για μικρή προσπάθεια (low effort). Η επιλογή για μεγαλύτερη προσπάθεια θα δώσει πιο βελτιωμένο χώρο αλλά παίρνει περισσότερο χρόνο. Για να ελένξουμε αν υπάρχουν τυχόν προβλήματα επιλέγουμε : Reports -> Design -> Area.

Για βελτιστοποίηση λειτουργίας (optimize for performance): Για να ορίσουμε το ρολόι, αν αυτό είναι εσωτερικό, το επιλέγουμε από το Netlist του παραθύρου Design Browser , κάνοντας κλικ στην αντίστοιχη μπλε μπάλα. Από το μενού του Autologic II επιλέγουμε : Constraints -> Add Constraints -> Clock και μπορούμε να δούμε ότι το πραγματικό και το ιδανικό ρολόι έχουν το ίδιο όνομα όπως το όνομα της επιλεγμένης πόρτας. Οι ορισμοί (definitions) μας θα ενσωματωθούν στην επιλεγμένη πόρτα. Αν από πριν είχαμε ορίσει και άλλα ιδανικά (ideal) ή πραγματικά ρολόγια, θα μπορούσαμε να ενσωματώσουμε ένα από αυτά στην επιλεγμένη πόρτα κάνοντας browsing στην λίστα των πιθανοτήτων (possibilities).

Μπορούμε να επαληθεύσουμε τον ορισμό του ρολογιού, επιλέγοντας από το μενού του Autologic II : Reports -> Constraints.

Για να δούμε τα αποτελέσματα της αναφοράς χρόνου (timing report) πριν από την βελτιστοποίηση, για να κάνουμε σύγκριση, επιλέγουμε από το μενού του Autologic II : Reports -> Design -> Timing Path.

Το default path είναι το worst timing path. Μπορούμε να επιλέξουμε multiple path για το path type.

Από το μενού του Autologic II επιλέγουμε : Optimize -> Optimize -> Timing. Διαλέγουμε την επιλογή low effort για να πάρουμε γρήγορα αποτελέσματα. Το παράθυρο Design Browser θα ανανεωθεί (refreshed).Για να ελένξουμε αν υπάρχει κάποιο πρόβλημα, επιλέγουμε : Reports -> Design ->Timing.

Μπορούμε να μετατρέψουμε το constraints κάθε πόρτας, από την επιλογή Netlist του παραθύρου Design Browser και να κάνουμε πάλι την αναφορά (report).

Για να δούμε το σχηματικό από το μενού του Autologic II επιλέγουμε :

Report -> schematic -> window.

Το παράθυρο Schematic θα εμφανισθεί, όπως φαίνεται στην εικόνα 6.

Εικόνα 6

 

 

6. Αποθήκευση της σχεδίασης

  1. Από το μενού του Autologic II επιλέγουμε : File -> Save -> Design με option GN. Navigate στο netlist dir and enter <entity name>.gn . Η σχεδίαση θα αποθηκευθεί στο αρχείο netlist/<entity name>.gn το οποίο μπορούμε να δούμε με έναν κειμενογράφο. Η σχεδίαση μπορεί να φορτωθεί την επόμενη φορά, καλώντας το Autologic II, επιλέγοντας : File -> Open -> Design και δίνοντας netlist/<entity name>.gn .
  2. Για να σώσουμε σε μορφή VHDL, διαλέγουμε την επιλογή VHDL.
  3. Για να σώσουμε σε μορφή Verilog, διαλέγουμε την επιλογή Verilog.
  4. Μπορούμε να σώσουμε την σχεδίαση σαν EDDM netlist ή σχηματικό για να τα χρησιμοποιήσουμε στο Design Architect ή στο QuickSim II. Μπορούμε να ορίσουμε το schematic setup επιλέγοντας από το Autologic μενού :

    Setup -> Schematic Option

    Εξ ορισμού ο μέγιστος αριθμός instances per schematic sheet είναι 80, το μέγεθος του χαρτιού είναι Α και μία σελίδα ανά σχηματικό, έτσι ώστε πρέπει να δώσουμε 1 στην επιλογή Numsheet αν θέλουμε να τυπωθεί ολόκληρο το σχηματικό σε μία σελίδα.

  5. Από το μενού του Autologic II επιλέγουμε : File -> Save -> EDDM. Εξ ορισμού το όνομα που βλέπουμε (view name) είναι το όνομα του μοντέλου. Επιλέγουμε Map to Original Component και Generate Schematic.
  6. Για να βγούμε από το Autologic II, πληκτρολογούμε quit –f στην γραμμή διαταγών ή από το παράθυρο του Autologic II επιλέγουμε: File -> Quit.

 

 

7. Εξομοίωση και Layout

Εξομοίωση EDDM σχηματικού χρησιμοποιώντας το QuickSim II:

Καλούμε το Mentor Graphics Design Manager, και κάνουμε κλικ στο εικονίδιο DVE. Τρέχουμε το DVE και σώζουμε το Design Viewpoint πριν καλέσουμε το QuickSimII. Αν θέλουμε να δούμε το σχηματικό πάμε στο Design_arch, κάνουμε κλικ στο DESIGN SHEET στο Session_Pallete και πάμε (navigate) στην σχεδίασή μας και κάνουμε κλικ στο ΟΚ.

Standard Cell Autolayout:

Καλούμε το IC station κάνοντας κλικ στο εικονίδιο cmosn_ic του Design Manager.

 

 

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

Παρακάτω είναι ένα παράδειγμα πηγαίου αρχείου, μίας σχεδίασης ενός ελενκτή πλυντηρίου, το οποίο ονομάζεται 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 ;

 

 

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