Κάνοντας το UVM ταχύτερο μέσω ενός νέου συστήματος διαμόρφωσης - Semiwiki

Κάνοντας το UVM ταχύτερο μέσω ενός νέου συστήματος διαμόρφωσης – Semiwiki

Κόμβος πηγής: 3036575

Η καθολική μεθοδολογία επαλήθευσης (UVM) είναι ένας δημοφιλής τρόπος για να βοηθήσει στην επαλήθευση των σχεδίων του SystemVerilog και περιλαμβάνει σύστημα διαμόρφωσης που δυστυχώς έχει κάποια προβλήματα ταχύτητας και χρήσης. Ο Rich Edelman από τη Siemens EDA έγραψε μια λεπτομερή εργασία 20 σελίδων σχετικά με το πώς να αποφύγετε αυτά τα ζητήματα, και το έχω διαβάσει για να συνοψίσω τα κυριότερα σημεία για εσάς. Οι μηχανικοί επαλήθευσης χρησιμοποιούν μια βάση δεδομένων διαμόρφωσης UVM για να ορίσουν τιμές και, στη συνέχεια, να λάβουν τις τιμές αργότερα στη δοκιμή UVM. Ένα παράδειγμα ρύθμισης και λήψης τιμής "T" είναι:

uvm_config#(T)::set(scope, instance_path_name, field_name, value); uvm_config#(T)::get(scope, instance_path_name, field_name, value);

Η σύνδεση του πάγκου δοκιμών UVM με τη συσκευή υπό δοκιμή χρησιμοποιεί τη βάση δεδομένων διαμόρφωσης για να περάσει τις εικονικές διεπαφές. Υπάρχουν τρία προβλήματα με τη χρήση της διαμόρφωσης UVM:

  • Μεγάλος κώδικας, περίπου 2,600 γραμμές κώδικα
  • Απαιτεί ακριβή αντιστοίχιση τύπου, επομένως το "int" και το "bit" δεν είναι το ίδιο
  • Αργός κώδικας

Σκεφτείτε την περίπτωση του αργού κώδικα, γιατί με χιλιάδες κλήσεις για set() η χρήση ονομάτων με χαρακτήρες μπαλαντέρ μπορεί να διαρκέσει έως και 30 λεπτά για να ολοκληρωθεί η φάση «set» και «get».

Χρόνος που έχει παρέλθει ελάχ

Η Rich προτείνει μια νέα λύση στις διαμορφώσεις UVM που έχει πολύ μεγαλύτερες ταχύτητες, απαιτώντας μόνο λίγα δευτερόλεπτα σε σύγκριση.

νέα λύση min

Εάν ο κωδικός UVM σας αποφεύγει τη χρήση χαρακτήρων μπαλαντέρ και έχει λίγες εντολές 'set', τότε ο κώδικάς σας θα εκτελεστεί πιο γρήγορα.

Πιθανές λύσεις στα ζητήματα διαμόρφωσης UVM είναι:

  • Χρησιμοποιήστε μια καθολική μεταβλητή
  • Χρησιμοποιήστε τη διαμόρφωση UVM με ένα σύνολο()
  • Χρησιμοποιήστε τη διαμόρφωση UVM με λίγα set()
  • Χρησιμοποιήστε ένα δέντρο διαμόρφωσης
  • Δοκιμάστε κάτι διαφορετικό

Αυτή η τελευταία προσέγγιση για να δοκιμάσετε κάτι διαφορετικό είναι η νέα λύση και συνεχίζει να χρησιμοποιεί το API set() και get(), στη συνέχεια απλοποιεί καταργώντας την παραμετροποίηση των διαμορφώσεων, αφαιρεί την προτεραιότητα και καταργεί την αλλαγή αλγορίθμου αναζήτησης. Τα αποτελέσματα αυτής της νέας προσέγγισης είναι γρήγορες ταχύτητες.

Το νέο σας στοιχείο διαμόρφωσης ορίζεται στην προκύπτουσα κλάση από το 'config_item' και το παρακάτω παράδειγμα δείχνει την 'int value' ως την ιδιότητα που ορίζεται. Για σκοπούς εντοπισμού σφαλμάτων, προσθέτετε τη λειτουργία όμορφης εκτύπωσης.

Η κλάση my_special_config_item επεκτείνει το config_item. function new(όνομα συμβολοσειράς = "my_special_config_item"); super.new(όνομα); endfunction int τιμή? συμβολοσειρά εικονικής συνάρτησης convert2string(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string()); endfunction endclass

Το 'config_item' έχει ένα χαρακτηριστικό name και αυτό το όνομα αναζητείται, συν το όνομα της παρουσίας. Το αντικείμενο διαμόρφωσης έχει επίσης μια συνάρτηση get_name() για να επιστρέψει το όνομα. Για να βρείτε οποιοδήποτε "instance_name.field_name" η βάση δεδομένων διαμόρφωσης χρησιμοποιεί έναν συσχετιστικό πίνακα για γρήγορη αναζήτηση και ταχύτητες δημιουργίας.
Για την ιχνηλασιμότητα, μπορείτε να μάθετε ποιος ορίζει ή ποιος κάλεσε το get, επειδή το όνομα αρχείου και ο αριθμός γραμμής είναι πεδία στις κλήσεις της συνάρτησης set() και get().

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

Η ουρά του Accessor μπορεί να εκτυπωθεί κατά τη διάρκεια του εντοπισμού σφαλμάτων για να δούμε ποιος κάλεσε τη set() και την get().

Για την υποστήριξη χαρακτήρων μπαλαντέρ απαιτείται η προσθήκη ενός μηχανισμού αναζήτησης με χρήση κοντέινερ. Εξετάστε το όνομα της παρουσίας 'top.abcd*_0'.

δέντρο δοχείου ελάχ
Δέντρο κοντέινερ

Ο χειρισμός του τμήματος μπαλαντέρ του ονόματος της παρουσίας γίνεται χρησιμοποιώντας το δέντρο κοντέινερ, αντί του συσχετιστικού πίνακα.

Χαρακτηριστικά

Η κοινή χρήση δεδομένων μεταξύ της λειτουργικής μονάδας/παρουσίασης και του κόσμου που βασίζεται στην κλάση σε έναν πάγκο δοκιμών UVM μπορεί να γίνει χρησιμοποιώντας τη βάση δεδομένων διαμόρφωσης UVM, απλώς έχετε υπόψη σας τις επιβραδύνσεις της ταχύτητας. Εάν η μεθοδολογία σας χρησιμοποιεί πολλές διαμορφώσεις, τότε εξετάστε το ενδεχόμενο να χρησιμοποιήσετε τη νέα προσέγγιση που εισήχθη η οποία έχει ένα πακέτο που χρησιμοποιεί περίπου 300 γραμμές κώδικα αντί για τις 2,600 γραμμές κώδικα στο αρχείο βάσης δεδομένων διαμόρφωσης UVM.

Διαβάστε το πλήρες έγγραφο 20 σελίδων, Αποφυγή τρέλας διαμόρφωσης Ο εύκολος τρόπος στη Siemens EDA.

Σχετικά ιστολόγια

Μοιραστείτε αυτήν την ανάρτηση μέσω:

Σφραγίδα ώρας:

Περισσότερα από Semiwiki