È Ò Ô Ø Ñ Ó ÃÖ Ø ¹ ÌÑ Ñ Ô Ø Ñ ÍÔÓÐÓ ØôÒ À;¾ ¹ ÇÖ ÒÛ ÍÔÓÐÓ ØôÒ Ö Ò Ü Ñ ÒÓ ¹ Ñ ³ ØÓ ¾¼½¾¹¾¼½ ³ ¹ ÍÐÓÔÓ ÌÑ Ñ ØÓ ÓÑ ÒÛÒ Datapathµ Ô Ü Ö Ø»»¾¼½ Û ¾¾»»¾¼½ Χ. Σωτηρίου ½ ËØ ÕÓ Ø ³ Ο στόχος της όγδοης άσκησης είναι η υλοποίηση και επαλήθευση του τμήματος δεδομένων(datapath) του επεξεργαστή MIPS-DLX πολλαπλών κύκλων, χρησιμοποιώντας την γλώσσα περιγραφής υλικού Verilog, και βάση μιας βιβλιοθήκης έτοιμων μονάδων. Η βιβλιοθήκη περιλαμβάνει όλες τις α- παραίτητες μονάδες για την υλοποίηση του τμήματος δεδομένων του επεξεργαστή, και συγκεκριμένα Μνήμη, Αρχείο Καταχωρητών, Καταχωρητές, Πολυπλέκτες, Αριθμητική-Λογική Μονάδα(ALU), και μια πύλη NOR 32 εισόδων. Μαζί με την δομική περιγραφή του τμήματος δεδομένων του επεξεργαστή, θα πρέπει να υλοποιηθεί και ενα πλαίσιο ελέγχου, το οποίο θα εκτελεί ενα μικρό πρόγραμμα αποθηκευμένο στην μνήμη, το οποίο θα επαληθεύει της ορθή λειτουργία εκτέλεσης για τους διαφορετικούς τύπους εντολών, δηλ. τύπου R, μνήμης και βρόχων. Το προτεινόμενο πρόγραμμα φαίνεται παρακάτω. Μπορείτε να χρησιμοποιήσετε διαφορετικό πρόγραμμα για την επαλήθευση, αρκεί να επαληθεύσετε τους τρείς τύπους εντολών. 0: lw $1, 8($0) 4: lw $2, 9($0) 8: add $1, $2, $3 c: or $4, $2, $3 10: beq $4, $0, -5-20: 5 24: fffe Σχήμα 1: Προτεινόμενο Πρόγραμμα Επαλήθευσης του Τμήματος Δεδομένων του Επεξεργαστή ¾ ÌÓ ÌÑ Ñ ÓÑ ÒÛÒ ØÓÙ Ô Ü Ö Ø Τα Σχήματα 2 και 3 περιγράφουν αναλυτικά, το αριστερό και δεξί τμήμα αντίστοιχα, απο την απαιτούμενη δομή του τμήματος δεδομένων του επεξεργαστή που θα πρέπει να υλοποιήσετε, σε επίπεδο μονάδων και σημάτων. Η περιγραφή σας σε γλώσσα Verilog θα πρέπει να χρησιμοποιεί τα ίδια ονόματα σημάτων με τα Σχήματα, μια και αυτα ορίζονται απο την αρχιτεκτονική. Το τμήμα δεδομένων θα πρέπει να υλοποιηθεί ως μια μονάδα Verilog, με προτεινόμενο όνομα datapath. Τα σήματα εισόδου και εξόδου του τμήματος δεδομένων φαίνονται στο πάνω μέρος των Σχήματων, και αποτελούν τα σήματα ελέγχου τα οποία μπορούν να οδηγηθούν απο ΜΠΚ για να εκτελέσουν τις εντολές. Μια και θέλουμε να επαληθεύσουμε το τμήμα δεδομένων, οι είσοδοι και 1
έξοδοι του θα οδηγούνται κατάλληλα απο το πλαίσιο της δοκιμής του. Ετσι, η κάθε είσοδος του τμήματος δεδομένων θα αντιστοιχεί σε έξοδο του πλαισίου δοκιμής, και αντίστροφα η κάθε έξοδος του τμήματος δεδομένων σε είσοδο του πλαισίου δοκιμής. Σχήμα 2: Τμήμα Δεδομένων του Επεξεργαστή- Αριστερό Μέρος Σχήμα 3: Τμήμα Δεδομένων του Επεξεργαστή- Δεξιό Μέρος 2
À Ð Ó ÅÓÒ ÛÒ Παρακάτω περιγράφονται αναλυτικά τα δομικά στοιχεία της βιβλιοθήκης που θα πρέπει να χρησιμοποιήσετε. Για κάθε στοιχείο περιγράφεται ο ορισμός του στην βιβλιοθήκη, οι παράμετροι και οι θύρες του, τυχόν διαδικασίες που πρέπει να ακολουθηθούν για την χρήση του, και σχετικό παράδειγμα εμφάνισης του. Η βιβλιοθήκη είναι υλοποιημένη σε Verilog και βρίσκεται στον σύνδεσμο: http://www.csd.uoc.gr/~hy225/assignments/assignment7/library.v. º½ Ã Ø ÕÛÖ Ø ¹ RegLd module RegLd (q, d, lden, clk); Ακμοπυροδότητος καταχωρητής, τύπου D, με ενεργοποίηση φόρτωσης(load enable). Παράμετροι- Θύρες: N Παράμετρος: το πλάτος του καταχωρητή, σε bits. q Εξοδος(Ν bits): έξοδος δεδομένων. d Είσοδος(Ν bits): είσοδος δεδομένων. lden Είσοδος(1 bit): έλεγχος ενεργοποίησης φόρτωσης(load enable) θετικής πολικότητας(1: φόρτωσε, 0: κράτα τα παλαιά περιεχόμενα). clk Είσοδος(1 bit): ρολόϊ θετικής ακμοπυροδότησης. Οι είσοδοι d και lden πρέπει να έχουν σταθεροποιηθεί τουλάχιστο 0.2ns(χρόνος προετοιμασίας, setup time) πριν τη θετική ακμή του ρολογιού. Ο χρόνος διατήρησης(hold time) είναι 0.1ns. Η έξοδος q αλλάζει τιμή το ταχύτερο μετά από 0.1ns και το αργότερο μετά από 0.2ns(ελάχιστη και μέγιστη καθυστέρηση εξόδου) από τη θετική ακμή του ρολογιού(όταν lden=1). Παράδειγμαχρήσης: RegLd #32 pcreg (pc, nxtpc, pcld, clk); º¾ ÈÓÐÙÔÐ Ø ¾ ÛÒ ¹ 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 Εξοδος(Ν bits): πολυπλεγμένη έξοδος. Η καθυστέρηση της εξόδου, σε σχέση με την τελευταία αλλαγή της εισόδου επιλογής(sel) ή της επιλεγμένης(με βάση το sel) εισόδου δεδομένων(inx)είναιτοπολύ 0.2nsγιατον Mux2, 0.3nsγιατον Mux4,και 0.4nsγιατον Mux8. in0 Είσοδος(Ν bits): είσοδος που επιλέγεται όταν sel=0. in1 Είσοδος(Ν bits): είσοδος που επιλέγεται όταν sel=1... in7 Είσοδος(Ν 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); Απλοική αριθμητική/λογική μονάδα. Εκτελεί πρόσθεση ή αφαίρεση ακεραίων(με την χρήση συμπλήρωματος ως προς 2, 2 s complement), και τις λογικές πράξεις AND/OR. Παράμετροι- Θύρες: N Παράμετρος: το πλάτος της Αριθμητικής, Λογικής μονάδας σε bits. out Εξοδος(32 bits): έξοδος δεδομένων. Η καθυστέρηση της εξόδου, σε σχέση με την τελευταία αλλαγή των εισόδων(δεδομένα ή επιλογή), είναι το πολύ 1.5ns. 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 #32 alu0 (ALUarith, ALUinA, ALUinB, ALUop); º ÅÒ Ñ ¹ Memory module Memory (ren, wen, addr, din, dout); Ασύγχρονη μνήμη εντολών/δεδομένων. Θύρες: ren Είσοδος(1 bit): ενεργοποίηση ανάγνωσης(read enable). wen Είσοδος(1 bit): ενεργοποίηση εγγραφής(write enable). addr Είσοδος(32 bits): διεύθυνση προσπέλασης. Η διεύθυνση αναφέρεται σε bytes. Δεδομένου ότι εμείς έχουμε μόνο λέξεις στην υλοποίησή μας, τα δύο χαμηλότερα bit της διεύθυνσης θα πρέπει να είναι μηδέν. Για πρακτικούς λόγους, κατά την προσομοίωση, υλοποιούνται μόνο οι πρώτες 1024 λέξεις της μνήμης. Επομένως, τα 20 υψηλότερα bits της διεύθυνσης πρέπει να είναι μηδέν. din Είσοδος(32 bits): είσοδος δεδομένων προς εγγραφή. dout Εξοδος(32 bits): εξοδος δεδομένων ανάγνωσης. Παράδειγμαχρήσης: Memory mem (memrd, memwr, ma, B, md); Η μνήμη είναι ασύγχρονη, δηλαδή ο χρονισμός των προσπελάσεων σε αυτήν δεν καθορίζεται από το ρολόϊ του επεξεργαστή, αλλά απο τα σχετικά σήματα ενεργοποίησης εγγραφής και ανάγνωσης. Η μνήμη ακολουθεί το πρωτόκολλο που φαίνεται στο παρακάτω Σχήμα. 4
3.4.1 Εγγραφή στην Μνήμη Η εγγραφή γίνεται βάση του σήματος wen, με την ακόλουθη διαδικασία: Το wenγίνεται1. Ηδιεύθυνσηεγγραφής, addr,καιταδεδομένα, din,πρέπειναείναιήδησταθερά,ήνα σταθεροποιηθούν εντός 0.5ns. Για ελάχιστο χρόνο 1.5ns τα σήματα wen, addr, και din πρέπει να μείνουν σταθερά. 3.4.2 Ανάγνωση απο την Μνήμη Η ανάγνωση γίνεται αναλόγως, βάση του σήματος ren, με την ακόλουθη διαδικασία: Το renγίνεται1. Η διεύθυνση εγγραφής, addr, πρέπει να είναι ήδη σταθερή, ή να σταθεροποιηθεί εντός 0.5ns. Μετά απο 1.5ns, τα δεδομένα θα είναι έτοιμα στο dout. Τα δεδομένα παραμένουν έγκυρα, όσοτο renπαραμένει1καιηδιεύθυνσησταθερή. 3.4.3 Διαδοχικές Προσβάσεις Σε περίπτωση διαδοχικών προσβάσεων, αναγνώσεων ή εγγραφών, τα σήματα εγγραφής, ανάγνωσης πρέπει να παρουσιάζουν τον ανάλογο αριθμό ακμών(θετικών), π.χ. για δυο διαδοχικές εγγραφές απαιτούνται δυο θετικές ακμές στο wen(με τις κατάλληλες διευθύνσεις και δεδομένα). 3.4.4 Αρχικοποίηση της Μνήμης Η αρχικοποίηση της μνήμης μπορεί να γίνει με τις εντολές $readmemh ή $readmemb της Verilog(η οποία αρχικοποιεί πίνακες). Παράδειγμα χρήσης της $readmemb στο πλαίσιο δοκιμής είναι το εξής: $readmemb("memory.bin", dat0.mem.data); Οπου dat0 είναι το όνομα της εμφάνισης της μονάδας datapath του επεξεργαστή, mem το όνομα της εμφάνισης της μνήμης του επεξεργαστή καί data είναι το όνομα του πίνακα της μνήμης στην μονάδα μνήμης της βιβλιοθήκης. Το σχετικό αρχείο μνήμης, memory.bin πρέπει να βρίσκεται στον ίδιο κατάλογο με την εκτέλεση της προσομείωσης και να έχει την παρακάτω μορφή: @0 000000_00000_00000_0000000000000000 @4 <data at address 4>... Η πρώτη στήλη, @X, αντιστοιχεί στην διεύθυνση της μνήμης X, ενώ η δεύτερη στήλη στα δεδομένα που θα αποθηκευτούν κατά την αρχικοποίηση στην διεύθυνση X. Προσέξτε ότι η διεύθυνση της μνήμης πρέπει πάντα να είναι εκφρασμένη στο δεκαεξαδικό σύστημα. Η κάτω παύλα είναι διαχωριστικός χαρακτήρας της Verilog, για την ευκολότερη ανάγνωση των δεδομένων. Αν χρησιμοποιηθεί η $readmemh,ταδεδομέναθαπρέπειναείναισεδεκαεξαδικό. º ÖÕ Ó Ã Ø ÕÛÖ ØôÒ ¹ RegFile module RegFile (raa, rab, wa, wen, wd, rda, rdb); Αρχείο Καταχωρητών, των 32 καταχωρητών μεγέθους 32-bit, με δυο θύρες ανάγνωσης και μια εγγραφής. Θύρες: raa Είσοδος(5 bits): διεύθυνση καταχωρητή προς ανάγνωση από την πρώτη θύρα. 5
rab Είσοδος(5 bits): διεύθυνση καταχωρητή προς ανάγνωση από την δεύτερη θύρα. wa Είσοδος(5 bits): διεύθυνση εγγραφής. we Είσοδος(1 bit): ενεργοποίηση της εγγραφής(write enable). wd Είσοδος(32 bits): είσοδος δεδομένων προς εγγραφή. rda Εξοδος(32 bits): έξοδος δεδομένων ανάγνωσης της πρώτης θύρας. rdb Εξοδος(32 bits): έξοδος δεδομένων ανάγνωσης της δεύτερης θύρας. Παράδειγμαχρήσης: RegFile rf (rs, rt, rwa, regwr, rwd, rega, regb); Το Αρχείο Καταχωρητών, όπως και η μνήμη έχει ασύγχρονη προσπέλαση, όπου μετά την εφαρμογή του αριθμού του καταχωρητή, και την θετική ακμή του σήματος ενεργοποίησης εμφανίζονται τα δεδομένα. Το πρωτόκολλο του Αρχείου Καταχωρητών φαίνεται στο παρακάτω Σχήμα. 3.5.1 Εγγραφή στο Αρχείο Καταχωρητών Η εγγραφή γίνεται βάση του σήματος wen, με την ακόλουθη διαδικασία: Το wenγίνεται1. Ηδιεύθυνσηεγγραφής, wa,καιταδεδομένα, wd,πρέπειναείναιήδησταθερά,ήνασταθεροποιηθούν εντός 0.5ns. Γιαελάχιστοχρόνο 0.7nsτασήματα wen, wa,και wdπρέπειναμείνουνσταθερά. 3.5.2 Ανάγνωση απο το Αρχείο Καταχωρητών Η ανάγνωση γίνεται μόνο βάση της διεύθυνσης του καταχωρητή, χωρίς δηλαδή σήμα ενεργοποίησης της ανάγνωσης. Στο παραπάνω σχήμα φαίνεται παράδειγμα για την πρώτη θύρα. Μόλις αλλάξει η διεύθυνση του καταχωρητή, για επόμενη πρόσβαση, μετά απο περίπου 1.2ns είναι διαθέσιμα τα περιεχόμενα του σχετικού καταχωρητή στην ανάλογη έξοδο. Η ανάγνωση μπορεί να γίνεται παράλληλα με εγγραφή. Στην περίπτωση που η ανάγνωση και η εγγραφή αφορούν στον ίδιο καταχωρητή δεν είναι απόλυτα προβλέψιμη η καθυστέρηση ανάγνωσης. 3.5.3 Αρχικοποίηση του Αρχείου Καταχωρητών Παρόλο που η αρχικοποίηση του Αρχείου Καταχωρητών μπορεί να επιτευχθεί με τον ίδιο τρόπο όπως και για την μνήμη, μια και η προσομείωση αφορά επεξεργαστή, οι καταχωρητές θα πρέπει να αρχικοποιούνται μεσω του κώδικα μηχανής του προγράμματος. 6
º È Ð NOR ¾ ÛÒ ¹ NOR32 module NOR32 (out, in32); Πύλη ΝΟΡ 32 εισόδων. Οι είσοδο έχουν την μορφή busτων 32-bit. Θύρες: out Εξοδος(1 bit): το λογικό ΝΟΡ των 32 bit εισόδου. Η καθυστέρηση είναι περίπου 0.3ns. in32 Είσοδος(32 bit): τα τριανταδύο bit εισόδου. Παράδειγμα χρήσης: NOR32 zerologic (zero, ALUarith); Ò ÐÙØ È Ö Ö ØÓÙ ÌÑ Ñ ØÓ ÓÑ ÒÛÒ Εκτός απο την χρήση των έτοιμων μονάδων της βιβλιοθήκης που παρουσιάστηκε παραπάνω, θα πρέπει να πραγματοποιήσετε τις απαραίτητες δηλώσεις σημάτων, και κάποιες απλές πράξεις σε Verilog. º½ ÇÖ ÑÓ ËÙÒ ÛÒ ØÛÒ Ë Ñ ØÛÒ ÛÒ» Ü ÛÒ Για κάθε σήμα που χρησιμοποιείται για σύνδεση μεταξύ των μονάδων θα πρέπει να δηλώσετε ανάλογο σύρμα, wire, πριν την εμφάνιση του σήματος στην μονάδα. Αν, λ.χ. χρησιμοποιείτε εναν πολυπλέκτη 2 εισόδων, όπου η έξοδος του ονομάζεται ma και είναι 32-bit,το τμήμα της Verilogπου αφοράμόνοτοσήμα ma,καιτονπολυπλέκτηθαείναιωςεξής: wire [31:0] ma; Mux2 #32 muxaddr (ma, pc, ALUout, IorD); Τα σήματα που δεν δηλώνονται ρητά στην Verilog θεωρούνται πλάτους 1-bit. Ετσι, αν ξεχάσετε να δηλώσετε κάποιο σήμα θα παρουσιαστεί πρόβλημα με το μέγεθος του αριθμού. Επιπλέον, για τις εισόδους, εξόδους του κυκλώματος θα πρέπει να ακολουθηθούν παρόμοιες δηλώσεις, τύπου input η outputανάλογα.γιατασήματα IorD,και opοισχετικέςδηλώσειςθαείναιοιεξής: input IorD; output [5:0] op; º¾ Ü Û È ÛÒ ÔÓ Για το υποκύκλωμα field extract, όπου πρέπει να διαχωρίστούν τα επιμέρους ψηφία του IR, θα πρέπει να χρησιμοποιηθεί η σύνταξη επιλογής bit της Verilog. Ενα παράδειγμα φαίνεται παρακάτω: wire [4:0] rs; assign rs = ir[25:21]; Ορίζοντας ενα σήμα, με δήλωση input, output ή wire, η ανάθεση του περιγράφεται με την έκφραση assign όπως παραπάνω. Οταν γίνεται η ανάθεση σε τύπο wire, αυτή μπορεί να επιτευχθεί απευθείας, ως εξής: wire [4:0] rs = ir[25:21]; º ÈÖÓ Ø ÈÖÓ ÑÓÙ Για το υποκύκλωμα sign extend, θα πρέπει να πολλαπλασιαστεί το σημαντικότερο ψηφίο του αριθμού στα αριστερά. Λ.χ. ο αριθμός 4 b0101 αν προεκταθεί στα 8-bit γίνεται 8 b00000101, ενώ ο 4 b1101 γίνεται 8 b11111101. Για να πραγματοποίηση της προέκτασης προσήμου σας προτείνετε να χρησιμοποιήσετε τις πράξεις συνένωσης και επανάληψης ψηφίων της Verilog, και όχι συνδυαστική λογική, π.χ. πολυπλέκτη, έτσι ώστε να μην δημιουργείται καθυστέρηση απο την πράξη. 7
º ÇÐ Για το υποκύκλωμα shift left, όπου απαιτείται ολίσθηση 2 ψηφίων αριστερά, σας προτείνετε να συνενώσετε 2 μηδενικά στα τελευταία ψηφία του αριθμού. Τα δυο τελευταία ψηφία του αρχικού αριθμού, μετά την ολίσθηση αριστερά αποκόπτονται. º Ë Ö Ö ÑôÒ Στην έξοδο της ALU απαιτούνται δυο κυκλώματα συγκρίσεων. Για την σύγκριση ισότητας παράγεται το σήμα zero,όπου γίνεται 1 όταν το αποτέλεσμα της ALU είναι μηδενικό. Αυτό μπορεί να υλοποιηθεί μετηνπύλη NOR32εισόδων.Γιααρνητικόαποτέλεσμαπαράγεταιτοσήμα neg,τοοποίοθαπρέπει ναέχειτηντιμή 32 b01ότανηέξοδοςείναιαρνητική,διαφορετικάθαπρέπειναείναι 32 b00.για την υλοποίηση του τελευταίου, μπορείτε να χρησιμοποιήσετε το πρόσημο του αποτελέσματος. ÈÖÓ ÓÑ Û Ô Ð Ù ÇÖ Ä ØÓÙÖ Για την επαλήθευση του τμήματος δεδομένων του επεξεργαστή παρέχετε ενα πρότυπο σκελετού πλαίσιου δοκιμής, το οποίο θα πρέπει να τροποποιήσετε. Το πρότυπο βρίσκεται στον σύνδεσμο: http://www.csd.uoc.gr/~hy225/assignments/assignment7/testbench.v. Στο πρότυπο αυτό αρχείο εμπεριέχονται οδηγίες για την εμφάνιση της μονάδας του επεξεργαστή, την αρχικοποίηση της μνήμης, τον ορισμό του ρολογιού και την εφαρμογή των σημάτων ελέγχου ανα κύκλο. Για την επαλήθευση του κυκλώματος σας, σας προτείνετε να χρησιμοποιήσετε τις εντολές $display, $monitor της Verilog, οι οποίες εμφανίζουν ή παρακολουθούν ενεργά την τιμή των σημάτων αντίστοιχα. Ετσι, μπορείτε να παρακολουθείτε όλες τις εξόδους του τμήματος δεδομένων του επεξεργαστή, ενώ μετά απο κάθε εντολή σας προτείνετε να τυπώνετε τις τιμές των καταχωρητών. Για παράδειγμα αν θέλουμε να τυπώσουμε τον καταχωρητή 2, μέσω της εντολής $display: $display("register 2 : %x", MIPSdatapath.IDmemory.data[2]); Οπου σε αυτό το παράδειγμα, MIPSdatapath είναι το όνομα της εμφάνισης του τμήματος δεδομένων του επεξεργαστή, IDMemory είναι η εμφάνιση της μνήμης μέσα στο MIPSdatapath, και data[2] είναι ο εσωτερικός πίνακας των καταχωρητών στην βιβλιοθήκη. ÈÖÓ Ñ È Ö Ó ÍÔÓ ÓÐ Ø ³ Η προθεσμία παράδοσης της 8ης Άσκησης είναι η 22/4/2013. Μέχρι την προθεσμία της εργασίας θα πρέπει: να έχετε υποβάλλει τον κώδικα σας, δηλ. δυο αρχεία Verilog, την υλοποίηση του τμήματος δεδομένων του επεξεργαστή και το σχετικό πλαίσιο δοκιμής, να έχετε υποβάλλει στιμιότυπα της προσομείωσης(κυμματομορφές, έξοδο του προσομειωτή), που να επαληθεύουν την ορθή λειτουργία μαζί με σύντομο, συνοδευτικό, επεξηγηματικό κείμενο, το οποίο να εξηγεί πως τα στιγμιότυπα επαληθεύουν την ορθότητα της λειτουργίας. Η υποβολή γίνεται μέσω του προγράμματος submit ως εξής: όπου στο X αντιστοιχεί ο αριθμός της Άσκησης. submit exercisex 8