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

Σειρά Ασκήσεων 9:
Δεύτερη Γνωριμία με τη Γλώσσα Verilog

Προθεσμία έως Παρασκευή 24 Μαρτίου 2006, ώρα 23:59 (βδομάδα 6)
Υπενθύμιση Διαγωνισμού Προόδου: Σάββατο, 1 Απριλίου 2006, ώρα 9:10 π.μ.
[Up - Table of Contents]
[Prev - 8. Verilog Intro. 1]
[printer version - PDF]
[10. Processor Datapath - Next]
Ο σκοπός αυτής της σειράς ασκήσεων είναι η παρουσίαση ορισμένων επιπλέον δυνατοτήτων της γλώσσας Verilog και η περαιτέρω εξοικείωση σας με τα συναφή εργαλεία. Συγκεκριμένα θα χρησιμοποιήσουμε:
  • Συνδυαστικά και ακολουθιακά στοιχεία από τη βιβλιοθήκη του μαθήματος (lib8_mux2, lib8_mux4, lib8_alu, lib8_reg).
  • Σταθερές και σήματα πολλών bits.
  • Ρολόϊ.
    Οι επιμέρους άσκησεις της σειράς 9 περιλαμβάνουν:
  • Μελέτη ενός κυκλώματος και της περιγραφής του σε Verilog που δίδονται.
  • Προσομοίωση του κώδικα με τον interpreter της Verilog-XL.
  • Έλεγχος των εξόδων του συστήματος με το εργαλείο κυματομορφών Signalscan.
  • Επέκταση του κώδικα για να περιλαμβάνει νέα κυκλώματα και επαναπροσομοίωση και έλεγχο εξόδων.
  • Registered ALU-MUX example circuit

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

    Το κύκλωμα με το οποίο θα ξεκινήσουμε φαίνεται στο σχήμα δίπλα. Τα άσπρα βέλη χρησιμοποιούνται για να δείξουν ότι τα σύρματα αυτά είναι είσοδοι ή έξοδοι απο το σύστημα μας. Το σύστημα διαβάζει τις εισόδους in_a και in_b σε κάθε κύκλο ρολογιού clk, υπολογίζει την πράξη μεταξύ τους --όπως ορίζει το alu_op-- και τέλος αποθηκεύει στον καταχωρητή εξόδου είτε το αποτέλεσμα αυτό ή την είσοδο in_b (από τον καταχωρητή εισόδου). Ο κώδικας που περιγράφει το κύκλωμα αυτό σε Verilog είναι ο εξής:
        module ask9a (out, in_a, in_b, alu_op, mux_sel, clk);
            output [31:0] out;          // data output
            input  [31:0] in_a, in_b;   // data inputs
            input   [1:0] alu_op;       // control inputs
            input         mux_sel;
            input  clk;                 // clock
    
            // declare internal signals:
            wire [31:0] reg_a, reg_b, alu_out, mux_out;
    
            // input registers:
            lib8_reg #32 r0 (reg_a, in_a, clk);
            lib8_reg #32 r1 (reg_b, in_b, clk);
    
            // ALU:
            lib8_alu #32 alu0 (alu_out, reg_a, reg_b, alu_op);
    
            // mux:
            lib8_mux2 #32 m0 (mux_out, alu_out, reg_b, mux_sel);
    
            // output register:
            lib8_reg #32 r2 (out, mux_out, clk);
        endmodule 
    
    Γράψτε το παραπάνω module στο αρχείο "ask9a.v" --αυτή είναι η περιγραφή του κυκλώματος. Σε αυτήν την άσκηση, το περιβάλλον ελέγχου (test bench) θα είναι σε ξεχωριστό αρχείο, και δίδεται έτοιμο:
    ~hy225/verilog/test/test9a.v
    Αντιγράψτε το αρχείο αυτό στην περιοχή σας. Η βασική δομή του έχει ως εξής:
        `define clk_period 10
    
        module test;
            ...
            // clock:
            reg clk;
            initial clk = 1;
            always begin
                    #(`clk_period / 2)
                    clk = ~clk;
            end
            ...
            // instantiate the design:
            ask9a a0 (out, in_a, in_b, alu_op, mux_sel, clk);
            ...
            // vectors:
            initial begin
                ...
                @(posedge clk);
                #(`hold);
                in_a    = 3;
                in_b    = 'hFFFF;
                alu_op  = 0;
                mux_sel = 1;
                @(posedge clk);
                ...
            end
            ...
        endmodule
    
    Θα χρειαστεί επίσης να αντιγράψετε στην περιοχή σας το αρχείο:
    ~hy225/verilog/lib/lib8.v
    που περιέχει τη βιβλιοθήκη των modules του ask9a: καταχωρητές (lib8_reg), αριθμητική-λογική μονάδα (lib8_alu), και πολυπλέκτες (lib8_mux2). Τρέξετε τον προσομοιωτή όπως στην άσκηση 8.3:
            % xhost +
            % rlogin  [katalliloMixanima]
            % setenv  DISPLAY [arxikoMixanima]:0.0
            % source  ~hy225/verilog/scripts/cds_ldv.sh
            % verilog lib8.v ask9a.v test9a.v
    
    [arxikoMixanima] είναι το όνομα της μηχανής από την οποία κάνετε rlogin, και [katalliloMixanima] είναι ένα από τα:
    apraktias, levantes, pounentes, graegos
    Ελέγξτε ότι οι έξοδοι έχουν σωστή τιμή με βάση τις εισόδους. Προσοχή στο ποιές είσοδοι περνούν απο καταχωρητή και ποιές όχι!

    Άσκηση 9.2:   Έλεγχος Κυματομορφών με Signalscan

    Χρησιμοποιήστε το εργαλείο signalscan, όπως στην άσκηση 8.4, γιά να δείτε τις κυματομορφές για τα σήματα. ΠΡΟΣΟΧΗ: σε ώρες πυκνής χρήσης, αποφύγετε να μένετε πολλή ώρα μέσα στο signalscan: έχουμε περιορισμένο αριθμό αδειών χρήσης (licenses), κι έτσι άλλοι συνάδελφοί σας μπορεί να μην μπορούν να μπούν σε αυτό. Η εντολή $stop σταματάει μεν την προσομοίωση από αρχείο, αλλά δεν τερματίζει το εργαλείο, αφήνοντας τον χρήστη να δίνει εντολές διαδραστικά (interactively), και κρατώντας ένα license ενεργό. Η εντολή $finish τερματίζει το εργαλείο και απελευθερώνει το license.

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

    Registered ALU-MUX example circuit Τροποποιήστε το κύκλωμα που σας δόθηκε παραπάνω, ώστε να γίνει όπως στο σχήμα εδώ. Η καινούρια προσθήκη επιτρέπει το αποτέλεσμα να είναι ίσο με (in_a + 4), όταν mux_sel == 0. Τα στοιχεία που είναι καινούρια, ή που πρέπει να αλλάξουν απο το προηγούμενο σχέδιο, είναι απεικονισμένα με παχύτερες γραμμές. Γιά τον μεγαλύτερο πολυπλέκτη, θα χρειαστεί να αλλάξετε το module mux2 στο αμέσως μεγαλύτερο, "mux4", και να συνδέσετε μια τυχαία τιμή στην τελευταία του είσοδο (π.χ. ένα σύρμα με την τιμή 0). Οι πόρτες του module mux4 έχουν δηλωθεί στη βιβλιοθήκη, κατ' αναλογία με τις πόρτες του module mux2, με τη σειρά: έξοδος, είσοδος00, είσοδος01, είσοδος10, είσοδος11, σήμα ελέγχου. Σύρματα με σταθερές τιμές μπορείτε να ορίσετε π.χ. με:
            wire [31:0] const_in;
            assign const_in = 32'h4; 
    
    Υλοποιήστε την επέκταση αυτή σε ένα διαφορετικό αρχείο, "ask9b.v", με όνομα module "ask9b" αντί "ask9a", και δοκιμάστε την όπως προηγουμένως, χρησιμοποιώντας όμως το αρχείο "~hy225/verilog/test/test9b.v". Παραδώστε, όπως και στις προηγούμενες ασκήσεις, τον κώδικά σας ask9b.v, ένα χαρακτηριστικό στιγμιότυπο από το signalscan της άσκησης 9.2, και ένα άλλο από το Signalscan της άσκησης 9.3, πακεταρισμένα στο αρχείο "ask9.tar":
           tar -cvf ask9.tar ask9b.v signals92.jpg signals93.jpg
           ~hy225/bin/submit 9



    [Up - Table of Contents]
    [Prev - 8. Verilog Intro. 1]
    [printer version - PDF]
    [10. Processor Datapath - Next]

    Up to the Home Page of CS-225
     
    © copyright University of Crete, Greece.
    Last updated: 14 Mar. (11/4 minor) 2006, by M. Katevenis.