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

Γνωριμία με την Γλώσσα Verilog

Προθεσμία έως Τετάρτη 14 Μαρτίου (βδομάδα 6)

Σημείωση: Ανακοίνωση Διαγωνισμού Προόδου: Πέμπτη 22 Μαρτίου, 7:00 - 9:00 μ.μ.,
αίθουσες Θ-201, Θ-202, Θ-206, Θ-207 (η συμμετοχή των φοιτητών είναι υποχρεωτική).

Γλώσσες Περιγραφής Hardware (HDL)

Σήμερα, η σχεδίαση hardware σε βιομηχανικό επίπεδο στηρίζεται πρώτ' απ' όλα στις Γλώσσες Περιγραφής Hardware (Hardware Description Languages - HDL). Χρησιμοποιόντας αυτές, μπορεί κανείς να περιγράψει με ακρίβεια την επιθυμητή λειτουργία ή την υλοποίηση ενός ψηφιακού συστήματος, ή (συνήθως) και τα δύο. Αυτό είναι εξαιρετικά σημαντικό, πρώτον γιά την προσομοίωση (simulation) ενός σχεδίου, δηλαδή γιά να προσπαθήσει ένα πρόγραμμα υπολογιστή, ο "προσομοιωτής", να μιμηθεί τον αναμενόμενο τρόπο λειτουργίας του πραγματικού ψηφιακού συστήματος, δίνοντας μας έτσι τη δυνατότητα να βρούμε και να διορθώσουμε τα λάθη σχεδίασης, καθώε επίσης και να μελετήσουμε την επίδοση του υπό σχεδίαση συστήματος. Δεύτερον, όταν η περιγραφή του υπό σχεδιαση ψηφιακού συστήματος γίνει με κατάλληλο τρόπο, υπάρχουν εργαλεία αυτόματης σύνθεσης που μπορούν διαβάζοντας αυτή την περιγραφή να την μετατρέψουν σε άλλη μορφή, χαμηλότερου επιπέδου, κατάλληλη γιά αυτόματη κατασκευή του πραγματικού συστήματος (κάτι σαν compilation προγράμματος, δηλαδή).

Στο μάθημά μας θα χρησιμοποιήσουμε τη γλώσσα περιγραφής hardware "Verilog" που είναι η μία από τις δύο δημοφιλέστερες (παγκοσμίως) HDL --η άλλη είναι η "VHDL"-- και μάλλον (η Verilog) η πλέον δημοφιλής στη βιομηχανία. Η Verilog είναι μεγάλη και περίπλοκη γλώσσα, με πολλές δυνατότητες και πολλούς τρόπους να κάνει κανείς το κάθε τι. Σε αυτό το μάθημα θα μάθετε και θα χρησιμοποιήσουμε ένα πολύ μικρό, μόνο, υποσύνολο της Verilog. Το υποσύνολο αυτό θα σας διδαχτεί από τον κ. Σ. Λυμπέρη, βοηθό του μαθήματος, την ώρα Φροντιστηρίου:

Ο σκοπός της παρούσας σειράς ασκήσεων είναι η εξοικείωσή σας με την Verilog και τα συναφή εργαλεία. Θα συμπληρώσετε ένα ήδη έτοιμο αρχείο σε Verilog και θα το περάσετε από όλα τα εργαλεία που θα χρησιμοποιηθούν στις μετέπειτα ασκήσεις του μαθήματος. Οι επιμέρους άσκησεις της σειράς 5 περιλαμβάνουν:

Ασκηση 5.1: Περιγραφή Κυκλώματος σε Verilog

Το κύκλωμα με το οποίο θα ξεκινήσουμε φαίνεται στο παρακάτω σχήμα.
Exercise 5.1 circuit diagram
Τα άσπρα βέλη χρησιμοποιούνται για να δείξουν ότι τα σύρματα αυτά είναι είσοδοι ή έξοδοι απο το σύστημα μας. Το σύστημα διαβάζει τις εισόδους in_a και in_b σε κάθε κύκλο ρολογιού clk, υπολογίζει την πράξη μεταξύ τους --όπως ορίζει το alu_op-- και τέλος αποθηκεύει στον καταχωρητή εξόδου είτε το αποτέλεσμα αυτό ή την είσοδο in_b (από τον καταχωρητή εισόδου). Ο κώδικας που περιγράφει το κύκλωμα αυτό σε Verilog είναι ο εξής:
  module ask5a (in_a, in_b, alu_op, mux_sel, out, clk);
    input clk;			// βασικά σήματα
    input [31:0] in_a, in_b;	// είσοδοι δεδομένων
    input [1:0] alu_op;		// σήματα ελέγχου
    input mux_sel;
    output [31:0] out;		// έξοδος δεδομένων
			// Δήλωση εσωτερικών συρμάτων:
    wire [31:0] reg_a, reg_b, alu_out, mux_out;
					// Καταχωρητές:
    Reg #32 r0 (reg_a, in_a, clk);
    Reg #32 r1 (reg_b, in_b, clk);
    Reg #32 r2 (out, mux_out, clk);
					// ALU:
    ALU #32 alu0 (alu_out, reg_a, reg_b, alu_op);
					// Πολυπλέκτης:
    Mux2 #32 m0 (mux_out, alu_out, reg_b, mux_sel);
  endmodule 
Γράψτε το παραπάνω module σε ένα αρχείο, π.χ. το "ask5a.v".

Το module ask5a που έχουμε ορίσει, αν περάσει μόνο του απο τον interpreter της Verilog XL, δεν θα βγάλει κανένα αποτέλεσμα, αφού κανένα event δεν μπορεί να δημιουργηθεί από καμία πηγή (δεν υπάρχουν συγκεκριμένα σήματα εισόδου για να δώσουν εξόδους). Το ρόλο αυτό θα καλύψει ένα δεύτερο (έτοιμο) αρχείο που θα αντιγράψετε στην περιοχή σας:

~hy225/verilog/test/test5a.v
Ο σκοπός αυτού του αρχείου είναι να χρησιμοποιήσει το module ask5a που ορίσαμε παραπάνω, να του δώσει μερικές ακολουθίες σημάτων εισόδου, και να τυπώσει στην οθόνη τις τιμές εξόδου γιά 10 κύκλους ρολογιού. Η βασική δομή του έχει ως εξής:
  module test;
    ...
    ask5a a0 (a, b, op, sel, c, clk);
    ...
    initial begin
	...
	@(posedge clk);
	a = h'AB00;
	b = h'1;
	op = b'00;
	sel = 0;
	$display ("%h", out);
	@(posedge clk);
	...
    end
    ...
  endmodule
Θα χρειαστεί επίσης να αντιγράψετε στην περιοχή σας το αρχείο:
~hy225/verilog/lib/lib5.v
που περιέχει τα βοηθητικά modules που χρησιμοποιεί το ask5a, δηλ. καταχωρητές (Reg), ALU (ALU), πολυπλέκτες (Mux2). Δημιουργήστε ένα αρχείο "files.cv" που να περιέχει τα ονόματα των τριών αρχείων που πρέπει να μεταγλωττιστούν, με τη σωστή σειρά: Ο προσομοιωτής της Verilog και το εργαλείο ελέγχου κυματομορφών που θα χρησιμοποιήσετε --της εταιρείας Cadence και τα δύο-- είναι εργαλεία μεγάλης εμπορικής αξίας, τα οποία το Πανεπιστήμιο Κρήτης έχει αγοράσει γιά εσωτερική χρήση και γιά εκπαιδευτικούς και ερευνητικούς σκοπούς μόνο, με τη βοήθεια του οργανισμού "Europractice" της Ευρωπαϊκής Ενωσης, και τρέχουν μόνο κάτω από αυστηρούς περιορισμούς χρήσης (license). Τα εργαλεία αυτά μπορείτε να τρέξετε μόνο σε ένα μηχάνημα, που στήθηκε ειδικά για το σκοπό αυτό, στο οποίο θα πρέπει να κάνετε:
    % rlogin zefyros
    % set path = ($path /vlsi/tools/bin)
    % setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH\:/vlsi/tools/lib
    % verilog -f files.cv
(/vlsi/tools/bin είναι το directory των εργαλείων, και /vlsi/tools/lib είναι το directory των δυναμικών βιβλιοθηκών τους --αν δεν έχετε ήδη τη μεταβλητή LD_LIBRARY_PATH ορισμένη, αρκεί το "setenv LD_LIBRARY_PATH /vlsi/tools/lib" αντί της τρίτης εντολής παραπάνω).

Η τελευταία από τις παραπάνω εντολές τρέχει την Verilog XL. Ελέγξτε ότι οι έξοδοι έχουν τη σωστή τους τιμή με βάση τις εισόδους. Προσοχή στο ποιές είσοδοι περνούν απο καταχωρητή, και ποιές όχι....

Ασκηση 5.2: Ελεγχος Κυματομορφών με Signalscan

Οταν τελειώσει η προσομοίωση, παρατηρήστε ότι στο directory που τρέξατε το πρόγραμμα υπάρχει και ένα νέο subdirectory ονόματι "Test.shm". Αυτό δημιουργείται λόγω ορισμένων εντολών που υπάρχουν στο "test5a.v", και περιέχει όλες τις τιμές για όλα τα σήματα καθ' όλη τη διάρκεια της προσομοίωσης.

Χρησιμοποιήστε το εργαλείο "Signalscan", πάντα στο μηχάνημα zefyros, γιά να δείτε μιά γραφική αναπαράσταση των κυματομορφών του κυκλώματός σας:

% signalscan
Αφού τρέξει το γραφικό περιβάλλον του προγράμματος, ακολουθήστε τα εξής βήματα: ΠΡΟΣΟΧΗ: σε ώρες πυκνής χρήσης, αποφύγετε να μένετε πολλή ώρα μέσα στο εργαλείο Signalscan: έχουμε περιορισμένο αριθμό αδειών χρήσης (licenses), κι έτσι άλλοι συνάδελφοί σας μπορεί να μην μπορούν να μπούν σε αυτό. (Το ίδιο ισχύει και γιά την Verilog XL, αλλά αυτό το εργαλείο ούτως ή άλλως τρέχει πολύ γρήγορα γιά τα (πολύ μικρά!) δικά σας κυκλώματα...).

Ασκηση 5.3: Τροποποίηση του Κυκλώματος

Τροποποιήστε το κύκλωμα που σας δόθηκε παραπάνω, ώστε να γίνει όπως στο επόμενο σχήμα.
Exercise 5.4 circuit diagram
Η καινούρια προσθήκη επιτρέπει το αποτέλεσμα να είναι ίσο με (in_a + 4), όταν mux_sel == 0. Τα στοιχεία που είναι καινούρια, ή που πρέπει να αλλάξουν απο το προηγούμενο σχέδιο, είναι απεικονισμένα με παχύτερες γραμμές. Γιά τον μεγαλύτερο πολυπλέκτη, θα χρειαστεί να αλλάξετε το module mux2 στο αμέσως μεγαλύτερο, "mux4", και να συνδέσετε μια τυχαία τιμή στην τελευταία του είσοδο (π.χ. ένα σύρμα με την τιμή 0). Σύρματα με σταθερές τιμές μπορείτε να ορίσετε π.χ. με:
wire [31:0] const_in = 32'h4;

Υλοποιήστε την επέκταση αυτή σε ένα διαφορετικό αρχείο, "ask5b.v", με όνομα module "ask5b" αντί "ask5a", και δοκιμάστε την όπως προηγουμένως, χρησιμοποιώντας όμως το αρχείο "test_ask5b.v" απο την περιοχή ~hy225/verilog/test/.

Παραδώστε, όπως και στις προηγούμενες ασκήσεις, τον κώδικά σας ask5b.v, ένα χαρακτηριστικό στιγμιότυπο από το Signalscan της άσκησης 5.2, και ένα άλλο από το Signalscan της άσκησης 5.3, πακεταρισμένα στο αρχείο "ask5.tar.gz", μέσω:

        tar -cvf ask5.tar ask5b.v signals52.jpg signals53.jpg
        gzip ask5.tar
        ~hy225/bin/submit 5


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