ΗΥ-225: Οργάνωση Υπολογιστών
Ανοιξη 2001
Τμ. Επ. Υπολογιστών
Πανεπιστήμιο Κρήτης

Βιβλιοθήκη Δομικών Στοιχείων σε Verilog

γιά τις Ασκήσεις Υλοποίησης Επεξεργαστή

Γιά τις σειρές ασκήσεων που αφορούν την υλοποίηση του επεξεργαστή θα χρησιμοποιείστε τη βιβλιοθήκη έτοιμων δομικών στοιχείων που βρίσκεται στο αρχείο

~hy225/verilog/lib/lib6.v
και η οποία περιέχει τα παρακάτω modules.

1. Reg (Καταχωρητής)

module Reg (q, d, lden, clk);
Είναι ο τυπικός ακμοπυροδότητος καταχωρητής, τύπου D.
Παράμετροι - Πόρτες:
N
Παράμετρος: το πλάτος του καταχωρητή, σε bits.
q
Εξοδος (N bits): έξοδος δεδομένων.
d
Είσοδος (N bits): είσοδος δεδομένων.
lden
Είσοδος (1 bit): έλεγχος επίτρεψης φόρτωσης (load enable) θετικής πολικότητας (1: φόρτωσε, 0: κράτα τα παλαιά περιεχόμενα).
ck
Είσοδος (1 bit): ρολόϊ θετικής ακμοπυροδότησης. Οι είσοδοι d και lden πρέπει να έχουν σταθεροποιηθεί τουλάχιστο 0.2 ns (χρόνος προετοιμασίας, set-up time) πριν τη θετική ακμή του ρολογιού. Ο χρόνος κρατήματος (hold time) είναι μηδέν. Η έξοδος q αλλάζει τιμή το αργότερο μέσα σε 0.1 ns (καθυστέρηση εξόδου, output delay) από τη θετική ακμή του ρολογιού (όταν lden=1).
Παράδειγμα χρήσης:
Reg #32 pcreg (pc, nxtpc, pcld, clk);

2. Mux2, Mux4, Mux8 (Πολυπλέκτες)

module Mux2 (out, in0, in1, sel);
module Mux4 (out, in0, in1, in2, in3, sel);
module Mux8 (out, in0, in1, in2, in3, in4, in5, in6, in7, sel);
Πολυπλέκτες 2-σε-1, 4-σε-1, και 8-σε-1 αντίστοιχα.
Παράμετροι - Πόρτες:
N
Παράμετρος: το πλάτος του πολυπλέκτη, σε bits.
out
Εξοδος (N bits): πολυπλεγμένη έξοδος. Η καθυστέρηση της εξόδου, σε σχέση με την τελευταία των εισόδων (δεδομένα ή επιλογή), είναι το πολύ 0.2 ns στο Mux2, 0.3 ns στο Mux4, και 0.4 ns στο Mux8.
in0
Είσοδος (N bits): είσοδος που επιλέγεται όταν sel=0.
in1
Είσοδος (N bits): είσοδος που επιλέγεται όταν sel=1.
...
...
in7
Είσοδος (N bits): είσοδος που επιλέγεται όταν sel=7.
sel
Είσοδος (1 bit στο Mux2, 2 bits στο Mux4, 3 bits στο Mux8): είσοδος επιλογής.
Παράδειγμα χρήσης:
Mux2 #32 muxaddr (ma, pc, ALUout, IorD);

3. ALU (Αριθμητική-Λογική Μονάδα)

module ALU (out, inA, inB, op);
Απλή 32-μπιτη αριθμητική/λογική μονάδα. Εκτελεί πρόσθεση ή αφαίρεση ακεραίων (συμπλήρωμα ως προς 2, 2's complement), ή τις λογικές πράξεις AND/OR.
Πόρτες:
out
Εξοδος (32 bits): έξοδος δεδομένων. Η καθυστέρηση της εξόδου, σε σχέση με την τελευταία των εισόδων (δεδομένα ή επιλογή), είναι το πολύ 1.5 ns.
inA
Είσοδος (32 bits): πρώτη είσοδος δεδομένων.
inB
Είσοδος (32 bits): δεύτερη είσοδος δεδομένων.
op
Είσοδος (2 bits): είσοδος επιλογής πράξης:
00
πρόσθεση: out = inA + inB.
01
αφαίρεση: out = inA - inB.
10
bitwise OR: out = inA OR inB.
11
bitwise AND: out = inA AND inB.
Παράδειγμα χρήσης:
ALU alu0 (ALUarith, ALUinA, ALUinB, ALUop);

4. Memory (Μνήμη)

module Memory (ren, wen, addr, din, dout);
Γρήγορη ασύγχρονη μνήμη εντολών/δεδομένων.
Πόρτες:
ren
Είσοδος (1 bit): ενεργοποίηση ανάγνωσης (read enable).
wen
Είσοδος (1 bit): ενεργοποίηση εγγραφής (write enable).
addr
Είσοδος (32 bits): διεύθυνση προσπέλασης. Η διεύθυνση αναφέρεται σε bytes (byte-addressable). Δεδομένου ότι εμείς έχουμε μόνο λέξεις στην υλοποίησή μας, τα δύο LS bits της διεύθυνσης αυτής πρέπει να είναι μηδέν, και η πραγματική προσπέλαση γίνεται νε τα 30 MS bits. Για πρακτικούς λόγους, κατά την προσομοίωση, υλοποιούνται μόνο οι πρώτες 1024 λέξεις της μνήμης. Επομένως, τα 20 MS bits της διεύθυνσης πρέπει να είναι μηδέν.
din
Είσοδος (32 bits): είσοδος δεδομένων προς εγγραφή.
dout
Εξοδος (32 bits): εξοδος δεδομένων ανάγνωσης.
Παράδειγμα χρήσης:
Memory mem (memRd, memWr, ma, B, md);
Η μνήμη είναι ασύγχρονη, δηλαδή ο χρονισμός των προσπελάσεων σε αυτήν δεν καθορίζεται από το ρολόϊ του επεξεργαστή (δεν έχει σαν είσοδο το ρολόϊ που έχουν οι ακμοπυροδότητοι καταχωρητές). Για να λειτουργήσει η μνήμη σωστά, ακολουθείται το πρωτόκολλο χρονισμού που φαίνεται στο εξής σχήμα:
Memory timing diagram

Εγγραφή στη μνήμη: γίνεται με βάση το σήμα wen --γιά κάθε εγγραφή:

Ανάγνωση απο τη μνήμη: γίνεται με βάση το ren --γιά κάθε ανάγνωση: Προσοχή: Αν τυχόν χρειάζεται να κάνω δύο διαδοχικές εγγραφές, πρέπει, αφού ολοκληρωθεί η πρώτη, το wen να πέσει και μετά να ξανασηκωθεί για την δεύτερη. Ομοίως και με δύο διαδοχικές αναγνώσεις και το ren.

5. RegFile (Αρχείο Καταχωρητών)

module RegFile (raA, raB, wa, wen, wd, rdA, rdB);
Αρχείο τριανταδύο 32-μπιτων καταχωρητών, με 2 πόρτες ασύγχρονης ανάγνωσης και 1 πόρτα ασύγχρονης εγγραφής.
Πόρτες:
raA
Είσοδος (5 bits): διεύθυνση ανάγνωσης πρώτης πόρτας. Ανάγνωση απο τη διεύθυνση 0 δίνει πάντα 0.
raB
Είσοδος (5 bits): διεύθυνση ανάγνωσης δεύτερης πόρτας. Ανάγνωση απο τη διεύθυνση 0 δίνει πάντα 0.
wa
Είσοδος (5 bits): διεύθυνση εγγραφής. Εγγραφή στη διεύθυνση 0 δεν έχει αποτέλεσμα.
wen
Είσοδος (1 bit): ενεργοποίηση εγγραφής (write enable).
wd
Είσοδος (32 bits): είσοδος δεδομένων προς εγγραφή.
rdA
Εξοδος (32 bits): έξοδος δεδομένων ανάγνωσης πρώτης πόρτας.
rdB
Εξοδος (32 bits): έξοδος δεδομένων ανάγνωσης δεύτερης πόρτας.
Παράδειγμα χρήσης:
RegFile rf (rs, rt, rWA, regWr, rWD, regA, regB);
Και η Register File, όπως και η μνήμη, είναι ασύγχρονη. Οι αναγνώσεις γίνονται "συνδυαστικά", απλώς τοποθετώντας τις διευθύνσεις προς ανάγνωση και παίρνοντας μετά απο λίγο τα αποτελέσματα. Η εγγραφή γίνεται όπως και στη μνήμη, με χρήση του wen. Αναλυτικότερα, το πρωτόκολλο φαίνεται στο εξής σχήμα:
Register file timing diagram
Εγγραφή στο Αρχείο καταχωρητών: γίνεται με βάση το σήμα wen --γιά κάθε εγγραφή: Ανάγνωση από το Αρχείο καταχωρητών: γίνεται απλώς με τη διεύθυνση του καταχωρητή. Στο σχήμα φαίνεται ένα παράδειγμα για την πρώτη πόρτα, αλλά τα ίδια ακριβώς ισχύουν και γιά την δεύτερη. Όταν αλλάζει η διεύθυνση, μετά από 1.2 ns (το πολύ) εμφανίζεται στην έξοδο η τιμή του καταχωρητή. Προσοχή: η έξοδος χαλάει αμέσως μόλις αλλάξει η διεύθυνση. Εδώ, αντίθετα απο τη μνήμη, μπορούμε να διαβάζουμε συνεχώς τιμές από μιά πόρτα, απλώς αλλάζοντας διαδοχικά τη διεύθυνση. Αναγνώσεις μπορούν να γίνονται και ταυτόχρονα με εγγραφή, αρκεί να αφορούν διαφορετικό καταχωρητή --αν διαβάζουμε έναν καταχωρητή την ίδια ώρα που τον γράφουμε είναι ασαφές πότε εμφανίζονται τα νέα δεδομένα στην έξοδο.

6. NOR32

module NOR32 (in32, out);
Πύλη NOR 32 εισόδων. Οι είσοδοι έρχονται όλες μαζί, με τη μορφή ενός bus των 32 bits.
Πόρτες:
in32
Είσοδος (32 bits): τριανταδύο bits εισόδου.
out
Εξοδος (1 bit): το λογικό NOR των 32 bits εισόδου. Η καθυστέρηση της εξόδου, είναι 0.3 ns (το πολύ).
Παράδειγμα χρήσης:
NOR32 zerologic (ALUarith, zero);


Up to the Home Page of CS-225
 
 
© copyright University of Crete, Greece.
Originally written by S. Lyberis.
Last updated: 27 March 2001, by M. Katevenis.