Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Διαφορές μεταξύ των περιγραφών συνδυαστικών και ακολουθιακών κυκλωμάτων

Σχετικά έγγραφα
Γλώσσες Περιγραφής Υλικού Ι

Σχεδίαση Ψηφιακών Κυκλωμάτων

Γλώσσες Περιγραφής Υλικού Ι

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων. Ορισμοί για τις χρονικές καθυστερήσεις διάδοσης. Συνδυαστική και ακολουθιακή λογική

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Μηχανές Πεπερασμένων Καταστάσεων: Εισαγωγή και.

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Ανασκόπηση ϑεμάτων παλαιών εξετάσεων του μαθήματος. Περιεχόμενο εξετάσεων

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Περισσότερα για τα αρθρώματα Αναθέσεις και τελεστές Συντρέχων κώδικας

Γλώσσες Περιγραφής Υλικού Ι

Σκιαγράφηση της διάλεξης. Ανάθεση σε VARIABLE. Ανάθεση σε SIGNAL. identifier := expression; Συντρέχων και ακολουθιακός κώδικας


Σκιαγράφηση της διάλεξης. Μηχανές Πεπερασμένων Καταστάσεων: Εισαγωγή και.


Γλώσσες Περιγραφής Υλικού Ι

Η δήλωση `ifdef...`else...` endif

Αποδεικτικές Διαδικασίες και Μαθηματική Επαγωγή.

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Γενικά χαρακτηριστικά του επεξεργαστή MU0. Προγραμματιζόμενοι επεξεργαστές

Γλώσσες Περιγραφής Υλικού Ι. Εισαγωγικά. Οργάνωση των παραδόσεων. 1 Εισαγωγή στη Verilog HDL. 28 Φεβρουαρίου 2012

ΨΗΦΙΑΚΑ ΗΛΕΚΤΡΟΝΙΚΑ Σχεδίαση Λογικών Κυκλωμάτων

Σχεδίαση Ψηφιακών Κυκλωμάτων

Οι γέφυρες του ποταμού... Pregel (Konigsberg)

Συναρτήσεις. Σημερινό μάθημα

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων. Εισαγωγικά. Δομές ακολουθιακού και συντρέχοντος κώδικα

Γλώσσες Περιγραφής Υλικού Ι

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι (1) Μη προγραμματιζόμενοι επεξεργαστές

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων. Αρχιτεκτονικά χαρακτηριστικά των συσκευών Xilinx Spartan-3.

Σχεδίαση Ψηφιακών Κυκλωμάτων

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων. Απαριθμητοί τύποι δεδομένων (enumerated data types)

Ψηφιακή Εικόνα. Σημερινό μάθημα!

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 2


ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ

Σχεδίαση Ψηφιακών Κυκλωμάτων

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων. Ο πλήρης αθροιστής (full adder) Κυκλωματικός σχεδιασμός του πλήρους αθροιστή.

Σχεδίαση Ψηφιακών Κυκλωμάτων

Σκιαγράφηση της διάλεξης. Η εντολή ASSERT (2)

Γλώσσες Περιγραφής Υλικού. Εισαγωγικά. Οργάνωση των παραδόσεων. 02 Ιουνίου 2009

Αναγνώριση Προτύπων. Σήμερα! Λόγος Πιθανοφάνειας Πιθανότητα Λάθους Κόστος Ρίσκο Bayes Ελάχιστη πιθανότητα λάθους για πολλές κλάσεις

ΠΑΝΕΠΙΣΤΗΜΙΑΚΑ ΦΡΟΝΤΙΣΤΗΡΙΑ ΚΟΛΛΙΝΤΖΑ ΜΑΘΗΜΑ: ΟΙΚΟΝΟΜΙΚΗ ΘΕΩΡΙΑ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο


Ας υποθέσουμε ότι ο παίκτης Ι διαλέγει πρώτος την τυχαιοποιημένη στρατηγική (x 1, x 2 ), x 1, x2 0,

Εξαναγκασμένες ταλαντώσεις, Ιδιοτιμές με πολλαπλότητα, Εκθετικά πινάκων. 9 Απριλίου 2013, Βόλος

Συναρτήσεις & Κλάσεις

ΣΤΟ ΙΑΤΡΕΙΟ. Με την πιστοποίηση του αποκτά πρόσβαση στο περιβάλλον του ιατρού που παρέχει η εφαρμογή.

Σκιαγράφηση της διάλεξης. Η έννοια του πακέτου (PACKAGE) στη VHDL. Σύνταξη ενός πακέτου. Σύνταξη παραμετρικών περιγραφών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

ΣΤΟ ΦΑΡΜΑΚΕΙΟ. Με την πιστοποίηση του έχει πρόσβαση στο περιβάλλον του φαρμακείου που παρέχει η εφαρμογή.

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος


Ταξινόμηση των μοντέλων διασποράς ατμοσφαιρικών ρύπων βασισμένη σε μαθηματικά κριτήρια.

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Μούλου Ευγενία

Δ Ι Α Κ Ρ Ι Τ Α Μ Α Θ Η Μ Α Τ Ι Κ Α. 1η σειρά ασκήσεων

Σχέσεις και ιδιότητές τους

Pointers. Σημερινό Μάθημα! Χρήση pointer Τελεστής * Τελεστής & Γενικοί δείκτες Ανάκληση Δέσμευση μνήμης new / delete Pointer σε αντικείμενο 2

ΘΕΜΑ: Aποτελεσματικότητα της νομισματικής και δημοσιονομικής πολιτικής σε μια ανοικτή οικονομία

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Ημέρα 3 η. (α) Aπό την εργασιακή διαδικασία στη διαδικασία παραγωγής (β) Αξία του προϊόντος και αξία της εργασιακής δύναμης

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων.

HY430 Εργαστήριο Ψηφιακών Κυκλωμάτων. Πολυπλέκτες Καμπύλη Παρέτο. Κωδικοποιητές/Από-κωδικοποιητές D FF

Σχεδίαση Ψηφιακών Κυκλωμάτων

ΣΧΟΛΙΚΟ ΕΤΟΣ ΕΥΘΥΓΡΑΜΜΗ ΟΜΑΛΗ ΚΙΝΗΣΗ ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΕΞΕΤΑΣΗ ΣΤΗ ΦΥΣΙΚΗ A ΛΥΚΕΙΟΥ. Ονοματεπώνυμο Τμήμα

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων. Εισαγωγή στις προγραμματιζόμενες συσκευές (2)

ΜΑΘΗΜΑ: ΟΙΚΟΝΟΜΙΚΗ ΘΕΩΡΙΑ

Έννοια. Η αποδοχή της κληρονομίας αποτελεί δικαίωμα του κληρονόμου, άρα δεν

Συναρτήσεις ΙΙ. Σημερινό μάθημα

Προτεινόμενα θέματα στο μάθημα. Αρχές Οικονομικής Θεωρίας ΟΜΑΔΑ Α. Στις προτάσεις από Α.1. μέχρι και Α10 να γράψετε στο τετράδιό σας τον αριθμό της

τεσσάρων βάσεων δεδομένων που θα αντιστοιχούν στους συνδρομητές

Σκιαγράφηση της διάλεξης. Η οργάνωση ενός μη-προγραμματιζόμενου επεξεργαστή (1) Μη προγραμματιζόμενοι επεξεργαστές

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Διαιρέτης ρολογιού (clock divider) Ειδικά κυκλώματα

Γλώσσες Περιγραφής Υλικού Ι

Μεταγλωττιστές ΙΙ. Καταμερισμός καταχωρητών. Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Γλώσσες Περιγραφής Υλικού


Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Χρήση τελεστών σε αναθέσεις. Σύνταξη κώδικα στη Verilog HDL: Βασικές συμβάσεις.

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Κληρονομικότητα. Σήμερα! Κλάση Βάσης Παράγωγη κλάση Απλή κληρονομικότητα Protected δεδομένα Constructors & Destructors overloading

Γλώσσες Περιγραφής Υλικού Ι

Σκιαγράφηση της διάλεξης

( ιμερείς) ΙΜΕΛΕΙΣ ΣΧΕΣΕΙΣ Α Β «απεικονίσεις»

ΑΣΚΗΣΗ 2: Σχεδίαση και προσομοίωση κυκλωμάτων καταχωρητών και μετρητών

ΜΑΘΗΜΑ: ΓΕΝΙΚΟ ΔΙΟΙΚΗΤΙΚΟ ΔΙΚΑΙΟ ΔΙΚΑΣΤΩΝ

Μετρητής Ριπής ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ. Αναφορά 9 ης. εργαστηριακής άσκησης: ΑΦΡΟΔΙΤΗ ΤΟΥΦΑ Α.Μ.:

Ευρωπαϊκά παράγωγα Ευρωπαϊκά δικαιώματα

Μεταγλωττιστές ΙΙ. Γέννηση ενδιάμεσης αναπαράστασης. 10 Νοεμβρίου Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Μονάδες α. Να γράψετε στο τετράδιό σας τον παρακάτω πίνακα σωστά συµπληρωµένο.

Εισαγωγικά. 1.1 Η σ-αλγεβρα ως πληροφορία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

Βελτίωση Εικόνας. Σήμερα!

Επίλυση δικτύων διανομής

ΠΑΝΕΠΙΣΤΗΜΙΑΚΑ ΦΡΟΝΤΙΣΤΗΡΙΑ ΚΟΛΛΙΝΤΖΑ ΜΑΘΗΜΑ: ΕΡΩΤΗΣΕΙΣ ΟΙΚΟΝΟΜΙΚΗΣ ΘΕΩΡΙΑΣ

ΜΑΘΗΜΑ: ΒΙΟΛΟΓΙΑ ΟΜΑΔΑ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ Γ ΛΥΚΕΙΟΥ

VERILOG. Γενικά περί γλώσσας

21/11/2005 Διακριτά Μαθηματικά. Γραφήματα ΒΑΣΙΚΗ ΟΡΟΛΟΓΙΑ : ΜΟΝΟΠΑΤΙΑ ΚΑΙ ΚΥΚΛΟΙ Δ Ι. Γεώργιος Βούρος Πανεπιστήμιο Αιγαίου

Γραμμική Ανεξαρτησία. Τμήμα Μηχανικών Η/Υ Τηλεπικοινωνιών και ικτύων Πανεπιστήμιο Θεσσαλίας. 17 Μαρτίου 2013, Βόλος

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων

{ i f i == 0 and p > 0

ΗΥ-225. Verilog HDL. Τα βασικά...

Τρίτη, 05 Ιουνίου 2001 ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ Γ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΡΧΕΣ ΟΙΚΟΝΟΜΙΚΗΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑ ΕΠΙΛΟΓΗΣ Γ ΛΥΚΕΙΟΥ

ΣΥΝΟΛΑ (προσέξτε τα κοινά χαρακτηριστικά των παρακάτω προτάσεων) Οι άνθρωποι που σπουδάζουν ΤΠ&ΕΣ και βρίσκονται στην αίθουσα

Transcript:

Σκιαγράφηση της διάλεξης Γλώσσες Περιγραφής Υλικού Ι Μοντελοποίηση ακολουθιακών κυκλωμάτων Νικόλαος Καββαδίας nkavv@uop.gr 13 Μαρτίου 2012 Στοιχεία ακολουθιακής σχεδίασης με Verilog HDL Λίστα ευαισθησίας και ακμοπυροδότηση Flip-flop και μανδαλωτές Blocking και nonblocking αναθέσεις σε μπλοκ always Παραδείγματα σχεδίασης ακολουθιακών κυκλωμάτων Το flip-flop τύπου D Ο D μανδαλωτής flip-flop τύπου JK και T Καταχωρητής Απαριθμητής πάνω/κάτω (up-down counter) Καταχωρητής ολίσθησης Απαριθμητής για το σύστημα BCD (Binary-Coded Decimal) Διαφορές μεταξύ των περιγραφών συνδυαστικών και ακολουθιακών κυκλωμάτων Βασικά στοιχεία ακολουθιακής λογικής: Μανδαλωτές και καταχωρητές (flip-flop) Συνδυαστικά κυκλώματα Δεν ενεργοποιούνται από ακμοπυροδότηση εξωτερικού σήματος αλλά μόνο από τις αλλαγές στη στάθμη των σημάτων εισόδου Η λειτουργία τους δεν επηρεάζεται από το σήμα ρολογιού Ακολουθιακά κυκλώματα Ενεργοποιούνται κατά τη ϑετική ή αρνητική ακμοπυροδότηση του ρολογιού Στη λίστα ευαισθησίας εμφανίζεται μόνο το σήμα ρολογιού και πιθανώς και ένα σήμα επανατοποθέτησης (reset) Μπορεί να περιλαμβάνουν συνδυαστική λογική η οποία παράγει αποτελέσματα για εγγραφή σε καταχωρητές (flip-flop) Μανδαλωτής (latch): απόκριση με ευαισθησία επιπέδου (level-sensitive) Αποθηκεύει δεδομένα π.χ. όταν το σήμα clk είναι σε υψηλή στάθμη Καταχωρητής (register): ακμοπυροδότητο στοιχείο (edge-triggered) Αποθηκεύει δεδομένα π.χ. κατά την ανερχόμενη ακμή του ρολογιού

Σήματα ρολογιού και flip-flop Λίστα ευαισθησίας (sensitivity list) Τα σήματα ρολογιού δεν είναι τυπικά σήματα εισόδου σε ένα υποκύκλωμα Διαδίδονται μέσα από το δίκτυο διάδοσης ρολογιού (clock distribution network) Χρειάζονται ειδική καλωδίωση για τη διάδοση τους σε απομακρυσμένα σημεία του ολοκληρωμένου, διορθώνοντας τυχόν ανεπιθύμητες χρονικές καθυστερήσεις h Δεν χρησιμοποιούμε τα σήματα ρολογιού σε λογικές εκφράσεις Αντί αυτού προσθέτουμε μία είσοδο ενεργοποίησης ρολογιού (clock enable) στο flip-flop Από τους γνωστούς τύπους flip-flop (RS, JK, T, D) στις περισσότερες σχεδιάσεις χρησιμοποιείται ο τύπος D Σε ορισμένες σχεδιάσεις εξειδικευμένων μετρητών χρησιμοποιούνται τα flip-flop JK και T Η λίστα ευαισθησίας αποτελεί κατάλογο εισόδων και εσωτερικών σημάτων για μεταβολές των οποίων ένα μπλοκ always υποχρεούται να αναμένει Αν έχουμε περισσότερα από ένα σήματα στη λίστα, τα διαχωρίζουμε με τη λέξη-κλειδί or i Αν ένα σήμα στη λίστα χρησιμοποιεί ακμοπυροδότηση, τότε όλα τα υπόλοιπα πρέπει να δηλωθούν και αυτά με ακμοπυροδότηση Παράδειγμα 1: always @(a or b) if (a!= b) cond = 1 b1; cond = 1 b0; Παράδειγμα 2: βρείτε το λάθος always @(a) if (a == 1 b1) temp = temp; Ευαισθησία επιπέδου (level sensitivity) και ακμοπυροδότηση (edge triggering) Εντολή WAIT Οι μεταβολές των σημάτων που δηλώνονται σε μία λίστα ευαισθησίας και οι οποίες ενεργοποιούν τον υπολογισμό μεταβλητών και σημάτων σε μία always είναι δύο τύπων: Μεταβολή επιπέδου (για σήματα επίτρεψης/ενεργοποίησης και δεδομένα) Ανερχόμενη ή κατερχόμενη ακμή (για σήματα ρολογιού) Μανδαλωτής (μεταβολή επιπέδου) always @(en or a) if (en == 1 b1) temp = a; Συγχρονισμός ως προς ανερχόμενη ακμή temp = a; // or temp = a; Z Οι εκφράσεις posedge και negedge είναι ΑΛΗΘΕΙΣ όταν έχει συμβεί μεταβολή (0 1 ή 1 0, αντίστοιχα) στο σήμα clk i Για τα περισσότερα εργαλεία σύνθεσης, τα σήματα εκτός του clk και του reset (αν υπάρχει) συνηθίζεται να παραλείπονται από μια λίστα ευαισθησίας (για ακολουθιακές always) Χρησιμοποιείται για τη δήλωση ευαισθησίας επιπέδου Οταν χρησιμοποιείται η WAIT, δεν γίνεται χρήση λίστας ευαισθησίας Σύνταξη της WAIT: wait (<signal_name>) statement; Παράδειγμα always wait (count_enable) #20 count = count + 1; Οταν το count_enable γίνει 1, η δήλωση count = count + 1; εκτελείται μετά από 20 time units Καθόσον η count_enable παραμένει στο 1, η count αυξάνεται κατά 1 κάθε 20 t.u.

Διαφορά μεταξύ blocking και nonblocking αναθέσεων σε μία always (1) Διαφορά μεταξύ blocking και nonblocking αναθέσεων σε μία always (2) Οι αναθέσεις με τον τελεστή = ονομάζονται blocking και εκτελούνται ακολουθιακά Εάν είναι επιθυμητό εντός μίας always να επιτρέψουμε την παράλληλη εκτέλεση κάποιων δηλώσεων, χρησιμοποιούμε τον τελεστή <= ο οποίος δηλώνει μία nonblocking ανάθεση Παράδειγμα: Τρεις παράλληλες αναθέσεις κατά τη ϑετική ακμή του ρολογιού always @(posedge clock) reg1 <= in1; reg2 <= in2 ˆ in3; reg3 <= reg1; // Old value of reg1 Z Οι τελικές τιμές των reg1, reg2, reg3 δεν εξαρτώνται από τη σχετική σειρά των αναθέσεων Nonblocking assignment a <= in; b <= a; c <= b; Ολες οι αναθέσεις εκτελούνται ακριβώς την ίδια χρονική στιγμή Σε κάθε ανερχόμενη ακμή του ρολογιού, το a παίρνει την ΠΑΛΙΑ τιμή του in, το b αυτήν του a και το c αυτήν του b Θεωρούμε ότι τοποθετείται ένας καταχωρητής μετά από κάθε δήλωση Blocking assignment a = in; b = a; c = b; Άμεσος υπολογισμός και ανάθεση των δεξιών μελών Ολες οι αναθέσεις γίνονται διαδοχικά στην ίδια περίοδο ρολογιού Θεωρούμε ότι αντιστοιχεί σε έναν καταχωρητή με πολλές ίδιες εξόδους ή σε πολλούς παράλληλους καταχωρητές Διαφορά μεταξύ blocking και nonblocking αναθέσεων σε μία always (3) Απλά ακολουθιακά κυκλώματα: Flip-flop τύπου D Χαρακτηριστική εξίσωση: Q(t + 1) = D Οι blocking αναθέσεις μπορεί να δημιουργήσουν προβλήματα εάν ο κώδικας περιλαμβάνει πολλαπλά μπλοκ λογικής always Με τις nonblocking αναθέσεις υποδηλώνονται εσωτερικά στάδια διοχέτευσης σε μία always και έτσι είναι χρήσιμες π.χ. για την περιγραφή καταχωρητών ολίσθησης i Οι blocking αναθέσεις χρησιμοποιούνται για τη μοντελοποίηση συνδυαστικών μπλοκ always i Οι nonblocking αναθέσεις χρησιμοποιούνται για τη μοντελοποίηση ακολουθιακών μπλοκ always Περιγραφή D-type flip-flop του 1-bit module dff(clk, d, q); input clk; input d; reg q; q <= d; module Διάγραμμα χρονισμού του κυκλώματος Σχηματικό διάγραμμα

Αρχείο ελέγχου/επαλήθευσης (testbench) για το D flip-flop timescale 1 ns / 1 ns module main; reg clk, d; wire q; dff test(.clk(clk),.d(d),.q(q)); // Test clock generation. // // Clock pulse starts from 0. initial clk = 1 b0; // Free -running clock always #25 clk = clk; initial #10 d = 1 b0; #50 d = 1 b1; #150 d = 1 b0; #50 $stop; initial $monitor("%t: d=%b, q=%b", $time, d, q); module Καταχωρητής με ασύγχρονη και σύγχρονη επαναφορά (reset) Ασύγχρονη επαναφορά module dff(clk, rst, d, q); input clk; input rst; input d; reg q; always @(posedge clk or negedge rst) if (rst == 1 b1) q <= 1 b0; q <= d; module Σχηματικό διάγραμμα Σύγχρονη επαναφορά module dff(clk, rst, d, q); input clk; input rst; input d; reg temp; if (rst == 1 b1) temp <= 1 b0; temp <= d; assign q = temp; module Καταχωρητής με επίτρεψη φόρτωσης (load enable) Μανδαλωτής (latch) τύπου D Με επίτρεψη φόρτωσης module dff(clk, rst, en, d, q); input clk, rst, en; reg temp; if (rst == 1 b1) temp <= 1 b0; if (en == 1 b1) temp <= d; assign q = temp; module Σχηματικό διάγραμμα Πολύ συχνά σε μία ψηφιακή σχεδίαση εισάγονται ανεπιθύμητοι μανδαλωτές από κάποιο σφάλμα του σχεδιαστή (π.χ. μη χρήση ακμοπυροδότησης σε ένα D flip-flop ή λόγω υπονοούμενης αποθήκευσης) Υπονοούμενη αποθήκευση δημιουργείται όταν δεν δηλώνουμε όλες τις περιπτώσεις μίας IF ή CASE σε συνδυαστικό κώδικα Περιγραφή D-type latch του 1-bit module dlatch(guard, d, q); input guard; input d; reg q; always @(guard or d) if (guard == 1) q <= d; module

Flip-flop τύπου JK Μια γενική περιγραφή του JK flip-flop Με τη βοήθεια δύο ξεχωριστών εισόδων (J, K), το JK flip-flop υλοποιεί τρεις βασικές λειτουργίες: Τοποθέτηση της κατάστασης στο 1 Επανατοποθέτηση στο 0 Διατήρηση της τρέχουσας κατάστασης Αντιστροφή της τρέχουσας κατάστασης Χαρακτηριστική εξίσωση: Q(t + 1) = JQ + K Q module jkff(j, K, clk, Q, Q_b); input J, K, clk; output Q, Q_b; reg Q; case ({J, K}) 2 b00: Q <= Q; 2 b01: Q <= 1 b0; 2 b10: Q <= 1 b1; 2 b11: Q <= Q; case Πίνακας διέγερσης του JK-ff Υλοποίηση του JK-ff με βάση το D-ff assign Q_b = Q; module Διάγραμμα χρονισμού του κυκλώματος Flip-flop τύπου T Μία γενική περιγραφή του T flip-flop Το T flip-flop μεταβάλλει την κατάστασή του κάθε φορά που αλλάζει το σήμα στην είσοδο Τ Χαρακτηριστική εξίσωση: Q(t + 1) = Q T Υλοποίηση με βάση το JK flip-flop Υλοποίηση με βάση το D flip-flop Περιγραφή T flip-flop module tff (Q, T, clk, rst); output Q; input T, clk, rst; reg Q; if (rst == 1 b1) Q <= 1 b0; if (T == 1 b1) Q <= Q; module Διάγραμμα χρονισμού του κυκλώματος i Τα JK και T flip-flop χρησιμοποιούνται ορισμένες φορές σε σχεδιάσεις μετρητών για μη-δυαδικές ακολουθίες

Καταχωρητής (register) Ο καταχωρητής αποτελεί το πιο συχνά χρησιμοποιούμενο δομικό στοιχείο σε μία ψηφιακή σχεδίαση στο επίπεδο RTL Ως εσωτερικό στοιχείο αποθήκευσης, συνήθως χρησιμοποιείται το D flip-flop Η είσοδος DIN προσφέρει είσοδο για παράλληλη αποθήκευση νέων δεδομένων στον καταχωρητή Τα περιεχόμενα του καταχωρητή αλλάζουν μόνο στην περίπτωση που LD = 1 σε ανερχόμενη ακμή του ρολογιού Περιγραφή ενός 8-bit καταχωρητή στη Verilog (ασύγχρονο reset) module register8 (clk, reset, ld, din, dout); input clk, reset, ld; input [7:0] din; output [7:0] dout; reg[7:0] dout; // Use of asynchronous reset always @(posedge clk or posedge reset) if (reset == 1 b1) dout <= 0; // Change register state on rising edge and assertion of load line if (ld == 1 b1) dout <= din; module Διάγραμμα χρονισμού Περιγραφή ενός 8-bit καταχωρητή στη Verilog (σύγχρονο reset) Απαριθμητής πάνω/κάτω (up-down counter) module register8 (clk, reset, ld, din, dout); input clk, reset, ld; input[7:0] din; output [7:0] dout; reg[7:0] dout; // Use of synchronous reset if (reset == 1 b1) dout <= 0; // Change register state on rising edge and // assertion of load line if (ld == 1 b1) dout <= din; module Η σχεδίαση ενός απαριθμητή βασίζεται στο μοντέλο του καταχωρητή με την προσθήκη ενός αθροιστή/αφαιρέτη Η είσοδος U_D καθορίζει τον τρόπο μεταβολής της κατάστασης του απαριθμητή Η λειτουργία του απαριθμητή είναι ενεργή μόνο για EN = 1 Η είσοδος DIN προσφέρει είσοδο για παράλληλη αποθήκευση νέων δεδομένων στον εσωτερικό καταχωρητή Η επίτρεψη αποθήκευσης (LD) έχει προτεραιότητα έναντι της EN

Περιγραφή ενός up-down counter Καταχωρητής ολίσθησης (shift register) module up_down_counter8 (clk, reset, ld, en, ud, din, dout); input clk, reset, ld, en, ud; input [7:0] din; output [7:0] dout; reg[7:0] dout; always @(posedge clk or posedge reset) if (reset) dout <= 0; if (ld) dout <= din; if ((en) && (ud)) dout <= dout + 1; if ((en) && ( ud)) dout <= dout - 1; dout <= dout; module Διάγραμμα χρονισμού Ο καταχωρητής ολίσθησης διαθέτει μία είσοδο EN, η οποία όταν είναι ενεργή πραγματοποιείται αριστερή (δεξιά) ολίσθηση των περιεχομένων του καταχωρητή κατά μία ϑέση Η είσοδος SIN εισάγεται είτε στο LSB ενός αριστερού ολισθητή είτε στο MSB ενός δεξιού ολισθητή Η είσοδος DIN προσφέρει είσοδο για παράλληλη αποθήκευση νέων δεδομένων στον εσωτερικό καταχωρητή Η επίτρεψη αποθήκευσης (LD) έχει προτεραιότητα έναντι της EN Περιγραφή ενός shift register με ολίσθηση προς τα αριστερά Αποτελέσματα από την προσομοίωση του left shift register module left_shift_register8(clk, reset, ld, en, sin, din, dout); input clk, reset, ld, en, sin; input[7:0] din; output [7:0] dout; reg[7:0] dout; always @(posedge clk or posedge reset) if (reset) dout <= 0; if (ld) dout <= din; if (en) dout <= {dout[6:0], sin}; dout <= dout; module 0: reset=x, ld=x, en=x, sin=x, din=xxxxxxxx, dout=xxxxxxxx 10: reset=1, ld=0, en=0, sin=0, din=00000000, dout =00000000 60: reset=0, ld=1, en=1, sin=1, din=10100101, dout =00000000 75: reset=0, ld=1, en=1, sin=1, din=10100101, dout =10100101 110: reset=0, ld=0, en=1, sin=0, din=10100101, dout =10100101 125: reset=0, ld=0, en=1, sin=0, din=10100101, dout =01001010 160: reset=0, ld=0, en=1, sin=1, din=10100101, dout =01001010 175: reset=0, ld=0, en=1, sin=1, din=10100101, dout =10010101 225: reset=0, ld=0, en=1, sin=1, din=10100101, dout =00101011 275: reset=0, ld=0, en=1, sin=1, din=10100101, dout =01010111 325: reset=0, ld=0, en=1, sin=1, din=10100101, dout =10101111 375: reset=0, ld=0, en=1, sin=1, din=10100101, dout =01011111

Παράδειγμα περιγραφής κυκλώματος: Απαριθμητής ψηφίου με έξοδο σε οθόνη επτά τμημάτων (1) Δεκαδικός απαριθμητής ενός ψηφίου (μετρά 0 9) και μετατρέπει τους δυαδικά κωδικοποιημένους δεκαδικούς (BCD: Binary Coded Decimal) σε μορφή κατάλληλη για απεικόνιση σε οθόνη επτά τμημάτων (SSD: Seven Segment Display) Το κύκλωμα διασυνδέεται με την οθόνη ως εξής: abcdefg, με το πιο σημαντικό bit (MSB) να τροφοδοτεί το τμήμα a και το LSB το τμήμα g. Η υποδιαστολή x δεν χρησιμοποιείται module bcdcounter (clk, reset, digit); input clk, reset; output [6:0] digit; reg[6:0] digit; reg[3:0] temp; Παράδειγμα περιγραφής κυκλώματος: Απαριθμητής ψηφίου με έξοδο σε οθόνη επτά τμημάτων (2) always @(posedge clk or posedge reset) if (reset == 1 b1) temp = 4 h0; temp = temp + 1; if (temp == 4 ha) temp = 4 h0; case (temp) 4 h0: digit <= 7 b1111110; 4 h1: digit <= 7 b0110000; 4 h2: digit <= 7 b1101101; 4 h3: digit <= 7 b1111001; 4 h4: digit <= 7 b0110011; 4 h5: digit <= 7 b1011011; 4 h6: digit <= 7 b1011111; 4 h7: digit <= 7 b1110000; 4 h8: digit <= 7 b1111111; 4 h9: digit <= 7 b1111011; default: $display("invalid BCD code."); case module Παράδειγμα περιγραφής κυκλώματος: Απαριθμητής ψηφίου με έξοδο σε οθόνη επτά τμημάτων (3) Διάγραμμα χρονισμού για το κύκλωμα του απαριθμητή ψηφίου