ΥΛΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΩΝ ΨΗΦΙΑΚΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ ΕΙΚΟΝΑΣ ΣΕ FPGA ΜΕ ΧΡΗΣΗ ΤΟΥ DE2-70: Σχεδίαση ενός Photo Frame

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΥΛΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΩΝ ΨΗΦΙΑΚΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ ΕΙΚΟΝΑΣ ΣΕ FPGA ΜΕ ΧΡΗΣΗ ΤΟΥ DE2-70: Σχεδίαση ενός Photo Frame"

Transcript

1 Μεταπτυχιακή Διπλωματική Εργασία ΥΛΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΩΝ ΨΗΦΙΑΚΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ ΕΙΚΟΝΑΣ ΣΕ FPGA ΜΕ ΧΡΗΣΗ ΤΟΥ DE2-70: Σχεδίαση ενός Photo Frame ΠΥΡΓΑΣ ΛΑΜΠΡΟΣ Α.Μ:433 Επιβλέπων: Ευάγγελος Ζυγούρης Αναπλ. Καθηγητής ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΠΑΤΡΑ ΙΑΝΟΥΑΡΙΟΣ 2015

2

3 Μεταπτυχιακή Διπλωματική Εργασία ΥΛΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΩΝ ΨΗΦΙΑΚΗΣ ΠΕΞΕΡΓΑΣΙΑΣ ΕΙΚΟΝΑΣ ΣΕ FPGA ΜΕ ΧΡΗΣΗ ΤΟΥ DE2-70: Σχεδίαση ενός Photo Frame Design and Implementation of a Nios II Based System for Image Processing Using Altera DE2-70 Πύργας Λάμπρος Φυσικός Εγκρίθηκε από την τριμελή εξεταστική επιτροπή την 27 η Ιανουαρίου 2015 στα πλαίσια του ΠΜΣ Ηλεκτρονική και Επικοινωνίες Ευάγγελος Ζυγούρης Αναπληρωτής Καθηγητής Τμήμα Φυσικής Παν/μιο Πατρών Γεώργιος Οικονόμου Καθηγητής Τμήμα Φυσικής Παν/μιο Πατρών Σπυρίδων Φωτόπουλος Καθηγητής Τμήμα Φυσικής Παν/μιο Πατρών Πάτρα, Ιανουάριος 2015

4

5 i Πρόλογος Η παρούσα Μεταπτυχιακή Διπλωματική Εργασία εκπονήθηκε στα πλαίσια του Προγράμματος Μεταπτυχιακών Σπουδών Ειδίκευσης, Ηλεκτρονική και Επικοινωνίες, Η/Ε, του τμήματος Φυσικής του Πανεπιστημίου Πατρών. Σκοπός αυτής της Ερευνητικής Εργασίας είναι η ανάπτυξη ενός ψηφιακού συστήματος βασικής επεξεργασίας εικόνας, το οποίο βασίζεται στον επεξεργαστή γενικού σκοπού Nios II της ALTERA και ενσωματώνει έναν αριθμό περιφερειακών συσκευών (όπως π.χ. κάρτα SD, οθόνη αφής 4.3, την LTM και κάμερα με CMOS αισθητήρα των 5.1 Mpixels, την D5M) καθώς και υποκυκλωμάτων (cores). Η όλη εργασία υλοποιήθηκε στην αναπτυξιακή πλατφόρμα DE2-70 της Altera. Η εφαρμογή που εκτελεί το παραπάνω σύστημα έχει αναπτυχτεί σε γλώσσα C και περιλαμβάνει την αρχικοποίηση των υποκυκλωμάτων (cores), την φόρτωση εικόνων από την κάρτα SD, την επιλογή του τρόπου λειτουργίας του συστήματος (video ή photo) καθώς και την δυνατότητα επιλογής κάποιας από τις υλοποιημένες μορφές επεξεργασίας εικόνας, (Median Filtering, Negative, Edge Detection, Image Sharpening). Για τις ανάγκες της συνολικής σχεδίασης του ανωτέρω συστήματος πέρα απο την αξιοποίηση διαθέσιμων cores, χρειάστηκε να δημιουργηθούν επιπρόσθετα custom cores σε γλώσσα VHDL, η σχεδίαση και ενσωμάτωση των οποίων στο τελικό σύστημα παρουσιάζονται επίσης αναλυτικά σε αυτή την εργασία. Πρόκειται δηλαδή για μια ολοκληρωμένη σχεδίαση Ενσωματωμένου Συστήματος (Συν- Σχεδίαση Υλικού και Λογισμικού). Ο έλεγχος του συστήματος που δημιουργήθηκε επιτυγχάνεται μέσω της ενσωματωμένης οθόνης αφής LTM, ενώ η κατάσταση του συστήματος απεικονίζεται επίσης στην ίδια οθόνη LTM. Στο πρώτο κεφάλαιο γίνεται μία σύντομη αναφορά στο σύστημα, αναφέρονται τα υποκυκλώματα που χρησιμοποιούνται ενώ γίνεται εκτενής αναφορά στην οθόνη αφής LTM

6 ii και στην κάμερα D5M. Στο δεύτερο κεφάλαιο, αναλύεται διεξοδικά η αρχιτεκτονική του επεξεργαστή Nios II και γίνεται εκτενής αναφορά στα επιμέρους χαρακτηριστικά του. Στο τρίτο κεφάλαιο, περιγράφεται ο τρόπος σύνδεσης των υποκυκλωμάτων (cores) του συστήματος και αναφέρονται αναλυτικά οι διαθέσιμες διασυνδέσεις που μπορούν να χρησιμοποιηθούν. Στο τέταρτο κεφάλαιο, εξετάζονται αναλυτικά τα υποκυκλώματα (cores) που χρησιμοποιήθηκαν κατά την ανάπτυξη του συστήματος, ενώ στο πέμπτο κεφάλαιο γίνεται αναφορά όλων των ρυθμίσεων που πραγματοποιήθηκαν στα προαναφερθέντα υποσυστήματα (cores). Στο έκτο κεφάλαιο παρουσιάζονται αναλυτικά τα custom cores που δημιουργήθηκαν για τις ανάγκες του συστήματος. Στο έβδομο κεφάλαιο, γίνεται περιγραφή της κύριας εφαρμογής, των δυνατών τρόπων λειτουργίας (video ή photo) και των διαθέσιμων μορφών επεξεργασίας εικόνας (Median Filtering, Negative, Edge Detection, Image Sharpening) καθώς και μία παρουσίαση του συνολικού συστήματος. Στο τελευταίο κεφάλαιο, παρουσιάζονται τα συμπεράσματα που προέκυψαν κατά τη διαδικασία σχεδίασης, τα προβλήματα και οι δυσκολίες που πρόεκυψαν, όπως επίσης και μελλοντικές κατευθύνσεις για την περαιτέρω εξέλιξη του συστήματος. Θα ήθελα να ευχαριστήσω τον επιβλέποντα της προσπάθειας αυτής, τον Αναπληρωτή Καθηγητή κ. Ευάγγελο Ζυγούρη, η καθοδήγηση του οποίου υπήρξε καθοριστική, τους καθηγητές του τομέα Ηλεκτρονικής για την στήριξή τους καθώς και την οικογένεια μου για την συμπαράσταση κατά τη διάρκεια των σπουδών μου. Πύργας Λάμπρος ΠΑΤΡΑ 2015

7 iii Introduction This project objective is the design and development of an FPGA based basic image processing digital system. The system is based on the nios ii soft core processor and uses a number of cores and peripherals (SD Card, LTM touch screen and camera D5M). It has two system modes (video and photo) and four image processing modes (Median Filtering, Negative, Edge Detection, Image Sharpening). The main application is written in C. The system is controlled via the LTM touch screen which is also the output device of the system. The first chapter presents a quick summary of the system and the cores that are used. It also presents the LTM touch screen and the D5M camera peripherals. The second chapter presents the nios ii soft core processor and its features. The third chapter presents the way the system cores are connected and gives a detailed explanation of the available connection interfaces. The fourth chapter presents in detail all the cores that are used in the system and chapter five presents the configuration each of the above cores. The sixth chapter presents in detail the three custom cores that were created for our system. The seventh chapter presents the main application, the two system modes (video and photo), the available image processing modes (Median Filtering, Negative, Edge Detection, Image Sharpening) and the system hardware. The last chapter presents the conclusions of this project, the problems that occurred and some possible future improvements. Pyrgas Labros Patra 2015

8 iv

9 v Πίνακας περιεχομένων ΚΕΦΑΛΑΙΟ 1 Σύντομη Περιγραφή του Συστήματος Εισαγωγή Ο Επεξεργαστής Nios II University Program Cores, IP Cores και Custom Cores Τα University Program (UP) IP Cores Τα IP Cores Τα Custom Cores Η Αναπτυξιακή Πλακέτα DE2-70 της ALTERA Η TRDB-LTM LCD Touch Panel Δομικό διάγραμμα της LTM Το Serial Port Interface της LCD Driver IC Οι χρονισμοί εισόδου της LCD οθόνης αφής Το Serial Port Interface του AD Converter Λίστα καταχωρητών της LTM οθόνης αφής Η TRDB-D5M Camera Pixel Array Structure Output Data Timing Λίστα καταχωρητών της κάμερας D5M Τα χαρακτηριστικά της TRDB-D5M Το D5M Serial Bus Το Quartus II της ALTERA Το Nios II Software Build Tools (SBT) for Eclipse Το MATLAB ΚΕΦΑΛΑΙΟ 2 Ο Επεξεργαστής Nios II Αρχείο καταχωρητών (register file) Καταχωρητές γενικού σκοπού Καταχωρητές ελέγχου Αριθμητική και λογική μονάδα (ALU) Μη Υλοποιημένες Εντολές Εντολές Κινητής Υποδιαστολής... 39

10 vi 2.3 Σήματα επαναφοράς και αποσφαλμάτωσης (Reset and Debug Signals) Ελεγκτής εξαιρέσεων και διακοπών Reset Εξαιρέσεις Break Εξαιρέσεις Interrupt Εξαιρέσεις Εξαιρέσεις Σχετικές με Εντολές Οργάνωση Μνήμης και Περιφερειακών Δίαυλοι Δεδομένων και Εντολών Κρυφή Μνήμη Tightly-Coupled Μνήμη Χάρτης Διευθύνσεων (Address Map) Μονάδα αποσφαλμάτωσης JTAG (JTAG debug module) Το σύνολο εντολών του Nios II I-Type R-Type J-Type Τα OPcodes των Εντολών ΚΕΦΑΛΑΙΟ 3 Οι διασυνδέσεις Avalon Avalon Streaming Interfaces Τα σήματα των Avalon-ST διασυνδέσεων Data Transfer with Backpressure Μεταφορές πακέτων δεδομένων Λεπτομέριες σημάτων Avalon Memory-Mapped Interfaces Τα σήματα των Avalon-MM διασυνδέσεων Ιδιότητες διασύνδεσης Timing Transfers Address Alignment Avalon-MM Slave Addressing Avalon Clock and Reset Interfaces Clock Sink Signal Roles Clock Sink Properties Associated Clock Interfaces... 82

11 vii Clock Source Signal Roles Clock Source Properties Reset Sink Reset Sink Interface Properties Associated Reset Interfaces Reset Source Reset Source Interface Properties Avalon Conduit Interfaces Conduit Signals Reset Source Interface Properties Avalon Interrupt Interfaces Interrupt Sender Interrupt Receiver Interrupt Timing ΚΕΦΑΛΑΙΟ 4 Τα SOPC Cores του Συστήματος Το Nios II/f Core Η Αριθμητική και Λογική Μονάδα (ALU) Πρόσβαση σε Μνήμη (Memory Access) Execution Pipeline Exception Handling JTAG Debug Module Τα IP Cores Το JTAG UART Core Το Interval Timer Core Το SPI (3 Wire Serial) Core Το PIO Core Τα University Program IP Cores Το Clock Signals for DE-Series Board Peripherals Core Το SDRAM Controller Core Το SD Card Controller Core Το Pixel Buffer DMA Controller Core Το VGA Controller Core Το Character Buffer Core Το DMA Controller for Video Core...118

12 viii Το Edge Detection Core Το Bayer Pattern Resampler Core Το Dual-Clock FIFO Core Το RGB Resampler Core Το Color-Space Converter Core Το Alpha Blender Core Το Video-Stream Router Core Το Clipper Core Το Video-In Decoder Core Το Scaler Core ΚΕΦΑΛΑΙΟ 5 Ρυθμίσεις των SOPC Cores του Συστήματος Ρυθμίσεις των IP Cores Ρυθμίσεις του Nios II Core Ρυθμίσεις του JTAG UART Core Ρυθμίσεις του Interval Timer Core Ρυθμίσεις του SPI (3 Wire Serial) Core Ρυθμίσεις των PIO Cores Ρυθμίσεις των University Program IP Cores Ρυθμίσεις της SDRAM Μνήμης του Συστήματος Ρυθμίσεις του Clock Signals for DE-Series Board Peripherals Core Ρυθμίσεις του Pixel Buffer DMA Controller Core Ρυθμίσεις του VGA Controller Core Ρυθμίσεις του Character Buffer Core Ρυθμίσεις του DMA Controller for Video Core Ρυθμίσεις του Edge Detection Core Ρυθμίσεις του Bayer Pattern Resampler Core Ρυθμίσεις του Dual-Clock FIFO Core Ρυθμίσεις του RGB Resampler Core Ρυθμίσεις των Color-Space Converter Cores Ρυθμίσεις του Alpha Blender Core Ρυθμίσεις των Video-Stream Router Cores Ρυθμίσεις των Clipper Cores Ρυθμίσεις του Video-In Decoder Core Ρυθμίσεις του Scaler Core...160

13 ix ΚΕΦΑΛΑΙΟ 6 Τα Custom Cores του συστήματος Δημιουργία ενός Custom Core Ο SOPC Builder Ένα SOPC Builder component Δημιουργία ενός custom component Το Median Filter Core Σχολιασμός του κώδικα σε VHDL του Median Filter core Σύγκριση των αποτελεσμάτων του Median filter core με το Matlab Το Sharpen Convolution Core Σχολιασμός του κώδικα σε VHDL του Sharpen Convolution Core Σύγκριση των αποτελεσμάτων του Sharpen convolution filter core με το Matlab Το Negative Core Σχολιασμός του κώδικα σε VHDL του Negative core Σύγκριση των αποτελεσμάτων του Negative core με το Matlab ΚΕΦΑΛΑΙΟ 7 Περιγραφή Του Συστήματος Περιγραφή Λειτουργίας του Συστήματος Το Υλικό και το Λογισμικό του Συστήματος Σχολιασμός του Τελικού Συστήματος ΚΕΦΑΛΑΙΟ 8 Συμπεράσματα Προβλήματα Προοπτικές Παράρτημα Α Κώδικας C Παράρτημα Β Κώδικες VHDL Β.1 Ο VHDL κώδικας για το Median Filter Core Β.2 Ο VHDL κώδικας για το Sharpen Convolution Filter Core Β.3 Ο VHDL κώδικας για το Negative Core Βιβλιογραφία

14 x

15 ΚΕΦΑΛΑΙΟ 1 Σύντομη Περιγραφή του Συστήματος 1.1 Εισαγωγή Σκοπός της παρούσας εργασίας είναι η ανάπτυξη ενός συστήματος βασισμένου στην τεχνολογία FPGA και την χρήση του επεξεργαστής Nios II, το οποίο να έχει τη δυνατότητα φόρτωσης, λήψης, επεξεργασίας και απεικόνισης εικόνων με μέγεθος (ανάλυση εικόνας) 640Χ480. Ο έλεγχος των λειτουργιών του συστήματος πραγματοποιείται μέσω μίας οθόνης αφής. Το σύστημα, το οποίο θα περιγραφεί αναλυτικά στη συνέχεια, δέχεται ως είσοδο εικόνες (.bmp) από την κάρτα SD και ροη video από την κάμερα D5M που είναι συνδεδεμένη στην μια από της δυο expansion header της κάρτας DE2-70 της ALTERA και εκτελεί διάφορες βασικές ρουτίνες επεξεργασίας εικόνας, όπως Median Filtering, Negative, Edge Detection, Image Sharpening, σύμφωνα με το τι θα επιλέξει ο χρήστης ακουμπώντας το σημείο της

16 2 Κεφάλαιο 1 οθόνης αφής LTM με την αντίστοιχη ένδειξη. Ακόμη το σύστημα παρέχει δυο τρόπους λειτουργίας video και photo, έτσι ώστε να είναι δυνατή η επίδειξη των εικόνων που βρίσκονται στην SD Card. Τέλος η έξοδος του συστήματος οδηγείται στην οθόνη LTM που είναι συνδεδεμένη στην δεύτερη από της δυο expansion header της κάρτας DE2-70. Το σύστημα βασίζεται στον soft-core επεξεργαστή Nios II της ALTERA για την αρχικοποίηση των περιφερειακών συσκευών και την ομαλή ροη και λειτουργία του συστήματος. Τα περισσότερα cores που χρησιμοποιήθηκαν για την δημιουργία του συστήματος είναι μέρος της βιβλιοθήκης περιφερειακών συσκευών με όνομα UP IP Cores (University Program Intellectual Property Cores) που έχει αναπτυχθεί από την ALTERA για εκπαιδευτικούς κυρίως σκοπούς. Επίσης δημιουργήθηκαν τρία cores (το Negative Core, το Median Filter Core και το Sharpen Convolution Core) για την υλοποίηση της αντίστοιχης επεξεργασίας. Χρησιμοποιήθηκε η SD Card, η κάμερα D5M και η οθόνη αφής LTM. Η αναπτυξιακή κάρτα που χρησιμοποιήθηκε ήταν το DE2-70 Board της ALTERA και τα εργαλεία ανάπτυξης για το hardware μέρος είναι το Quartus v11.0sp1 και το SOPC Builder (στοιχείο του Quartus), ενώ για το software μέρος, το Nios II Software Build Tools (SBT) for Eclipse. Η σωστή λειτουργία των cores που δημιουργήθηκαν επιβεβαιώθηκε με την βοήθεια του MATLAB. 1.2 Ο Επεξεργαστής Nios II O επεξεργαστής Nios II είναι ένας παραμετροποιήσιμος soft IP core, σε αντίθεση με τους κοινούς μικροελεγκτές που δεν επιτρέπουν αλλαγές. Ο χρήστης μπορεί να προσθέσει ή να αφαιρέσει δυνατότητες ανάλογα με το εκάστοτε σύστημα επιτυγχάνοντας την ζητούμενη απόδοση ή το ζητούμενο κόστος κάθε φορά. Soft-core σημαίνει ότι ο επεξεργαστής δεν είναι κατασκευασμένος σε πυρίτιο αλλά μπορεί να χρησιμοποιηθεί για κάθε οικογένεια FPGA της ALTERA. Τα βασικά χαρακτηριστικά του είναι : Πλήρες σετ εντολών 32-bit, data path, και address space 32 καταχωρητές γενικού σκοπού Προαιρετικά σύνολα σκιωδών καταχωρητών

17 Σύντομη Περιγραφή του Συστήματος 3 32 πηγές διακοπών Διασύνδεση για εξωτερικό χειριστή διακοπών για την προσθήκη περισσοτέρων πηγών διακοπών Εντολή για πολλαπλασιασμό και διαίρεση που παράγει ένα αποτέλεσμα 32-bit Εντολές για τον υπολογισμό 64-bit και 128-bit γινομένων πολλαπλασιασμού Προαιρετικές floating-point εντολές για μονής ακρίβειας floating-point πράξεις Εντολή για barrel shifter Πρόσβαση σε μια πληθώρα on-chip περιφερειακών, και διασυνδέσεις για off-chip μνήμες και περιφερειακά Hardware-assisted μονάδα αποσφαλμάτωσης Προαιρετική μονάδα διαχείρισης μνήμης (MMU) για την υποστήριξη λειτουργικών συστημάτων που απαιτούν MMUs Προαιρετική μονάδα προστασίας μνήμης (MPU) Περιβάλλον ανάπτυξης software βασισμένο στην GNU C/C++ tool chain και στα Nios II Software Build Tools (SBT) for Eclipse Ολοκλήρωση με τον SignalTap II Embedded Logic Analyzer της Altera, που επιτρέπει ανάλυση των εντολών και των δεδομένων σε πραγματικό χρόνο Αρχιτεκτονική συνόλου εντολών (ISA) συμβατή με όλα τα συστήματα Nios II επεξεργαστών Απόδοση έως 250 DMIPS Προαιρετικός κώδικας διόρθωσης σφαλμάτων (ECC) Το ευέλικτο σετ περιφερειακών είναι μια από τις κύριες διαφορές ανάμεσα σε ένα Nios II σύστημα και τους κοινούς μικροελεγκτές. Απόρροια αυτού του ευέλικτου σετ περιφερειακών είναι ο επίσης ευέλικτος χάρτης διευθύνσεων (flexible address map). Η ALTERA παρέχει ειδικές σχήματα software για πρόσβαση σε μνήμες και περιφερειακά ανεξάρτητα από την θέση της διεύθυνσή τους. Υπάρχουν δύο γενικές κατηγορίες περιφερειακών: Standard Peripherals Custom Peripherals

18 4 Κεφάλαιο 1 Standard Peripherals Η ALTERA παρέχει ένα σετ από περιφερειακά που χρησιμοποιούνται συχνά σε συστήματα μικροεπεξεργαστών, όπως χρονιστές, σειριακές διασυνδέσεις, I/O γενικού σκοπού, SDRAM ελεγκτές, και άλλες διασυνδέσεις μνήμης. Custom Components Ο χρήστης μπορεί ακόμη να δημιουργήσει νέα υποσυστήματα και να τα ενσωματώσει σε ένα Nios II σύστημα. Για συστήματα όπου η απόδοση είναι κρίσιμος παράγοντας και το πρόγραμμα απαιτεί πολλούς κύκλους ρολογιού για την εκτέλεση συγκεκριμένων κομματιών κώδικα, είναι συνήθης τεχνική να αναπτύσσονται περιφερειακά που υλοποιούν τις ίδιες λειτουργίες σε hardware. Αυτή η προσέγγιση προσφέρει διπλό όφελος: η υλοποίηση σε hardware είναι ταχύτερη από την αντίστοιχη software ο επεξεργαστής είναι ελεύθερος να εκτελεί άλλες λειτουργίες παράλληλα. Custom Instructions Όπως οι νέες περιφερειακές συσκευές, έτσι και οι προσαρμοζόμενες εντολές επιτρέπουν την βελτίωσης της απόδοσης του συστήματος προσθέτοντας στον επεξεργαστή επιπλέον hardware. Η πρόσθετη λογική ενσωματώνεται στην ALU. Εντολές. Όμοια με τις μητρικές(native) εντολές του Nios II, οι προσαρμοζόμενες εντολές μπορούν να δεχτούν τιμές από δύο διαφορετικούς καταχωρητές και αποθηκεύουν το αποτέλεσμα σε ένα τρίτο καταχωρητή. Επειδή η υλοποίηση του επεξεργαστή γίνεται σε επαναπρογραμματιζόμενο FPGA, ο σχεδιασμός τόσο σε hardware όσο και σε software μπορεί να γίνει ταυτόχρονα. 1.3 University Program Cores, IP Cores και Custom Cores

19 Σύντομη Περιγραφή του Συστήματος 5 Για την υλοποίηση του συστήματος μας χρησιμοποιήθηκε ένας αριθμός έτοιμων υποσυστημάτων (cores) που είτε είναι μέρος μιας βιβλιοθήκης με όνομα UP IP Cores, είτε παρέχονται εξ αρχής ως μέρος του SOPC Builder. Απαραίτητη ήταν όμως και η δημιουργία τριών νέων υποσυστημάτων (custom) για την ικανοποίηση των αναγκών του συστήματος Τα University Program (UP) IP Cores Τα University Program IP Cores είναι υποσυστήματα έτοιμα προς χρήση και υποστηρίζουν όλες τις περιφερειακές συσκευές των boards της ALTERA και απαιτούν ξεχωριστή εγκατάσταση για να είναι δυνατή η χρήση τους από τον SOPC Builder. Τα UP IP Cores που χρησιμοποιήθηκαν στο σύστημά μας είναι τα παρακάτω: Clock Signals for DE-Series Board Peripherals SDRAM Controller SD Card Controller Pixel Buffer DMA Controller VGA Controller Character Buffer DMA Controller for Video Edge Detection Bayer Pattern Resampler Dual-Clock FIFO RGB Resampler Color-Space Converter Alpha Blender Video-Stream Router Clipper Video-In Decoder Scaler

20 6 Κεφάλαιο Τα IP Cores Τα IP Cores που παρέχονται από την ALTERA και εγκαθίστανται μαζί με το Quartus και βασικά στοιχεία κάθε SOPC συστήματος. Τα IP Cores που χρησιμοποιήθηκαν στο σύστημά μας είναι τα παρακάτω: JTAG UART Interval Timer SPI (3 Wire Serial) Parallel input/output (PIO) Τα Custom Cores Για τις ανάγκες του συστήματος μας ήταν αναγκαία η δημιουργία τριών custom cores μέσω του SOPC Builder. Τα Custom Cores που δημιουργήθηκαν για το σύστημά μας είναι τα παρακάτω: Negative Median Filter Sharpen Convolution 1.4 Η Αναπτυξιακή Πλακέτα DE2-70 της ALTERA Η αναπτυξιακή πλακέτα DE2-70 έχει όλα εκείνα τα χαρακτηριστικά που επιτρέπουν στο χρήστη να σχεδιάσει πολύπλοκα και απαιτητικά κυκλώματα που υλοποιούν multimedia εφαρμογές παρέχοντας επιπλέον την δυνατότητα επικοινωνίας με μια πληθώρα περιφερικών. Στο σχήμα 1.1 απεικονίζεται η βασική διάταξη της κάρτας καθώς και τα κύρια περιφερειακά της.

21 Σύντομη Περιγραφή του Συστήματος 7 Σχήμα 1.1 Η αναπτυξιακή κάρτα DE2-70 της ALTERA Η αναπτυξιακή κάρτα DE2-70 της ALTERA περιλαμβάνει : Το FPGA Cyclone ΙΙ 2C70 της Altera. Τη συσκευή σειριακής μορφοποίησης EPCS16 της Altera. Το USB Blaster (on board) για προγραμματισμό της και έλεγχο API από τον χρήστη. Υποστηρίζονται JTAG και active serial (AS) τύποι προγραμματισμού. SSRAM μνήμη των 2-Mbyte, οργανωμένη σε τομείς 512K x 36 bits. Δύο SDRAM μνήμες των 32-Mbyte, οργανωμένη ως 4M x 16 bits x 4 banks. Flash μνήμη (NOR) των 8-Mbyte. Υποδοχή καρτών SD, που είναι προσβάσιμη ως εξωτερική μνήμη για τον Nios II επεξεργαστή μέσω του προγράμματος οδήγησης για κάρτες SD που παρέχεται από το DE2. Τέσσερις διακόπτες-πλήκτρα (push-buttons) που ενεργοποιούνται από ένα κύκλωμα Schmitt σκανδαλιστή. Συνήθως βρίσκονται στην υψηλή στάθμη, ενώ παράγουν έναν χαμηλό παλμό όταν πιέζονται. Δεκαοχτώ διακόπτες δύο θέσεων (Up/Down) που χρησιμοποιούνται σαν είσοδοι. Ένας διακόπτης παράγει το λογικό 0 όταν είναι στη θέση Down και το λογικό 1 όταν είναι στη θέση Up.

22 8 Κεφάλαιο 1 Δύο ρολόγια χρονισμού, το ένα στα 50 MHz και το άλλο στα MHz. Διαθέτει επίσης και έναν SMA συνδετήρα ο οποίος μπορεί να χρησιμοποιηθεί προκειμένου να συνδεθεί μια εξωτερική πηγή ρολογιού στην πλακέτα. Έναν Audio CODEC (Wolfson WM8731) των 24-bit, με συχνότητα δειγματοληψίας από 8KHz έως και 96 KHz, με γραμμή εισόδου, γραμμή εξόδου (line-in, line-out) και είσοδο μικροφώνου (mic-in) που ελέγχεται με πρόσβαση στους καταχωρητές του μέσω του I 2 C πρωτόκολλου επικοινωνίας. Ένα VGA video-ψηφιακό-αναλογικό μετατροπέα (ADV7123της Analog Devices), υψηλής ταχύτητας, 10 ψηφίων, που υποστηρίζει ανάλυση έως και 1600?1200 pixels στα 100 ΜHz. Μία οθόνη LCD που μπορεί να χρησιμοποιηθεί προκειμένου να επιδείξει κείμενο στέλνοντας κατάλληλες εντολές στον LCD ελεγκτή (HD44780). Δύο ADV7180 Multi-format SDTV αποκωδικοποιητές TV. Πρόκειται για έναν αποκωδικοποιητή video που ανιχνεύει αυτόματα και μετατρέπει ένα αναλογικό σήμα βασικής ζώνης (NTSC, PAL και SECAM) σε 4:2:2 δεδομένα video. Το ολοκληρωμένο ADV7180 είναι συμβατό με ένα ευρύ φάσμα video συσκευών, όπως DVD player, LCD TV και άλλες. Ένα 10/100 Ethernet ελεγκτή, μια μονάδα για έλεγχο μέσου προσπέλασης (Medium Access Control MAC ) και έναν 10/100Μ PHY πομποδέκτη. Υποστηρίζει 100Base-T και 10Base-T εφαρμογές, λειτουργία αμφίδρομης επικοινωνίας με ρυθμούς μετάδοσης 10 Mb/s και 100 Mb/s, IP/TCP/UDP δημιουργία και έλεγχο checksum και είναι πλήρως συμβατός με τις IEEE 802.3u προδιαγραφές. Ένα USB ελεγκτής κύριας / δευτερεύουσας συσκευής (Host/Slave device) με δυο USB θύρες για διασύνδεση τύπου Α και τύπου Β. Είναι πλήρως συμβατό με το Universal Serial Bus Specification Rev. 2.0, υποστηρίζει μεταφορά δεδομένων τόσο σε υψηλή όσο και σε χαμηλή ταχύτητα καθώς και προγραμματιζόμενες λειτουργίες εισόδου/εξόδου (PIO:Programmed I/O) καθώς και απευθείας προσπέλαση μνήμης (DMA). Ένα RS-232 πομποδέκτη. Διασύνδεση ποντικιού/πληκτρολογίου τύπου PS/2. Έναν kb/s Πομποδέκτη υπέρυθρων (IrDA). Δεκαοχτώ κόκκινα LEDs και εννέα πράσινα LEDs. Δύο κεφαλές επέκτασης (expansion headers) ογδόντα ακίδων συνολικά. Οι κεφαλές είναι σχεδιασμένες για να δέχονται IDE καλωδιοταινία 40 ακίδων.

23 Σύντομη Περιγραφή του Συστήματος 9 Εκτός από τα hardware χαρακτηριστικά, η κάρτα DE2 διαθέτει την απαραίτητη υποστήριξη λογισμικού για τις τυπικές διασυνδέσεις εισόδου/εξόδου καθώς και δυνατότητα ελέγχου (control panel) των διάφορων hardware μερών της. Το FPGA Cyclone ΙΙ 2C70 της Altera, έχει i) 68,416 Λογικά Στοιχεία (Logic Elements), ii) 250 M4K RAM στοιχεία, iii) 1,152,000 συνολικά RAM bits, iv) 150 ενσωματωμένους πολλαπλασιαστές, v) 4 PLLs (Phase Locked Loops) και 622 ακίδες (pins) εισόδου/εξόδου vi) ένα πακέτο FineLine BGA 896 ακίδων (pins). Στο σχήμα 1.2 παρατίθεται το δομικό διάγραμμα της DE2-70 πλακέτας. Προς μέγιστη διευκόλυνση, όλες οι συνδέσεις πραγματοποιούνται μέσω της συσκευής FPGA Cyclone II. Σχήμα 1.2 Το δομικό διάγραμμα της κάρτας DE2-70 της ALTERA

24 10 Κεφάλαιο Η TRDB-LTM LCD Touch Panel Η TRDB-LTM LCD οθόνη αφής παρέχει τη δυνατότητα διαχείρισης όλου του συστήματος μέσω της ευαίσθητης στην αφή επιφάνειάς της. Πρόκειται για μια οθόνη των 4.3 ιντσών η οποία είναι πλήρως συμβατή με την πλατφόρμα DE2-70 της Altera και μπορεί να συνδεθεί με αυτή μέσω του δεύτερου 40-pins expansion header που διαθέτει ο DE2-70. Τα βασικά χαρακτηριστικά της είναι: Σχήμα 1.3 Η TRDB-LTM LCD οθόνη αφής. Έχει ενσωματωμένη λεπτή ενεργή επιφάνεια, την TD043MTEA1. Υποστηρίζει 24-bit παράλληλη RGB διασύνδεση. 3-wire έλεγχος καταχωρητών για επιλογή λειτουργίας. Ενσωματωμένη ρύθμιση της αντίθεσης (contrast), της φωτεινότητας (brightness) και της παραμέτρου gamma της οθόνης. Μετατροπή των X/Y συντεταγμένων του σημείου αφής στα αντίστοιχα ψηφιακά δεδομένα μέσω του αναλογικό-ψηφιακού μετατροπέα AD7843.

25 Σύντομη Περιγραφή του Συστήματος 11 Πίνακας 1.1 Τεχνικά χαρακτηριστικά της οθόνης αφής Δομικό διάγραμμα της LTM Το δομικό διάγραμμα της LTM παρουσιάζεται παρακάτω: Σχήμα 1.4 Δομικό διάγραμμα της LTM. H LTM οθόνη αφής αποτελείτε από τρία μεγάλα υποσυστήματα: το LCD touch panel, τον AD converter και το 40-pins expansion header. Όλες οι διασυνδέσεις της LTM συνδέονται με την πλακέτα DE2-70 μέσω του 40-pins expansion header. Το LCD και touch panel υποσύστημα λαμβάνει τα σήματα ελέγχου, που παρέχονται απευθείας από το FPGA ως είσοδος, και απεικονίζει εικόνες στην οθόνη. Τέλος, το υποσύστημα AD converter θα μετατρέψει τις συντεταγμένες του σημείου που ενεργοποιείται μέσω αφής της οθόνης στα αντίστοιχα ψηφιακά δεδομένα και θα τα εξάγει στο FPGA μέσω του expansion header Το Serial Port Interface της LCD Driver IC Το υποσύστημα LCD και touch panel της LTM οθόνη αφής είναι εξοπλισμένο με ένα LCD driver IC για να υποστηρίζει τρείς διαφορετικές αναλύσεις οθόνης. Είναι επίσης εξοπλισμένο με δυνατότητες διασύνδεσης σειριακής θύρας, timing controller, source driver και κυκλώματα παροχής ενέργειας. Για τον έλεγχο όλων αυτών των δυνατοτήτων, οι χρήστες μπορούν να χρησιμοποιήσουν το FPGA για να ρυθμίσουν τους καταχωρητές στον LCD driver IC μέσω της διασύνδεσης σειριακής θύρας. Υπάρχει επίσης ένας αναλογικό-ψηφιακός μετατροπέας (ADC) στην LTM για τη μετατροπή των αναλογικών συντεταγμένων X/Y του σημείου αφής σε ψηφιακά δεδομένα και την

26 12 Κεφάλαιο 1 εξαγωγή τους στο FPGA μέσω της διασύνδεσης σειριακής θύρας του ADC. Ο LCD driver IC και η ADC διασύνδεση σειριακής θύρας συνδέονται απευθείας στο FPGA μέσω του 40-pins expansion header και του IDE καλωδίου. Λόγω του περιορισμένου αριθμού των I/O στον expansion header, οι σειριακές διασυνδέσεις των LCD driver IC και ADC πρέπει να μοιράζονται το ίδιο ρολόι χρονισμού (ADC_DCLK) και το ίδιο chip enable (SCEN) στο expansion header. Για να αποφευχθεί η ταυτόχρονη λειτουργία των δύο σειριακών διασυνδέσεων, το σήμα chip enable (CS) συνδέεται με τον ADC μέσω ενός λογικού αναστροφέα, όπως φαίνεται και στο παρακάτω σχήμα. Σχήμα 1.5 Το serial interface της LCD και του AD7843 Ο LCD driver IC αναγνωρίζει την έναρξης μεταφοράς δεδομένων στην αρνητική ακμή του σήματος SCEN και αρχίζει την μεταφορά Οι χρονισμοί εισόδου της LCD οθόνης αφής Για να προσδιορίσουμε την αλληλουχία και τους χρονισμούς των σημάτων της εικόνας που εμφανίζεται στην LCD οθόνη, τα αντίστοιχα σύγχρονα σήματα από το FPGA στην LCD θα πρέπει να ακολουθούν τις χρονικές προδιαγραφές. Ένας active-low παλμός συγκεκριμένης χρονικής διάρκειας (t hpw ) εφαρμόζεται στην είσοδο οριζόντιου συγχρονισμού (HD) της LCD οθόνης, ο οποίος σηματοδοτεί το τέλος μίας γραμμής δεδομένων και την αρχή της επόμενης. Οι είσοδοι δεδομένων (RGB) της LCD οθόνης αφής δεν είναι έγκυρα για μια χρονική περίοδο, που ονομάζεται hsync back porch

27 Σύντομη Περιγραφή του Συστήματος 13 (t hbp ), μετά τον παλμό οριζόντιου συγχρονισμού, που ακολουθείται από την περιοχή απεικόνισης (t hd ). Κατά τη διάρκεια των δεδομένων της περιοχής απεικόνισης τα RGB δεδομένα οδηγούν κάθε pixel στην σειρά που απεικονίζονται. Ακόμη, κατά τη χρονική περίοδο των δεδομένων της περιοχής απεικόνισης, το σήμα DEN οδηγείται σε υψηλό δυναμικό. Τέλος, υπάρχει μία άλλη χρονική περίοδος η οποία ονομάζεται hsync front porch (t hfp ), όπου τα RGB σήματα δεν είναι έγκυρα μέχρι να εμφανιστεί ο επόμενος παλμός οριζόντιου συγχρονισμού. Σχήμα 1.6 LCD οριζόντιες προδιαγραφές χρονισμών. Πίνακας 1.2 LCD οριζόντιες παράμετροι χρονισμών.

28 14 Κεφάλαιο 1 Ο κάθετος συγχρονισμός (VD) είναι ίδιος με τον οριζόντιο συγχρονισμό (HD), με μόνη διαφορά ότι ένας παλμός vsync σηματοδοτεί τον τερματισμό ενός ολόκληρου καρέ και την έναρξη του επόμενου. Τα δεδομένα αναφέρονται στο σετ γραμμών του καρέ. Σχήμα 1.7 LCD κάθετες προδιαγραφές χρονισμών. Πίνακας 1.3 LCD κάθετες παράμετροι χρονισμών.

29 Σύντομη Περιγραφή του Συστήματος 15 Πίνακας 1.4 LCD παράμετροι χρονισμών Το Serial Port Interface του AD Converter Η LTM περιλαμβάνει τον AD7843 αναλογικό-ψηφιακό μετατροπέα της Analog Devices. Ο AD7843 είναι ένας 12-bit αναλογικό-ψηφιακό μετατροπέας για την ψηφιοποίηση των συντεταγμένων X/Y του σημείου αφής. Οι συντεταγμένες αυτές αποθηκεύονται στον AD7834 και μπορούν να αποκτηθούν από τον χρήστη μέσω της διασύνδεσης σειριακής θύρας. Για την απόκτηση των συντεταγμένων από τον ADC, το πρώτο πράγμα που πρέπει να κάνουν οι χρήστες είναι παρακολουθούν το σήμα ADC_PENIRQ_n. Το σήμα αυτό προέρχεται από τον ADC και είναι μόνιμα σε υψηλό δυναμικό. Όταν ο χρήστης ακουμπήσει κάποιο σημείο της οθόνης το σήμα ADC_PENIRQ_n μεταβαίνει σε χαμηλό δυναμικό, δημιουργώντας μία διακοπή (interrupt) στο FPGA που με την σειρά του στέλνει μία λέξη ελέγχου στον ADC μέσω της διασύνδεσης σειριακής θύρας.η λέξη ελέγχου παρέχεται στον ADC μέσω του ακροδέκτη DIN και παρέχει πληροφορίες για την έναρξη της μετατροπής, τον αριθμό των ψηφίων που θα χρησιμοποιηθούν για τη μετατροπή, τη διεύθυνση καναλιού καθώς επίσης και τον τερματισμό λειτουργίας του ADC. Στον παρακάτω πίνακα φαίνονται αναλυτικά όλες οι πληροφορίες που περιέχονται στο ψηφιακό σήμα DIN.

30 16 Κεφάλαιο 1 Πίνακας 1.5 Καταχωρητής ελέγχου του ADC. Το σειριακό ρολόι παρέχει το ρολόι μετατροπής και επίσης ελέγχει την μεταφορά πληροφοριών από και προς τον ADC. Μία πλήρης μετατροπή μπορεί να επιτευχθεί μέσα σε 24 κύκλους του ρολογιού ADC_DCLK. Το ρολόι (ADC_DCLK) και το σήμα chip enable (SCEN) της διασύνδεσης σειριακής θύρας μοιράζονται το ίδιο σήμα I/Ο με τον LCD driver IC. Οι χρήστες πρέπει να αποφεύγουν τον ταυτόχρονο έλεγχο του ADC και του LCD driver IC. Επίσης, επειδή το σήμα chip enable (SCEN) εισέρχεται στον ADC μέσω ενός λογικού αντιστροφέα, το σήμα αυτό θα πρέπει να αντιστρέφεται όταν χρησιμοποιείται για τον έλεγχο του ADC.

31 Σύντομη Περιγραφή του Συστήματος 17 Σχήμα 1.8 Οι χρονισμοί εισόδου και τα σήματα εξόδου του ADC Λίστα καταχωρητών της LTM οθόνης αφής Η TRDB-LTM LCD οθόνη αφής διαθέτει 35 καταχωρητές οι οποίοι είναι διαθέσιμοι για ρύθμιση από το χρήστη Στον παρακάτω πίνακα παρουσιάζονται οι καταχωρητές μαζί με τις αρχικές τιμές τους.

32 18 Κεφάλαιο 1 Πίνακας 1.6 Λίστα καταχωρητών της της LTM οθόνης αφής

33 Σύντομη Περιγραφή του Συστήματος Η TRDB-D5M Camera Η TRDB-D5M Camera ενσωματώνει έναν CMOS αισθητήρα των 5.1 Mpixels. Η TRDB-D5M κάμερα έχει την δυνατότητα σύνδεσης με την κάρτα DE2-70 μέσω του ενός εκ των δύο 40- pins expansion headers. Σχήμα 1.9 Η TRDB-D5M Camera Τα βασικά χαρακτηριστικά της είναι: Υψηλός ρυθμός λήψης καρέ (frame rate). Εξαιρετική απόδοση σε χαμηλά επίπεδα φωτισμού. Χαμηλό ρεύμα διαρροής. Γενική απελευθέρωση του σήματος Reset, για ταυτόχρονη έκθεση στο φώς όλων των γραμμών. Bulb exposure mode για ρύθμιση του χρόνου έκθεσης στο φώς (exposure time). Snapshot mode για τη λήψη εικόνων οποιαδήποτε στιγμή. Οριζόντια και κάθετη αναστροφή εικόνων. Μέθοδος skip σε γραμμές και στήλες για μείωση του μεγέθους της εικόνας χωρίς να μειωθεί το οπτικό πεδίο του αισθητήρα. Μέθοδος binning σε γραμμές και στήλες για τη βελτιστοποίηση της ποιότητας της εικόνας όταν έχουμε αλλαγή του μεγέθους της. Απλοποιημένη σειριακή διασύνδεση δυο καλωδίων (two wire serial interface). Προγραμματιζόμενος έλεγχος του κέρδους (gain), του ρυθμού λήψης καρέ (frame rate), του μεγέθους του καρέ (frame size) και του χρόνου έκθεσης (exposure time). Αυτόματη ρύθμιση του επιπέδου του μαύρου. On-chip PLL.

34 20 Κεφάλαιο Pixel Array Structure Ο πίνακας των pixel της TRDB-D5M αποτελείται από στήλες και γραμμές και διευθυνσιοδοτείται από γραμμή και στήλη. Η διεύθυνση «γραμμή 0 και στήλη 0» αντιπροσωπεύει την πάνω δεξιά γωνία του πίνακα. Η ενεργός περιοχή του πίνακα είναι γραμμές και στήλες και αποτελεί το σημείο που εξάγεται η εικόνας. Η περιοχή αυτή περικλείεται από μια οριακή περιοχή από ανενεργά pixels. Η οριακή περιοχή μπορεί να χρησιμοποιηθεί για την αποφυγή αποφυγή φαινομένων ακμής (edge effects) κατά την επεξεργασία χρώματος. Επίσης, οι οπτικά μαύρες γραμμές και στήλες από pixels χρησιμεύουν στη ρύθμιση του επιπέδου του μαύρου. Τα pixels εξάγονται σε Bayer pattern format και αποτελούνται από τέσσερα χρώματα : πράσινο1, πράσινο2, κόκκινο και μπλε (G1, G2, R, B) αντιπροσωπεύοντας τρία χρωματικά φίλτρα. Τα πράσινο1 και πράσινο2 έχουν το ίδιο χρωματικό φίλτρο αλλά αντιμετωπίζονται ως δύο διαφορετικά χρώματα από το data path και το analog signal chain. Σχήμα 1.10 Pixel Array Description

35 Σύντομη Περιγραφή του Συστήματος 21 Σχήμα 1.11 Pixel Color Pattern Detail (Top Right Corner) Output Data Timing Οι εξερχόμενες εικόνες χωρίζονται σε καρέ (frames) και κάθε ένα από αυτά χωρίζεται σε γραμμές. Από προεπιλογή, ο αισθητήρας δημιουργεί καρέ γραμμών και στηλών. Τα σήματα FRAME_VALID και LINE_VALID προσδιορίζουν τα όρια ανάμεσα σε καρέ και γραμμές αντίστοιχα. Το σήμα PIXCLK μπορεί να χρησιμοποιηθεί ως ρολόι χρονισμού για την εξαγωγή των δεδομένων. Σε κάθε κύκλο του σήματος PIXCLK, ένας 12-bit αριθμός δεδομένων ενός Pixel εξάγεται από τα pins DOUT. Όταν είναι ενεργά ταυτόχρονα και τα δύο σήματα FRAME_VALID και LINE_VALID η τιμή του εισερχόμενου pixel είναι έγκυρη. Κύκλοι του σήματος PIXCLK που συμβαίνουν όταν το σήμα FRAME_VALID είναι ανενεργό ονομάζονται vertical blanking. Κύκλοι του σήματος PIXCLK που συμβαίνουν όταν το σήμα LINE_VALID είναι ανενεργό ονομάζονται horizontal blanking. Σχήμα 1.12 Default Pixel Output Timing Ο χρονισμός των σημάτων FRAME_VALID και LINE_VALID είναι στενά συνδεδεμένος με τους χρόνους εξαγωγής ενός frame και μίας γραμμής αντίστοιχα.to σήμα FRAME_VALID θα ενεργοποιηθεί για έναν ακέραιο αριθμό χρόνου γραμμής (row time) που κανονικά θα

36 22 Κεφάλαιο 1 ισούται με το ύψος της εξερχόμενης εικόνας. Το σήμα LINE_VALID θα ενεργοποιηθεί κατά τη διάρκεια της εξαγωγής έγκυρων pixel της κάθε γραμμής. Η αρχική ενεργοποίηση του σήματος θα καθυστερήσει σε σχέση με το FRAME_VALID κατά 609 κύκλους του σήματος PIXCLK. Το σήμα PIXCLK αντιπροσωπεύει το χρόνο που απαιτείται για να εξαχθούν τα δεδομένα ενός pixel από τον πίνακα και τυπικά είναι ίσος με ένα κύκλο του EXTCLK. Ο αισθητήρας εξάγει δεδομένα στο μέγιστο ρυθμό του ενός pixel ανά κύκλο PIXCLK. Ένας κύκλος του χρόνου γραμμής (row time) είναι η περίοδος από την εξαγωγή του πρώτου pixel μιας γραμμής έως την εξαγωγή του πρώτου pixel της επόμενης. Σχήμα 1.13 Frame Timing Οι τυπικές τιμές ανάλυσης εικόνας και ρυθμού λήψης καρέ παρουσιάζονται στον παρακάτω πίνακα. Πίνακας 1.7 Standard Resolutions

37 Σύντομη Περιγραφή του Συστήματος Λίστα καταχωρητών της κάμερας D5M Η TRDB-D5M κάμερα διαθέτει 255 καταχωρητές εκ των οποίων μόνο οι 41 είναι διαθέσιμοι για ρύθμιση από το χρήστη ενώ οι υπόλοιποι είναι κλειδωμένοι (reserved). Παρακάτω βλέπουμε τους δύο πίνακες με τους 41 καταχωρητές. Πίνακας 1.8 Λίστα καταχωρητών της κάμερας D5M

38 24 Κεφάλαιο 1 Πίνακας 1.9 Λίστα καταχωρητών της κάμερας D5M Τα χαρακτηριστικά της TRDB-D5M Τα βασικά χαρακτηριστικά της TRDB-D5M κάμερας είναι τα εξής: Reset: Όταν το pin RESETn είναι στην κατάσταση χαμηλού δυναμικού τότε όλοι οι καταχωρητές παίρνουν τις προεπιλεγμένες τους τιμές. Όταν το pin είναι στην κατάσταση χαμηλού δυναμικού τότε το chip επιστρέφει στην κανονική του λειτουργία. Clocks: Η D5M απαιτεί ένα ρολόι (XCLKIN), το οποίο να λειτουργεί στη συχνότητα των 96MHz. Αυτό έχει σαν αποτέλεσμα τα δεδομένα των pixels να εξάγονται στα pins D[11:0] με μέγιστο ρυθμό στα 96Mp/s. Το ρολόι XCLKIN μπορεί να μειωθεί, ρυθμίζοντας τον καταχωρητή Divide_Pixel_Clock σε μια μη μηδενική τιμή. Τα D[11:0], LVAL, FVAL και STROBE είναι σήματα τα οποία ενεργοποιούνται κατά τη θετική ακμή του σήματος ρολογιού PIXCLK, και πρέπει να δειγματοληπτούνται κατά την αρνητική ακμή του PIXCLK. Η σχέση που συνδέει τα δύο ρολόγια είναι η εξής: fpixclk= { fxclkin if Divide_Pixel_Clock = 0 fxclkin / (2 Divide_Pixel_Clock) otherwise

39 Σύντομη Περιγραφή του Συστήματος 25 Signal Chain και Datapath: Τα Signal Chain και Datapath φαίνονται στο παρακάτω σχήμα. Σχήμα 1.14 Το μονοπάτι του σήματος. Οι τιμές του κέρδους (gain) και του offset της κάθε χρωματικής συνιστώσας επεξεργάζονται ανεξάρτητα για την κάθε συνιστώσα. Οι δειγματοληπτημένες τιμές τάσης των pixels αρχικά περνούν μέσα από ένα αναλογικό στάδιο κέρδους (analog gain stage), το οποίο μπορεί να παράξει συντελεστές κέρδους με τιμές μεταξύ του 1 και του 8. Στη συνέχεια εφαρμόζεται ένα analog offset και το σήμα στέλνεται σε έναν 12-bit analog-to-digital μετατροπέα. Στο ψηφιακό κομμάτι εφαρμόζεται ένας συντελεστής κέρδους μεταξύ του 1 και του 16 και στη συνέχεια προστίθεται ένα ψηφιακό offset με τιμές από μέχρι Η 12-bit τιμή που προκύπτει είναι η τελική τιμή του pixel, η οποία εξάγεται στις θύρες D[11:0]. Κέρδος (Gain): Υποστηρίζονται δύο είδη κερδών: το αναλογικό κέρδος (analog gain) και το ψηφιακό κέρδος (digital gain). Ο συνδυασμός αυτών των δύο κερδών δίνει ένα συνολικό κέρδος μεταξύ 1 και 128. Οι προτεινόμενες τιμές κέρδους παρουσιάζονται παρακάτω. Πίνακας 1.10 Προτεινόμενες ρυθμίσεις του κέρδους. Analog Gain: Το αναλογικό κέρδος προσδιορίζεται ανεξάρτητα για κάθε χρωματική συνιστώσα. Υπάρχουν δύο συνιστώσες, το κέρδος και ο πολλαπλασιαστής. Το κέρδος προσδιορίζεται από τους καταχωρητές Green1_Analog_Gain, Red_Analog_Gain,

40 26 Κεφάλαιο 1 Blue_Analog_Gain και Green2_Analog_Gain με βήμα 0,125. Ο αναλογικός πολλαπλασιαστής προσδιορίζεται από τους καταχωρητές Green1_Analog_Multiplier, Red_Analog_Multiplier, Blue_Analog_Multiplier και Green2_Analog_Multiplier. Ο συνδυασμός όλων αυτών δίνει την τιμή του αναλογικού κέρδους για ένα χρώμα C μέσα από την παρακάτω εξίσωση: AG C = (1 + C_Analog_Multiplier) x (C_Analog_Gain / 8) Το κέρδος μπορεί να είναι μεταξύ του 0 και του με βήμα 0,125 και ο πολλαπλασιαστής μπορεί να είναι είτε 0 είτε 1. Πάντως, είναι καλύτερο η τιμή του κέρδους να παραμένει ανάμεσα στις τιμές 1 και 4 για την επίτευξη της καλύτερης απόδοσης θορύβου και να γίνεται χρήση του πολλαπλασιαστή για τιμές κέρδους μεταξύ 4 και 8. Digital Gain: Το ψηφιακό κέρδος προσδιορίζεται ανεξάρτητα για κάθε χρωματική συνιστώσα, με βήμα 0,125. Ελέγχεται από τους καταχωρητές Green1_Digital_Gain, Red_Digital_Gain, Blue_Digital_Gain και Green2_Digital_Gain. Το ψηφιακό κέρδος για ένα χρώμα C δίνεται από την εξίσωση: DG C = 1 + (C_Digital_Gain / Το D5M Serial Bus Οι καταχωρητές γράφονται και διαβάζονται από την D5M μέσω του διαύλου σειριακής διασύνδεσης two-wire. Η D5M είναι μια σειριακή διασύνδεση slave και ελέγχεται από ένα σειριακό ρολόι SCLK, το οποίο οδηγείται από την σειριακή διασύνδεση master. Τα δεδομένα μεταφέρονται από και προς την D5M μέσω της σειριακής γραμμής δεδομένων SDATA. Το serial interface protocol καθορίζει ποιά συσκευή επιτρέπεται να ενεργοποιήσει τη γραμμή δεδομένων SDATA σε κάθε δεδομένη χρονική στιγμή. Πρωτόκολλο επικοινωνίας Το πρωτόκολλο επικοινωνίας ορίζει διάφορους κώδικες μετάδοσης (transmission codes) όπως φαίνονται παρακάτω: Ένα bit έναρξης. 8-bit διεύθυνση της συσκευής slave.

41 Σύντομη Περιγραφή του Συστήματος 27 Ένα bit (μη-) αναγνώρισης (acknowledge bit). Ένα μήνυμα των 8-bit. Ένα bit τερματισμού. Ακολουθία δεδομένων Μια τυπική διαδικασία ανάγνωσης ή εγγραφής ξεκινάει πάντα με την αποστολή ενός bit έναρξης από τον master. Μετά το bit έναρξης, ο master στέλνει την 8-bit διεύθυνση της συσκευής slave. Το τελευταίο bit της διεύθυνσης καθορίζει αν το αίτημα είναι εγγραφής ή ανάγνωσης, όπου το 0 καθορίζει την εγγραφή και το 1 την ανάγνωση. Η συσκευή slave αναγνωρίζει την διεύθυνση της στέλνοντας πίσω ένα bit αναγνώρισης στη συσκευή master. Αν το αίτημα ήταν αίτημα εγγραφής, η συσκευή master μεταφέρει την 8-bit διεύθυνση του καταχωρητή στον οποίο θα εγγραφούν τα δεδομένα. Η συσκευή slave στέλνει ένα bit αναγνώρισης για να ενημερώσει ότι η διεύθυνση του καταχωρητή έχει ληφθεί. Στη συνέχεια η συσκευή master μεταφέρει τα δεδομένα σε πακέτα των 8-bit, με τη συσκευή slave να στέλνει ένα bit αναγνώρισης μετά από κάθε πακέτο. Η D5M χρησιμοποιεί εσωτερικούς καταχωρητές των 16-bit, απαιτώντας έτσι δύο μεταφορές δεδομένων των 8- bit για την εγγραφή σε έναν καταχωρητή. Μετά την μεταφορά των 16 bit, η διεύθυνση του καταχωρητή αυξάνεται αυτόματα έτσι ώστε τα επόμενα 16 bit να εγγραφούν στον επόμενο καταχωρητή. Η συσκευή master σταματάει την εγγραφή στέλνοντας ένα bit έναρξης ή τερματισμού. Μια τυπική διαδικασία ανάγνωσης εκτελείται ως εξής: Αρχικά η συσκευή master στέλνει μία 8-bit διεύθυνση στη συσκευή slave, όπως γίνεται κατά την εγγραφή δεδομένων, και στη συνέχεια στέλνει το bit έναρξης. Αμέσως μετά η συσκευή master εξάγει τα δεδομένα σε πακέτα των 8-bit, και λαμβάνει ένα bit αναγνώρισης μετά από κάθε πακέτο. Η διεύθυνση του καταχωρητή αυξάνεται αυτόματα κάθε φορά που 16 bit μεταφέρονται. Η μετάδοση των δεδομένων σταματά όταν η συσκευή master στείλει ένα bit μη-αναγνώρισης. Bus Idle State Ο δίαυλος είναι αδρανής όταν οι γραμμές δεδομένων και ρολογιού είναι σε κατάσταση υψηλού δυναμικού. Ο έλεγχος του διαύλου ξεκινάει με ένα bit έναρξης και τερματίζεται με το bit τερματισμού. Μόνο η συσκευή master μπορεί να δημιουργήσει τα δύο αυτά bits.

42 28 Κεφάλαιο 1 Start bit Το bit έναρξης ορίζεται ως η μετάβαση της γραμμής δεδομένων από υψηλό σε χαμηλό δυναμικό ενώ η γραμμή του ρολογιού βρίσκεται σε υψηλό δυναμικό. Stop Bit Το bit τερματισμού ορίζεται ως η μετάβαση της γραμμής των δεδομένων από χαμηλό σε υψηλό δυναμικό όταν η γραμμή του ρολογιού βρίσκεται σε υψηλό δυναμικό. Slave Address Η 8-bit διεύθυνση μιας συσκευής σειριακής διασύνδεσης two-wire αποτελείται από επτά bit διεύθυνσης και ένα bit κατεύθυνσης. Το 0 στο LSB (least significant bit) της διεύθυνσης προσδιορίζει την κατάσταση εγγραφής (0xBA) και το 1 προσδιορίζει την κατάσταση ανάγνωσης (0xBB). Data Bit Transfer Ένα bit δεδομένων μεταδίδεται κατά τη διάρκεια ενός παλμού ρολογιού. Η σειριακή διασύνδεση του παλμού ρολογιού παρέχεται από τη συσκευή master. Τα δεδομένα θα πρέπει να παραμένουν σταθερά κατά τη διάρκεια υψηλής περιόδου του two-wire ρολογιού σειριακής διασύνδεσης, και μπορούν να αλλάξουν μόνο όταν το σειριακό ρολόι είναι σε χαμηλό δυναμικό. Τα δεδομένα μεταδίδονται σε πακέτα των 8-bit ακολουθούμενα από ένα bit αναγνώρισης. Acknowledge Bit Η συσκευή master δημιουργεί έναν παλμό αναγνώρισης. Ο αναμεταδότης (που είναι η συσκευή master όταν έχουμε εγγραφή ή η συσκευή slave όταν έχουμε ανάγνωση) απελευθερώνει τη γραμμή δεδομένων και ο δέκτης παρέχει την ένδειξη ενός bit αναγνώρισης θέτοντας τη γραμμή δεδομένων σε χαμηλό δυναμικό κατά τον παλμό ρολογιού αναγνώρισης. No-Acknowledge Bit Το bit μη-αναγνώρισης δημιουργείται όταν η γραμμή δεδομένων δε μεταβαίνει σε χαμηλό δυναμικό από τον δέκτη κατά την διάρκεια του παλμού ρολογιού αναγνώρισης. Ένα bit μηαναγνώρισης χρησιμοποιείται για τον τερματισμό μιας διαδικασίας ανάγνωσης.

43 Σύντομη Περιγραφή του Συστήματος Το Quartus II της ALTERA Το Quartus II της ALTERA παρέχει ένα ολοκληρωμένο προγραμματιστικό σχεδιαστικό (CAD) περιβάλλον που εύκολα προσαρμόζεται στις εκάστοτε σχεδιαστικές ανάγκες. Είναι ένα κατανοητό και εύχρηστο περιβάλλον για την SOPC σχεδίαση συστημάτων και παρέχει πληροφορίες και λύσεις για όλα τα στάδια υλοποίησης του συστήματος. Τα βασικά στοιχειά του Quartus II παρουσιάζονται παρακάτω: Σχεδίαση κυκλωμάτων με τη χρήση σχηματικών αναπαραστάσεων, block διαγραμμάτων, AHDL, VHDL, και Verilog HDL Floorplan editor LogicLock σχεδιασμός Ισχυρή λογική σύνθεση Λειτουργική και χρονική εξομοίωση Χρονική ανάλυση του κυκλώματος Ενσωματωμένη λογική ανάλυση με τον SignalTap II Logic Analyzer Εισαγωγή, δημιουργία και σύνδεση αρχείων software για την παραγωγή των αρχείων (.sof,.pof) για τον προγραμματισμό της συσκευής Αυτόματη αναγνώριση και εύρεση σφαλμάτων Προγραμματισμός συσκευής και επαλήθευση Η ροή σχεδίασης στο Quartus II παρουσιάζεται παρακάτω: Σχήμα 1.15 Ροή σχεδίασης στο Quartus II

44 30 Κεφάλαιο 1 Το Quartus παρέχει τη δυνατότητα της SOPC σχεδίασης μέσω του SOPC Builder. Ο SOPC Builder μπορεί να δημιουργήσει ένα σύστημα βασισμένο στο επιλεγμένο σύνολο των υποσυστημάτων και τις παραμέτρους που επιλέγει ο χρήστης. Το σύστημα που δημιουργείται περιέχει κώδικα σε Verilog ή VHDL για κάθε υποσύστημα που χρησιμοποιήθηκε καθώς και για τις διασυνδέσεις μεταξύ τους, επιτρέποντας έτσι την σύνθεση και την τοποθέτηση σε ένα FPGA. 1.8 Το Nios II Software Build Tools (SBT) for Eclipse Το Nios II Software Build Tools (SBT) for Eclipse είναι ένα γραφικό περιβάλλον ανάπτυξης software για την οικογένεια των Nios ΙΙ επεξεργαστών. Το Nios II SBT είναι ένα σύνολο από προσθετά στοιχεία (plugins) βασισμένα στο πλαίσιο Eclipse και στο σύνολο εργαλείων Eclipse C/C++ development toolkit (CDT). Το Nios II Software Build Tools (SBT) for Eclipse διεκπεραιώνει όλες τις αναγκαίες λειτουργίες ανάπτυξης προγραμμάτων όπως συγγραφή, αποσφαλμάτωση, συμβολομετάφραση, εκτέλεση προγραμμάτων και άλλες. Παρέχεται η δυνατότητα δημιουργίας προγραμμάτων εξολοκλήρου από την αρχή καθώς και η επιλογή έτοιμων περιγραμμάτων που λειτουργούν ως βάση για την συγγραφή πιο πολύπλοκων προγραμμάτων. Όταν ολοκληρωθεί επιτυχώς η δημιουργία (build) της εφαρμογής, το Nios II SBT παράγει τα εκτελέσιμα αρχεία (.elf) που τελικά θα εκτελεστούν. Η ανάπτυξη ενός Nios II συστήματος ακολουθεί το παρακάτω διάγραμμα ροής :

45 Σύντομη Περιγραφή του Συστήματος 31 Σχήμα 1.16 Διάγραμμα ροής της ανάπτυξης ενός Nios II συστήματος 1.9 Το MATLAB Το MATLAB είναι μια υψηλού επιπέδου γλώσσα προγραμματισμού που επιτρέπει την ολοκλήρωση υπολογιστικά απαιτητικών εργασιών ταχύτερα και ευκολότερα απ ότι οι παραδοσιακές γλώσσες προγραμματισμού, όπως C, C++, and Fortran. Το διαδραστικό περιβάλλον του προορίζεται για ανάπτυξη αλγορίθμων, επεξεργασία, ανάλυση και απεικόνιση δεδομένων, αριθμητικές μεθόδους επίλυσης προβλημάτων και μοντελοποίηση συστημάτων. Το MATLAB εκτελεί από απλούς μαθηματικούς υπολογισμούς μέχρι και προγράμματα με εντολές παρόμοιες με αυτές που υποστηρίζει μια γλώσσα υψηλού επιπέδου. Συγκεκριμένα εκτελεί απλές μαθηματικές πράξεις, αλλά εξίσου εύκολα χειρίζεται μιγαδικούς αριθμούς, δυνάμεις, ειδικές μαθηματικές συναρτήσεις, πίνακες, διανύσματα και πολυώνυμα. Μπορεί επίσης να αποθηκεύει και να ανακαλεί δεδομένα, να δημιουργεί και να εκτελεί ακολουθίες εντολών που αυτοματοποιούν διάφορους υπολογισμούς και να σχεδιάζει γραφικά.

46 32 Κεφάλαιο 1 Το περιβάλλον του MATLAB υποστηρίζει ένα μεγάλο αριθμό ενδογενών λειτουργιών και συναρτήσεων καθώς και εξωτερικές βιβλιοθήκες (Toolboxes) για εξειδικευμένες περιοχές εφαρμογών. Υποστηρίζει επίσης μια ευέλικτη, απλή και δομημένη γλώσσα προγραμματισμού (script language) με πολλές ομοιότητες με την Pascal και παρέχει δυνατότητες εύκολης δημιουργίας, διασύνδεσης και χρήσης βιβλιοθηκών σε κώδικα γραμμένο στη γλώσσα αυτή (M files). Η Image Processing Toolbox (Εργαλειοθήκη Επεξεργασίας Εικόνας) είναι μια συλλογή από MATLAB λειτουργίες (Μ-functions ή M-files) που επεκτείνουν τις δυνατότητες του περιβάλλοντος MATLAB για την επίλυση προβλημάτων της ψηφιακής επεξεργασίας εικόνας.

47 ΚΕΦΑΛΑΙΟ 2 Ο Επεξεργαστής Nios II Ο επεξεργαστής Nios II είναι ένας γενικού σκοπού RISC επεξεργαστής με τα ακόλουθα χαρακτηριστικά : Πλήρες σετ εντολών 32-bit, data path, και address space 32 καταχωρητές γενικού σκοπού Προαιρετικά σύνολα σκιωδών καταχωρητών 32 πηγές διακοπών Διασύνδεση για εξωτερικό χειριστή διακοπών για την προσθήκη περισσοτέρων πηγών διακοπών Εντολή για πολλαπλασιασμό και διαίρεση που παράγει ένα αποτέλεσμα 32- bit Εντολές για τον υπολογισμό 64-bit και 128-bit γινομένων πολλαπλασιασμού Προαιρετικές floating-point εντολές για μονής ακρίβειας floating-point πράξεις

48 34 Κεφάλαιο 2 Εντολή για barrel shifter Πρόσβαση σε μια πληθώρα on-chip περιφερειακών, και διασυνδέσεις για off-chip μνήμες και περιφερειακά Hardware-assisted μονάδα αποσφαλμάτωσης Προαιρετική μονάδα διαχείρισης μνήμης (MMU) για την υποστήριξη λειτουργικών συστημάτων που απαιτούν MMUs Προαιρετική μονάδα προστασίας μνήμης (MPU) Περιβάλλον ανάπτυξης software βασισμένο στην GNU C/C++ tool chain και στα Nios II Software Build Tools (SBT) for Eclipse Ολοκλήρωση με τον SignalTap II Embedded Logic Analyzer της Altera, που επιτρέπει ανάλυση των εντολών και των δεδομένων σε πραγματικό χρόνο Αρχιτεκτονική συνόλου εντολών (ISA) συμβατή με όλα τα συστήματα Nios II επεξεργαστών Απόδοση έως 250 DMIPS Προαιρετικός κώδικας διόρθωσης σφαλμάτων (ECC) Ένα σύστημα ενός Nios II επεξεργαστή είναι ισοδύναμο με έναν μικροελεγκτή ή ένα computer on a chip που περιλαμβάνει έναν επεξεργαστή και ένα συνδυασμό περιφερειακών και μνήμης σε ένα chip. Ένα σύστημα ενός Nios II επεξεργαστή αποτελείται από ένα Nios II processor core, ένα σύνολο από on-chip περιφερειακά, on-chip μνήμη, και διασυνδέσεις σε off-chip μνήμη, όλα υλοποιημένα σε μια συσκευή της Altera. Σχήμα 2.1 Παράδειγμα ενός συστήματος με τον Nios II

49 Ο Επεξεργαστής Nios II 35 Η Nios II αρχιτεκτονική περιγράφει ένα σετ εντολών (Instruction Set Architecture - ISA). Η ISA προϋποθέτει την ύπαρξη ενός συνόλου λειτουργικών μονάδων που υλοποιούν αυτές τις εντολές. Σχήμα 2.2 Το block διάγραμμα του core του Nios II Οι λειτουργικές μονάδες της Nios II αρχιτεκτονικής, αποτελούν τα θεμέλια του συνόλου των εντολών του Nios II. Η αρχιτεκτονική του Nios II περιγράφει ένα σύνολο εντολών και όχι κάποια συγκεκριμένη hardware υλοποίηση. Μία λειτουργική μονάδα μπορεί να υλοποιηθεί σε hardware, να εξομοιωθεί σε software ή να παραβλεφθεί. Η υλοποίηση του Nios II είναι ένα σύνολο από σχεδιαστικές επιλογές. Κάθε υλοποίηση επιτυγχάνει συγκεκριμένους στόχους όπως μικρό μέγεθος του core ή υψηλότερη απόδοση, επιτρέποντας έτσι στον επεξεργαστή να προσαρμόζεται στην ζητούμενη εφαρμογή κάθε φορά. Οι μεταβλητές υλοποίησης ανήκουν σε μία από τις τρεις κατηγορίες: more or less of a feature (αύξηση ή ελάττωση ενός χαρακτηριστικού) inclusion or exclusion of a feature (Περίληψη ή αποκλεισμός ενός χαρακτηριστικού) Hardware υλοποίηση ή software Οι λειτουργικές μονάδες του Nios II είναι:

50 36 Κεφάλαιο 2 Αρχείο καταχωρητών (register file) Αριθμητική και λογική μονάδα (arithmetic logic unit) Δίαυλος εντολών (instruction bus) Δίαυλος δεδομένων (data bus) Ελεγκτής εξαιρέσεων (exception controller) Ελεγκτής διακοπών (interrupt controller) Κρυφές μνήμες δεδομένων και εντολών (instruction-data cache memories) Διασύνδεση με λογική προσδιοριζόμενη από το χρήστη (custom instruction logic) Μονάδα αποσφαλμάτωσης JTAG (JTAG debug module) Επιπλέον στενά-συνδεδεμένη με το σύστημα μνήμη για εντολές και δεδομένα (tightly-coupled memory) 2.1 Αρχείο καταχωρητών (register file) Η Nios II αρχιτεκτονική υποστηρίζει ένα αρχείο καταχωρητών που αποτελείται από 32 καταχωρητές γενικού σκοπού των 32-bit και μέχρι 32 καταχωρητές ελέγχου των 32-bit Καταχωρητές γενικού σκοπού Η αρχιτεκτονική του Nios II παρέχει 32 καταχωρητές γενικού σκοπού των 32-bit, r0 έως r31. Μερικοί καταχωρητές έχουν ονόματα τα οποία αναγνωρίζονται από τον assembler. Register Name Function Register Name Function r0 zero 0x r16 Caller-saved register r1 at Assembler temporary r17 Caller-saved register r2 Return value r18 Caller-saved register r3 Return value r19 Caller-saved register r4 Register arguments r20 Caller-saved register r5 Register arguments r21 Caller-saved register r6 Register arguments r22 Caller-saved register r7 Register arguments r23 Caller-saved register

51 Ο Επεξεργαστής Nios II 37 r8 Caller-saved register r24 et Exception temporary r9 Caller-saved register r25 bt Breakpoint temporary (1) r10 Caller-saved register r26 gp Global pointer r11 Caller-saved register r27 sp Stack pointer r12 Caller-saved register r28 fp Frame pointer r13 Caller-saved register r29 ea Exception return address r14 Caller-saved register r30 ba Breakpoint return address r15 Caller-saved register r31 ra Return address (1) Ο καταχωρητής r25 χρησιμοποιείται αποκλειστικά από την μονάδα αποσφαλμάτωσης JTAG Πίνακας 2.1 Οι καταχωρητές γενικού σκοπού του Nios II Καταχωρητές ελέγχου Οι καταχωρητές ελέγχου αναφέρουν την κατάσταση και μπορούν να αλλάξουν την συμπεριφορά του επεξεργαστή. Οι καταχωρητές ελέγχου προσπελαύνονται διαφορετικά από τους καταχωρητές γενικού σκοπού (μέσω των ειδικών εντολών rdctl και wrctl). Η αρχιτεκτονική του Nios II υποστηρίζει έως και 32 καταχωρητές ελέγχου. Όλοι οι καταχωρητές ελέγχου που δεν είναι δεσμευμένοι έχουν ονόματα που αναγνωρίζονται από τον assembler. status register Η τιμή του status register προσδιορίζει την κατάσταση του Nios II επεξεργαστή. Όλα τα status bits παίρνουν προκαθορισμένες τιμές κατά την επανεκκίνηση του επεξεργαστή. Μερικά bits χρησιμοποιούνται αποκλειστικά και είναι διαθέσιμα μόνο σε συγκεκριμένα χαρακτηριστικά του επεξεργαστή. ( MMU, MPU, EIC). estatus register Ο estatus register κρατά ένα αντίγραφο του status register κατά τη διάρκεια επεξεργασίας μιας nonbreak εξαίρεσης. Όλα τα πεδία του estatus register έχουν read/write πρόσβαση και κατά την επανεκκίνηση παίρνουν την τιμή μηδέν. Ο exception handler μπορεί να εξετάσει τον estatus register για να προσδιορίσει την κατάσταση του επεξεργαστή πριν την εκτέλεση μιας εξαίρεσης. Όταν γίνεται η επιστροφή από μία εξαίρεση, η εντολή eret επαναφέρει την τιμή του status register. bstatus register

52 38 Κεφάλαιο 2 Ο bstatus register κρατά ένα αποθηκευμένο αντίγραφο του status register κατά τη διάρκεια επεξεργασίας μιας break εξαίρεσης. Όλα τα πεδία του estatus register έχουν read/write πρόσβαση και κατά την επανεκκίνηση παίρνουν την τιμή μηδέν. Όταν συμβεί ένα break, η τιμή του status register αντιγράφεται στον bstatus register. Κάνοντας χρήση του bstatus ο debugger μπορεί να επαναφέρει τον status register στην τιμή που είχε πριν το break. Η bret εντολή, αντιγράφει την τιμή του bstatus στον status register. ipending register Η τιμή στον ipending register υποδεικνύει την τιμή του σήματος διακοπής που εισέρχεται στον επεξεργαστή. Η τιμή 1 στο bit n σημαίνει ότι η αντίστοιχη irqn διακοπή εκκρεμεί. Η εγγραφή τιμής στον ipending register δεν έχει κανένα αποτέλεσμα. ienable register Ο ienable register ελέγχει τον χειρισμό εσωτερικών διακοπών υλικών. Κάθε ένα bit του ienable register, αντιστοιχεί σε μία από τις εισόδους διακοπών, irq0 έως irq31. Η τιμή 1 στο bit n σημαίνει ότι η αντίστοιχη irqn διακοπή έχει ενεργοποιηθεί, ενώ η τιμή 0 σημαίνει ότι η αντίστοιχη διακοπή έχει απενεργοποιηθεί. cpuid register Ο cupid register κρατά μία σταθερή τιμή η οποία προσδιορίζεται με μοναδικό τρόπο για να αναγνωρίζεται ο κάθε επεξεργαστή σε ένα σύστημα πολλών επεξεργαστών. Η εγγραφή κάποιας τιμής στον cupid register δεν έχει καμιά επίδραση. 2.2 Αριθμητική και λογική μονάδα (ALU) Η ALU του Nios II λειτουργεί με δεδομένα τα οποία είναι αποθηκευμένα στους καταχωρητές γενικού σκοπού. Κατηγορία Λεπτομέρειες

53 Ο Επεξεργαστής Nios II 39 Arithmetic (αριθμητικές πράξεις) Relational (πράξεις σχέσεων) Logical (λογικές πράξεις) Shift and Rotate (πράξεις ολίσθησης και περιστροφής) πρόσθεση, αφαίρεση, πολλαπλασιασμός, διαίρεση ίσο, άνισο, μεγαλύτερο ή ίσο από, μικρότερο από (==,!=, >=, <) AND, NOR, OR, XOR ολισθήσεις προς τη δεξιά κατεύθυνση και λογικές ολισθήσεις προς τη δεξιά/ αριστερή από 0 έως 31 θέσεις bit ανά εντολή. Πίνακας 2.2 Λειτουργίες που υποστηρίζει η ALU του Nios II Μη Υλοποιημένες Εντολές Κάποιες υλοποιήσεις του Nios II επεξεργαστή δεν παρέχουν το hardware για να υποστηρίξουν το σύνολο των εντολών του Nios II. Οι εντολές χωρίς υποστήριξη σε hardware είναι γνωστές ως μη υλοποιημένες εντολές. Ο επεξεργαστής παράγει μία εξαίρεση όταν συναντά μία μη υλοποιημένη εντολή και ο χειριστής εξαιρέσεων καλεί την κατάλληλη ρουτίνα εξομοίωσης της εντολής σε software Εντολές Κινητής Υποδιαστολής Η Nios II αρχιτεκτονική υποστηρίζει εντολές κινητής υποδιαστολής (floating point) απλής ακρίβειας, όπως προσδιορίζονται στο IEEE Std και στο IEEE Std Σήματα επαναφοράς και αποσφαλμάτωσης (Reset and Debug Signals) Ο Nios II επεξεργαστής υποστηρίζει τέσσερα σήματα επαναφοράς και αποσφαλμάτωσης: reset είναι το σήμα επαναφοράς υλικού που υποχρεώνει τον επεξεργαστή σε άμεση επανεκκίνηση cpu_reset request αυτό είναι ένα προαιρετικό τοπικό σήμα επαναφοράς που προκαλεί την επανεκκίνηση του επεξεργαστή χωρίς όμως να επηρεάζει τα άλλα components του Nios II συστήματος. Ο επεξεργαστής ολοκληρώνει την εκτέλεση

54 40 Κεφάλαιο 2 οποιασδήποτε εντολής είναι μέσα στο pipeline και μετά εισέρχεται σε κατάσταση επαναφοράς. Η διαδικασία αυτή μπορεί να καταναλώσει αρκετούς κύκλους ρολογιού debugreq αυτό είναι ένα προαιρετικό σήμα που προσωρινά θέτει σε αναστολή τον επεξεργαστή για σκοπούς αποσφαλμάτωσης και reset_req αυτό είναι ένα προαιρετικό σήμα που προστατεύει την μνήμη από προβλήματα. 2.4 Ελεγκτής εξαιρέσεων και διακοπών Η εξυπηρέτηση μια εξαίρεσης είναι η ανταπόκριση του επεξεργαστή σε μια εξαίρεση και η επαναφορά έπειτα, αν είναι δυνατόν, στην κατάσταση πριν την εκτέλεση της διακοπής. Ο ελεγκτής / διαχειριστής εξαιρέσεων είναι ένα ολοκληρωμένο σύστημα από software ρουτίνες οι οποίες εξυπηρετούν οποιαδήποτε εξαίρεση και δίνουν τον έλεγχο σε συγκεκριμένες ρουτίνες εξυπηρέτησης διακοπών (Interrupt Service Routines -ISRs) όπου είναι αναγκαίο. Κάθε εξαίρεση σε ένα Nios II σύστημα ανήκει σε μία εκ των παρακάτω κατηγοριών: Reset Εξαιρέσεις Break Εξαιρέσεις Hardware Διακοπές (hardware interrupts) Εξαιρέσεις Σχετικές με Εντολές Η εξυπηρέτηση εξαιρέσεων στον Nios II υλοποιείται με την κλασική RISC λογική, δηλαδή όλοι οι τύποι εξαιρέσεων εξυπηρετούνται από ένα γενικό διαχειριστή εξαιρέσεων. Έτσι οι εξαιρέσεις αυτές (hardware και software) διαχειρίζονται από software κώδικα που βρίσκεται σε μία συγκεκριμένη διεύθυνση μνήμης γνωστή ως διεύθυνση εξαίρεσης (exception address).

55 Ο Επεξεργαστής Nios II Reset Εξαιρέσεις Όταν σήμα ένα επαναφοράς του επεξεργαστή ο Nios II εκτελεί τα παρακάτω βήματα: θέτει στον status.rsie την τιμή ένα και μηδενίζει όλα τα υπόλοιπα πεδία του status καταχωρητή ακυρώνει τα περιεχόμενα της cache μνήμης εντολών που σχετίζονται με το reset. ξεκινά να εκτελεί τον διαχειριστή reset (reset handler). Για την εξασφάλιση της συνοχής των δεδομένων στην cache μνήμη μετά από μια επαναφορά, ο διαχειριστής reset (reset handler) πρέπει αμέσως να αρχικοποιήσει την cache μνήμη εντολών. Η κατάσταση επαναφοράς είναι απροσδιόριστη για όλα τα υπόλοιπα μέρη του συστήματος συμπεριλαμβανομένων των καταχωρητών γενικού σκοπού (εκτός του zero(r0) καταχωρητή που είναι πάντα μηδέν), των καταχωρητών ελέγχου (εκτός του status.status.rsie που αρχικοποιείται στο ένα ενώ τα υπόλοιπα πεδία στο μηδέν), των μνημών δεδομένων και εντολών και των περιφερειακών Break Εξαιρέσεις Μια εξαίρεση τύπου break είναι η μεταφορά ελέγχου εκτός της κανονικής ροής εκτέλεσης ενός προγράμματος με σκοπό την αποσφαλμάτωση του. Τα εργαλεία software αποσφαλμάτωσης μπορούν να πάρουν τον έλεγχο του επεξεργαστή μέσω του. Οι εξαιρέσεις τύπου break είναι ανεξάρτητες από το γενικό μηχανισμό εκτέλεσης εξαιρέσεων. Ο επεξεργαστής μπορεί να εισέρθει σε κατάσταση εκτέλεσης break εξαίρεσης είτε όταν ο επεξεργαστής εκτελεί μια εντολή break, είτε όταν η JTAG μονάδα δημιουργήσει ένα hardware break. Μια εξαίρεση τύπου break αναγκάζει τον επεξεργαστή να προβεί στα παρακάτω βήματα: αποθηκεύει τα περιεχόμενα του status καταχωρητή στον bstatus μηδενίζει το status.pie απενεργοποιώντας έτσι τις hardware διακοπές γράφει τη διεύθυνση της εντολής που ακολουθεί την break στον ba (r30) καταχωρητή

56 42 Κεφάλαιο 2 μηδενίζει το status.u θέτει στο status.eh την τιμή ένα Αντιγράφει το status.crs στο status.prs και μετά μηδενίζει το status.crs μεταφέρει την εκτέλεση στο διαχειριστή break εξαιρέσεων Μετά την εξυπηρέτηση μιας break εξαίρεσης, ο διαχειριστής break εξαιρέσεων απελευθερώνει τον έλεγχο του επεξεργαστή εκτελώντας μία bret εντολή. Η bret εντολή επαναφέρει το περιεχόμενο του status καταχωρητή αντιγράφοντας τα περιεχόμενα του bstatus καταχωρητή και επιστέφει την εκτέλεση του προγράμματος στη διεύθυνση που υπάρχει στον ba (r30) καταχωρητή Interrupt Εξαιρέσεις Μία περιφερειακή συσκευή μπορεί να αιτηθεί μιας διακοπής στέλνοντας ένα σήμα αιτήματος διακοπής (IRQ), τέτοια IRQ σήματα διασυνδέονται με τον Nios II μέσω ενός ελεγκτή διακοπών. Μία εσωτερική (hardware) διακοπή συμβαίνει μόνο όταν : Το PIE bit του status καταχωρητή είναι 1 Μια αίτηση διακοπής irqn έχει δημιουργηθεί Το αντίστοιχο n bit του inable καταχωρητή έλεγχου είναι 1 Όταν συμβεί μια διακοπή ο επεξεργαστής μηδενίζει το PIE bit από τον status καταχωρητή απενεργοποιώντας έτσι τις hardware διακοπές και ακολουθεί τα παρακάτω βήματα: αντιγράφει τα περιεχόμενα του status καταχωρητή στον estatus γράφει τη διεύθυνση της εντολής που υπάρχει μετά την διακοπή στον ea (r29) καταχωρητή μεταφέρει την εκτέλεση στο διαχειριστή διακοπών, ο οποίος εξετάζει όλες τις καταχωρημένες (από τον χρήστη) IRQs σε εκκρεμότητα και βρίσκει την πρώτη ενεργοποιημένη IRQ με την υψηλότερη προτεραιότητα. Έπειτα καλεί την αντίστοιχη καταχωρημένη ρουτίνα εξυπηρέτησης διακοπής (Interrupt Service Routine ISR). Μετά την εκτέλεση της συγκεκριμένης ISR ο χειριστής εξαιρέσεων σαρώνει ξανά τις

57 Ο Επεξεργαστής Nios II 43 IRQs αρχίζοντας από την IRQ0. Ετσι οι διακοπές υψηλής προτεραιότητας εξυπηρετούνται πάντα πριν από τις χαμηλής προτεραιότητας διακοπές. Η τιμή του ipending καταχωρητή ελέγχου υποδεικνύει ποιές αιτήσεις διακοπής (IRQ) εκκρεμούν. Μία αίτηση διακοπής εκκρεμεί έως ότου ο επεξεργαστής ανταποκριθεί στην αντίστοιχη περιφερειακή συσκευή. Σχήμα 2.3 Σχέση μεταξύ των ipending, inable και PIE bit με την δημιουργία μιας διακοπής Εξαιρέσεις Σχετικές με Εντολές Οι εξαιρέσεις σχετικές με εντολές συμβαίνουν κατά τη διάρκεια εκτέλεσης εντολών του Nios II. Ο επεξεργαστής Nios II παράγει τις εξής εξαιρέσεις σχετικές με εντολές : Trap εντολή Break εντολή Μη-Υλοποιημένη εντολή Trap Εντολή Όταν ένα πρόγραμμα εκδώσει μια trap εντολή, ο επεξεργαστής παράγει μία software trap εξαίρεση. Ένα πρόγραμμα τυπικά εκδίδει μία software trap όταν ζητά εξυπηρέτηση από το λειτουργικό σύστημα. Ο γενικός διαχειριστής διακοπών του λειτουργικού συστήματος καθορίζει το λόγο για την trap και ανταποκρίνεται κατάλληλα.

58 44 Κεφάλαιο 2 Break Εντολή Η εντολή break χειρίζεται όπως η break εξαίρεση. Μη-Υλοποιημένη Εντολή Όταν ο επεξεργαστής εκδώσει μία έγκυρη εντολή που δεν είναι υλοποιημένη σε hardware, παράγεται μία εξαίρεση μη-υλοποιημένης εντολής. Ο γενικός διαχειριστής διακοπών καθορίζει ποια εντολή προκάλεσε την εξαίρεση και δίνει τον έλεγχο σε μία ρουτίνα εξαίρεσης η οποία μπορει να επιλέξει να εξομοιώσει την εντολή σε software. 2.5 Οργάνωση Μνήμης και Περιφερειακών Η ευέλικτη φύση της μνήμης του Nios II και των περιφερειακών του είναι η πιο αξιοσημείωτη διαφορά μεταξύ των συστημάτων με επεξεργαστή Nios II και των παραδοσιακών συστημάτων μικροελεγκτών. Επειδή τα Nios II συστήματα είναι παραμετροποιήσιμα, οι μνήμες και τα περιφερειακά διαφέρουν από σύστημα σε σύστημα. Σαν αποτέλεσμα, η οργάνωση μνήμης και περιφερειακών αλλάζει από σύστημα σε σύστημα. Ένα Nios II core χρησιμοποιεί ένα ή περισσότερα από τα παρακάτω στοιχεία για να παρέχει πρόσβαση στη μνήμη και τα περιφερειακά : Instruction master port Ένα Avalon Memory-Mapped (Avalon-MM) master port που συνδέεται στη μνήμη εντολών μέσω της εσωτερικής δομής διασύνδεσης του συστήματος. Instruction cache Γρήγορη, κρυφή μνήμη, εσωτερική του Nios ΙI core. Data master port - Ένα Avalon-MM master port που συνδέεται στη μνήμη δεδομένων και τα περιφερειακά μέσω της εσωτερικής δομής διασύνδεσης του συστήματος. Data cache - Γρήγορη, κρυφή μνήμη, εσωτερική του Nios ΙI core. Tightly-coupled instruction or data memory port Διασύνδεση σε γρήγορη on-chip μνήμη εξωτερική του Nios II core.

59 Ο Επεξεργαστής Nios II 45 Σχήμα 2.4 Nios II Memory and I/O Organization Δίαυλοι Δεδομένων και Εντολών Η αρχιτεκτονική του Nios II υποστηρίζει ξεχωριστούς διαύλους για δεδομένα και εντολές, και συνεπώς κατατάσσεται στην Harvard αρχιτεκτονική. Και οι δύο δίαυλοι υλοποιούνται ως Avalon-MM master ports που υπακούουν στις προδιαγραφές της διασύνδεσης Avalon- MM. Το data master port συνδέεται στη μνήμη αλλά και στα περιφερειακά, ενώ το instruction master port συνδέεται μόνο στη μνήμης. Memory and Peripheral Access Η αρχιτεκτονική του Nios II παρέχει memory-mapped I/O πρόσβαση. Και η μνήμη δεδομένων και τα περιφερειακά είναι χαρτογραφημένα στο χώρο διευθύνσεων (address space) του data master port. Η Nios II αρχιτεκτονική χρησιμοποιεί little endian byte ordering. Δηλαδη τα δεδομένα αποθηκεύονται στη μνήμη με τα πιο σημαντικά bytes στις υψηλότερες/μεγαλύτερες διευθύνσεις. Η αρχιτεκτονική του Nios II δεν προσδιορίζει τίποτα σχετικά με την ύπαρξη μνήμης και περιφερειακών. Η ποσότητα, ο τύπος και η διασύνδεση μνήμης και περιφερειακών

60 46 Κεφάλαιο 2 εξαρτώνται από το εκάστοτε σύστημα. Τυπικά, τα Nios II συστήματα περιλαμβάνουν ένα συνδυασμό γρήγορης on-chip μνήμης και πιο αργής off-chip μνήμης. Τα περιφερειακά συνήθως βρίσκονται πάνω στο chip, όμως υπάρχουν και διασυνδέσεις για off-chip περιφερειακά. Instruction Master Port Ο δίαυλος εντολών του Nios II υλοποιείται ως ένα 32-bit Avalon-MM master port. Το instruction master port εκτελεί μια μόνο λειτουργία, παρέχει στον επεξεργαστή εντολές προς εκτέλεση. Το instruction master port είναι ένα pipelined Avalon-MM master port. Η υποστήριξη pipelined Avalon-MM μεταφορών δεδομένων, ελαχιστοποιεί την επίδραση της σύγχρονης μνήμης (synchronous memory), ενώ αυξάνει τη συνολική συχνότητα f MAX του συστήματος. Ο Nios II μπορεί να παράξει εκ των προτέρων (prefetch) διαδοχικές εντολές και να εκτελέσει branch prediction για να κρατήσει το pipeline εντολών όσο το δυνατόν πιο ενεργό. Το instruction master port πάντα ανακτά δεδομένα των 32-bit και βασίζεται στη λογική δυναμικής αλλαγής μεγέθους του διαύλου, που εμπεριέχεται στην εσωτερική δομή διασύνδεσης του συστήματος (system interconnect fabric). Έτσι κάθε ανάκληση εντολής επιστρέφει μία ολόκληρη λέξη εντολής (full instruction word), ανεξάρτητα από το εύρος της μνήμης. Η Nios II αρχιτεκτονική υποστηρίζει τη χρήση on-chip κρυφής μνήμης για τη βελτίωση της μέσης απόδοσης κατά την ανάκτηση εντολών κατά την πρόσβαση σε μία πιο αργή μνήμη. Η Nios II αρχιτεκτονική υποστηρίζει τη χρήση tightly-coupled μνήμων που παρέχουν εγγυημένη πρόσβαση χαμηλής καθυστέρησης στην on-chip μνήμη. Data Master Port Ο δίαυλος δεδομένων του Nios II υλοποιείται ως ένα 32-bit Avalon-MM master port. Το data master port εκτελεί δύο λειτουργίες: διαβάζει δεδομένα από μια μνήμη ή μια περιφερειακή συσκευή, όταν ο επεξεργαστής εκτελεί μία εντολή φόρτωσης (load instruction) γράφει δεδομένα σε μια μνήμη ή μια περιφερειακή συσκευή, όταν ο επεξεργαστής εκτελεί μία εντολή αποθήκευσης (store instruction).

61 Ο Επεξεργαστής Nios II 47 Οι λειτουργίες εγγραφής και αποθήκευσης μπορούν να ολοκληρωθούν μέσα σε ένα μόνο κύκλο ρολογιού όταν το data master port είναι συνδεδεμένο με μία μνήμη μηδενικής κατάστασης αναμονής (zero-wait-state memory). Κοινή Μνήμη για Εντολές και Δεδομένα Συνήθως, τα instruction master port και data master port μοιράζονται μία μόνο μνήμη η οποία περιέχει τόσο εντολές όσο και δεδομένα. Όσο ο επεξεργαστής έχει ξεχωριστούς διαύλους για εντολές και δεδομένα, το συνολικό Nios II σύστημα μπορεί να παρουσιάσει έναν μόνο κοινό δίαυλο δεδομένων / εντολών προς το περιβάλλον του. Τα instruction master port και data master port δεν αλληλεπιδρούν μεταξύ τους Κρυφή Μνήμη Η Nios II αρχιτεκτονική υποστηρίζει κρυφές μνήμες (cache memories) τόσο για το instruction master port (instruction cache) όσο και για το data master port (data cache). Η κρυφή μνήμη είναι τοποθετημένη μέσα στο chip ως ένα κύριο κομμάτι του Nios II core. Οι κρυφές μνήμες μπορούν να βελτιώσουν το μέσο χρόνο πρόσβασης στη μνήμη για Nios II συστήματα που χρησιμοποιούν αργές off-chip μνήμες όπως η SDRAM για αποθήκευση προγραμμάτων και δεδομένων. Οι κρυφές μνήμες εντολών και δεδομένων είναι συνεχώς ενεργοποιημένες κατά τη διάρκεια λειτουργίας του συστήματος. Το σετ εντολών του Nios Ii παρέχει εντολές για τη διαχείριση της κρυφής μνήμης. Ρύθμιση Παραμέτρων Κρυφής Μνήμης Οι κρυφές μνήμες είναι προαιρετικές. Η ανάγκη για υψηλότερες αποδόσεις των μνήμων και κατά συνέπεια η ανάγκη για κρυφή μνήμη, εξαρτάται από την εφαρμογή. Πολλές εφαρμογές απαιτούν το μικρότερο δυνατό μέγεθος core επεξεργαστή και ανταλλάσσουν απόδοση για μικρο μέγεθος. Ένα Nios II core μπορεί να περιέχει μία, και τις δύο ή καμία από τις κρυφές μνήμες. Η εισαγωγή της κρυφής μνήμης δεν επηρεάζει τη λειτουργικότητα των προγραμμάτων, επηρεάζει όμως την ταχύτητα με την οποία ο επεξεργαστής ανακαλεί εντολές και γράφει/διαβάζει δεδομένα.

62 48 Κεφάλαιο 2 Απόδοση Κρυφής Μνήμης Η ικανότητα της κρυφής μνήμης να βελτιώσει την απόδοση, βασίζεται στις παρακάτω προϋποθέσεις: Η συνήθης μνήμη βρίσκεται εκτός chip και ο χρόνος πρόσβασης είναι πολύ μεγάλος σε σχέση με την on-chip μνήμη. Ο μεγαλύτερος, κρίσιμης σημασίας για την απόδοση του συστήματος, βρόχος εντολών είναι μικρότερος από την κρυφή μνήμη εντολών. Το μεγαλύτερο, κρίσιμης σημασίας για την απόδοση του συστήματος, block δεδομένων είναι μικρότερο από την κρυφή μνήμη δεδομένων. Η βέλτιστη ρύθμιση της κρυφής μνήμης εξαρτάται από την εφαρμογή, αν και υπάρχουν ρυθμίσεις που επηρεάζουν ένα μεγάλο εύρος συστημάτων/εφαρμογών. Για παράδειγμα, εάν ένα Nios II σύστημα περιλαμβάνει μόνο γρήγορες on-chip μνήμες τότε μία κρυφή μνήμη δεδομένων ή εντολών είναι απίθανο να προσφέρει κάποια βελτίωση στην απόδοση του συστήματος. Ακόμη, εάν ο κρίσιμος βρόχος ενός προγράμματος είναι 2KB αλλά το μέγεθος της κρυφή μνήμη εντολών είναι 1KB, τότε η κρυφή μνήμη δεν βελτιώνει την ταχύτητα εκτέλεσης, μπορεί αντίθετα να υποβαθμίσει την ολική απόδοση του συστήματος. Μέθοδοι Παράκαμψης Κρυφής Μνήμης Η Nios II αρχιτεκτονική παρέχει δύο μεθόδους παράκαμψης της κρυφής μνήμης: I/O εντολές φόρτωσης και αποθήκευσης Bit-31 cache bypass Οι εντολές φόρτωσης και αποθήκευσης (ldio και stio) παρακάμπτουν την κρυφή μνήμη δεδομένων και επιβάλλουν μία Avalon MM μεταφορά δεδομένων σε μία συγκεκριμένη διεύθυνση μνήμης. H bit-31 cache bypass μέθοδος χρησιμοποιεί στο data master port το bit-31 της διεύθυνσης ως ετικέτα που υποδεικνύει αν ο επεξεργαστής πρέπει να μεταφέρει δεδομένα από/προς την κρυφή μνήμη, ή να την παρακάμψει.

63 Ο Επεξεργαστής Nios II Tightly-Coupled Μνήμη Η tightly-coupled μνήμη παρέχει εγγυημένη χαμηλής καθυστέρησης πρόσβαση σε μνήμες για εφαρμογές όπου η απόδοση αποτελεί βασικό παράγοντα. Συγκρινόμενη με την κρυφή μνήμη, η tightly-coupled μνήμη παρέχει τα εξής προνόμια: Απόδοση παρόμοια της κρυφής μνήμης. Το software μπορεί να εγγυηθεί ότι συγκεκριμένα δεδομένα ή κομμάτια κώδικα βρίσκονται στην tightly-coupled μνήμη. Δεν υπάρχει επιβάρυνση σε πραγματικό χρόνο για λειτουργίες μνήμης όπως φόρτωση, ακύρωση ή άδειασμα μνήμης. Η θύρα tightly-coupled μνήμης (tightly-coupled memory port) είναι ένα ξεχωριστό master port στο core του Nios II παρόμοιο με το instruction master port και το data master port. Ένα Nios II core μπορεί να έχει καμία, μία ή πολλαπλές tightly-coupled μνήμες. Η Nios II αρχιτεκτονική υποστηρίζει tightly-coupled μνήμες για πρόσβαση σε εντολές και δεδομένα. Κάθε θύρα tightly-coupled μνήμης συνδέεται απευθείας με μία μόνο μνήμη, με εγγυημένη χαμηλή καθυστέρηση. Η μνήμη είναι εξωτερική του core του Nios II και βρίσκεται πάνω στο chip (on-chip). Πρόσβαση σε Tightly-Coupled Μνήμη Οι Tightly-coupled μνήμες καταλαμβάνουν κανονικές θέσεις διευθύνσεων όπως άλλες μνήμες συνδεδεμένες στην εσωτερική δομή διασύνδεσης του συστήματος. Το εύρος διευθύνσεων για τις tightly-coupled μνήμες (αν υπάρχει) καθορίζεται κατά την παραγωγή του συστήματος. Το software αποκτά πρόσβαση σε tightly-coupled μνήμη, χρησιμοποιώντας τις συνήθεις εντολές φόρτωσης και αποθήκευσης και δε διαφέρει από την πρόσβαση σε άλλες μνήμες. Απόδοση Tightly-Coupled Μνήμης Ένα σύστημα μπορεί να χρησιμοποιήσει μία tightly-coupled μνήμη για την επίτευξη μέγιστης απόδοσης στην πρόσβαση σε συγκεκριμένους τομείς δεδομένων ή κώδικα. Για παράδειγμα, έντονες υπολογιστικά εφαρμογές όπως εφαρμογές ψηφιακής επεξεργασίας σήματος (DSP) μπορούν να τοποθετήσουν τους buffers δεδομένων σε tightly-coupled μνήμες, για την όσο το δυνατόν γρηγορότερη πρόσβαση στα δεδομένα αυτά.

64 50 Κεφάλαιο Χάρτης Διευθύνσεων (Address Map) Ο χάρτης διευθύνσεων για μνήμες και περιφερειακά σε ένα Nios σύστημα είναι ανεξάρτητος του σχεδιασμού, και καθορίζεται κατά την παραγωγή του συστήματος. Υπάρχουν όμως τρεις διευθύνσεις οι οποίες αποτελούν μέρος του επεξεργαστή και αξίζουν ιδιαίτερης αναφοράς. Αυτές είναι: reset address exception address break handler access. Οι προγραμματιστές αποκτούν πρόσβαση σε μνήμες και περιφερειακά με τη χρήση μακροεντολών (macros) και οδηγών (drivers). Έτσι λοιπόν ο ευέλικτος χάρτης διευθύνσεων δεν επηρεάζει την ανάπτυξη των εφαρμογών. 2.6 Μονάδα αποσφαλμάτωσης JTAG (JTAG debug module) Η Nios II αρχιτεκτονική υποστηρίζει τη μονάδα αποσφαλμάτωσης JTAG η οποία παρέχει onchip χαρακτηριστικά εξομοίωσης για τον έλεγχο του επεξεργαστή από έναν απομακρυσμένο υπολογιστή. Τα εργαλεία αποσφαλμάτωσης επικοινωνούν με την JTAG μονάδα αποσφαλμάτωσης και παρέχουν τις παρακάτω δυνατότητες: Downloading προγραμμάτων στην μνήμη. Συλλογή πληροφοριών κατά την διάρκεια τις εκτέλεσης του προγράμματος. Έναρξη και τερματισμός εκτέλεσης προγράμματος. Εισαγωγή breakpoints και watchpoints. Ανάλυση περιεχομένων καταχωρητών και μνήμης.

65 Ο Επεξεργαστής Nios II 51 Η μονάδα αποσφαλμάτωσης συνδέεται στο JTAG κύκλωμα του FPGA. Από την πλευρά του επεξεργαστή η μονάδα αποσφαλμάτωσης συνδέεται με εσωτερικά σήματα του core του επεξεργαστή. Όλοι οι πόροι συστήματος του επεξεργαστή είναι διαθέσιμοι και στη μονάδα αποσφαλμάτωσης. Η μονάδα αποσφαλμάτωσης αποκτά τον έλεγχο του επεξεργαστή είτε με την εισαγωγή ενός hardware break σήματος ή με την εγγραφή μίας break εντολής στη μνήμη του προγράμματος προς εκτέλεση. Και στις δύο περιπτώσεις, ο επεξεργαστής μεταφέρει τον έλεγχο σε μία ρουτίνα που βρίσκεται στη διεύθυνση "break. Η διεύθυνση αυτή καθορίζεται κατά την παραγωγή του συστήματος. 2.7 Το σύνολο εντολών του Nios II Ο Nios II υποστηρίζει εντολές που ανήκουν σε έναν εκ των τριών τύπων: I-Type, R-Type και J-Type I-Type Το κύριο χαρακτηριστικό των I-Type εντολών είναι ότι περιέχουν μία άμεση τιμή ενσωματωμένη στο instruction word. Οι εντολές I-Type περιλαμβάνουν : Ένα πεδίο opcode (OP) των 6-bit. Ένα πεδίο άμεσης τιμής (IMM16) των 16-bit. Δύο πεδία καταχωρητών (Α και Β) των 5-bit. Πίνακας 2.3 Η μορφή των εντολών I-Type R-Type

66 52 Κεφάλαιο 2 Το χαρακτηριστικό του R-Type instruction-word format είναι ότι όλα τα ορίσματα και τα αποτελέσματα ορίζονται ως καταχωρητές. Οι εντολές I-Type αποτελούνται από : Ένα πεδίο opcode (OP) των 6-bit. Ένα πεδίο opcode-extension (OPX) των 11-bit. πεδία καταχωρητών (Α, B και C) των 5-bit. Πίνακας 2.4 Η μορφή των εντολών R-Type Στις περισσότερες περιπτώσεις τα πεδία A και B ορίζουν του καταχωρητές που παρέχουν τα ορίσματα της πράξης και το πεδίο C ορίζει τον καταχωρητή αποθήκευσης του αποτελέσματος J-Type Οι J-Type εντολές μεταφέρουν την εκτέλεση του προγράμματος σε κάποια άλλη διεύθυνση σε διάστημα 256Mbytes. Τέτοιες εντολές είναι η call,η jmpi και άλλες. Το J-Type instruction-word format αποτελείται από : Ένα πεδίο opcode (OP) των 6-bit. Ένα πεδίο άμεσων δεδομένων (IMMED26) των 26-bit. Πίνακας 2.5 Η μορφή των εντολών J-Type Τα OPcodes των Εντολών Τα πεδία OP και OPX, στις Nios II εντολές, καθορίζουν το opcode τους.

67 Ο Επεξεργαστής Nios II 53 Πίνακας 2.6 Τα OP πεδία (κυρίως I-Type εντολές) των εντολών του Nios II Πίνακας 2.7 Τα OPΧ πεδία των R-Type εντολών του Nios II

68 54 Κεφάλαιο 2

69 ΚΕΦΑΛΑΙΟ 3 Οι διασυνδέσεις Avalon Οι διασυνδέσεις Avalon απλοποιούν των σχεδιασμό συστημάτων επιτρέποντας την εύκολη σύνδεση υποσυστημάτων. Η οικογένεια των Avalon διασυνδέσεων καθορίζει διασυνδέσεις κατάλληλες για μεταφορά δεδομένων υψηλής ταχύτητας, εγγραφή και ανάγνωση μνήμης και καταχωρητών καθώς επίσης και έλεγχο off-chip συσκευών. Αυτές οι πρότυπες διασυνδέσεις είναι σχεδιασμένες μέσα στα ήδη έτοιμα προς χρ ήση components του SOPC Builder. Ο χρήστης μπορεί επίσης να χρησιμοποιήσει αυτές τις πρότυπες διασυνδέσεις στα υποσυστήματα που έχει σχεδιάσει ο ίδιος. Χρησιμοποιώντας αυτές τις πρότυπες διασυνδέσεις, ο χρήστης ενισχύει την διαλειτουργικότητα των υποσυστημάτων που σχεδιάζει. Παρακάτω δίνεται μια σύντομη περιγραφή κάθε ενός από τους εφτά τύπους Avalon διασυνδέσεων:

70 56 Κεφάλαιο 3 Avalon Streaming Interface (Avalon-ST) Μια διασύνδεση που υποστηρίζει ροή δεδομένων μιας κατεύθυνσης, όπως και πολυπλεξία ροών, πακέτων και δεδομένα DSP. Avalon Memory Mapped Interface (Avalon-MM) Μια address-based διασύνδεση ανάγνωσης/εγγραφής που αποτελεί μια τυπική σύνδεση master slave. Avalon Conduit Interface Μια διασύνδεση που εξυπηρετεί μεμονωμένα σήματα ή ομάδες σημάτων που δεν εμπίπτουν σε κάποιο άλλο τύπο Avalon διασύνδεσης. Avalon Tri-State Conduit Interface (Avalon-TC) Μια διασύνδεση που υποστηρίζει συνδέσεις με off-chip περιφερειακά. Τα περιφερειακά αυτά μπορούν να μοιράζονται ακροδέκτες μέσω πολυπλεξία σήματος, μειώνοντας έτσι τον συνολικό αριθμό των ακροδεκτών του FPGA που χρησιμοποιούνται. Avalon Interrupt Interface Μια διασύνδεση που επιτρέπει σε υποσυστήματα να ειδοποιούν άλλα υποσυστήματα όταν κάποιο γεγονός πραγματοποιείται. Avalon Clock Interface Μια διασύνδεση που οδηγεί ή λαμβάνει σήματα ρολογιού. Όλες οι Avalon διασυνδέσεις είναι σύγχρονες. Avalon Reset Interface Μια διασύνδεση που παρέχει μια σύνδεση reset. Κάθε υποσύστημα μπορεί να περιλαμβάνει οποιοδήποτε αριθμό από τις παραπάνω διασυνδέσεις καθώς επίσης και περισσότερες από μια διασυνδέσεις του ιδίου τύπου. 3.1 Avalon Streaming Interfaces Οι διασυνδέσεις Avalon Streaming (Avalon-ST) χρησιμοποιούνται για υποσυστήματα (components) που οδηγούν ροές δεδομένων μονής κατεύθυνσης, υψηλού εύρους και μικρού λανθάνοντος χρόνου (high bandwidth, low latency). Τυπικές εφαρμογές περιλαμβάνουν πολυπλεξία ροών, πακέτα, και δεδομένα DSP. Τα σήματα των διασυνδέσεων Avalon Streaming (Avalon-ST) μπορούν να περιγράψουν παραδοσιακές διασυνδέσεις ροών υποστηρίζοντας μόνο μια ροη δεδομένων χωρίς να απαιτείται γνώση των καναλιών ή των ορίων των πακέτων. Η διασύνδεση Avalon Streaming (Avalon-ST) μπορεί επίσης να υποστηρίξει πιο πολύπλοκα πρωτόκολλα ικανά να υποστηρίξουν μεταφορές πακέτων τα οποία είναι διαστρωμένα μεταξύ πολλαπλών καναλιών.

71 Οι διασυνδέσεις Avalon 57 Σχήμα 3.1 Τυπική εφαρμογή της διασύνδεσης Avalon Streaming (Avalon-ST) Όλες οι διασυνδέσεις Avalon-ST τύπου source και sink δεν είναι απαραίτητα διαλειτουργικές. Όμως αν δυο διασυνδέσεις παρέχουν λειτουργίες συμβατότητας για τον ίδιο χώρο εφαρμογής μετασχηματιστές (adapters) μπορούν να χρησιμοποιηθούν επιτρέποντας την διαλειτουργικότητα των διασυνδέσεων αυτών. Το πρωτόκολλο διασύνδεσης Avalon-ST προσδιορίζει τους ακόλουθους όρους: Avalon Streaming System Ένα Avalon Streaming σύστημα περιλαμβάνει μια ή περισσότερες Avalon-ST συνδέσεις που μεταφέρουν δεδομένα από μια διασύνδεση source σε μια διασύνδεση sink. Avalon Streaming Components Ένα τυπικό σύστημα που χρησιμοποιεί Avalon-ST διασυνδέσεις συνδυάζει πολλαπλά λειτουργικά κομμάτια, που ονομάζονται components. Ο σχεδιαστής του συστήματος ρυθμίζει τα επιμέρους στοιχειά του συστήματος και τα συνδέει για να υλοποιήσει το τελικό σύστημα. Source and Sink Interfaces and Connections Όταν δυο components είναι

72 58 Κεφάλαιο 3 συνδεδεμένα, τα δεδομένα μεταφέρονται από την διασύνδεση source στην διασύνδεση sink. Ο συνδυασμός μιας διασύνδεσης source, η οποία είναι συνδεδεμένη σε μια διασύνδεση sink αναφέρεται ως σύνδεση (connection). Backpressure Η Backpressure επιτρέπει σε μια διασύνδεση sink να εκπέμψει σήμα σε μια διασύνδεση source ώστε να σταματήσει να στέλνει δεδομένα. Η Backpressure είναι ένα προαιρετικό χαρακτηριστικό. Μια διασύνδεση sink χρησιμοποιεί backpressure για να σταματήσει την ροή δεδομένων για κάποιον από τους παρακάτω λόγους : Όταν τα FIFOs του sink είναι γεμάτα. Όταν υπάρχει συμφόρηση στην θύρα εξόδου του. Transfers and Ready Cycles Μεταφορά ονομάζεται η μετάδοση δεδομένων και σημάτων ελέγχου από μια διασύνδεση source σε μια διασύνδεση sink. Ένας κύκλος ρολογιού που χαρακτηρίζεται ready είναι ένας κύκλος κατά τον οποίο η διασύνδεση sink μπορεί να αποδεχτεί μια μεταφορά δεδομένων και σημάτων ελέγχου. Symbol Ένα σύμβολο είναι το μικρότερο σύνολο δεδομένων. Για τις περισσότερες διασυνδέσεις που υποστηρίζουν την μεταφορά πακέτων, ένα σύμβολο είναι ένα byte. Ένα ή περισσότερα σύμβολα αποτελούν το σύνολο των δεδομένων που μεταφέρονται σε ένα κύκλο ρολογιού. Channel Ένα κανάλι είναι ένα υλικό ή λογικό μονοπάτι ή σύνδεσμος μέσω του οποίου μεταφέρονται πληροφορίες μεταξύ δυο θυρών. Beat Ένα beat είναι μια μεταφορά που συντελείται σε ένα μόνο κύκλο ρολογιού ανάμεσα σε μια διασύνδεση source και μια διασύνδεση sink και αποτελείται από ένα ή περισσότερα σύμβολα. Packet Ένα πακέτο είναι ένα σύνολο δεδομένων και σημάτων ελέγχου που μεταδίδονται όλα μαζί. Ένα πακέτο μπορεί να περιέχει μια κεφαλίδα (header) για να βοηθά τους δρομολογητές και τις άλλες συσκευές του δικτύου να οδηγήσουν τα πακέτα στον σωστό προορισμό τους. Η δομή των πακέτων καθορίζονται από την εκάστοτε εφαρμογή. Τα πακέτα των Avalon-ST διασυνδέσεων μπορούν να διαφέρουν στο μήκος τους και μπορούν να είναι διαστρωμένα κατά μήκος μιας σύνδεσης. Τα πακέτα αποτελούν ένα προαιρετικό χαρακτηριστικό των Avalon-ST διασυνδέσεων.

73 Οι διασυνδέσεις Avalon Τα σήματα των Avalon-ST διασυνδέσεων Κάθε σήμα σε μια Avalon-ST διασύνδεση source ή sink έχει έναν συγκεκριμένο ρόλο. Μια Avalon-ST διασύνδεση μπορεί να περιέχει μόνο ένα σήμα για καθεμιά λειτουργία. Όλοι οι διαθέσιμοι ρόλοι που μπορεί να έχει ένα σήμα μιας Avalon-ST διασύνδεσης ισχύουν και για τις διασυνδέσεις sources άλλα και τις διασυνδέσεις sink και έχουν το ίδιο νόημα. Όνομα σήματος Εύρος Κατεύθυνση Περιγραφή Σήματος Θεμελιώδη σήματα channel Source Sink Data 1 4,096 Source Sink error Source Sink ready 1 Sink Source valid 1 Source Sink Ο αριθμός καναλιών για τα δεδομένα που μεταφέρονται στον τρέχοντα κύκλο ρολογιού. Αν μια διασύνδεση υποστηρίζει το σήμα channel, πρέπει επίσης να προσδιορίζει την παράμετρο maxchannel. Το σήμα data μεταφέρει τον όγκο της πληροφορίας που μεταδίδεται. Το περιεχόμενο και η δομή του σήματος data καθορίζονται περεταίρω από παραμέτρους. Μια μάσκα μερικών bit που χρησιμοποιείται για να μαρκάρει τα σφάλματα που επηρεάζουν τα δεδομένα που μεταδίδονται στον τρέχοντα κύκλο ρολογιού. Κάθε ένα bit στο σήμα error χρησιμοποιείται για κάθε ένα από τα σφάλματα που αναγνωρίζονται από το υποσύστημα, όπως προσδιορίζονται από την ιδιότητα errordescriptor. Η ενεργοποίηση αυτού του σήματος υποδεικνύει ότι η διασύνδεση sink μπορεί να λάβει δεδομένα. Διασυνδέσεις source που δεν έχουν την είσοδο ready δεν μπορούν να υποστούν backpressure. Διασυνδέσεις sink χωρίς έξοδο ready δεν χρειάζεται ποτέ να κάνουν backpressure. Ενεργοποιείται από την διασύνδεση source ώστε να καταστήσει έγκυρα όλα τα σήματα από την διασύνδεση source στη διασύνδεση sink. Η διασύνδεση sink αποδέχεται τα δεδομένα και τα άλλα σήματα που λαμβάνει από την διασύνδεση source σε ready κύκλους ρολογιού όπου το σήμα valid είναι ενεργό. Όλοι οι άλλοι κύκλοι ρολογιού αγνοούνται. Διασυνδέσεις χωρίς το σήμα valid

74 60 Κεφάλαιο 3 empty 1 8 Source Sink endofpacket 1 Source Sink startofpacket 1 Source Sink Σήματα μεταφοράς πακέτων Πίνακας 3.1 Τα σήματα των Avalon-ST διασυνδέσεων παρέχουν ή αναμένουν έγκυρα δεδομένα σε κάθε κύκλο ρολογιού και δεν υποστηρίζουν την δυνατότητα backpressure. Υποδεικνύει τον αριθμό των συμβόλων τα οποία δεν περιέχουν δεδομένα κατά την διάρκεια κύκλων ρολογιού που περιέχουν το τέλος ενός πακέτου. Ενεργοποιείται από την διασύνδεση source και σηματοδοτεί το τέλος ενός πακέτου. Ενεργοποιείται από την διασύνδεση source και σηματοδοτεί την αρχή ενός πακέτου. Όλες οι μεταφορές δεδομένων μιας σύνδεσης Avalon-ST συμβαίνουν σύγχρονα με την θετική ακμή του συσχετιζόμενου σήματος ρολογιού. Όλα τα σήματα εξόδου από μια διασύνδεση source σε μια διασύνδεση sink, συμπεριλαμβανομένων των σημάτων data, channel και error, πρέπει να καταχωρούνται στην θετική ακμή του ρολογιού. Τα σήματα που εισέρχονται σε μια διασύνδεση sink δεν είναι υποχρεωτικό να καταχωρηθούν. Η καταχώρηση των σημάτων στην διασύνδεση source υλοποιεί διεργασίες υψηλής συχνότητας εξαλείφοντας ταυτόχρονα καταχωρητές χωρίς κάποια λογική διεργασία αναμασά τους. Υποσυστήματα τύπου Avalon-ST συνήθως δεν περιλαμβάνουν μια είσοδο για ενεργοποίηση του σήματος ρολογιού. Τα σήματα που στέλνει ένα υποσύστημα Avalon-ST στον εαυτό του είναι επαρκή έτσι ώστε να καθορίζεται σε ποιούς κύκλους ρολογιού το υποσύστημα πρέπει ή δεν πρέπει να είναι να είναι ενεργοποιημένο. Εσωτερικά των υποσυστημάτων Avalon-ST μπορεί να υπάρχει ένα σήμα ενεργοποίησης ρολογιού για την εσωτερική λογική τους. Αλλά πρέπει να εξασφαλίζουν ότι ο χρονισμός των σημάτων ελέγχου της διασύνδεσης υπακούει ακόμη στο πρωτόκολλο της διασύνδεσης. Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας symbolsperbeat associatedclock 1 Clock Το όνομα της διασύνδεσης Avalon

75 Οι διασυνδέσεις Avalon 61 interface Clock στην οποία η διασύνδεση Avalon-ST είναι σύγχρονη. associatedreset 1 beatspercycle 8 Reset interface Το όνομα της διασύνδεσης Avalon Reset στην οποία η διασύνδεση Avalon-ST είναι σύγχρονη. Προσδιορίζει τον αριθμό των beats που μεταφέρονται σε ένα κύκλο ρολογιού. Καθορίζει τον αριθμό των bits ανά databitspersymbol σύμβολο. Η τιμή αυτής της παραμέτρου δεν περιορίζεται στο να είναι δύναμη του δυο. Όταν παίρνει την τιμή true, emptywithinpacket false true, false αναγνωρίζει δεδομένα μεταξύ των σημάτων startofpacket και endofpacket που δεν είναι έγκυρα. errordescriptor Όταν παίρνει την τιμή true, το σύμβολο πρώτης τάξης οδηγείται στα πιο firstsymbolinhigh OrderBits true true, false σημαντικά bits της διασύνδεσης δεδομένων. Όταν παίρνει την τιμή false, το πρώτο σύμβολο οδηγείται στα λιγότερο σημαντικά bits της διασύνδεσης δεδομένων. maxchannel Ο μέγιστος αριθμός καναλιών που μια διασύνδεση δεδομένων μπορεί να υποστηρίξει. Καθορίζει την σχέση μεταξύ ενεργοποίησης και απενεργοποίησης readylatency του σήματος ready και τους κύκλους ρολογιού που μπορούν να γίνουν μεταφορές δεδομένων. Η παράμετρος readylatency καθορίζεται ξεχωριστά για κάθε διασύνδεση. Πίνακας 3.2 Ιδιότητες των σημάτων των Avalon-ST διασυνδέσεων Στο παρακάτω σχήμα παρουσιάζονται τα σήματα που συνήθως περιλαμβάνονται σε μια διασύνδεση Avalon-ST. Μια τυπική διασύνδεση Avalon-ST source οδηγεί τα σήματα valid, data, error, και channel στην διασύνδεση sink. Η διασύνδεση sink μπορεί να προκαλέσει το λεγόμενο backpressure χρησιμοποιώντας το σήμα ready.

76 62 Κεφάλαιο 3 Σχήμα 3.2 Μια τυπική διασύνδεση Avalon-ST Ορισμένες βασικές λεπτομέρειες για τα σήματα αυτά παρουσιάζονται παρακάτω : ready Σε διασυνδέσεις που υποστηρίζουν backpressure, η διασύνδεση sink επιβεβαιώνει το σήμα ready έτσι ώστε να σηματοδοτήσει τους κύκλους ρολογιού όπου μπορούν να συμβούν μεταφορές δεδομένων. Αν η επιβεβαίωση του σήματος ready γίνει στον <n> κύκλο ρολογιού, ο κύκλος <n + readylatency > θεωρείται ένας κύκλος όπου μπορούν να συμβούν μεταφορές δεδομένων. valid Το σήμα valid επιτρέπει την μετάδοση έγκυρων δεδομένων σε κύκλους ρολογιού όπου δεδομένα μεταφέρονται από την διασύνδεση source στην διασύνδεση sink. Σε κάθε κύκλο valid το σήμα data καθώς και τα υπόλοιπα σήματα από την διασύνδεση source στην διασύνδεση sink δειγματοληπτούνται από την διασύνδεση sink. data Το σήμα data μεταφέρει τον όγκο της πληροφορίας που μεταφέρεται από την διασύνδεση source στην διασύνδεση sink. Το σήμα data αποτελείται από ένα ή περισσότερα σύμβολα που μεταφέρονται σε κάθε κύκλο ρολογιού. Η παράμετρος databitspersymbol καθορίζει πως το σήμα data διαιρείται σε σύμβολα. error Τυχόν λάθη σηματοδοτούνται από το σήμα error, όπου κάθε bit στο σήμα error αντιστοιχεί σε μια πιθανή κατάσταση σφάλματος. Μια τιμή μηδέν σε κάποιον κύκλο ρολογιού σημαίνει ότι δεν υπάρχουν λάθη στα δεδομένα. channel Το προαιρετικό σήμα channel οδηγείται από την διασύνδεση source για να δείξει το κανάλι στο οποίο ανήκουν τα δεδομένα. Η σημασία του σήματος channel για μια συγκεκριμένη διασύνδεση εξαρτάται από την εφαρμογή. Όταν χρησιμοποιείται το σήμα channel, όλα τα δεδομένα που μεταφέρονται σε κάθε ενεργό κύκλο ρολογιού ανήκουν στο ίδιο κανάλι. Η διασύνδεση source μπορεί να αλλάξει σε ένα διαφορετικό κανάλι σε διαδοχικούς ενεργούς κύκλους ρολογιού.

77 Οι διασυνδέσεις Avalon 63 Μια διασύνδεση που χρησιμοποιεί το σήμα channel πρέπει να καθορίζει και την παράμετρο maxchannel που δείχνει τον μέγιστο αριθμό καναλιών. Αν ο αριθμός των καναλιών που υποστηρίζει μια διασύνδεση αλλάζει δυναμικά, η παράμετρος maxchannel έχει την τιμή του μέγιστου αριθμού καναλιών που μπορεί να υποστηρίξει η διασύνδεση Data Transfer with Backpressure Η διασύνδεση sink ενεργοποιεί το σήμα ready για ένα κύκλο ρολογιού για να δείξει ότι αυτός ο κύκλος ρολογιού είναι ενεργός. Κύκλοι ρολογιού κατά τους οποίους η διασύνδεση sink είναι έτοιμη να δεχτεί δεδομένα ονομάζονται ready cycles. Κατά την διάρκεια ενός ready cycle, η διασύνδεση source μπορεί να ενεργοποιήσει το σήμα valid και να αρχίσει να παρέχει δεδομένα στην διασύνδεση sink. Αν δεν έχει δεδομένα να στείλει, απενεργοποιεί το σήμα valid και μπορεί να οδηγεί τα δεδομένα σε οπουδήποτε τιμή. Κάθε διασύνδεση που υποστηρίζει την δυνατότητα backpressure πρέπει να προσδιορίζει την παράμετρο readylatency που δείχνει τον αριθμό των κύκλων ρολογιού από την στιγμή που ενεργοποιείται το σήμα ready μέχρι την στιγμή έγκυρα δεδομένα μπορούν να μεταδοθούν. Αν η παράμετρος readylatency έχει μη μηδενική τιμή τότε ο κύκλος ρολογιού <n + readylatency> είναι ένας ready cycle, αν το σήμα ready ενεργοποιηθεί στον κύκλο ρολογιού <n>. Οποιαδήποτε διασύνδεση που περιλαμβάνει το σήμα ready και προσδιορίζει την παράμετρο readylatency υποστηρίζει την δυνατότητα backpressure. Όταν readylatency = 0, τα δεδομένα μεταδίδονται μόνο όταν τα σήματα ready και valid είναι ενεργοποιημένα στον ίδιο κύκλο ρολογιού. Σε αυτόν τον τρόπο λειτουργίας, η διασύνδεση source δεν περιμένει να λάβει το σήμα ready της διασύνδεσης sink προτού να αρχίσει να στέλνει έγκυρα δεδομένα. Η διασύνδεση source παρέχει τα δεδομένα και ενεργοποιεί το σήμα valid όποτε μπορεί. Η διασύνδεση source περιμένει έως ότου η διασύνδεση sink να λάβει τα δεδομένα και ενεργοποιήσει το σήμα ready. Η διασύνδεση source μπορεί να αλλάξει τα δεδομένα που παρέχει οποιαδήποτε στιγμή. Η διασύνδεση sink λαμβάνει δεδομένα από την διασύνδεση source μόνο όταν τα σήματα ready και valid είναι ταυτόχρονα ενεργά. Όταν readylatency >= 1, η διασύνδεση sink ενεργοποιεί το σήμα ready πριν τον ready cycle. Η διασύνδεση source μπορεί να ανταποκριθεί κατά την διάρκεια του κατάλληλου κύκλου

78 64 Κεφάλαιο 3 ρολογιού ενεργοποιώντας το σήμα valid. Το σήμα valid δεν μπορεί να ενεργοποιηθεί σε έναν κύκλο ρολογιού που δεν είναι ready cycle Μεταφορές πακέτων δεδομένων Η ιδιότητα μιας διασύνδεσης για μεταφορά πακέτων παρέχει την απαραίτητη υποστήριξη για μεταφορά πακέτων από μια διασύνδεση source σε μια διασύνδεση sink. Τρία επιπλέον σήματα πρέπει να προσδιοριστούν για την υλοποίηση της μεταφοράς πακέτων. Για την υποστήριξη πακέτων τόσο η διασύνδεση source όσο και η διασύνδεση sink πρέπει να περιλαμβάνουν αυτά τα επιπλέων σήματα. Σχήμα 3.3 Πακέτα Δεδομένων Λεπτομέριες σημάτων startofpacket Όλες οι διασυνδέσεις που υποστηρίζουν μεταφορές πακέτων πρέπει να περιλαμβάνουν το σήμα startofpacket. Το σήμα startofpacket σηματοδοτεί τον ενεργό κύκλο ρολογιού που περιέχει την αρχή του πακέτου. Αυτό το σήμα είναι έγκυρο όταν το σήμα valid είναι ενεργό. endofpacket Όλες οι διασυνδέσεις που υποστηρίζουν μεταφορές πακέτων πρέπει να περιλαμβάνουν το σήμα endofpacket. Το σήμα endofpacket σηματοδοτεί τον ενεργό κύκλο ρολογιού που περιέχει το τέλος του πακέτου. Αυτό το σήμα είναι έγκυρο όταν το σήμα valid είναι ενεργό.τα σήματα startofpacket και endofpacket μπορούν να είναι ενεργά στον ίδιο κύκλο ρολογιού. Δεν απαιτούνται ανενεργοί κύκλοι ρολογιού μεταξύ των πακέτων. Το σήμα startofpacket μπορεί να ακολουθεί

79 Οι διασυνδέσεις Avalon 65 αμέσως μετά το προηγούμενο σήμα endofpacket. empty Το προαιρετικό σήμα empty δείχνει τον αριθμό των συμβόλων που δεν περιέχουν πληροφορία στον κύκλο ρολογιού όπου το σήμα endofpacket είναι ενεργό. Η διασύνδεση sink ελέγχει την τιμή του σήματος empty κατά την διάρκεια ενεργών κύκλων ρολογιού που το σήμα endofpacket είναι ενεργό. Τα άδεια σύμβολα είναι πάντα τα τελευταία σύμβολα των μεταφερόμενων δεδομένων, αυτά μεταφέρονται από τα low-order bits όταν ισχύει η συνθήκη firstsymbolinhighorderbits = true. Το σήμα empty απαιτείται σε όλες τις διασυνδέσεις μεταφοράς πακέτων των οποίων το σήμα data μεταφέρει πάνω από ένα σύμβολα από δεδομένα και έχουν μια δομή μεταβαλλόμενου μήκους πακέτων. Το μέγεθος του σήματος empty σε bits είναι log 2 (<symbols per cycle>). 3.2 Avalon Memory-Mapped Interfaces Οι διασυνδέσεις Avalon Memory-Mapped (Avalon-MM) χρησιμοποιούνται για να υλοποιήσουν διασυνδέσεις ανάγνωσης και εγγραφής για υποσυστήματα τύπου master ή slave. Τυπικά υποσυστήματα που περιλαμβάνουν memory-mapped διασυνδέσεις είναι τα εξής: Microprocessors Memories UARTs DMAs Timers Οι διασυνδέσεις Avalon Memory-Mapped μπορεί να είναι πολύ απλές άλλα και πολύπλοκες ανάλογα το εκάστοτε υποσύστημα Τα σήματα των Avalon-MM διασυνδέσεων Το κάθε σήμα της διασύνδεσης Avalon-MM έχει και ένα συγκεκριμένο ρόλο επιτρέποντας έτσι την δημιουργία masters που χρησιμοποιούν bursts για διαδικασίες ανάγνωσης και εγγραφής. Χρησιμοποιώντας πολλά διασωληνομένα περιφερειακά τύπου slave είναι δυνατόν να βελτιωθεί η ικανότητα διαβίβασης δεδομένων του συστήματος. Ως απάντηση σε μια εγγραφή, όταν ένα περιφερειακό τύπου slave έχει έγκυρα δεδομένα ενεργοποιεί το

80 66 Κεφάλαιο 3 σήμα readdatavalid. Η εσωτερική διασύνδεση καθιστά δυνατή την σύνδεση ανάμεσα σε ένα ζευγάρι master και slave. Δεν είναι απαραίτητο όλα τα σήματα να υπάρχουν σε μαι διασύνδεση Avalon-MM. Βασικά, δεν υπάρχει κάποιο σήμα που να απαιτείται πάντα. Ελάχιστη προϋπόθεση είναι το σήμα readdata για μια διασύνδεση read-only ή τα σήματα writedata και write για μια διασύνδεση write-only. Όνομα σήματος Εύρος Κατεύθυνση Περιγραφή Σήματος Masters: Ως προεπιλογή, το σήμα address αντιπροσωπεύει μια διεύθυνση byte. Η τιμή της διεύθυνσης πρέπει να είναι συμβατή με το εύρος των δεδομένων. Για εγγραφή σε συγκεκριμένα bytes μέσα σε μια λέξη (word) δεδομένων, ο master πρέπει να χρησιμοποιήσει το σήμα byteenable. address 1-64 begintransfer 1 byteenable 2, 4, 8, 16, 32, byteenable_n 64, 128 Master Slave Master Slave Master Slave Slaves: Ως προεπιλογή, η εσωτερική διασύνδεση μεταφράζει την διεύθυνση byte σε μια διεύθυνση λέξης (word) στο χώρο διευθύνσεων του slave. Κάθε πρόσβαση στον slave είναι μια λέξη (word) δεδομένων από την προοπτική του slave. Για παράδειγμα, η address = 0 επιλέγει την πρώτη λέξη (word) του slave. Η Address = 1 επιλέγει την δεύτερη λέξη (word) του slave. Ενεργοποιείται από την εσωτερική διασύνδεση για τον πρώτο κύκλο ρολογιού της κάθε μεταφοράς ανεξάρτητα από το σήμα waitrequest και τα αλλά σήματα. Το σήμα begintransfer είναι προαιρετικό. Ένας slave μπορεί πάντα εσωτερικά να υπολογίσει την αρχή της επόμενης συναλλαγής από τα υπόλοιπα σήματα. Ενεργοποιεί συγκεκριμένες γραμμές byte κατά την διάρκεια μεταφορών σε θύρες με εύρος άνω των 8 bits. Κάθε bit στο σήμα byteenable αντιστοιχεί σε ένα byte στα σήματα writedata και readdata.το master bit <n> του σήματος byteenable δείχνει εάν γίνεται εγγραφή στο byte <n>. Κατά την διάρκεια εγγραφών, τα σήματα byteenables προσδιορίζουν σε ποια bytes γίνεται εγγραφή. Τα υπόλοιπα bytes θα πρέπει να αγνοηθούν από τον slave. Κατά την διάρκεια

81 Οι διασυνδέσεις Avalon 67 ανάγνωσης, τα σήματα byteenables προσδιορίζουν ποια bytes διαβάζει ο master. Slaves που απλά επιστρέφουν το σήμα readdata χωρίς προβλήματα είναι ελεύθεροι να αγνοήσουν τα σήματα byteenables κατά την διάρκεια αναγνώσεων. Αν μια διασύνδεση δεν έχει το σήμα byteena ble, η μεταφορά συνεχίζει θεωρώντας ότι όλα τα σήματα byteenables είναι ενεργοποιημένα. debugaccess 1 read read_n 1 Master Slave Master Slave Όταν περισσότερα από ένα bit του σήματος byteenable είναι ενεργά, όλες οι ενεργές γραμμές είναι γειτονικές. Ο αριθμός των γειτονικών γραμμών πρέπει να είναι δύναμη του 2. Τα προσδιορισμένα bytes πρέπει να είναι ευθυγραμμισμένα στα όρια μιας διεύθυνσης για το μέγεθος των δεδομένων. Για παράδειγμα, οι ακόλουθες τιμές είναι έγκυρες για έναν slave των 32-bit: 1111 γράφει πλήρης 32 bits 0011 γράφει τα κάτω 2 bytes 1100 γράφει τα πάνω 2 bytes 0001 γράφει byte 0 μόνο 0010 γράφει byte 1 μόνο 0100 γράφει byte 2 μόνο 1000 γράφει byte 3 μόνο Όταν ενεργοποιείται, επιτρέπει να γίνει εγγραφή σε εσωτερικές μνήμες που συνήθως είναι writeprotected. Για παράδειγμα, σε on-chip ROM μνήμες μπορεί να γίνει εγγραφή μόνο όταν ενεργοποιηθεί το σήμα debugaccess. Ενεργοποιείται για να υποδείξει μια μεταφορά ανάγνωσης. Αν χρησιμοποιείται, το σήμα readdata είναι απαραίτητο. readdata 8,16, 32, 64, 128, 256, 512, 1024 Slave Master Το σήμα readdata που οδηγείται από τον slave στον master ως απάντηση σε μια μεταφορά ανάγνωσης. write Master 1 write_n Slave Ενεργοποιείται για να υποδείξει μια μεταφορά εγγραφής. Αν χρησιμοποιείται, το σήμα writedata είναι απαραίτητο. writedata 8,16, 32, 64, Master Δεδομένα για μεταφορές εγγραφής. Το εύρος πρέπει

82 68 Κεφάλαιο 3 128, 256, 512, 1024 Slave να είναι το ίδιο με το εύρος του σήματος readdata αν και τα δυο είναι παρόν. Wait-State Signals lock 1 Master Slave Το σήμα lock εξασφαλίζει ότι μόλις ένας master αποκτήσει πρόσβαση, διατηρεί την πρόσβαση στον slave για πολλαπλές συναλλαγές. Ενεργοποιείται ταυτόχρονα με το πρώτο read ή write μιας κλειδωμένης ακολουθίας από συναλλαγές. Απενεργοποιείται κατά την τελευταία συναλλαγή μιας κλειδωμένης ακολουθίας από συναλλαγές. Η ενεργοποίηση του σήματος lock δεν εγγυάται ότι η πρόσβαση έχει επιτευχθεί. Αφότου ο master που ενεργοποίησε το σήμα lock αποκτήσει πρόσβαση, την διατηρεί μέχρι το σήμα lock να απενεργοποιηθεί. Ένας master που χρησιμοποιεί το σήμα lock δεν μπορεί να είναι ένας burst master. Τιμές προτεραιότητας για masters που χρησιμοποιούν το σήμα lock αγνοούνται. Το σήμα lock είναι ιδιαίτερα χρήσιμο για διαδικασίες ανάγνωσης-τροποποίησης-εγγραφής (read-modifywrite / RMW). Μια τυπική διαδικασία read-modifywrite περιλαμβάνει τα ακόλουθα βήματα: 1.Ο Master A διαβάζει δεδομένα 32-bit που έχουν πολλαπλά πεδία από bit. 2.Ο Master A αλλάζει ένα πεδίο bit και γράφει δεδομένα των 32-bit πίσω. Το σήμα lock αποτρέπει τον master B από την εκτέλεση μιας εντολής εγγραφής ανάμεσα στις εντολές ανάγνωσης και εγγραφής του Master A. Το σήμα lock επίσης εξασφαλίζει ότι ο master A δεν θα αντικαταστήσει τις αλλαγές του master B. Ενεργοποιείται από τον slave όταν δεν μπορεί να ανταποκριθεί σε ένα αίτημα εγγραφής ή ανάγνωσης. Αναγκάζει τον master να περιμένει μέχρι η εσωτερική waitrequest waitrequest_n 1 Slave Master διασύνδεση είναι έτοιμη να προχωρήσει με την μεταφορά. Στο ξεκίνημα όλων των μεταφορών, ένας master ξεκινά την μεταφορά και περιμένει μέχρι το σήμα waitrequest απενεργοποιηθεί. Ένας master δεν πρέπει να κάνει καμιά υπόθεση για την κατάσταση στην οποία βρίσκεται το σήμα

83 Οι διασυνδέσεις Avalon 69 waitrequest όταν ο master είναι αδρανή: το σήμα waitrequest μπορεί να είναι high ή low, ανάλογα με τις ιδιότητες του συστήματος. Όταν το σήμα waitrequest ενεργοποιείται,τα σήματα ελέγχου από τον master στον slave παραμένουν σταθερά με εξαίρεση τα σήματα begintransfer και beginbursttransfer. Pipeline Signals Ένας Avalon-MM slave μπορεί να ενεργοποιήσει το σήμα waitrequest κατά την διάρκεια αδρανών κύκλων ρολογιού. Ένας Avalon-MM master μπορεί να ξεκινήσει μια συναλλαγή όταν το σήμα waitrequest είναι ενεργό και έπειτα να περιμένει μέχρι αυτό το σήμα να απενεργοποιηθεί. Για την αποφυγή κλειδώματος του συστήματος, μια συσκευή τύπου slave πρέπει να ενεργοποιεί το σήμα waitrequest κατά την επαναφορά του συστήματος. Χρησιμοποιείται για διασωληνωμένες μεταφορές με μη σταθερή καθυστέρηση. Όταν ενεργοποιείται, υποδεικνύει ότι το σήμα readdata περιέχει έγκυρα δεδομένα. Ένας slave με το σήμα readdatavalid πρέπει να ενεργοποιήσει αυτό το σήμα για ένα κύκλο ρολογιού για κάθε αίτημα ανάγνωσης. Πρέπει να υπάρχει καθυστέρηση τουλάχιστον ενός κύκλου ρολογιού μεταξύ της αποδοχής του αιτήματος για readdatavalid readdatavalid _ n 1 Slave Master ανάγνωση και την ενεργοποίηση του σήματος readdatavalid. Ένας slave μπορεί να ενεργοποιήσει το σήμα readdatavalid για να μεταφέρει δεδομένα στον master ανεξάρτητα εάν ο slave καθυστερεί μια νέα εντολή με το σήμα waitrequest. Απαιτείται εάν ο master υποστηρίζει διασωληνωμένες εντολές ανάγνωσης. Bursting masters με δυνατότητες ανάγνωσης πρέπει να περιλαμβάνουν το σήμα readdatavalid. Burst Signals

84 70 Κεφάλαιο 3 burstcount 1 11 Master Slave Χρησιμοποιείται από bursting masters για να δείξει τον αριθμό μεταφορών σε κάθε burst. Η τιμή της παραμέτρου για το μέγιστο burstcount πρέπει να είναι δύναμη του 2. Μια θύρα burstcount με εύρος <n> μπορεί να κωδικοποιήσει ένα μέγιστο burst με μέγεθος 2 (<n>-1). Για παράδειγμα, ένα σήμα burstcount των 4-bit μπορεί να υποστηρίξει ένα μέγιστο υπολογισμό burst των 8. Το ελάχιστο burstcount είναι 1. Η ιδιότητα constantburst ελέγχει τον χρονισμό του σήματος burstcount. Bursting masters με δυνατότητες ανάγνωσης πρέπει να περιλαμβάνουν το σήμα readdatavalid. Για bursting masters και slaves, ο ακόλουθος περιορισμός ισχύει για το εύρος της διεύθυνσης: beginbursttransfer 1 Interconnect Slave <address_w> >= <burstcount_w> + floor(log 2 (<symbols_per_word_of_interface>)) Ενεργοποιείται για τον πρώτο κύκλο ρολογιού ενός burst για να δείξει πότε μια burst μεταφορά ξεκινά. Αυτό το σήμα απενεργοποιείται μετά από έναν κύκλο ρολογιού ανεξάρτητα από την τιμή του σήματος waitrequest. Η εσωτερική δομή διασύνδεσης αυτόματα δημιουργεί αυτό το σήμα για slaves όταν αυτό απαιτείται. Το σήμα beginbursttransfer είναι προαιρετικό. Ένας slave μπορεί πάντα εσωτερικά να υπολογίσει την αρχή της επόμενης burst συναλλαγής ανάγνωσης μετρώντας τις μεταφορές δεδομένων. Πίνακας 3.3 Τα σήματα των Avalon-MM διασυνδέσεων Ιδιότητες διασύνδεσης Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας addressunits Master - symbols words, symbols Προσδιορίζει την μονάδα για τις διευθύνσεις. Διευθυνσιοδοτησείς byte ή word είναι διαθέσιμες. Ένα σύμβολο είναι τυπικά ένα byte.

85 Οι διασυνδέσεις Avalon 71 Slave - words Αυτή η ιδιότητα προσδιορίζει την μονάδα για το σήμα burstcountunits words words, symbols burstcount. Για σύμβολα, η τιμή του σήματος burstcount μεταφράζεται ως τον αριθμό των συμβόλων (bytes) στο burst. Για λέξεις (words), η τιμή του σήματος burstcount μεταφράζεται ως τον αριθμό του εύρους μεταφορών δεδομένων στο burst. burstonburstbound ariesonly false true, false Αν είναι αληθές, burst μεταφορές παρουσιάζονται στην αρχή αυτής της διασύνδεσης σε διεύθυνσης που είναι πολλαπλάσια του μεγέθους του burst σε bytes. Master - false constantburstbehav ior Slave - false holdtime(1) 0 true, false cycles Masters: Όταν είναι αληθές, δηλώνει ότι ο master κρατά την διεύθυνση και το σήμα burstcount σταθερά κατά την διάρκεια μιας burst συναλλαγής. Όταν είναι ψευδές (προεπιλογή), δηλώνει ότι ο master κρατά την διεύθυνση και το σήμα burstcount σταθερά μόνο για το πρώτο beat μιας burst συναλλαγής. Slaves: Όταν είναι αληθές, δηλώνει ότι ο slave περιμένει ότι η διεύθυνση και το σήμα burstcount θα παραμείνουν σταθερά κατά την διάρκεια μιας burst συναλλαγής. Όταν είναι ψευδές (προεπιλογή), δηλώνει ότι ο slave δειγματοληπτεί την διεύθυνση και το σήμα burstcount μόνο για το πρώτο beat μιας burst συναλλαγής. Προσδιορίζει τον χρόνο σε timingunits ανάμεσα στην απενεργοποίηση του write και την απενεργοποίηση των chipselect, address, και data. (Μόνο σε συναλλαγές εγγραφής.) linewrapbursts false true, false Μερικές συσκευές μνήμης υλοποιούν ένα wrapping burst αντί για ένα incrementing burst. Όταν ένα wrapping burst φτάσει ένα burst όριο, η διεύθυνση επιστρέφει πίσω στο προηγούμενο burst όριο. Μόνο τα bits χαμηλότερης τάξης απαιτούνται για αρίθμηση διευθύνσεων. Για παράδειγμα, ένα wrapping burst στην διεύθυνση 0xC με burst όρια κάθε 32 bytes κατά μήκος μιας διασύνδεσης των 32-bit γράφει στις ακόλουθες διευθύνσεις: 0xC 0x10 0x14

86 72 Κεφάλαιο 3 0x18 0x1C maximumpendingr eadtransactions (1) 1(2) 1 64 readlatency(1) readwaittime(1) cycles setuptime(1) 0 cycles 0x0 0x4 0x8 Slaves: Αυτή η παράμετρος είναι ο μέγιστος αριθμός εκκρεμών αναγνώσεων που ο slave μπορεί να κρατήσει σε ουρά.. Masters: Αυτή η ιδιότητα είναι ο μέγιστος αριθμός εκκρεμών συναλλαγών ανάγνωσης που ο master μπορεί να δημιουργήσει. Καθυστέρηση ανάγνωσης για Avalon-MM slaves καθορισμένης καθυστέρησης. Δεν χρησιμοποιείται σε διασυνδέσεις που περιλαμβάνουν το σήμα readdatavalid. Για διασυνδέσεις που δεν χρησιμοποιούν το σήμα waitrequest, η ιδιότητα readwaittime υποδεικνύει τον αριθμό κύκλων ρολογιού ή τα nanoseconds πριν ο slave αποδεχτεί μια εντολή ανάγνωσης. Ο χρονισμός είναι σαν ο slave ενεργοποίησε το σήμα waitrequest στους κύκλους ρολογιού readwaittime. Καθορίζει τον χρόνο σε timingunits ανάμεσα στην ενεργοποίηση των σημάτων chipselect, address, και data και την ενεργοποίηση των σημάτων read ή write. Προσδιορίζει τις μονάδες για της ιδιότητες setuptime, holdtime, writewaittime και readwait-time. Χρησιμοποιεί κύκλους ρολογιού για σύγχρονες συσκευές και nanoseconds για ασύγχρονες συσκευές. timingunits(1) cycles cycles, nanoseconds Σχεδόν όλες οι συσκευές Avalon-MM slave είναι σύγχρονες. writewaittime(1) Cycles Ένας Avalon-MM slave που διαβάζει και γράφει σε μια off-chip αμφίδρομη θύρα είναι ασύγχρονος. Αυτή η off-chip συσκευή μπορεί να έχει ένα καθορισμένο χρόνο διευθέτησης για μεταστροφή του διαύλου. Για διασυνδέσεις που δεν χρησιμοποιούν το σήμα waitrequest, η ιδιότητα writewaittime υποδεικνύει τον αριθμό κύκλων ρολογιού ή τα nanoseconds πριν ο slave αποδεχτεί μια εντολή εγγραφής. Ο χρονισμός είναι σαν ο slave ενεργοποίησε το σήμα waitrequest

87 Οι διασυνδέσεις Avalon 73 Interface Relationship Properties κύκλους ρολογιού readwaittime ή nanoseconds. associatedclock N/A N/A associatedreset N/A N/A Avalon-MM Master on bridgestomaster 0 the Same Component Το όνομα της διασύνδεσης clock στην οποία η διασύνδεση Avalon-MM είναι σύγχρονη. Το όνομα της διασύνδεσης reset στην οποία η διασύνδεση Avalon-MM είναι σύγχρονη. Μια γέφυρα Avalon-MM αποτελείται από έναν slave και έναν master, και έχει την ιδιότητα ότι μια πρόσβαση στον slave ζητώντας συγκεκριμένα bytes θα έχει ως αποτέλεσμα τα ίδια bytes να ζητηθούν από τον master. Πίνακας 3.4 Ιδιότητες των σημάτων των Avalon-MM διασυνδέσεων Σημειώσεις: 1. Αν και αυτή η ιδιότητα χαρακτηρίζει μια συσκευή slave, masters μπορούν να δηλώσουν αυτή την ιδιότητα για να ενεργοποιήσουν μια άμεση σύνδεση μεταξύ των δυο κατάλληλων διασυνδέσεων master και slave. 2. Αν ένα υποσύστημα αποδεχτεί περισσότερες μεταφορές ανάγνωσης από την τιμή που υποδεικνύεται εδώ, μπορεί να συμβεί υπερχείλιση του εσωτερικού FIFO εκκρεμών αναγνώσεων με απρόβλεπτα αποτελέσματα, όπως της απώλειας του σήματος readdata, δρομολόγηση του σήματος readdata στην λάθος master διασύνδεση, ή και κλείδωμα του συστήματος Timing Η διασύνδεση Avalon-MM είναι σύγχρονη. Κάθε θύρα Avalon-MM είναι συγχρονισμένη σε μια συσχετισμένη διασύνδεση clock. Τα σήματα μπορεί να είναι συνδυαστικά εάν οδηγούνται από τις εξόδους καταχωρητών που είναι σύγχρονοι στο σήμα ρολογιού. Οι προδιαγραφές της διασύνδεση Avalon-MM δεν υπαγορεύουν το πως ή το πότε τα σήματα μεταβαίνουν μεταξύ των ακμών του ρολογιού Transfers Αυτό το κομμάτι ορίζει δυο βασικές έννοιες πριν την εισαγωγή στους τύπους μεταφορών: Transfer Μια μεταφορά είναι μια διαδικασία ανάγνωσης ή εγγραφής μιας λέξης (word) ή ενός συμβόλου (symbol) δεδομένων. Οι μεταφορές συμβαίνουν μεταξύ μια θύρας Avalon-MM και της εσωτερικής διασύνδεσης. Η διασύνδεση Avalon-MM μεταφέρει λέξεις (words) που κυμαίνονται σε μέγεθος από 8 έως 1024 bits. Οι μεταφορές μπορεί να χρειαστούν έναν ή περισσότερους κύκλους ρολογιού για να ολοκληρωθούν.

88 74 Κεφάλαιο 3 Και οι masters και οι slaves είναι μέρος μιας μεταφοράς. Ο Avalon-MM master ξεκινά την μεταφορά και ο Avalon-MM slave ανταποκρίνεται σε αυτή. Master-slave pair Αυτός ο όρος αναφέρεται στις θύρες master και slave που συμμετέχουν σε μια μεταφορά. Κατά την διάρκεια μιας μεταφοράς, τα σήματα ελέγχου και δεδομένων της θύρας master περνούν μέσα από την εσωτερική δομή διασύνδεσης και αλληλεπιδρούν με την θύρα slave. Τυπικές μεταφορές Ανάγνωσης και Εγγραφής Αυτό το κομμάτι περιγράφει μια τυπική Avalon-MM διασύνδεση που υποστηρίζει μεταφορές ανάγνωσης και εγγραφής με το σήμα waitrequest να ελέγχεται από τον slave. Ο slave μπορεί να καθυστερήσει την εσωτερική διασύνδεση για όσους κύκλους ρολογιού καταπατούνται ενεργοποιώντας το σήμα waitrequest. Αν ένας slave χρησιμοποιήσει το σήμα waitrequest είτε για μεταφορές ανάγνωσης είτε για μεταφορές εγγραφής, πρέπει να χρησιμοποιήσει το σήμα waitrequest και για τις δυο. Ένας slave τυπικά δέχεται τα σήματα address, byteenable, read ή write, και writedata μετά την θετική ακμή του ρολογιού. Ένας slave ενεργοποιεί το σήμα waitrequest πριν την θετική ακμή του ρολογιού για να κρατήσει σε αναμονή μεταφορές. Όταν ο slave ενεργοποιήσει το σήμα waitrequest, η μεταφορά καθυστερείται και η διεύθυνση και τα σήματα ελέγχου παραμένουν σταθερά. Οι μεταφορές ολοκληρώνονται στην θετική ακμή του πρώτου clk αφότου η θύρα slave απενεργοποιήσει το σήμα waitrequest. Δεν υπάρχει κάποιο όριο στο πόσο μια θύρα slave μπορεί να καθυστερήσει την εσωτερική διασύνδεση. Γιαυτό, πρέπει να εξασφαλιστεί ότι μια θύρα slave δεν ενεργοποιεί το σήμα waitrequest για απεριόριστους κύκλους ρολογιού. Μεταφορές Ανάγνωσης και Εγγραφής με καθορισμένες Wait-States Ένας slave μπορεί να προσδιορίσει καθορισμένες (fixed) wait-states χρησιμοποιώντας τις ιδιότητες readwaittime και writewaittime. Η χρήση καθορισμένων (fixed) wait-states είναι μια εναλλακτική στην χρήση του σήματος waitrequest για την καθυστέρηση μιας μεταφοράς. Η διεύθυνση και τα σήματα έλεγχου (byteenable, read, και write) κρατούνται σταθερά κατά την διάρκεια της μεταφοράς. Θέτοντας την ιδιότητα readwaittime ή την ιδιότητα writewaittime στην τιμή <n> είναι ισοδύναμο με την ενεργοποίηση του σήματος waitrequest για <n> κύκλους ρολογιού ανά μεταφορά.

89 Οι διασυνδέσεις Avalon 75 Μεταφορές με μια μόνο wait-state χρησιμοποιούνται συνήθως για off-chip περιφερειακά που η λειτουργία τους απαιτεί πολλούς κύκλους ρολογιού. Το περιφερειακό διαβάζει την διεύθυνση και τα σήματα ελέγχου στην θετική ακμή του clk. Το περιφερειακό έχει έναν πλήρη κύκλο ρολογιού για να επιστρέψει δεδομένα. Υποσυστήματα με καθόλου wait-states επιτρέπονται. Όμως, υποσυστήματα με καθόλου wait-states μπορεί να μειώσουν την συχνότητα που είναι δυνατόν να επιτευχθεί. Η ανυπαρξία wait-states απαιτεί από το υποσύστημα να δημιουργήσει την απάντηση του στον ίδιο κύκλο ρολογιού με το εκάστοτε αίτημα. Διασωληνωμένες μεταφορές Οι Avalon-MM διασωληνωμένες μεταφορές ανάγνωσης αυξάνουν την ικανότητα διαβίβασης δεδομένων για σύγχρονες συσκευές slave που απαιτούν αρκετούς κύκλους ρολογιού για να επιστρέψουν δεδομένα για την πρώτη πρόσβαση. Τέτοιες συσκευές μπορούν τυπικά να επιστρέφουν μια τιμή δεδομένων ανά κύκλο ρολογιού μετά από κάποιο χρόνο. Νέες διασωληνωμένες μεταφορές ανάγνωσης μπορούν να ξεκινήσουν πριν επιστραφεί σήμα readdata για τις προηγούμενες μεταφορές. Μεταφορές εγγραφής δεν μπορούν να διασωληνωθούν. Μια διασωληνωμένη μεταφορά ανάγνωσης έχει δυο φάσεις, μια φάση διευθύνσεως και μια φάση δεδομένων. Ένας master ξεκινά μια μεταφορά παρουσιάζοντας την διεύθυνση κατά την φάση διεύθυνσης. Μια θύρα slave ολοκληρώνει την μεταφορά παραδίδοντας τα δεδομένα κατά την φάση δεδομένων. Η φάση διευθύνσεων για μια νέα μεταφορά (ή πολλαπλές μεταφορές) μπορεί να ξεκινήσει πριν η φάση δεδομένων μιας προηγούμενης μεταφοράς ολοκληρωθεί. Η καθυστέρηση ονομάζεται λανθάνον χρόνος της διασωλήνωσης (pipeline latency). Ο λανθάνον χρόνος της διασωλήνωσης είναι η διάρκεια από το τέλος της φάσης διευθύνσεων μέχρι την αρχή της φάσης δεδομένων. Ο χρονισμός μεταφορών για for wait-states και ο λανθάνον χρόνος της διασωλήνωσης έχουν τις ακόλουθες κύριες διαφορές: Wait-states Οι Wait-states καθορίζουν το μήκος της φάσης διευθύνσεων. Οι Waitstates περιορίζουν την μέγιστη ικανότητα διαβίβασης δεδομένων μιας θύρας. Αν ένας slave απαιτεί μια wait-state για να ανταποκριθεί σε ένα αίτημα μεταφοράς, η θύρα απαιτεί τουλάχιστον δυο κύκλους ρολογιού ανά μεταφορά. Pipeline Latency Ο λανθάνον χρόνος της διασωλήνωσης καθορίζει τον χρόνο

90 76 Κεφάλαιο 3 μέχρι την επιστροφή δεδομένων ανεξάρτητα από την φάση διευθύνσεων. Μια διασωληνωμένη θύρα slave χωρίς wait-states μπορεί να διατηρήσει μια μεταφορά ανά κύκλο ρολογιού. Όμως, μπορεί να χρειαστούν αρκετοί κύκλοι ρολογιού λανθάνοντος χρόνου για την επιστροφή της πρώτης μονάδας δεδομένων. Wait-states και διασωληνωμένες εντολές ανάγνωσης μπορούν να υποστηρίζονται ταυτόχρονα. Ο λανθάνον χρόνος της διασωλήνωσης μπορεί να είναι προκαθορισμένος ή να μεταβάλλεται. Διασωληνωμένες μεταφορές Ανάγνωσης με μεταβλητό λανθάνοντα χρόνο (Latency) Μετά την λήψη της διεύθυνσης και των σημάτων ελέγχου, ένας Avalon-MM διασωληνωμένος slave χρειάζεται έναν ή παραπάνω κύκλους ρολογιού για να παράξει δεδομένα. Μια διασωληνωμένη θύρα slave μπορεί να έχει πολλαπλές μεταφορές ανάγνωσης σε αναμονή κάθε χρονική στιγμή. Μεταφορές ανάγνωσης με μεταβλητό τον λανθάνοντα χρόνο απαιτούν ένα επιπλέον σήμα, το σήμα readdatavalid. Το σήμα readdatavalid υποδεικνύει πότε τα δεδομένα που διαβάζονται είναι έγκυρα. Μεταφορές ανάγνωσης με μεταβλητό τον λανθάνοντα χρόνο περιλαμβάνουν επίσης το ίδιο σύνολο σημάτων με τις μη διασωληνωμένες μεταφορές ανάγνωσης. Slave περιφερειακά που χρησιμοποιούν το σήμα readdatavalid θεωρούνται διασωληνωμένα με μεταβλητό λανθάνοντα χρόνο. Τα σήματα readdata και readdatavalid μπορούν να ενεργοποιηθούν, το νωρίτερο, στον κύκλο ρολογιού μετά τον κύκλο ανάγνωσης. Η θύρα slave πρέπει να επιστρέψει το σήμα readdata στην ίδια σειρά που η θύρα αποδέχτηκε τις διευθύνσεις. Διασωληνωμένες θύρες slave με μεταβλητό τον λανθάνοντα χρόνο πρέπει να χρησιμοποιούν το σήμα waitrequest. Ο slave μπορεί να ενεργοποιήσει το σήμα waitrequest για να καθυστερεί μεταφορές ώστε να διατηρεί έναν αποδεκτό αριθμό εκκρεμών μεταφορών. Ένας slave μπορεί να ενεργοποιήσει το σήμα readdatavalid για να μεταφέρει δεδομένα στον master ανεξάρτητα από το αν ο slave καθυστερεί μια νέα εντολή με το σήμα waitrequest. Διασωληνωμένες μεταφορές Ανάγνωσης με προκαθορισμένο λανθάνοντα χρόνο (Latency) Η φάση διευθύνσεων για μεταφορές ανάγνωσης με καθορισμένο λανθάνοντα χρόνο είναι ίδια με την περίπτωση για μεταβλητό λανθάνοντα χρόνο. Μετά την φάση διευθύνσεων, μια

91 Οι διασυνδέσεις Avalon 77 διασωληνωμένη θύρα slave καθορισμένο λανθάνοντα χρόνο χρειάζεται έναν καθορισμένο αριθμό από κύκλους ρολογιού για να επιστρέψει ένα έγκυρο σήμα readdata. Η ιδιότητα readwaittime προσδιορίζει τον αριθμό κύκλων ρολογιού που χρειάζονται για την επιστροφή ενός έγκυρου σήματος readdata. Η εσωτερική διασύνδεση λαμβάνει το σήμα readdata στην κατάλληλη θετική ακμή ρολογιού, τελειώνοντας την φάση δεδομένων. Κατά την διάρκεια της φάσης διευθύνσεων, η θύρα slave ενεργοποιεί το σήμα waitrequest για να καθυστερήσει την μεταφορά ή προσδιορίζει την ιδιότητα readwaittime για έναν καθορισμένο αριθμό wait states. Η φάση διευθύνσεων τελειώνει στην επόμενη θετική ακμή του σήματος clk μετά τις wait states, αν υπάρχουν. Κατά την διάρκεια της φάσης δεδομένων, ο slave οδηγεί το σήμα readdata μετά από ένα καθορισμένο λανθάνοντα χρόνο. Για έναν πραγματικό λανθάνοντα χρόνο <n>, η θύρα slave πρέπει να παρουσιάσει ένα έγκυρο σήμα readdata στην <nth> θετική ακμή του σήματος clk μετά το τέλος της φάσης διευθύνσεων. Burst Μεταφορές Μια μεταφορά τύπου burst εκτελεί πολλαπλές μεταφορές σαν μια συνολική μονάδα, από το να μεταφέρει κάθε λέξη (word) ξεχωριστά. Οι μεταφορές τύπου burst μπορούν να αυξήσουν την ικανότητα διαβίβασης δεδομένων για θύρες slave που επιτυγχάνουν μεγαλύτερη αποδοτικότητα όταν χειρίζονται πολλαπλές λέξεις (words) ταυτόχρονα, όπως η SDRAM. Μια bursting Avalon-MM διασύνδεση που υποστηρίζει και εντολές ανάγνωσης και εγγραφής, πρέπει να υποστηρίζει και εντολές ανάγνωσης και εγγραφής τύπου bursts. Οι Bursting Avalon-MM διασυνδέσεις περιλαμβάνουν το σήμα εξόδου burstcount. Αν ο slave έχει είσοδο για το σήμα burstcount, θεωρείται ότι μπορεί να υποστηρίξει μεταφορές τύπου burst. Το σήμα burstcount συμπεριφέρεται ως εξής: Στην αρχή μιας μεταφοράς burst, το σήμα burstcount δείχνει τον αριθμό από συνεχόμενες μεταφορές στη burst. Για εύρος <n> του σήματος burstcount, το μέγιστο μήκος του burst είναι 2 (<n>-1 ). Το ελάχιστο επιτρεπτό μήκος του burst είναι 1. Για να υποστηριχτεί η δυνατότητα του slave για bursts αναγνώσεις, ένας slave πρέπει

92 78 Κεφάλαιο 3 επίσης να υποστηρίζει: Wait states με το σήμα waitrequest. διασωληνωμένες μεταφορές με μεταβλητό λανθάνοντα χρόνο με το σήμα readdatavalid. Στην αρχή μιας μεταφοράς τύπου burst, ο slave βλέπει την διεύθυνση και μια τιμή για το μήκος του burst στο σήμα burstcount. Για ένα burst με διεύθυνση <a> και μια τιμή του σήματος burstcount <b>, ο slave πρέπει να εκτελέσει <b> συνεχόμενες μεταφορές ξεκινώντας από την διεύθυνση <a>. Η μεταφορά τύπου burst ολοκληρώνεται αφού ο slave λάβει (write) ή επιστρέψει (read) την <b th > λέξη (word) δεδομένων. Ο bursting slave πρέπει να δεχτεί την διεύθυνση και το σήμα burstcount μια φορά για κάθε μεταφορά τύπου burst. Η slave λογική πρέπει να συνάγει την διεύθυνση για όλες τις μεταφορές εκτός από την πρώτη στο burst. Ένας slave μπορεί επίσης να χρησιμοποιήσει το σήμα εισόδου beginbursttransfer, το οποίο η εσωτερική διασύνδεση ενεργοποιεί στον πρώτο κύκλο κάθε μεταφοράς τύπου burst. Bursts Εγγραφές Οι παρακάτω κανόνες ισχύουν όταν μια εγγραφή τύπου burst ξεκινά με το σήμα burstcount να είναι μεγαλύτερο του 1: Όταν ένα σήμα burstcount εύρους <n> παρουσιάζεται στην αρχή της μεταφοράς burst, ο slave πρέπει να αποδεχτεί <n> συνεχόμενες μονάδες του σήματος writedata για να ολοκληρωθεί η μεταφορά τύπου burst. Ο slave πρέπει να αποδεχτεί το σήμα writedata όταν το σήμα write είναι ενεργοποιημένο. Κατά την διάρκεια της μεταφοράς τύπου burst, ο master μπορεί να απενεργοποιήσει το σήμα write υποδεικνύοντας ότι το σήμα writedata δεν είναι έγκυρο. Η απενεργοποίηση του σήματος write δεν τερματίζει την μεταφορά τύπου burst. Την καθυστερεί. Όταν μια μεταφορά burst καθυστερείτε, κανένας άλλος master δεν μπορεί να έχει πρόσβαση στον slave, μειώνοντας έτσι την αποδοτικότητα της μεταφοράς.

93 Οι διασυνδέσεις Avalon 79 Η ιδιότητα constantburstbehavior ελέγχει την συμπεριφορά τον σημάτων burst. Όταν η ιδιότητα constantburstbehavior είναι αληθής για έναν master, υποδεικνύει ότι ο master κρατά την διεύθυνση και το σήμα burstcount σταθερά κατά την διάρκεια μιας μεταφοράς burst. Όταν η ιδιότητα constantburstbehavior είναι ψευδής, υποδεικνύει ότι ο master κρατά την διεύθυνση και το σήμα burstcount σταθερά μόνο για την πρώτη συναλλαγή μιας μεταφοράς τύπου burst. Όταν είναι αληθής για έναν slave, η ιδιότητα constantburstbehavior υποδεικνύει ότι ο slave περιμένει η διεύθυνση και το σήμα burstcount να κρατηθούν σταθερά κατά την διάρκεια μιας μεταφοράς burst. Όταν η ιδιότητα constantburstbehavior είναι ψευδής, υποδεικνύει ότι ο slave δειγματοληπτεί την διεύθυνση και το σήμα burstcount μόνο στην πρώτη συναλλαγή μιας μεταφοράς burst. Ο slave μπορεί να καθυστερήσει μια μεταφορά ενεργοποιώντας το σήμα waitrequest αναγκάζοντας τα σήματα writedata, write, και byteenable να παραμείνουν σταθερά. Η λειτουργία του σήματος byteenable είναι η ίδια για bursting και non-bursting slaves. Για έναν master των 32-bit που γράφει με μεταφορά τύπου burst σε εάν slave των 64-bit, ξεκινώντας στην διεύθυνση byte 4, η πρώτη μεταφορά εγγραφής που βλέπει ο slave είναι στην διεύθυνση 0, με το σήμα byteenable = 8b Τα σήματα byteenables μπορούν να αλλάξουν για διαφορετικές λέξεις (words) της μεταφοράς burst. Τα σήματα byteenable δεν είναι απαραίτητο να ενεργοποιηθούν όλα. Ένας burst master που γράφει τμήματα λέξεων (words) μπορεί να χρησιμοποιήσει το σήμα byteenable για να αναγνωρίσει τα δεδομένα που γράφονται. Bursts Αναγνώσεις Οι μεταφορές ανάγνωσης τύπου burst είναι παρόμοιες με τις διασωληνωμένες μεταφορές ανάγνωσης με μεταβλητό λανθάνοντα χρόνο. Μια μεταφορά ανάγνωσης τύπου burst έχει σαφείς φάσεις διευθύνσεων και δεδομένων. Το σήμα readdatavalid υποδεικνύει πότε ο slave παρουσιάζει ένα έγκυρο σήμα readdata. Σε αντίθεση με τις διασωληνωμένες μεταφορές ανάγνωσης, μια burst διεύθυνση ανάγνωσης έχει ως αποτέλεσμα πολλαπλές

94 80 Κεφάλαιο 3 μεταφορές δεδομένων. Αυτοί οι κανόνες ισχύουν σε αναγνώσεις τύπου burst: Όταν το σήμα burstcount είναι <n>, ο slave πρέπει να επιστρέψει <n> λέξεις (words) του σήματος readdata για να ολοκληρωθεί η μεταφορά τύπου burst. Ο slave παρουσιάζει κάθε λέξη (word) παρέχοντας το σήμα readdata και ενεργοποιώντας το σήμα readdatavalid για έναν κύκλο ρολογιού. Η απενεργοποίηση του σήματος readdatavalid καθυστερεί αλλά δεν τερματίζει την φάση δεδομένων της μεταφοράς burst. Τα σήματα byteenables παρουσιάζονται με μια εντολή ανάγνωσης burst που ισχύει για όλους τους κύκλους ρολογιού μιας μεταφοράς τύπου burst. Ένα σήμα byteenable με τιμή 1 σημαίνει ότι το λιγότερο σημαντικό byte διαβάζεται σε όλους τους κύκλους ανάγνωσης. Line Wrapped Bursts Επεξεργαστές με κρυφές μνήμες δεδομένων ή εντολών κερδίζουν σε αποδοτικότητα χρησιμοποιώντας line-wrapped bursts. Όταν ένας επεξεργαστής χρειάζεται δεδομένα που δεν είναι στην κρυφή μνήμη, ο ελεγκτής της κρυφής μνήμης διαβάζει αρκετά δεδομένα από την μνήμη για να γεμίσει ολόκληρη την γραμμή της κρυφής μνήμης. Για έναν επεξεργαστή με μέγεθος γραμμής της κρυφής μνήμης των 64 bytes, μια παράληψη στην κρυφή μνήμη έχει ως αποτέλεσμα την ανάγνωση 64 bytes από την μνήμη. Αν ο επεξεργαστής διαβάζει από την διεύθυνση 0xC όταν συμβεί η παράλειψη στην κρυφή μνήμη, τότε ένας ελεγκτής κρυφής μνήμης που αυξάνει την διευθυνσιοδότηση μπορεί να ξεκινήσει μια μεταφορά στην διεύθυνση 0, με αποτέλεσμα δεδομένα από τις διευθύνσεις ανάγνωσης 0x0, 0x4, 0x8, 0xC, 0x10, 0x14, 0x18, and 0x1C να διαβαστούν διαδοχικά. Τα ζητούμενα δεδομένα δεν είναι διαθέσιμα μέχρι την τέταρτη ανάγνωση. Με μεταφορές τύπου wrapping bursts, η σειρά διευθύνσεων είναι 0xC, 0x10, 0x14, 0x18, 0x1C, 0x0, 0x4, και 0x8. Τα ζητούμενα δεδομένα επιστρέφονται πρώτα Address Alignment Για συστήματα στα οποία το εύρος δεδομένων του master και του slave διαφέρουν, η

95 Οι διασυνδέσεις Avalon 81 εσωτερική διασύνδεση διαχειρίζεται προβλήματα παράταξης των διευθύνσεων κατά σειρά. Η διασύνδεση Avalon-MM επιλύει διαφορές στο εύρος των δεδομένων, έτσι ώστε οποιαδήποτε θύρα master να μπορεί να επικοινωνήσει με οποιαδήποτε θύρα slave, ανεξάρτητα από το εύρος δεδομένων του καθενός. Η εσωτερική διασύνδεση υποστηρίζει μόνο πρόσβαση σε διευθύνσεις παρατεταγμένων κατά σειρά. Ένας master μπορεί να εκδώσει μόνο διευθύνσεις που είναι πολλαπλάσια του εύρους δεδομένων του. Ένας master μπορεί να γράψει τμήματα λέξεων (words) απενεργοποιώντας κάποια σήματα byteenables. Για παράδειγμα, ένα burst με μέγεθος 2 στην διεύθυνση 0 θα έχει 4 b1100 για τα σήματα byteenables Avalon-MM Slave Addressing Η δυναμική αλλαγή του εύρους του διαύλου χειρίζεται τα δεδομένα κατά την διάρκεια μεταφορών ανάμεσα σε ζευγάρια master-slave με διαφορετικό εύρος δεδομένων. Τα δεδομένα του slave παρατάσσονται κατά σειρά σε συνεχόμενα bytes στο χώρο διευθύνσεων του master. Αν ο master έχει μεγαλύτερο εύρος από τον slave, bytes δεδομένων στον χώρο διευθύνσεων του master χαρτογραφούνται σε πολλαπλές διευθύνσεις στο χώρο διευθύνσεων του slave. Για παράδειγμα, μια ανάγνωση 32-bit του master από μια θύρα slave των 16-bit έχει ως αποτέλεσμα δυο μεταφορές ανάγνωσης από την πλευρά του slave. Οι αναγνώσεις είναι από διαδοχικές διευθύνσεις. Αν ο master έχει μικρότερο εύρος από τον slave, τότε η εσωτερική διασύνδεση χειρίζεται τις γραμμές byte του slave. Κατά την διάρκεια μεταφορών ανάγνωσης από τον master, η εσωτερική διασύνδεση παρουσιάζει μόνο τις κατάλληλες γραμμές byte από δεδομένα του slave στον master έχει μικρότερο εύρος. Κατά την διάρκεια μεταφορών εγγραφής από τον master, η εσωτερική διασύνδεση αυτόματα ενεργοποιεί το σήμα byteenable για την εγγραφή δεδομένων μόνο στις καθορισμένες γραμμές byte του slave. Οι slaves πρέπει να έχουν ένα εύρος δεδομένων των 8, 16, 32, 64, 128, 256, 512 ή 1024 bits.

96 82 Κεφάλαιο Avalon Clock and Reset Interfaces Οι διασυνδέσεις Avalon Clock καθορίζουν το ρολόι ή τα ρολόγια που χρησιμοποιούνται από ένα υποσύστημα. Τα υποσυστήματα μπορούν να έχουν εισόδους ρολογιού, εξόδους ρολογιού, ή και τα δυο. Ένα phase locked loop (PLL) είναι ένα παράδειγμα ενός υποσυστήματος που έχει και είσοδο και έξοδο ρολογιού Clock Sink Signal Roles Μια διασύνδεση sink ρολογιού παρέχει μια αναφορά χρονισμού για άλλες διασυνδέσεις και την εσωτερική λογική. Όνομα σήματος Εύρος Κατεύθυνση Υποχρεωτικό Περιγραφή Σήματος clk 1 Input Yes Ένα σήμα ρολογιού. Παρέχει συγχρονισμό για την εσωτερική λογική και για άλλες διασυνδέσεις. Πίνακας 3.5 Το σήμα του Clock Sink Clock Sink Properties Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας clockrate Υποδεικνύει την συχνότητα σε Hz της διασύνδεσης sink του ρολογιού. Αν έχει την τιμή 0, ο ρυθμός του ρολογιού δεν είναι σημαντικός. Πίνακας 3.6 Ιδιότητες του σήματος του Clock Sink Associated Clock Interfaces Όλες οι σύγχρονες διασυνδέσεις έχουν την ιδιότητα associatedclock που προσδιορίζει ποια είσοδος ρολογιού του υποσυστήματος χρησιμοποιείται ως αναφορά για τον συγχρονισμό της διασύνδεσης.

97 Οι διασυνδέσεις Avalon Clock Source Signal Roles Μια διασύνδεση Avalon Clock source οδηγεί ένα σήμα ρολογιού έξω από ένα υποσύστημα. Όνομα σήματος Εύρος Κατεύθυνση Υποχρεωτικό Περιγραφή Σήματος clk 1 Output Yes Ένα σήμα ρολογιού εξόδου Clock Source Properties Πίνακας 3.7 Το σήμα του Clock Source Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας associateddirect- Clock N/A a clock name Το όνομα της εισόδου ρολογιού που άμεσα οδηγεί αυτή την έξοδο ρολογιού, αν υπάρχει κάποια. clockrate clockrateknown false true, false Υποδεικνύει την συχνότητα σε Hz στην οποία η έξοδος ρολογιού οδηγείται. Υποδεικνύει αν η συχνότητα ρολογιού είναι γνωστή. Αν η συχνότητα ρολογιού είναι γνωστή, αυτή η πληροφορία μπορεί να χρησιμοποιηθεί για γίνει προσαρμογή άλλα μέρη του συστήματος. Πίνακας 3.8 Ιδιότητες του σήματος του Clock Source Reset Sink Το σήμα reset_req είναι ένα προαιρετικό σήμα που μπορεί να χρησιμοποιηθεί για την πρόληψη τυχόν φθορά στα περιεχόμενα της μνήμης, εκτελώντας reset handshake πριν την επαναφορά του επεξεργαστή. Όνομα σήματος Εύρος Κατεύθυνση Υποχρεωτικό Περιγραφή Σήματος reset reset_n 1 Input Yes Επαναφέρει την εσωτερική λογική μιας διασύνδεσης ή ενός υποσυστήματος σε μια κατάσταση καθορισμένη από τον χρήστη. Είναι σύγχρονο στην είσοδο ρολογιού στη συσχετιζόμενη διασύνδεση ρολογιού.

98 84 Κεφάλαιο 3 reset_req 1 input Optional Πρόωρη ένδειξη του σήματος reset. Όταν ενεργοποιείται το υποσύστημα αναμένεται να προετοιμάσει τον εαυτό του για επαναφορά. Πίνακας 3.9 Τα σήματα του Reset Sink Reset Sink Interface Properties Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας associated- Clock N/A a clock name Το όνομα ενός ρολογιού στο οποίο συγχρονίζεται αυτή η διασύνδεση. Απαιτείται αν η τιμή της ιδιότητας synchronousedges είναι DEASSERT ή BOTH. υποδεικνύει τον τύπο του συγχρονισμού που απαιτεί η είσοδος reset. Ορίζονται οι παρακάτω τιμές: synchronous- Edges DEASSERT NONE DEASSERT BOTH NONE δεν απαιτείται συγχρονισμός επειδή το υποσύστημα περιλαμβάνει λογική για εσωτερικό συγχρονισμό του σήματος reset. DEASSERT η ενεργοποίηση του σήματος reset είναι ασύγχρονη και η απενεργοποίηση είναι σύγχρονη. BOTH Η ενεργοποίηση και η απενεργοποίηση του σήματος reset είναι σύγχρονες Associated Reset Interfaces Πίνακας 3.10 Ιδιότητες των σημάτων του Reset Sink Όλες οι σύγχρονες διασυνδέσεις έχουν την ιδιότητα associatedreset που προσδιορίζει ποιο σήμα reset προκαλεί την επαναφορά της λογικής της διασύνδεσης Reset Source Το σήμα reset_req είναι ένα προαιρετικό σήμα που μπορεί να χρησιμοποιηθεί για την πρόληψη τυχόν φθορά στα περιεχόμενα της μνήμης, εκτελώντας reset handshake πριν την επαναφορά του επεξεργαστή.

99 Οι διασυνδέσεις Avalon 85 Όνομα σήματος Εύρος Κατεύθυνση Υποχρεωτικό Περιγραφή Σήματος reset reset_n 1 Output Yes reset_req 1 Output Optional Επαναφέρει την εσωτερική λογική μιας διασύνδεσης ή ενός υποσυστήματος σε μια κατάσταση καθορισμένη από τον χρήστη. Επιτρέπει την δημιουργία αιτήματος επαναφοράς, το οποίο είναι ένα πρόωρο σήμα που ενεργοποιείται πριν την ενεργοποίηση του σήματος reset. Όταν ενεργοποιηθεί, δεν μπορεί να απενεργοποιηθεί μέχρι να ολοκληρωθεί η επαναφορά. Πίνακας 3.11 Τα σήματα του Reset Source Reset Source Interface Properties Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας associatedclock N/A a clock name Το όνομα ενός ρολογιού στο οποίο συγχρονίζεται αυτή η διασύνδεση. Απαιτείται αν η τιμή της ιδιότητας synchronousedges είναι DEASSERT ή BOTH. associateddirectreset N/A a reset name Το όνομα της εισόδου reset που άμεσα οδηγεί αυτή την διασύνδεση reset source μέσω μιας σύνδεσης τύπου ένα προς ένα (one -to-one). associatedresetsinks N/A a reset name Προσδιορίζει τις εισόδους reset που τελικά θα προκαλέσουν μια διασύνδεση reset source να ενεργοποιήσει το σήμα reset. υποδεικνύει τον τύπο του συγχρονισμού που απαιτεί η είσοδος reset. Ορίζονται οι παρακάτω τιμές: synchronousedges DEASSERT NONE DEASSERT NONE δεν απαιτείται συγχρονισμός επειδή το υποσύστημα περιλαμβάνει λογική για εσωτερικό συγχρονισμό του σήματος reset. BOTH DEASSERT η ενεργοποίηση του σήματος reset είναι ασύγχρονη και η απενεργοποίηση είναι σύγχρονη. BOTH Η ενεργοποίηση και η απενεργοποίηση του σήματος reset είναι σύγχρονες. Πίνακας 3.12 Ιδιότητες των σημάτων του Reset Source

100 86 Κεφάλαιο Avalon Conduit Interfaces Οι διασυνδέσεις Avalon Conduit ομαδοποιούν μια αυθαίρετη συλλογή σημάτων. Ο χρήστης μπορεί να προσδιορίσει οποιοδήποτε ρόλο για τα σήματα της διασύνδεσης Avalon Conduit. Όμως, όταν συνδέονται διασυνδέσεις Avalon Conduit, οι ρόλοι και το εύρος τους πρέπει να ταυτίζεται και οι κατευθύνσεις τους πρέπει να είναι αντίθετες. Μια διασύνδεση Avalon Conduit μπορεί να περιλαμβάνει σήματα εισόδου, εξόδου ή αμφίδρομα σήματα. Μια μονάδα μπορεί να έχει πολλαπλές διασυνδέσεις για να παρέχει μια σωστή ομαδοποίηση σημάτων. Σήματα που διασυνδέονται στην μνήμη SDRAM, όπως το σήμα address, το σήμα data και τα σήματα ελέγχου, σχηματίζουν μια διασύνδεση Avalon Conduit Conduit Signals Όνομα σήματος Εύρος Κατεύθυνση Περιγραφή Σήματος Μια διασύνδεση Avalon Conduit αποτελείται από ένα ή περισσότερα σήματα εισόδου, εξόδου ή αμφίδρομα σήματα με αυθαίρετο εύρος. Οι <any> <n> In, out, or bidirectional διασυνδέσεις Avalon Conduit μπορούν να έχουν οποιοδήποτε ρόλο προσδιορίσει ο χρήστης. Συμβατές διασυνδέσεις Avalon Conduit μπορούν να συνδεθούν σε ένα SOPC σύστημα αν οι ρόλοι και το εύρος των σημάτων τους ταιριάζουν και οι κατευθύνσεις τους είναι αντίθετες. Πίνακας 3.13 Τα σήματα των διασυνδέσεων Conduit Reset Source Interface Properties Δεν υπάρχει κάποια ιδιότητα για τις διασυνδέσεις Avalon Conduit.

101 Οι διασυνδέσεις Avalon Avalon Interrupt Interfaces Οι διασυνδέσεις Avalon Interrupt επιτρέπουν σε υποσυστήματα τύπου slave να σηματοδοτήσουν γεγονότα σε υποσυστήματα τύπου master. Για παράδειγμα ένας ελεγκτής DMA μπορεί να διακόψει έναν επεξεργαστή όταν έχει ολοκληρώσει μια DMA μεταφορά Interrupt Sender Ένας αποστολέας διακοπών οδηγεί ένα σήμα διακοπών σε έναν αποδέκτη διακοπών. Ο χρονισμός για το σήμα irq πρέπει να είναι σύγχρονος στην θετική ακμή του σχετιζόμενου ρολογιού. Το σήμα irq δεν έχει καμία σχέση με κάποια μεταφορά σε κάποια άλλη διασύνδεση. Το σήμα irq πρέπει να ενεργοποιείται μέχρι να γίνει αποδεκτό από την συσχετιζόμενη διασύνδεση Avalon-MM slave. Οι διακοπές είναι προσδιορισμένες για το κάθε υποσύστημα. Ο αποδέκτης συνήθως προσδιορίζει την κατάλληλη απάντηση διαβάζοντας τον καταχωρητή status μιας διασύνδεσης Avalon-MM. Interrupt Sender Signal Roles Όνομα σήματος Εύρος Κατεύθυνση Υποχρεωτικό Περιγραφή Σήματος irq irq_n 1 Output Yes Αίτημα διακοπής. Ένας slave ενεργοποιεί το σήμα irq όταν χρειάζεται εξυπηρέτηση. Πίνακας 3.14 Τα σήματα του Interrupt Sender Interrupt Sender Properties Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας associatedaddressa blepoint N/A Name of Avalon- MM slave on this component. Το όνομα της διασύνδεσης Avalon-MM slave που παρέχει πρόσβαση στους καταχωρητές για την εξυπηρέτηση της διακοπής. associatedclock N/A Name of a clock interface on this Το όνομα της διασύνδεσης clock στην οποία ο αποστολέας διακοπών είναι σύγχρονος. Ο

102 88 Κεφάλαιο 3 component. αποστολέας και ο αποδέκτης μπορούν να έχουν διαφορετικές τιμές για αυτή την ιδιότητα. associated Reset N/A Name of a reset interface on this component. Το όνομα της διασύνδεσης reset στην οποία ο αποστολέας διακοπών είναι σύγχρονος. Πίνακας 3.15 Ιδιότητες των σημάτων του Interrupt Sender Interrupt Receiver Μια διασύνδεση ενός αποδέκτη διακοπών λαμβάνει διακοπές από διασυνδέσεις αποστολέων διακοπών. Υποσυστήματα με διασυνδέσεις Avalon-MM master μπορούν να περιλαμβάνουν έναν αποδέκτη διακοπών για να ανιχνεύουν διακοπές που ενεργοποιούνται από υποσυστήματα τύπου slave με διασυνδέσεις αποστολέα διακοπών. Ο αποδέκτης διακοπών λαμβάνει τα αιτήματα διακοπών του κάθε αποστολέα ως ξεχωριστά bit. Interrupt Receiver Signal Roles Όνομα σήματος Εύρος Κατεύθυνση Υποχρεωτικό Περιγραφή Σήματος irq 1 32 Input Yes Το σήμα irq είναι ένα διάνυσμα <n>-bit, όπου το κάθε bit αντιστοιχεί άμεσα σε έναν αποστολέα IRQ, με καμιά έμφυτη προτεραιότητα. Πίνακας 3.16 Τα σήματα του Interrupt Receiver Interrupt Receiver Properties Ιδιότητα Προεπιλεγμένη τιμή Αποδεκτές τιμές Περιγραφή ιδιότητας associatedaddressable Point N/A Name of Avalon-MM master interface Το όνομα της διασύνδεσης Avalon-MM master που χρησιμοποιείται για την εξυπηρέτηση των διακοπών που λαμβάνονται σε αυτή την διασύνδεση. associatedclock N/A Name of an Avalon Clock Το όνομα της διασύνδεσης Avalon Clock στην οποία αυτός ο αποδέκτης διακοπών είναι σύγχρονος. Ο interface αποστολέας και ο αποδέκτης μπορούν να έχουν

103 Οι διασυνδέσεις Avalon 89 διαφορετικές τιμές για αυτή την ιδιότητα. associated Reset N/A Name of an Avalon Reset interface Το όνομα της διασύνδεσης reset στην οποία ο αποδέκτης διακοπών είναι σύγχρονος. irqscheme individualreq Κάθε διασύνδεση αποστολέα διακοπών ενεργοποιεί individualrequests uests το σήμα irq για να ζητήσει εξυπηρέτηση. Πίνακας 3.17 Ιδιότητες των σημάτων του Interrupt Receiver Interrupt Timing Ο Avalon-MM master εξυπηρετεί την διακοπή με προτεραιότητα 0 πριν την διακοπή με προτεραιότητα 1.

104 90 Κεφάλαιο 3

105 ΚΕΦΑΛΑΙΟ 4 Τα SOPC Cores του Συστήματος 4.1 Το Nios II/f Core Το Nios II/f fast core έχει σχεδιαστεί για υψηλή απόδοση. Αποτέλεσμα αυτής της προσέγγισης σχεδιασμού είναι το μεγαλύτερο μέγεθος του core. Το Nios II/f fast core είναι περίπου 25% μεγαλύτερο σε σχέση με το Nios II/s core. Βασικές αρχές κατά το σχεδιασμό του core είναι: η μεγιστοποίηση της αποδοτικότητας της εκτελεσης εντολών ανά κύκλο ρολογιού η βελτιστοποίηση του λανθάνοντος χρόνου διακοπών Η μεγιστοποίηση της αποδοσης της μεγιστης συχνότητας του επεξεργαστή Το Nios II/f fast core διαθέτει τα εξείς βασικά χαρακτηριστικά:

106 92 Κεφάλαιο 4 Διαθέτει ξεχωριστή προαιρετική κρυφή μνήμη εντολών και κρυφή μνήμη δεδομένων Παρέχει προαιρετικό MMU (memory management unit) για συστήματα που το απαιτούν Παρέχει προαιρετικό MPU (memory protection unit) για συστήματα που απαιτούν προστασία μνήμης Παρέχει πρόσβαση σε έως 2 GB εξωτερικής μνήμης όταν δεν υπάρχει MMU και 4 GB όταν το MMU είναι παρόν Υποστηρίζει προαιρετικά tightly-coupled μνήμη για εντολές και δεδομένα Χρησιμοποιεί ένα pipeline 6 σταδίων Χρησιμοποιεί δυναμική πρόβλεψη σε εντολές διακλάδωσης Παρέχει επιλογές hardware για πολλαπλασιασμό, διαίρεση και ολίσθηση για βελτίωση της απόδοσης του core μέσω της βελτίωσης των αριθμητικών διαδικασιών Υποστηρίζει την προσθήκη εντολών Υποστηρίζει προαιρετικές βελτιστοποιήσεις για την μονάδα αποσφαλμάτωσης JTAG Η Αριθμητική και Λογική Μονάδα (ALU) Το Nios II/f fast core παρέχει αρκετές επιλογές για βελτίωση της απόδοσης των διαδικασιών του πολλαπλασιασμού, της διαίρεσης και της ολίσθησης. Το Nios II/f fast core παρέχει τις εξής επιλογές για το hardware: DSP blocks Συμπεριλαμβάνει DSP block πολλαπλασιαστών.τα block αυτά είναι διαθέσιμα σε συγκεκριμένα FPGAs της ALTERA Embedded Multipliers Συμπεριλαμβάνει ειδικούς ενσωματωμένους πολλαπλασιαστές που είναι διαθέσιμοι σε συγκεκριμένα FPGAs της ALTERA Logic Elements Συμπεριλαμβάνει πολλαπλασιαστές υλικού κατασκευασμένους από λογικά στοιχεία None Δεν περιλαμβάνεται hardware πολλαπλασιασμού. Οι πράξεις πολλαπλασιασμού εξομοιώνονται από το software Πρόσβαση σε Μνήμη (Memory Access)

107 Τα SOPC Cores του Συστήματος 93 Το Nios II/s standard core παρέχει προαιρετική κρυφή μνήμη εντολών και κρυφή μνήμη δεδομένων. Το μέγεθος της κρυφής μνήμης εντολών είναι προσδιοριζόμενη από το χρήστη και μπορεί να είναι από 512 bytes έως 64 KB. Το Nios II/f fast core παρέχει πρόσβαση έως 4 GB εξωτερικής μνήμης (αν υπάρχει MMU). Η αρχιτεκτονική του Nios II δεσμεύει του MSB της διεύθυνσης δεδομένων για την μέθοδο παράκαμψης κρυφής μνήμης. Στο Nios II/f fast core το bit-31 χρησιμοποιείται για την μέθοδο παράκαμψης της κρυφής μνήμης. Instruction και Data Master Ports Το instruction port στο Nios II/f fast core είναι ένα pipelined Avalon-MM master port. Το instruction και το data master port στο Nios II/f fast core είναι προαιρετικά. Ένα master port μπορεί να να εξαιρεθεί εφόσον το core περιλαμβάνει τουλάχιστον μία tightly-coupled μνήμη για να πάρει την θέση του master port. Κρυφή Μνήμη Εντολών (Instruction Cache) Η κρυφή μνήμη εντολών στο Nios II/f fast core είναι σχεδόν η ίδια με αυτή στο Nios II/s core και έχει τα ακόλουθα χαρακτηριστικά: Υλοποίηση Direct-mapped 32 bytes για κάθε γραμμή κρυφής μνήμης Το instruction master port διαβάζει μία ολόκληρη γραμμή κάθε φορά από την μνήμη και δίνει μια εντολή read ανά κύκλο ρολογιού Οι κρίσιμες λέξεις (words) προηγούνται Η κρυφή μνήμη εντολών είναι προαιρετική και μπορεί να εξαιρεθεί εφόσον το core περιλαμβάνει τουλάχιστον μία tightly-coupled μνήμη εντολών. Tightly-Coupled Μνήμη Το Nios II/f fast core παρέχει προαιρετικές διασυνδέσεις tightly-coupled μνήμης για εντολές. Ένα Nios II/f core μπορεί να χρησιμοποιήσει μέχρι και τέσσερις μνήμες για εντολές Όταν ενεργοποιηθεί μια διασύνδεση tightly-coupled μνήμης, το Nios II core συμπεριλαμβάνει μια επιπλέον διασύνδεση μνήμης master port. Όταν μια tightly-coupled μνήμη είναι παρών το Nios II/f core αποκωδικοποιεί τις διευθύνσεις εσωτερικά, ώστε να εξακριβώσει αν οι ζητούμενες εντολές υπάρχουν μέσα σε κάποια tightly-coupled μνήμη. Αν η διεύθυνση της εντολής υπάρχει στην tightly-coupled

108 94 Κεφάλαιο 4 μνήμη το Nios II/f core ανακαλεί την εντολή μέσω της tightly-coupled memory διασύνδεσης. Η πρόσβαση στην tightly-coupled μνήμη παρακάμπτει την κρυφή μνήμη Execution Pipeline Το Nios II/f fast core παρέχει ένα pipeline 6-σταδίων. Πίνακας 4.1 Υλοποίηση του pipeline έξι σταδίων του Nios II/f core Οι εντολές εκτελούνται ή τερματίζονται με οργανωμένη σειρά. Μέχρι και μία εντολή εκτελείται ή τερματίζεται ανά κύκλο ρολογιού. Το pipeline εισέρχεται σε κατάσταση αναμονής (stalls) στις εξής περιπτώσεις : Κατά την εκτέλεση μιας εντολής που απαιτεί πολλούς κύκλους ρολογιού Κατά την προσπέλαση ενός Avalon-MM master port για ανάγνωση/εγγραφή Στην περίπτωση που υπάρχει εξάρτηση από δεδομένα κατά την εκτέλεση εντολών που προκαλούν υψηλή καθυστέρηση Το pipeline είναι ρυθμισμένο με τέτοιο τρόπο έτσι ώστε όταν ένα στάδιο βρίσκεται σε αναμονή(stall) δεν εισέρχεται καμία νέα τιμή ούτε σε αυτό ούτε σε προηγούμενα στάδια ακόμα και αν κάποιο στάδιο του pipeline είναι άδειο. Branch Prediction Το Nios II/f fast core χρησιμοποιεί δυναμική πρόβλεψη σε εντολές διακλάδωσης για να μειώσει τους κύκλους ρολογιού που απαιτούνται για την εκτέλεση της εκάστοτε εντολής διακλάδωσης Exception Handling Το Nios II/f fast core υποστηρίζει τους εξής τύπους εξαιρέσεων:

109 Τα SOPC Cores του Συστήματος 95 Εσωτερικές διακοπές υλικού (hardware) Software trap Εσφαλμένη εντολή Μη-υλοποιημένη εντολή Μη-ευθυγραμμισμένη διεύθυνση δεδομένων Μη- ευθυγραμμισμένη διεύθυνση προορισμού Λάθος κατα την πραγματοποίηση κάποιας διαίρεσης JTAG Debug Module Το Nios II/f fast core υποστηρίζει τη μονάδα αποσφαλμάτωσης JTAG, για να παρέχει μια JTAG διασύνδεση με τα εργαλεία λογισμικού που χρησιμοποιούνται για αποσφαλμάτωσης. Το Nios II/f fast core υποστηρίζει επίσης μια προαιρετική ενισχυμένη διασύνδεση που επιτρέπει δεδομένα ανίχνευσης να δρομολογηθούν εκτός του επεξεργαστή και να αποθηκευτούν σε εξωτερικό debug probe. 4.2 Τα IP Cores Τα IP Cores που παρέχονται από την ALTERA και εγκαθίστανται μαζί με το Quartus και αποτελούν βασικά στοιχεία κάθε SOPC συστήματος Το JTAG UART Core Το JTAG UART (Universal Asynchronous Receiver/Transmitter) Core υλοποιεί μια μέθοδο σειριακής επικοινωνίας μεταξύ ενός PC και ενός SOPC συστήματος που βρίσκεται στο FPGA. Το JTAG core μία απλή register-mapped διασύνδεση, έτσι τα κυρίως περιφεριακά (όπως ο Nios II επεξεργαστής) επικοινωνούν με το συγκεκριμένο core διαβάζοντας ή γράφοντας σε συγκεκριμένους καταχωρητές (καταχωρητές ελέγχου και καταχωρητές δεδομένων). Στο σχήμα 4.1 παρουσιάζεται το σχηματικό διάγραμμα του JTAG UART Core.

110 96 Κεφάλαιο 4 Σχήμα 4.1 Το σχηματικό διάγραμμα του JTAG UART Core Το JTAG UART Core παρέχει ένα Avalon slave interface προς το JTAG κύκλωμα του FPGA της Altera. Η ορατή στο χρήστη διασύνδεση με το JTAG UART Core αποτελείται από δύο καταχωρητές των 32-bit, δεδομένων και ελέγχου (data και control register) οι οποίοι είναι προσβάσιμοι μέσω του Avalon slave port. Μία Avalon master συσκευή όπως ο επεξεργαστής Nios II, προσπελαύνει τους καταχωρητές για τον έλεγχο του core και για τη μεταφορά δεδομένων μέσω της JTAG σύνδεσης. Το JTAG UART Core παρέχει δύο FIFOs διπλής κατεύθυνσης (bidirectional) για τη βελτίωση της ταχύτητας της JTAG σύνδεσης. Το μέγεθος των FIFOs αυτών είναι παραμετροποιήσιμο ώστε να προσαρμόζεται στην εκάστοτε on-chip μνήμη του συστήματος. Παρέχεται επίσης η δυνατότητα υλοποίησης των FIFOs είτε με blocks μνήμης είτε με καταχωρητές. Τα FPGAs της ALTERA περιέχουν ενσωματωμένο JTAG κύκλωμα ελέγχου. Στο σχήμα 4.2 παρουσιάζεται ένα παράδειγμα σύνδεσης ενός υπολογιστή με ένα SOPC σύστημα που ενσωματώνει το JTAG UART Core.

111 Τα SOPC Cores του Συστήματος 97 Σχήμα 4.2 Παράδειγμα συστήματος που χρησιμοποιεί το JTAG UART Core Το Interval Timer Core Το Interval Timer core με διασύνδεση Avalon είναι ένας εσωτερικός χρονομέτρης για συστήματα επεξεργαστών όπως ο Nios II. Το Interval Timer core παρέχει τα εξής χαρακτηριστικά: Μετρητές 32-bit και 64-bit. Έλεγχος για την εκκίνηση, το τερματισμό και την επαναφορά του χρονομέτρη Δύο τρόποι απαρίθμησης: απλή αντίστροφη απαρίθμηση και συνεχή αντίστροφη απαρίθμηση. Καταχωρητή περιόδου απαρίθμησης. Δυνατότητα ενεργοποίησης ή απενεργοποίησης διακοπών (IRQ) όταν ο χρονομέτρης φτάσει στο μηδέν. Δυνατότητα επαναφοράς του συστήματος όταν ο χρονομέτρης φτάσει στο μηδέν. Δυνατότητα περιοδικής παραγωγής παλμών. Συμβατότητα με επεξεργαστές 32-bit και 16-bit. Στο σχήμα 4.3 παρουσιάζεται το block διάγραμμα του Interval Timer Core.

112 98 Κεφάλαιο 4 Σχήμα 4.3 Το block διάγραμμα του Interval Timer Core Το interval timer core έχει δυο χαρακτηριστικά που είναι ορατά στον χρήστη: Μια Avalon Memory-Mapped (Avalon-MM) διασύνδεση που παρέχει πρόσβαση σε έξι καταχωρητές 16-bit. Μια προαιρετική περιοδική γεννήτρια παλμών. Όλοι οι καταχωρητές είναι εύρους 16-bit καθιστώντας τον interval timer core συμβατό με επεξεργαστές των 16-bit και 32-bit. Η ακόλουθη αλληλουχία γεγονότων περιγράφει την συμπεριφορά του interval timer core: Μία Avalon-MM master περιφερειακή συσκευή, όπως είναι ένας Nios II επεξεργαστής, γράφει δεδομένα στον καταχωρητή ελέγχου (control register) για να εκτελεστούν οι παρακάτω ενέργειες: Εκκίνηση και τερματισμό του χρονομέτρη Ενεργοποίηση ή απενεργοποίηση διακοπών (IRQ) Προσδιορισμός απλής αντίστροφης απαρίθμησης ή συνεχούς αντίστροφης απαρίθμησης. Ο επεξεργαστής διαβάζει τον καταχωρητή κατάστασης (status register) για πληροφορίες σχετικά με την παρούσα δραστηριότητα του timer. Ο επεξεργαστής μπορεί να καθορίσει την περίοδο του timer γράφοντας μια τιμή στους καταχωρητές περιόδου. Ένας εσωτερικός μετρητής μετράει αντίστροφα προς το μηδέν και όποτε φτάσει στο μηδέν επαναφορτώνεται άμεσα από τους καταχωρητές περιόδου.

113 Τα SOPC Cores του Συστήματος 99 Ο επεξεργαστής μπορεί να διαβάσει την τρέχουσα τιμή του counter γράφοντας αρχικά σε έναν από τους snap καταχωρητές για να ζητήσει ένα στιγμιότυπο του μετρητή και έπειτα διαβάζει τους snap καταχωρητές για την πλήρη τιμή. Όταν ο μετρητής φτάσει στο μηδέν, ένα ή περισσότερα από τα παρακάτω γεγονότα ενεργοποιούνται: Αν τα IRQs είναι ενεργοποιημένα, μια διακοπή IRQ δημιουργείται. Η προαιρετική γεννήτρια παλμών ενεργοποιείται για μια περίοδο ρολογιού. Η προαιρετική watchdog έξοδος επαναρχικοποιεί το σύστημα. Το interval timer core υλοποιεί μία απλή Avalon-MM slave διασύνδεση για να παρέχει πρόσβαση στο αρχείο καταχωρητών. Η θύρα Avalon-MM slave χρησιμοποιεί το σήμα resetrequest για την υλοποίηση της συμπεριφοράς του timer ως watchdog. Αυτό είναι ένα σήμα επαναφοράς που οδηγεί την είσοδο reset όλων των Avalon-MM περιφερειακών του συστήματος. Όταν το σήμα resetrequest ενεργοποιείται όλοι οι επεξεργαστές του συστήματος επανεκκινούνται. Το interval timer core υποστηρίζει όλες τις οικογένειες συσκευών της Altera. Το interval timer core προσφέρει τις παρακάτω ρυθμίσεις οι οποίες επηρεάζουν τη δομή υλικού του: Simple periodic interrupt η ρύθμιση αυτή είναι χρήσιμη για συστήματα που απαιτούν μόνο μία περιοδική γεννήτρια διακοπών. Η περίοδος είναι σταθερή και ο χρονομέτρης δεν μπορεί να σταματήσει αλλά τα IRQ μπορούν να απενεργοποιηθούν. Full featured η ρύθμιση αυτή είναι χρήσιμη για συστήματα επεξεργαστών που απαιτούν έναν χρονομέτρη με μεταβλητή περίοδο, ο οποίος μπορεί να εκκινεί και να σταματά κάτω από τον έλεγχο του επεξεργαστή. Watchdog η ρύθμιση αυτή είναι χρήσιμη για συστήματα τα οποία απαιτούν ένα χρονομέτρη watchdog για την επαναφορά του συστήματος στην περίπτωση που το σύστημα σταματήσει να ανταποκρίνεται.

114 100 Κεφάλαιο 4 Στον πίνακα 4.2 παρουσιάζεται το αρχείο καταχωρητών του Internal Timer Core (32-bit). Πίνακας 4.2 Το αρχείο καταχωρητών του Internal Timer Core Ο καταχωρητής κατάστασης (status register) έχει δύο bits η λειτουργία των οποίων παρουσιάζεται στον πίνακα 4.3. Πίνακας 4.3 Περιγραφή των bits του status καταχωρητή Ο καταχωρητής ελέγχου (control register) έχει τέσσερα bits η λειτουργία των οποίων παρουσιάζεται στον πίνακα 4.4. Πίνακας 4.4 Περιγραφή των bits του καταχωρητή ελέγχου

115 Τα SOPC Cores του Συστήματος 101 period_n καταχωρητές Οι καταχωρητές περιόδου (period_n) αποθηκεύουν την τιμή της περιόδου. Ο εσωτερικός μετρητής φορτώνεται με την τιμή που είναι αποθηκευμένη σε αυτούς τους καταχωρητές όταν συμβεί ένα από τα ακόλουθα γεγονότα: Εκτελεστεί μία λειτουργία εγγραφής σε έναν από τους period_n καταχωρητές Ο εσωτερικός μετρητής φτάσει στο μηδέν. snap_n καταχωρητές Μια master περιφερειακή συσκευή μπορεί να αιτηθεί ενός στιγμιότυπου του εσωτερικού μετρητή εκτελώντας μια λειτουργία εγγραφής σε έναν από τους snap_n καταχωρητές. Τότε, η τιμή του μετρητή αντιγράφεται στους snap_n καταχωρητές. Το στιγμιότυπο λαμβάνεται είτε λειτουργεί ο μετρητής είτε όχι, και δεν αλλάζει την εσωτερική λειτουργία του καταχωρητή. Το interval timer core παράγει μία IRQ όταν ο εσωτερικός μετρητής φτάσει στο μηδέν και το ITO bit του καταχωρητή ελέγχου είναι 1. Η αναγνώριση των IRQs γίνεται με έναν από τους ακόλουθους δύο τρόπους: Εκκαθάριση του TO bit του καταχωρητή κατάστασης. Απενεργοποίηση των διακοπών με εκκαθάριση του ITO bit του καταχωρητή ελέγχου. Αποτυχία αναγνώρισης των IRQ παράγει ένα απροσδιόριστο αποτέλεσμα. Η ALTERA παρέχει οδηγούς που είναι ενσωματωμένοι στην HAL βιβλιοθήκη για συστήματα με Nios II επεξεργαστές. Η ALTERA παρέχει οδηγούς και για τα δύο μοντέλα του HAL χρονομέτρη: system clock timer και timestamp timer. System Clock Driver Όταν ο internal timer έχει ρυθμιστεί ως system clock, λειτουργεί συνεχώς σε περιοδική βάση, χρησιμοποιώντας την τιμή της περιόδου που έχει οριστεί στον SOPC Builder. Ο οδηγός είναι καθοδηγούμενος-από-διακοπές (interrupt-driven) και έτσι θα πρέπει τα σήματα διακοπών του να είναι συνδεδεμένα στο hardware του συστήματος.

116 102 Κεφάλαιο 4 Τimestamp Driver Το interval timer core μπορεί να ρυθμιστεί στη λειτουργία timestamp αν ικανοποιούνται οι παρακάτω συνθήκες : Ο χρονομέτρης έχει ένα writeable period καταχωρητή. Ο χρονομέτρης δεν έχει επιλεγεί ως system clock Το SPI (3 Wire Serial) Core Το SPI είναι ένα σειριακό πρωτόκολλο που χρησιμοποιείται σε embedded συστήματα για την σύνδεση μικροεπεξεργαστών με μια πληθώρα off-chip αισθητήρων, μνημών και συσκευών ελέγχου. Το SPI core με διασύνδεση Avalon υλοποιεί το SPI πρωτόκολλο και παρέχει μια Avalon Memory-Mapped (Avalon-MM) διασύνδεση στο άλλο άκρο. Το SPI core μπορεί να υλοποιήσει είτε το master είτε το slave πρωτόκολλο σύνδεσης. Όταν ρυθμίζεται ως master το SPI core μπορεί να ελέγξει μέχρι και 32 ανεξάρτητες slave συσκευές. Το εύρος των καταχωρητών αποστολής και λήψης δεδομένων μπορούν να ρυθμιστούν για εύρος από 1 μέχρι 32 bits.μεγαλύτερο εύρος μεταφοράς μπορεί να υποστηριχτεί με ρουτίνες software. Το SPI core επικοινωνεί χρησιμοποιώντας δυο γραμμές δεδομένων, μια γραμμή έλεγχου, και ένα ρολόι συγχρονισμού: Master Out Slave In (mosi) Μεταφέρει δεδομένα από τον master στην είσοδο των slaves Master In Slave Out (miso) Μεταφέρει δεδομένα από τον slave στην είσοδο του master Serial Clock (sclk) Ρολόι που οδηγείται από τον master στους slaves, και χρησιμοποιείται για τον συγχρονισμό των data bits Slave Select (ss_n) Το σήμα Select (active low) οδηγείται από τον master σε κάθε ένα ξεχωριστό slave, και χρησιμοποιείται για την επιλογή του επιθυμητού slave Το SPI core έχει τα ακόλουθα χαρακτηριστικά: Πέντε memory-mapped καταχωρητές: rxdata, txdata, status, control και slaveselect

117 Τα SOPC Cores του Συστήματος 103 Τέσσερις SPI θύρες διασύνδεσης: sclk, ss_n, mosi και miso Οι καταχωρητές παρέχουν μια διασύνδεση στο SPI core και είναι ορατοί μέσω του Avalon MM slave port. Οι θύρες sclk, ss_n, mosi και miso παρέχουν μια hardware διασύνδεση με άλλες SPI συσκευές. Η συμπεριφορά των sclk, ss_n, mosi και miso εξαρτάται από το αν το SPI core είναι ρυθμισμένο ως master ή slave. Σχήμα 4.4 Το block διάγραμμα του SPI Core (Master Mode) Transmitter Logic Η λογική μετάδοσης του SPI core αποτελείται από έναν transmit holding καταχωρητή (txdata) και έναν transmit shift καταχωρητή, κάθε ένας με εύρος n bits. Το εύρος n του καταχωρητή προσδιορίζεται κατά την δημιουργία του συστήματος, και μπορεί να είναι κάθε ακέραια τιμή από 8 μέχρι 32. Όταν ένα master περιφερειακό γράψει μια τιμή στον καταχωρητή txdata, η τιμή αντιγράφεται στον καταχωρητή ολίσθησης και μεταδίδεται όταν ξεκινά η επόμενη διεργασία. Οι καταχωρητές ολίσθησης και txdata παρέχουν double buffering κατά την μετάδοση δεδομένων. Μια νέα τιμή μπορεί να γραφεί στον καταχωρητή txdata όσο τα προηγούμενα δεδομένα ολισθαίνουν και εξέρχονται από τον καταχωρητή ολίσθησης. Στον τρόπο λειτουργίας master, ο transmit shift καταχωρητής τροφοδοτεί άμεσα την έξοδο mosi. Στον τρόπο λειτουργίας slave, ο transmit shift καταχωρητής τροφοδοτεί άμεσα την

118 104 Κεφάλαιο 4 έξοδο miso. Τα δεδομένα ολισθαίνουν στην έξοδο με πρώτο είτε το LSB είτε το MSB ανάλογα με τις ρυθμίσεις του SPI core. Receiver Logic Η λογική λήψης του SPI core αποτελείται από έναν receive holding καταχωρητή (rxdata) και έναν receive shift καταχωρητή, κάθε ένας με εύρος n bits. Το εύρος n του καταχωρητή προσδιορίζεται κατά την δημιουργία του συστήματος, και μπορεί να είναι κάθε ακέραια τιμή από 8 μέχρι 32. Ένα master περιφερειακό διαβάζει τα ληφθέντα δεδομένα από τον καταχωρητή rxdata αφότου ο καταχωρητής ολίσθησης έχει γεμίσει πλήρως. Οι καταχωρητές ολίσθησης και rxdata παρέχουν double buffering κατά την λήψη δεδομένων. Ο καταχωρητής rxdata μπορεί να κρατά μια ληφθείσα τιμή δεδομένων όσο νέες τιμές δεδομένων ολισθαίνουν και εισέρχονται στον καταχωρητή ολίσθησης. Στον τρόπο λειτουργίας master, ο καταχωρητής ολίσθησης τροφοδοτείται άμεσα την είσοδο mosi. Στον τρόπο λειτουργίας slave, ο καταχωρητής ολίσθησης τροφοδοτείται άμεσα την είσοδο miso. Τα δεδομένα λαμβάνονται με πρώτο είτε το LSB είτε το MSB ανάλογα με τις ρυθμίσεις του SPI core. Software Programming Model Το SPI core δεν εμπίπτει στο γενικό μοντέλο συσκευών που υποστηρίζονται από το HAL, και επομένως δεν είναι δυνατή η πρόσβαση από το HAL API ή την ANSI C standard βιβλιοθήκη. Η Altera παρέχει μια ρουτίνα για πρόσβαση στο hardware του SPI που είναι μοναδική για το SPI core. Η ρουτίνα πρόσβασης alt_avalon_spi_command() παρέχει πρόσβαση γενικού σκοπού σε ένα SPI core ρυθμισμένο ως master. Το SPI core συνοδεύεται από τα παρακάτω αρχεία που παρέχουν μια χαμηλού επιπέδου διασύνδεση με το hardware: altera_avalon_spi.h Αυτό το αρχείο προσδιορίζει τον χάρτη καταχωρητών του SPI core. altera_avalon_spi.c Αυτό το αρχείο υλοποιεί ρουτίνες χαμηλού επιπέδου για πρόσβαση στο hardware.

119 Τα SOPC Cores του Συστήματος Το PIO Core Το parallel input/output (PIO) core παρέχει μια memory-mapped διασύνδεση ανάμεσα σε μια θύρα Avalon Memory-Mapped (Avalon-MM) slave port και τις θύρες I/O γενικού σκοπού. Οι θύρες I/O συνδέονται είτε σε on-chip στοιχεία λογικής είτε σε I/O pins που συνδέονται σε συσκευές εξωτερικές στο FPGA. Βασικές ρυθμίσεις To πλάτος των θυρών I/O μπορούν να έχουν οποιαδήποτε ακέραια τιμή μεταξύ 1 και 32. Η κατεύθυνση που μπορεί να έχει μια θύρα ανήκει σε μια από τις τέσσερις κατηγορίες: Bidirectional (tristate), μόνο Input, μόνο Output, input και output Το PIO core συνοδεύεται από ένα αρχείο software("altera_avalon_pio_regs.h"), για τον έλεγχο του core μέσω του Nios. 4.3 Τα University Program IP Cores Τα University Program IP Cores είναι υποσυστήματα έτοιμα προς χρήση και υποστηρίζουν όλες τις περιφερειακές συσκευές των boards της ALTERA και απαιτούν ξεχωριστή εγκατάσταση για να είναι δυνατή η χρήση τους από τον SOPC Builder Το Clock Signals for DE-Series Board Peripherals Core Τα περιφερειακά στα DE-series boards της Altera απαιτούν τα κατάλληλα σήματα ρολογιού για την λειτουργία τους. Μερικά από αυτά τα περιφερειακά, η SDRAM,το Audio Codec και τα VGA DAC chips, απαιτούν συγκεκριμένες συχνότητες ρολογιού. Το Clock Signals IP Core παρέχει αυτά τα απαραίτητα σήματα ρολογιού για τα VGA και Audio Cores και τον SDRAM Controller για τα DE-series boards.

120 106 Κεφάλαιο 4 Σχήμα 4.5 Το block διάγραμμα του Clock Signals for DE-Series Board Peripherals Core Το Clock Signals IP Core απαιτεί ένα ή δυο ρολόγια εισόδου και παράγει μέχρι και τέσσερα ρολόγια εξόδου. Primary Input Clock Το πρωτεύον ρολόι εισόδου χρησιμοποιείται για την παραγωγή των ρολογιών του συστήματος,της VGA και της SDRAM. Ονομάζεται CLK_IN_PRIMARY στον SOPC Builder. Αυτό το ρολόι πρέπει να έχει συχνότητα 50 MHz. Secondary Input Clock Το δευτερεύον ρολόι εισόδου χρησιμοποιείται για την παραγωγή του ρολογιού του audio. Ονομάζεται CLK_IN_SECONDARY στον SOPC Builder. Αυτή η είσοδος είναι προαιρετική πρέπει να έχει συχνότητα 27 MHz. System Clock Η έξοδος του System Clock είναι ένα σήμα ρολογιού 50 MHz. Ονομάζεται sys_clk στον SOPC Builder. Πρέπει να χρησιμοποιείται για τα σήματα ρολογιού όλων των cores στον SOPC Builder, εκτός από τα Clock Signals IP και VGA Controller cores. VGA Clock Η έξοδος του VGA Clock είναι ένα σήμα ρολογιού 25 MHz που απαιτείται από τον VGA Controller IP core. Ονομάζεται vga_clk στον SOPC Builder.

121 Τα SOPC Cores του Συστήματος 107 SDRAM Clock Η έξοδος του SDRAM Clock που ονομάζεται sdram_clk, είναι ένα σήμα ρολογιού με μια μετατόπιση φάσης -3ns σε σχέση με το 50 MHz ρολόι του συστήματος για να εξασφαλιστεί ο σωστός χρονισμός της SDRAM στα DE-series boards. Audio Clock Η έξοδος του Audio Clock, που ονομάζεται audio_clk, είναι ένα σήμα ρολογιού που απαιτείται από το audio CODEC chip. Η συχνότητα αυτού του ρολογιού μπορεί να είναι , 12.0, , και MHz. Αυτές οι συχνότητες απαιτούνται από το audio CODEC chip για διαφορετικές συχνότητες δειγματοληψίας. Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: DE-Series Board Επιτρέπει στους χρήστες να προσδιορίσουν την πλακέτα Altera DE-series για την οποία σχεδιάζεται το σύστημα μας. Optional Clocks Επιτρέπει στους χρήστες να επιλέξουν τα components (VGA, SDRAM, Audio), τα οποία χρησιμοποιούνται στο σύστημα μας και απαιτούν τα δικά τους clocks. Audio Clock Frequency Επιτρέπει στους χρήστες να επιλέξουν την συχνότητα ρολογιού για το audio chip Το SDRAM Controller Core Ο SDRAM Controller παρέχει πρόσβαση στα 2 SDRAM chips του DE2-70 που το κάθε ένα μπορεί να αποθηκεύσει 32 Mbytes δεδομένων. Κάθε chip είναι οργανωμένο ως 4M x 16 bits x 4 banks. Τα σήματα που απαιτούνται για την επικοινωνία με το κάθε chip εκτός από το σήμα ρολογιού, παρέχονται από τον SDRAM Controller και δημιουργούνται με την χρήση του SOPC Builder.

122 108 Κεφάλαιο 4 Σχήμα 4.6 Τα σήματα της SDRAM O SDRAM controller χρειάζεται περίπου 200μs για να εκκινήσει μετά το άνοιγμα του DE2-70 board πριν να μπορεί να είναι προσβάσιμος. Ο χρόνος ανανέωσης της SDRAM μνήμης είναι μs. Το απαραίτητο ρολόι για το core αυτό παρέχεται από το Clock Signals IP Core Το SD Card Controller Core Μια Secure Data (SD) card είναι μια συσκευή αποθήκευσης δεδομένων, που πολύ συχνά χρησιμοποιείται σε ψηφιακές κάμερες για την αποθήκευση φωτογραφιών. Μια SD card είναι φορητή, επιτρέποντας έτσι τα αποθηκευμένα δεδομένα να μεταφερθούν σε άλλες συσκευές. Οι πλακέτες DE1, DE2, και DE3 έχουν μια θύρα για την SD card και έτσι είναι δυνατή η σύνδεση μιας SD card σε FPGA-based συστήματα, δίνοντας έτσι πρόσβαση σε μεγάλες ποσότητες δεδομένων. Όταν το SD Card IP Core συμπεριλαμβάνεται σε ένα σύστημα το core θα ανιχνεύσει αν κάποια SD card είναι συνδεδεμένη στην ομώνυμη SD card θύρα, και θα επιτρέψει στο σύστημα να έχει εύκολη πρόσβαση στα δεδομένα που είναι αποθηκευμένα εκεί. Το core έχει σχεδιαστεί για να χρησιμοποιείται σε ένα SOPC Builder-based σύστημα. Μέσω προγραμμάτων που τρέχουν στον Nios II επεξεργαστή ο χρήστης αποκτά πρόσβαση στα δεδομένα που είναι αποθηκευμένα στην SD card.

123 Τα SOPC Cores του Συστήματος 109 Το University Program SD Card IP Core λειτουργεί ως μια διασύνδεση ανάμεσα στην SD card και ένα σύστημα που δημιουργήθηκε μέσω του SOPC Builder. Το υψηλού επιπέδου block διάγραμμα του SD Card παρουσιάζεται στο σχήμα 4.7. Τα σήματα στην αριστερή πλευρά συνδέονται στην εσωτερική διασύνδεση του Avalon. Αιτήματα ανάγνωσης και εγγραφής που λαμβάνονται μέσω της εσωτερικής διασύνδεσης Avalon ερμηνεύονται είτε ως αιτήματα εντολών είτε ως αιτήματα δεδομένων από το Avalon Interface Finite State Machine (FSM).Τα αιτήματα εντολών χρησιμοποιούνται για να ρυθμίσουν την SD card και να προσδιορίσει τις τοποθεσίες στην SD card που επιθυμούμε πρόσβαση. Τα αιτήματα δεδομένων χρησιμοποιούνται για πρόσβαση στα δεδομένα που είναι αποθηκευμένα στην SD card. Όταν το FSM καθορίσει τον τύπο του αιτήματος, ενεργοποιεί το SD Card Interface module. Το SD Card Interface module επεξεργάζεται το αίτημα επικοινωνώντας με την SD card χρησιμοποιώντας πρωτόκολλο σειριακής επικοινωνίας, και επιστρέφει το αποτέλεσμα του αιτήματος στο Avalon Interface FSM. Το Avalon Interface FSM με την σειρά του στέλνει το αποτέλεσμα του αιτήματος μέσω της εσωτερικής διασύνδεσης Avalon. Εκτός από τα σήματα διασύνδεσης Avalon, πολλά επιπλέον σήματα είναι παρόν. Αυτά περιλαμβάνουν τα i_clock, i_reset και i_reset_n. Όταν το core χρησιμοποιείται σε SOPC Builder συστήματα η διασύνδεση Avalon καθώς και τα σήματα reset του SD Card συνδέονται αυτόματα στα αντίστοιχα σύγχρονα και ασύγχρονα σήματα reset του συστήματος. Η είσοδος ρολογιού μπορεί να προσδιοριστεί από τον χρήστη και πρέπει να συνδεθεί σε ένα ρολόι 50MHz. Σχήμα 4.7 Το block διάγραμμα του SD Card Core

124 110 Κεφάλαιο 4 Όταν το SD Card IP Core συμπεριλαμβάνεται σε ένα SOPC Builder σύστημα με έναν επεξεργαστή Nios II, το core μπορεί να ελεγχτεί από το software. Προγράμματα software μπορούν να γραφούν είτε για άμεση επικοινωνία με την SD Card, με την χρήση memorymapped καταχωρητών, είτε χρησιμοποιώντας το Hardware Abstraction Layer (HAL) που κάνει την SD card να εμφανίζεται ως ένας 16-bit File Allocation Table (FAT16)-based portable drive. Οι memory-mapped καταχωρητές του SD Card Interface IP Core μπορούν να χρησιμοποιηθούν για την ανταλλαγή πληροφοριών ανάμεσα στο σύστημα και μιας SD card. Οι memory-mapped καταχωρητές επιτρέπουν σε ένα πρόγραμμα που τρέχει στον επεξεργαστή Nios II να διαβάσει την κατάσταση της SD Card διασύνδεσης και να στείλει εντολές σε αυτή. Οι εντολές περιλαμβάνουν ανάγνωση, εγγραφή και διαγραφή block δεδομένων. Όταν μια εντολή για την ανάγνωση ενός block δεδομένων εκδίδεται, το core διαβάζει ένα 512-byte block δεδομένων και το αποθηκεύει σε ένα τοπικό memory buffer.τα δεδομένα του buffer στην συνέχεια μπορούν να χρησιμοποιηθούν εύκολα από ένα πρόγραμμα software. Πίνακας 4.5 Ο χάρτης καταχωρητών του SD Card Core Το SD Card Core συνοδεύεται από C συναρτήσεις οι οποίες είναι προσβάσιμες μέσω του Hardware Abstraction Layer (HAL) και προσφέρουν εύκολη πρόσβαση στα δεδομένα που είναι αποθηκευμένα στην SD card. Τα δεδομένα είναι αποθηκευμένα σε μορφή FAT16. Για να είναι δυνατή η χρήση αυτών των συναρτήσεων στον κώδικα πρέπει να συμπεριληφθεί το αρχείο altera_up_sd_card_avalon_interface.h>. Οι βασικές συναρτήσεις είναι: alt_up_sd_card_dev* alt_up_sd_card_open_dev

125 Τα SOPC Cores του Συστήματος 111 Αρχικοποιεί το SD Card IP Core HAL device driver. Επιστρέφει NULL, όταν το προσδιορισμένο όνομα συσκευής δεν υπάρχει στο σύστημα. alt_up_sd_card_fopen Ανοίγει ένα αρχείο για να χρησιμοποιηθεί στην τρέχουσα εφαρμογή. alt_up_sd_card_find_first Αναζητά το πρώτο αρχείο σε μια προσδιορισμένη directory. alt_up_sd_card_find_next Αναζητά το επόμενο αρχείο σε μια directory που έχει προσδιοριστεί από το τελευταίο κάλεσμα της υπορουτίνας alt_up_sd_card_find_first. alt_up_sd_card_get_attributes Επιστρέφει τα χαρακτηριστικά ενός αρχείου. alt_up_sd_card_set_attributes Ορίζει τα χαρακτηριστικά ενός αρχείου. alt_up_sd_card_read Διαβάζει ένα byte δεδομένων από ένα αρχείο από την τρέχουσα θέση στο αρχείο. Η θέση αυξάνεται όταν δεδομένα διαβάζονται από το αρχείο. alt_up_sd_card_write Γράφει ένα byte δεδομένων από ένα αρχείο από την τρέχουσα θέση στο αρχείο. Η θέση αυξάνεται όταν δεδομένα διαβάζονται από το αρχείο. alt_up_sd_card_fclose Κλείνει ένα ανοιχτό αρχείο. alt_up_sd_card_is_present Ελέγχει αν υπάρχει μια SD card στην υποδοχή της πλακέτας. alt_up_sd_card_is_fat16 Ελέγχει αν η SD card είναι διαμορφωμένη σε FAT Το Pixel Buffer DMA Controller Core Το Pixel Buffer DMA Controller Core χρησιμοποιεί την Avalon memory-mapped master διασύνδεση του για να διαβάσει video frames από μια εξωτερική μνήμη. Στην συνέχεια, στέλνει αυτά τα video frames έξω μέσω της Avalon streaming διασύνδεσης. Η Avalon memory-mapped slave διασύνδεση, που ονομάζεται avalon_control_slave, χρησιμοποιείται για την επικοινωνία με τους εσωτερικούς καταχωρητές.

126 112 Κεφάλαιο 4 Σχήμα 4.8 Το block διάγραμμα του Pixel Buffer DMA Controller Core Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: Addressing Mode Επιλογή ανάμεσα σε Consecutive και X-Y τρόπο διευθυνσιοδότησης. Default Buffer Start Address Η αρχική διεύθυνση του buffer μετά από επαναφορά. Default Back Buffer Start Address Η αρχική διεύθυνση του back buffer μετά από επαναφορά. Width (# of pixels) Προσδιορίζει το πλάτος της εισερχόμενης ροής. Height (# of lines) Προσδιορίζει το ύψος της εισερχόμενης ροής. Color Space Προσδιορίζει το επιλεγμένο RGB color space format. Οι οδηγοί των συσκευών ελέγχουν και επικοινωνούν με τον Pixel Buffer μέσω Avalon memory-mapped διασυνδέσεων, που ονομάζονται avalon_control_slave. Ο avalon_control_slave παρέχει μια διασύνδεση για τον έλεγχο της λειτουργίας του pixel buffer, και για την ανάκτηση πληροφοριών της κατάστασης του. Αποτελείται από τέσσερεις καταχωρητές.

127 Τα SOPC Cores του Συστήματος 113 Ο καταχωρητής Buffer κρατά την 32-bit διεύθυνση της αρχής του memory buffer. Αυτός ο καταχωρητής είναι read-only, και παρέχει την διεύθυνση του πρώτου pixel του frame που απεικονίζεται. Ο καταχωρητής BackBuffer επιτρέπει την αλλαγή της διεύθυνσης του frame. Για την αλλαγή του frame που απεικονίζεται, η διεύθυνση του νέου frame γράφεται πρώτα τον καταχωρητή BackBuffer. (1) Δεσμευμένα. Οι τιμές ανάγνωσης τους είναι αόριστες Πίνακας 4.6 Ο χάρτης καταχωρητών Pixel Buffer DMA Controller Ο καταχωρητής Resolution παρέχει την X ανάλυση της οθόνης στα bits 15-0, και την Y ανάλυση στα bits Τέλος, ο καταχωρητής Status παρέχει πληροφορίες για τον Pixel Buffer. Πίνακας 4.7 Ο Status καταχωρητής Ο Pixel Buffer συνοδεύεται από C συναρτήσεις οι οποίες είναι προσβάσιμες μέσω του Hardware Abstraction Layer (HAL) και υλοποιούν βασικές λειτουργίες του Pixel Buffer DMA Controller. Για να είναι δυνατή η χρήση αυτών των συναρτήσεων στον κώδικα πρέπει να συμπεριληφθεί το αρχείο altera_up_avalon_video_pixel_buffer_dma.h. Οι βασικές συναρτήσεις είναι: alt_up_pixel_buffer_dev* alt_up_pixel_buffer_open_dev Η συνάρτηση αυτή ενεργοποιεί τον Pixel Buffer DMA Controller. alt_up_pixel_buffer_draw

128 114 Κεφάλαιο 4 Η συνάρτηση αυτή εμφανίζει ένα pixel στην θέση (x, y) στην VGA ή LTM οθόνη. alt_up_pixel_buffer_change_back_buffer_address Αλλάζει την αρχική διεύθυνση του back buffer. alt_up_pixel_buffer_swap_buffers Αλλάζει ποιος buffer αποστέλλεται στον VGA/LTM Controller. alt_up_pixel_buffer_check_swap_buffers_status Ελέγχει αν η αλλαγή των buffers έχει ολοκληρωθεί. alt_up_pixel_buffer_clear_screen Η συνάρτηση αυτή καθαρίζει την οθόνη ή τον back buffer. alt_up_pixel_buffer_draw_box Η συνάρτηση αυτή εμφανίζει ένα κουτί ανάμεσα στα σημεία (x0,y0) και (x1,y1). alt_up_pixel_buffer_draw_hline Η συνάρτηση αυτή εμφανίζει μια οριζόντια γραμμή ανάμεσα στα σημεία (x0,y) και (x1,y). alt_up_pixel_buffer_draw_vline Η συνάρτηση αυτή εμφανίζει μια κατακόρυφη γραμμή ανάμεσα στα σημεία (x0,y) και (x1,y). alt_up_pixel_buffer_draw_rectangle Η συνάρτηση αυτή εμφανίζει ένα ορθογώνιο ανάμεσα στα σημεία (x0,y0) και (x1,y1). alt_up_pixel_buffer_draw_line Η συνάρτηση αυτή εμφανίζει μια γραμμή ανάμεσα στα σημεία (x0,y0) και (x1,y1) Το VGA Controller Core Ο VGA controller δημιουργεί τα σήματα χρονισμού που απαιτούνται από τον on-board VGA DAC στις πλακέτες DE-series και την Terasic LCD με οθόνη αφής. Τα δεδομένα παρέχονται στον VGA Controller μέσω της Avalon Streaming διασύνδεση. Ο controller παίρνει τα εισερχόμενα δεδομένα, προσθέτει τα κατάλληλα σήματα χρονισμού και μετά στέλνει αυτές τις πληροφορίες είτε στον on-board VGA DAC είτε στην LCD οθόνη αφής. Τα σήματα χρονισμού που δημιουργούνται από τον VGA Controller παράγουν αναλύσεις 640x480, 800x480 and 800x600 pixels για τον VGA DAC, την LCD οθόνη αφής (TRDB_LTM) και την 8 ιντσών LCD στο tpad. Για την σωστή δημιουργία των σημάτων χρονισμού, ένα ρολόι 25 MHz

129 Τα SOPC Cores του Συστήματος 115 πρέπει να παρέχεται στον VGA Controller, εκτός από την 8 ιντσών LCD, όπου απαιτείται ένα ρολόι 40 MHz. Σχήμα 4.9 Το block διάγραμμα του VGA Controller Core Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: DE-Series Board Προσδιορίζει την πλακέτα Altera DE-series για την οποία το σύστημα μας σχεδιάζεται. Video Out Device Προσδιορίζει την VGA/LTM συσκευή που θα χρησιμοποιηθεί, και επομένως την ανάλυση της οθόνης Το Character Buffer Core Ο Character Buffer παρέχει την δυνατότητα γραφικής απεικόνισης χαρακτήρων ASCII. Ένα πρόγραμμα που εκτελείται σε ένα Nios II επεξεργαστή μπορεί να στείλει τους ASCII χαρακτήρες στην Avalon διασύνδεση του Character Buffer, που ονομάζεται avalon_char_slave. Το core αποθηκεύει τους χαρακτήρες στην on-chip memory που περιλαμβάνει. Ένας DMA controller διαβάζει τους ASCII χαρακτήρες από την on-chip memory και τους στέλνει στον character renderer. Ο character renderer μετατρέπει τους ASCII χαρακτήρες στην γραφική αναπαράσταση που τους αντιστοιχεί και τους στέλνει στην έξοδο μέσω μιας Avalon Streaming διασύνδεση.

130 116 Κεφάλαιο 4 Σχήμα 4.10 Το block διάγραμμα του Character Buffer Core Ο Character Buffer υποστηρίζει ένα color mode, στο οποίο οι χαρακτήρες απεικονίζονται σε λευκό χρώμα. Η ανάλυση του Character Buffer καθορίζεται από τον αριθμό χαρακτήρων ανά γραμμή και τον αριθμό γραμμών ανά οθόνη. Ο Character Buffer υποστηρίζει μια ανάλυση για κάθε συσκευή απεικόνισης Για τον onboard VGA DAC η ανάλυση είναι 80 χαρακτήρες και 60 γραμμές. Για την LCD με οθόνη αφής η ανάλυση είναι 50 χαρακτήρες και 30 γραμμές. Το core υποστηρίζει μόνο τον X-Y τρόπο διευθυνσιοδότησης. X-Y τρόπος διευθυνσιοδότησης για ανάλυση 80x60 X-Y τρόπος διευθυνσιοδότησης για ανάλυση 50x30 Πίνακας 4.8 Ο X-Y τρόπος διευθυνσιοδότησης Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής:

131 Τα SOPC Cores του Συστήματος 117 Video-Out Device Προσδιορίζει την συσκευή που χρησιμοποιείται για την απεικόνιση, και κατά συνέπια την ανάλυση της οθόνης. Enable Transparency Όταν επιλεγεί το format στην έξοδο ορίζεται σε 40-bit RGBA. Αυτή η επιλογή πρέπει να είναι ενεργή εάν ο Character Buffer και ο Pixel Buffer πρόκειται να χρησιμοποιηθούν μαζί. Οι οδηγοί των συσκευών ελέγχουν και επικοινωνούν με τον Character Buffer μέσω δύο Avalon memory-mapped διασυνδέσεων, που ονομάζονται avalon_control_slave και avalon_char_slave. Η avalon_char_slave διασύνδεση έχει εύρος δεδομένων ένα byte για ASCII χαρακτήρες και διευθυνσιοδότειται με τον X-Y τρόπο. Η avalon_control_slave διασύνδεση αποτελείται από δυο καταχωρητές. Ο Control καταχωρητής παρέχει την δυνατότητα καθαρισμού της οθόνης γράφοντας στο R bit, το οποίο είναι το bit 16 του καταχωρητή. Το R bit παραμένει 1 μέχρι να καθαριστεί η οθόνη, και μετά το R παίρνει την τιμή 0. Ο Resolution καταχωρητής, ο οποίος είναι read-only, παρέχει δύο τιμές: τον αριθμό χαρακτήρων ανά γραμμή, στα bits 15-0, και τον αριθμό γραμμών ανά οθόνη, στα bits (1) Reserved Πίνακας 4.9 Ο χάρτης καταχωρητών του Character Buffer Ο Character Buffer συνοδεύεται από C συναρτήσεις οι οποίες είναι προσβάσιμες μέσω του Hardware Abstraction Layer (HAL) και υλοποιούν βασικές λειτουργίες του Character Buffer. Για να είναι δυνατή η χρήση αυτών των συναρτήσεων στον κώδικα πρέπει να συμπεριληφθεί το αρχείο "altera_up_avalon_character_buffer.h". Οι βασικές συναρτήσεις είναι: alt_up_char_buffer_init Η συνάρτηση αυτή αρχικοποιεί το όνομα της δομής. alt_up_char_buffer_dev* alt_up_char_buffer_open_dev Η συνάρτηση αυτή ανοίγει τον character buffer. alt_up_char_buffer_draw

132 118 Κεφάλαιο 4 Η συνάρτηση αυτή εμφανίζει έναν χαρακτήρα στην θέση (x, y) στην VGA ή LTM οθόνη με άσπρο χρώμα και διαφανές background. alt_up_char_buffer_string Η συνάρτηση αυτή εμφανίζει μια ροή χαρακτήρων στην θέση (x, y) στην VGA ή LTM οθόνη με άσπρο χρώμα και διαφανές background. alt_up_char_buffer_clear Καθαρίζει την μνήμη του character buffer Το DMA Controller for Video Core Ο DMA Controller IP core αποθηκεύει και ανακτά καρέ video από και προς την επιλεγμένη κάθε φορά μνήμη. Ο DMA controller έχει δυο τρόπους λειτουργίας: from stream to memory και from memory to stream. Στον τρόπο λειτουργίας from stream to memory, ο DMA Controller αποθηκεύει καρέ από μια εισερχόμενη ροή σε μια εξωτερική μνήμη. Ο DMA Controller χρησιμοποιεί την Avalon memory-mapped master διασύνδεση για να στείλει τα δεδομένα στην μνήμη. Στον τρόπο λειτουργίας from memory to stream, ο DMA Controller χρησιμοποιεί την Avalon memory-mapped master διασύνδεση για να διαβάσει δεδομένα από μια εξωτερική μνήμη τα οποία στην συνέχεια στέλνει στην έξοδο. Σχήμα 4.11 Το block διάγραμμα του DMA Controller for Video Core

133 Τα SOPC Cores του Συστήματος 119 Ο DMA controller μπορεί να χρησιμοποιήσει έναν από τους δυο τρόπους διευθυνσιοδότησης consecutive ή X-Y για να γράψει ή να διαβάσει καρέ από και προς την μνήμη. Επίσης, ο controller μπορεί να αποθηκεύσει και να ανακτήσει pixels κάθε δομής και ο DMA controller αυτόματα θα προσαρμόσει την διεύθυνση για την συγκεκριμένη δομή. Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: Mode DMA Direction Προσδιορίζει αν μια ροή video πρέπει να αποθηκευτεί ή να ανακτηθεί από μια μνήμη. Addressing Parameters Addressing Mode Επιλογή ανάμεσα σε Consecutive και X-Y τρόπο διευθυνσιοδότησης. Default Buffer Start Address Η αρχική διεύθυνση του buffer μετά από επαναφορά. Default Back Buffer Start Address Η αρχική διεύθυνση του back buffer μετά από επαναφορά. Frame Resolution Width (# of pixels) Προσδιορίζει το πλάτος της εισερχόμενης ροής. Height (# of lines) Προσδιορίζει το ύψος της εισερχόμενης ροής. Pixel Format Color Bits Προσδιορίζει τον αριθμό bits ανά χρωματικό επίπεδο Color Planes Προσδιορίζει τον αριθμό των χρωματικών επιπέδων ανά pixel Οι οδηγοί των συσκευών ελέγχουν και επικοινωνούν με τον DMA controller μέσω Avalon memory-mapped διασυνδέσεων, που ονομάζονται avalon_control_slave. Ο avalon_control_slave παρέχει μια διασύνδεση για τον έλεγχο της λειτουργίας του DMA, και για την ανάκτηση πληροφοριών της κατάστασης του. Αποτελείται από τέσσερεις καταχωρητές.

134 120 Κεφάλαιο 4 1) Δεσμευμένα. Οι τιμές ανάγνωσης τους είναι αόριστες Πίνακας 4.10 Ο χάρτης καταχωρητών DMA Controller Core Ο καταχωρητής Buffer κρατά την 32-bit διεύθυνση της αρχής του memory buffer. Αυτός ο καταχωρητής είναι read-only, και παρέχει την διεύθυνση του πρώτου pixel του frame που απεικονίζεται. Ο καταχωρητής BackBuffer επιτρέπει την αλλαγή της διεύθυνσης του frame. Για την αλλαγή του frame που απεικονίζεται, η διεύθυνση του νέου frame γράφεται πρώτα τον καταχωρητή BackBuffer. Ο καταχωρητής Resolution παρέχει την X ανάλυση της οθόνης στα bits 15-0, και την Y ανάλυση στα bits Τέλος, ο καταχωρητής Status παρέχει πληροφορίες για τον DMA controller. Πίνακας 4.11 Ο Status καταχωρητής Το Edge Detection Core Η ανίχνευση ακμών (Edge Detection) είναι ένα παράδειγμα ενός αλγορίθμου επεξεργασίας εικόνας που ανιχνεύει και τονίζει ακμές σε video frames. Ως είσοδο δέχεται 8-bit grayscale video. Αρχικά το κάθε καρέ περνά από ένα Gaussian smoothing φίλτρο για την μείωση του θορύβου. Μετά περνά από έναν τελεστή Sobel, που υπολογίζει την παράγωγο της έντασης της εικόνας. Στη συνέχεια, τα καρέ επεξεργάζονται από ένα non-maximum suppression φίλτρο, το οποίο βρίσκει την κατεύθυνση των

135 Τα SOPC Cores του Συστήματος 121 παραγώγων. Τέλος, τα καρέ επεξεργάζονται από ένα hysteresis φίλτρο για να διαπιστωθεί ποιές παράγωγοι είναι ακμές. Σχήμα 4.12 Το block διάγραμμα του Edge Detection Core Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: Width (# of pixels) Προσδιορίζει το πλάτος της εισερχόμενης ροής. Edge Intensity Ένας παράγοντας για την αύξηση της φωτεινότητας των ακμών. Ο 2x παράγοντας είναι χρήσιμος για την απεικόνιση ακμών σε μικρές οθόνες όπως η LCD με οθόνη αφής Το Bayer Pattern Resampler Core Το Bayer Pattern Resampler μετατρέπει ένα video stream από την Bayer Pattern μορφή στην 24-bit RGB μορφή. Τέσσερα διπλανά pixels από την εισερχόμενη ροη συνδυάζονται σε ένα. Οι τιμές για το κόκκινο και το πράσινο την Bayer Pattern αντιγράφονται στο νέο pixel. Η μέση τιμή των δυο πράσινων τιμών από την Bayer Pattern χρησιμοποιείται στο νέο pixel. Η εξερχόμενη ροή θα έχει μια ανάλυση με το μισό ύψος και πλάτος της εισερχόμενης ροής.

136 122 Κεφάλαιο 4 Σχήμα 4.13 Η μέθοδος μετατροπής του Bayer Pattern Resampler Core Σχήμα 4.14 Το block διάγραμμα του Bayer Pattern Resampler Core Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: Video Source Προσδιορίζει την προέλευση του Bayer Pattern και κατ επέκταση προσδιορίζει την ανάλυση της εισερχόμενης ροής Το Dual-Clock FIFO Core Το Dual-Clock FIFO βοηθά στην μεταφορά δεδομένων video ανάμεσα σε cores που χρησιμοποιούν διαφορετικά clock. Το video εισέρχεται στο core με μια συχνότητα ρολογιού. Στην συνέχεια μια μνήμη FIFO χρησιμοποιείται ως buffer και τέλος τα δεδομένα διαβάζονται σε μια συχνότητα ρολογιού εξόδου και στέλνονται στην έξοδο του core.

137 Τα SOPC Cores του Συστήματος 123 Σχήμα 4.15 Το block διάγραμμα του Dual-Clock FIFO Core Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: Color Bits Προσδιορίζει τον αριθμό bits ανά χρωματικό επίπεδο Color Planes Προσδιορίζει τον αριθμό των χρωματικών επιπέδων ανά pixel Το RGB Resampler Core Το RGB Resampler μετατρέπει video streams ανάμεσα σε μορφές του RGB χρωματικού χώρου. Ο RGB Resampler μπορεί να μετατρέψει video streams από και προς οποιαδήποτε RGB μορφή, εκτός της Bayer pattern μορφής. Ακόμη η μετατροπή σε 8-bit Grayscale μορφή πρέπει να αποφεύγεται γιατί η μετατροπή γίνεται με υποτυπώδη τρόπο. Για καλύτερη ποιότητα μετατροπής προτείνεται η χρήση του Color Space Converter IP core. Σχήμα 4.16 Το block διάγραμμα του RGB Resampler Core

138 124 Κεφάλαιο 4 Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: Incoming Format Προσδιορίζει την RGB μορφή της εισερχόμενης ροής Outgoing Format Προσδιορίζει την επιθυμητή RGB μορφή της εξερχόμενης ροής Alpha Value for Output Προσδιορίζει την τιμή alpha της εξερχόμενης ροής, όταν απαιτείται και δεν είναι παρών στην εισερχόμενη ροη Σημείωση: Η RGB μορφή της εισόδου και της εξόδου δεν μπορεί να είναι η ίδια Το Color-Space Converter Core Το Color-Space Converter μετατρέπει video streams από και προς τους YCrCb και RGB χρωματικούς χώρους. Ως είσοδο έχουμε είτε τον YCrCb (4:4:4 ή 4:0:0) είτε τον 24-bit RGB χρωματικό χώρο και ως έξοδος παράγεται ο αντίθετος χρωματικός χώρος. Σχήμα 4.17 Το block διάγραμμα του Color-Space Converter Core Οι εξισώσεις που χρησιμοποιούνται για την πραγματοποίηση των μετατροπών είναι οι εξής: 4:4:4 YCrCb σε 24-bit RGB R = 1.164(Y -16) (Cr -128) G = 1.164(Y -16) (Cr -128) (Cb -128) B = 1.164(Y -16) (Cb -128)

139 Τα SOPC Cores του Συστήματος 125 Grayscale (Y) σε 24-bit RGB R = Y G = Y B = Y 24-bit RGB σε 4:4:4 YCrCb Y = 0.257xR xG xB + 16 Cr = 0.439xR xG xB Cb = xR xG xB bit RGB σε 4:0:0 YCrCb Y = 0.257xR xG xB + 16 Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής: Color-Space Conversion Προσδιορίζει την επιθυμητή μετατροπή και κατ επέκταση τους χρωματικούς χώρους της εισόδου και της εξόδου Το Alpha Blender Core Ο Alpha Blender IP core συνδυάζει δυο ροές video σε μια. Οι δυο εισερχόμενες ροές, που ονομάζονται foreground και background συνδυάζονται για να δημιουργήσουν την εξερχόμενη ροή. Το foreground πρέπει να είναι σε μορφή 40-bit RGBA, και το background πρέπει να είναι σε μορφή 30-bit RGB. Η εξερχόμενη ροή είναι της μορφής 30-bit RGB.

140 126 Κεφάλαιο 4 Σχήμα 4.18 Το block διάγραμμα του Alpha Blender Core Οι ροές foreground και background συνδυάζονται χρησιμοποιώντας τον τύπο: Cn =αxcf + (1-α) Cb, Cn είναι το χρώμα του εξερχόμενου pixel, α είναι ένας αριθμός μεταξύ 0 και 1, Cf είναι το χρώμα του pixel του foreground και Cb είναι το χρώμα του pixel του background. Για τον συνδυασμό των ροών, η εξίσωση υπολογίζεται τρεις φορές, μια για κάθε χρωματικό επίπεδο. Η σημαντικότερη παράμετρος για την διαδικασία συνδυασμού των ροών είναι η α, η οποία παρέχεται ως κομμάτι της foreground εισερχόμενης ροής. Η foreground εισερχόμενη ροή αποτελείται από μια 30-bit RGB τιμή, όμοια για την background ροη, και μια 10-bit τιμή A. Η παράμετρος α παράγεται διαιρώντας την 10-bit τιμή A με τον αριθμό Ο Alpha Blender έχει δυο τρόπους λειτουργίας: simple και normal. Στο τρόπο λειτουργίας simple, η τιμή alpha στρογγυλοποιείται είτε σε 0 είτε σε 1, το οποίο απλοποιεί την λειτουργίας του κυκλώματος. Στο τρόπο λειτουργίας normal, ο συνδυασμός των ροών εκτελείται όπως παρουσιάζεται με την εξίσωση στην αρχή της παραγράφου. Ο τρόπος λειτουργίας επιλέγεται χρησιμοποιώντας τον SOPC Builder (Configuration Wizard).

141 Τα SOPC Cores του Συστήματος Το Video-Stream Router Core Το Video-Stream Router IP core επιτρέπει στους χρήστες να εναλλάσσουν μονοπάτια για τις ροές video. Ο Video-Stream Router έχει δυο τρόπους λειτουργίας: split και merge. Στον τρόπο λειτουργίας split, η εισερχόμενη ροη θα δρομολογηθεί σε μια από τις εξερχόμενες ροές, με βάση την τιμή του external bit, path selector. Στον τρόπο λειτουργίας merge, μια από τις δυο εισερχόμενες ροές θα δρομολογηθεί στην εξερχόμενη ροή με βάση την τιμή του external bit, path selector. Σχήμα 4.19 Το block διάγραμμα του Video-Stream Router Core (split)

142 128 Κεφάλαιο 4 Σχήμα 4.20 Το block διάγραμμα του Video-Stream Router Core (merge) Όταν χρησιμοποιούνται δυο Video-Stream Routers σε σειρά, ένας σε τρόπο λειτουργίας split και ένας σε τρόπο λειτουργίας merge, η χρήση δυο διαφορετικών σημάτων path select μπορεί να προκαλέσει προβλήματα στο σύστημα. Αυτό οφείλεται στο γεγονός ότι υπάρχει η πιθανότητα οι δυο Video-Stream Routers να προσπαθούν να κατευθύνουν τα δεδομένα από αντίθετα μονοπάτια. Για την επίλυση αυτού του προβλήματος, οι δυο Video- Stream Routers θα πρέπει να συμπεριλάβουν την διασύνδεση που χρησιμοποιείται για τον συγχρονισμό. Με την χρήση αυτής της διασύνδεσης, ελέγχεται ταυτόχρονα το μονοπάτι που θα χρησιμοποιήσουν και οι δυο Video-Stream Routers. Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής : Mode Stream Router Type Προσδιορίζει τον τρόπο λειτουργίας, split ή merge Enable Synchronization Stream Ενεργοποιεί την διασύνδεση συγχρονισμού ροής Pixel Format Color Bits Προσδιορίζει τον αριθμό bits ανά χρωματικό επίπεδο Color Planes Προσδιορίζει τον αριθμό των χρωματικών επιπέδων ανά pixel

143 Τα SOPC Cores του Συστήματος Το Clipper Core Το Clipper IP core τροποποιεί την ανάλυση της εισερχόμενης ροής video. Ο clipper μπορεί να προσθέσει ή να αφαιρέσει ολόκληρες σειρές και στήλες από pixels από την επάνω, κάτω, δεξιά και αριστερή πλευρά των καρέ του video. Σχήμα 4.21 Το block διάγραμμα του Clipper Core Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής : Incoming Frame Resolution Width (# of pixels) Προσδιορίζει το πλάτος της εισερχόμενης ροής. Height (# of lines) Προσδιορίζει το ύψος της εισερχόμενης ροής. Reduce Frame Size Columns to remove from the left side Προσδιορίζει τον αριθμό των στηλών που θα αφαιρεθούν από την αριστερή πλευρά του καρέ Columns to remove from the right side Προσδιορίζει τον αριθμό των στηλών που θα αφαιρεθούν από την δεξιά πλευρά του καρέ Rows to remove from the top Προσδιορίζει τον αριθμό των σειρών που θα αφαιρεθούν από την επάνω πλευρά του καρέ Rows to remove from the Bottom Προσδιορίζει τον αριθμό των σειρών που θα αφαιρεθούν από την κάτω πλευρά του καρέ

144 130 Κεφάλαιο 4 Enlarge Frame Size Columns to add from the left side Προσδιορίζει τον αριθμό των στηλών που θα προστεθούν στην αριστερή πλευρά του καρέ Columns to add from the right side Προσδιορίζει τον αριθμό των στηλών που θα προστεθούν στην δεξιά πλευρά του καρέ Rows to add from the top Προσδιορίζει τον αριθμό των σειρών που θα προστεθούν στην επάνω πλευρά του καρέ Rows to add from the Bottom Προσδιορίζει τον αριθμό των σειρών που θα προστεθούν στην κάτω πλευρά του καρέ Added pixel value for plane 1 Προσδιορίζει την τιμή του pixel, σε hex, για το πρώτο χρωματικό επίπεδο, όταν σειρές ή στήλες προσθέτονται στο καρέ Added pixel value for plane 2 Προσδιορίζει την τιμή του pixel, σε hex, για το δεύτερο χρωματικό επίπεδο, όταν σειρές ή στήλες προσθέτονται στο καρέ Added pixel value for plane 3 Προσδιορίζει την τιμή του pixel, σε hex, για το τρίτο χρωματικό επίπεδο, όταν σειρές ή στήλες προσθέτονται στο καρέ Added pixel value for plane 4 Προσδιορίζει την τιμή του pixel, σε hex, για το τέταρτο χρωματικό επίπεδο, όταν σειρές ή στήλες προσθέτονται στο καρέ Pixel Format Color Bits Προσδιορίζει τον αριθμό bits ανά χρωματικό επίπεδο Color Planes Προσδιορίζει τον αριθμό των χρωματικών επιπέδων ανά pixel Το Video-In Decoder Core Το Video-In decoder core, μπορεί να έχει είσοδο video από τρεις πηγές: την είσοδο σύνθετου video στις DE2/DE2-70 πλακέτες, την κάμερα των 1.3 Megapixel CCD, ή από την κάμερα των 5 Megapixel CCD. Η εισερχόμενη ροή video εισέρχεται στον αποκωδικοποιητή από την επιλεγμένη πηγή. Στην συνέχεια αποκωδικοποιείται και συγχρονίζεται από το clock domain της πηγής video στο clock domain του συστήματος.τέλος, το video μετατρέπεται σε πακέτα (Altera UP video streaming packets) ώστε να μπορεί να χρησιμοποιηθεί από τα υπόλοιπα μέρη του συστήματος.

145 Τα SOPC Cores του Συστήματος 131 Σχήμα 4.22 Το block διάγραμμα του Video-In Decoder Core Κάθε εξερχόμενο πακέτο αντιστοιχεί σε ένα καρέ video. Το μέγεθος του πακέτου και ο χρωματικός χώρος που χρησιμοποιείται εξαρτάται από την πηγή του video. Η on-board πηγή video εισάγει δεδομένα είτε από μια NTSC είτε από μια PAL συσκευή στην μορφή 4:2:2 YCrCb. Οι CCD κάμερες παρέχουν δεδομένα video στην Bayer pattern μορφή. Σε τυπικές ροές επεξεργασίας video, το επόμενο core θα πρέπει να είναι είτε ο Chroma Resampler, στην περίπτωση της on-board πηγής video, ή ο Scaler,, στην περίπτωση της κάμερας CCD. Πίνακας 4.12 Συσκευές εισόδου και χρωματικοί χώροι Όταν χρησιμοποιείται ο Video-In Decoder IP core, οι χρήστες θα πρέπει επίσης να συμπεριλάβουν και τον Audio and Video Configuration IP core στο σύστημα τους για την σωστή αρχικοποίηση της συσκευής που είναι η πηγή του video. Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής :

146 132 Κεφάλαιο 4 Video-In Source Επιλέγεται η πηγή της εισερχόμενης ροής video, και κατ επέκταση την μορφή του video που εξέρχεται από το core Το Scaler Core Το Scaler IP core τροποποιεί την ανάλυση των ροών video. Ο scaler τροποποιεί την ανάλυση εισερχόμενων ροών video προσθέτοντας ή αφαιρώντας ολόκληρες σειρές και/ή στήλες από pixel.ο scaler προσθέτει pixels επαναλαμβάνοντας σειρές και/ή στήλες. Για παράδειγμα, αν ο scaler πρέπει να αυξήσει το πλάτος μιας ροής video κατά ένα παράγοντα 2, κάθε εισερχόμενο pixel θα εμφανιστεί δυο φορές στην έξοδο. Ένα άλλο παράδειγμα είναι όταν το ύψος μιας εισερχόμενης ροής πρέπει να αυξηθεί κατά ένα παράγοντα 4, ο scaler θα επαναλάβει κάθε σειρά τέσσερις φορές πριν προχωρήσει στην επόμενη. Σχήμα 4.23 Το block διάγραμμα του Video-In Decoder Core Ο scaler τροποποιεί την ανάλυση εισερχόμενων ροών video προσθέτοντας ή αφαιρώντας ολόκληρες σειρές και/ή στήλες από pixel. Για παράδειγμα, αν ο scaler πρέπει να μειώσει το πλάτος μιας ροής video κατά ένα παράγοντα 4, ένα εισερχόμενο pixel θα εμφανιστεί έξοδο ενώ τα επόμενα τρία pixel θα αφαιρεθούν. Αυτή η διαδικασία θα επαναληφθεί για όλο το καρέ. Ένα άλλο παράδειγμα είναι όταν το ύψος μιας εισερχόμενης ροής πρέπει να μειωθεί κατά ένα παράγοντα 2, ο scaler θα εμφανίσει μια σειρά στην έξοδο και θα αφαιρέσει την επόμενη. Αυτή η διαδικασία θα επαναληφθεί για όλο το καρέ. Οι χρήστες μέσα από τον SOPC Builder (Configuration Wizard) μπορούν να ρυθμίσουν κατάλληλα το core. Διαθέσιμες ρυθμίσεις είναι οι εξής :

147 Τα SOPC Cores του Συστήματος 133 Scaling Parameters Width Scaling Factor Προσδιορίζει τον παράγοντα για την μετατροπή του πλάτους της εισερχόμενης ροής. Height Scaling Factor Προσδιορίζει τον παράγοντα για την μετατροπή του ύψους της εισερχόμενης ροής. Incoming Frame Resolution Width (# of pixels) Προσδιορίζει το πλάτος της εισερχόμενης ροής. Height (# of lines) Προσδιορίζει το ύψος της εισερχόμενης ροής. Pixel Format Color Bits Προσδιορίζει τον αριθμό bits ανά χρωματικό επίπεδο Color Planes Προσδιορίζει τον αριθμό των χρωματικών επιπέδων ανά pixel

148 134 Κεφάλαιο 4

149 ΚΕΦΑΛΑΙΟ 5 Ρυθμίσεις των SOPC Cores του Συστήματος Τα cores που χρησιμοποιήθηκαν για την δημιουργία του συστήματος πρέπει να ρυθμιστούν κατάλληλα ώστε να επιτευχθεί η επιθυμητή λειτουργία του συστήματος. Οι ρυθμίσεις του κάθε core παρουσιάζονται στις επόμενες παραγράφους. 5.1 Ρυθμίσεις των IP Cores Τα IP Cores που παρέχονται από την ALTERA και εγκαθίστανται μαζί με το Quartus και βασικά στοιχεία κάθε SOPC συστήματος.

150 136 Κεφάλαιο Ρυθμίσεις του Nios II Core Το Core του Nios II (cpu) που χρησιμοποιήθηκε, όπως αναλύθηκε και στο κεφάλαιο 4 είναι το Nios II/f (standard). Για τους πολλαπλασιασμούς χρησιμοποιούνται τα embedded multipliers blocks, ενώ ο reset vector και ο exception vector τοποθετούνται στην sdram μνήμη του συστήματος. Επιπλέον, το μέγεθος της κρυφής μνήμης εντολών (Instruction Cache) επιλέγεται να είναι 4 Kbytes, ενώ το μέγεθος της κρυφής μνήμης δεδομένων (Data Cache) είναι προκαθορισμένο και ίσο με 2 Kbytes. Στις ρυθμίσεις για την μονάδα αποσφαλμάτωσης JTAG επιλέγεται το επίπεδο αποσφαλμάτωσης 1, ενώ δεν χρησιμοποιούνται/ορίζονται πρόσθετες εντολές στο πεδίο Custom Instructions. Οι παραπάνω ρυθμίσεις παρουσιάζονται στο σχήμα 5.1. Σχήμα 5.1 Ρυθμίσεις του Nios II/f Core Ρυθμίσεις του JTAG UART Core Το JTAG UART Core υλοποιεί μια μέθοδο σειριακής επικοινωνίας μεταξύ ενός υπολογιστή και του συστήματος που βρίσκεται στο FPGA. Το JTAG UART Core (jtag_uart) παραμετροποιείται όπως φαίνεται στο σχήμα 5.2.

151 Ρυθμίσεις των SOPC Cores του Συστήματος 137 Για την εγγραφή του FIFO επιλέγεται ως Buffer depth (bytes) η ρύθμιση 64 bytes και ως IRQ threshold επιλέγεται η ρύθμιση των 8 IRQ. Επίσης για την ανάγνωση του FIFO επιλέγεται ως Buffer depth (bytes) η ρύθμιση 64 bytes και ως IRQ threshold επιλέγεται η ρύθμιση των 8 IRQ. Τέλος στην επιλογή Prepare interactive window επιλέγουμε τον τρόπο INTERACTIVE_ASCII_OUTPUT. Σχήμα 5.2 Ρυθμίσεις του JTAG UART Core Ρυθμίσεις του Interval Timer Core Το Interval Timer Core (timer0) χρησιμοποιείται για την παραγωγή των απαραίτητων διακοπών. Το Interval Timer Core έχει ρυθμιστεί ως full-featured, και χρησιμοποιείται

152 138 Κεφάλαιο 5 από το σύστημα για να παράγεται μία διακοπή κάθε 1ms ώστε να αναγνωρίζεται σε ποιο σημείο της LTM ακουμπά ο χρήστης, και να εκτελείται η αντίστοιχη ρουτίνα εξυπηρέτησης της διακοπής. Οι ρυθμίσεις του Interval Timer Core παρουσιάζονται στο σχήμα 5.3. Σχήμα 5.3 Ρυθμίσεις του Interval Timer Core Ρυθμίσεις του SPI (3 Wire Serial) Core Το SPI (3 Wire Serial) Core χρησιμοποιείται για μεταφορά των δεδομένων που σχετίζονται με την οθόνη αφής και συγκεκριμένα τις συντεταγμένες του σημείου που πατά ο χρήστης κάθε φορά. Στην επιλογή Master\Slave επιλέγεται η λειτουργία του core ως Master και επιλέγεται ένα σήμα επιλογής (SS_n). Ακόμη επιλέγεται το SPI clock (SCLK) στα 32 KHz. Τέλος το εύρος του καταχωρητή δεδομένων επιλέγεται να είναι 8 bits με πρώτο το MSB (Shift direction). Οι ρυθμίσεις του SPI (3 Wire Serial) Core παρουσιάζονται στο σχήμα 5.4.

153 Ρυθμίσεις των SOPC Cores του Συστήματος 139 Σχήμα 5.4 Ρυθμίσεις του SPI (3 Wire Serial) Core Ρυθμίσεις των PIO Cores Τo PIO Core μπορεί να χρησιμοποιηθεί για την εκτέλεση διαφορετικής λειτουργίας κάθε φορά πάντα όμως για παράλληλη μεταφορά δεδομένων. Για τις ανάγκες του συστήματος, το core έχει χρησιμοποιηθεί για την σωστή αρχικοποίηση της LTM οθόνης (lcd_i2c_slc, lcd_i2c_en, lcd_i2c_sda), για την αποστολή των καταλλήλων σημάτων για την επιλογή της επιθυμητής επεξεργασίας του κάθε καρέ (pio_4), για την επιλογή του τρόπου λειτουργίας (Video ή Photo) του συστήματος (pio_mode), Video ή Photo και τέλος για να προκαλείται διακοπή κάθε φορά που ο χρήστης αγγίζει κάποιο σημείο της LTM οθόνης (adc_ltm).

154 140 Κεφάλαιο 5 Τα PIO core που έχουν χρησιμοποιηθεί για την σωστή αρχικοποίηση της LTM οθόνης (lcd_i2c_slc, lcd_i2c_en, lcd_i2c_sda) ρυθμίζουν και αρχικοποιούν μέσω του Nios την LTM οθόνη γράφοντας τις κατάλληλες τιμές στους αντίστοιχους καταχωρητές της οθόνης. Το πρώτο PIO Core (lcd_i2c_slc) έχει παραμετροποιηθεί όπως φαίνεται στο σχήμα 5.5. Το εύρος του καταχωρητή δεδομένων επιλέγεται να είναι 1 bit και η κατεύθυνση (Direction) επιλέγεται να είναι Output. Σχήμα 5.5 Ρυθμίσεις του πρώτου PIO Core (lcd_i2c_slc)

155 Ρυθμίσεις των SOPC Cores του Συστήματος 141 Το δεύτερο PIO Core (lcd_i2c_en) έχει παραμετροποιηθεί όπως φαίνεται στο σχήμα 5.6. Το εύρος του καταχωρητή δεδομένων επιλέγεται να είναι 1 bit και η κατεύθυνση (Direction) επιλέγεται να είναι Output. Σχήμα 5.6 Ρυθμίσεις του δεύτερου PIO Core (lcd_i2c_en) Το τρίτο PIO Core (lcd_i2c_sda) έχει παραμετροποιηθεί όπως φαίνεται στο σχήμα 5.7. Το εύρος του καταχωρητή δεδομένων επιλέγεται να είναι 1 bit και η κατεύθυνση (Direction) επιλέγεται να είναι Bidir.

156 142 Κεφάλαιο 5 Σχήμα 5.7 Ρυθμίσεις του τρίτου PIO Core (lcd_i2c_sda) Το τέταρτο PIO core (adc_ltm) χρησιμοποιείται για να προκαλείται διακοπή κάθε φορά που ο χρήστης αγγίζει κάποιο σημείο της LTM οθόνης. Έχει παραμετροποιηθεί όπως φαίνεται στο σχήμα 5.8. Το εύρος του καταχωρητή δεδομένων επιλέγεται να είναι 1 bit και η κατεύθυνση (Direction) επιλέγεται να είναι Input. Η επιλογή Synchronously capture καθίσταται ενεργή και ως Edge Type επιλέγεται η ένδειξη Falling. Τέλος η επιλογή Generate IRQ καθίσταται επίσης ενεργή και ως IRQ Type επιλέγεται η ένδειξη Edge.

157 Ρυθμίσεις των SOPC Cores του Συστήματος 143 Σχήμα 5.8 Ρυθμίσεις του τετάρτου PIO Core (adc_ltm) Το πέμπτο PIO Core (pio_mode) χρησιμοποιείται για την επιλογή του τρόπου λειτουργίας (Video ή Photo) του συστήματος και έχει παραμετροποιηθεί όπως φαίνεται στο σχήμα 5.9. Το εύρος του καταχωρητή δεδομένων επιλέγεται να είναι 1 bit και η κατεύθυνση (Direction) επιλέγεται να είναι Output.

158 144 Κεφάλαιο 5 Σχήμα 5.9 Ρυθμίσεις του πέμπτου PIO Core (pio_mode) Το έκτο PIO Core (pio_4) χρησιμοποιείται αποστολή των καταλλήλων σημάτων για την επιλογή της επιθυμητής επεξεργασίας του κάθε καρέ και έχει παραμετροποιηθεί όπως φαίνεται στο σχήμα Το εύρος του καταχωρητή δεδομένων επιλέγεται να είναι 4 bit και η κατεύθυνση (Direction) επιλέγεται να είναι Output.

159 Ρυθμίσεις των SOPC Cores του Συστήματος 145 Σχήμα 5.10 Ρυθμίσεις του έκτου PIO Core (pio_4) 5.2 Ρυθμίσεις των University Program IP Cores Τα University Program IP Cores είναι υποσυστήματα έτοιμα προς χρήση και υποστηρίζουν όλες τις περιφερειακές συσκευές των boards της ALTERA και απαιτούν ξεχωριστή εγκατάσταση για να είναι δυνατή η χρήση τους από τον SOPC Builder.

160 146 Κεφάλαιο Ρυθμίσεις της SDRAM Μνήμης του Συστήματος Η μνήμη του συστήματος αποτελείται από την SDRAM (sdram) μνήμη αφού η μνήμη SRAM χρησιμοποιείται ως pixel buffer. Το μέγεθος της μνήμη SDRAM, που χρησιμοποιείται και για την εκτέλεση της εφαρμογής, επιλέγεται να είναι το μέγιστο δυνατό, δηλαδή 64 MBytes. Οι υπόλοιπες ρυθμίσεις φαίνονται στο σχήμα Σχήμα 5.11 Ρυθμίσεις της SDRAM μνήμης Ρυθμίσεις του Clock Signals for DE-Series Board Peripherals Core Το Clock Signals for DE-Series Board Peripherals Core (up_avalon_clocks) παράγει τα κατάλληλα σήματα χρονισμού που είναι αναγκαία για τη λειτουργία του VGA Controller και του SDRAM Controller. Επιλέγεται ως DE-Series Board η ρύθμιση DE2-70 και στην επιλογή για το πια σήματα ρολογιού θα παραχθούν επιλέγονται τα σήματα ρολογιού για την SDRAM και για το Video(VGA and 5MP Digital Camera). Οι ρυθμίσεις του Clock Signals for DE-Series Board Peripherals Core παρουσιάζονται στο σχήμα 5.12.

161 Ρυθμίσεις των SOPC Cores του Συστήματος 147 Σχήμα 5.12 Ρυθμίσεις του Clock Signals for DE-Series Board Peripherals Core Ρυθμίσεις του Pixel Buffer DMA Controller Core Το Pixel Buffer DMA Controller Core (pixel_buffer_dma) παρέχει κάποιες επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Ως Addressing Mode επιλέγεται η ρύθμιση Consecutive, ως Default Buffer Start Address και Default Back Buffer Start Address ορίζεται η διεύθυνση της sram που λειτουργεί ως pixel buffer και έχει την τιμή 0x Στις επιλογές που καθορίζον την ανάλυση του κάθε καρέ (Frame Resolution) ορίζονται οι τιμές 640 και 480 που αντιστοιχούν στο πλάτος και το ύψος, ενώ στην επιλογή του χρωματικού χώρου (Color Space) επιλέγεται ο 24-bit RGB.

162 148 Κεφάλαιο 5 Σχήμα 5.13 Ρυθμίσεις του Pixel Buffer DMA Controller Core Ρυθμίσεις του VGA Controller Core Το VGA Controller Core (LTM) παρέχει δύο επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Επιλέγεται ως DE-Series Board η ρύθμιση DE2-70 και ως Video Out Device επιλέγεται η ρύθμιση LCD with touchscreen (TRDB_LTM). Σχήμα 5.14 Ρυθμίσεις του VGA Controller Core

163 Ρυθμίσεις των SOPC Cores του Συστήματος Ρυθμίσεις του Character Buffer Core Το Character Buffer Core (character_buffer) παρέχει κάποιες επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Ως Video Out Device επιλέγεται η ρύθμιση LCD with touchscreen (TRDB_LTM). Επίσης επιλέγεται η δυνατότητα Enable Transparency. Σχήμα 5.15 Ρυθμίσεις του Character Buffer Core Ρυθμίσεις του DMA Controller for Video Core Το DMA Controller for Video Core (video_dma_controller_d5m) παρέχει κάποιες επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Στον τρόπο λειτουργίας (DMA Direction) επιλέγεται η ρύθμιση From Stream to Memory. Ως Addressing Mode επιλέγεται η ρύθμιση Consecutive, ως Default Buffer Start Address και Default Back Buffer Start Address ορίζεται η διεύθυνση της sram που λειτουργεί ως pixel buffer και έχει την τιμή 0x Στις επιλογές που καθορίζον την ανάλυση του κάθε καρέ (Frame Resolution) ορίζονται οι τιμές 640 και 480 που αντιστοιχούν στο πλάτος και το ύψος, ενώ στις επιλογές που καθορίζουν την δομή του κάθε pixel (Pixel Format) ορίζεται η τιμή 8 στην επιλογή Color Bits και η τιμή 3 στην επιλογή Color Planes.

164 150 Κεφάλαιο 5 Σχήμα 5.16 Ρυθμίσεις του DMA Controller Core Ρυθμίσεις του Edge Detection Core Το Edge Detection Core (edge_detection) παρέχει κάποιες επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Στην επιλογή για το πλάτος του καρέ ορίζεται η τιμή 640 και στην επιλογή Edge Intensity επιλέγεται η τιμή 2 για καλύτερη απεικόνιση των ακμών στην LCD with touchscreen (TRDB_LTM).

165 Ρυθμίσεις των SOPC Cores του Συστήματος 151 Σχήμα 5.17 Ρυθμίσεις του Edge Detection Core Ρυθμίσεις του Bayer Pattern Resampler Core Το Bayer Pattern Resampler Core (bayer_resampler) παρέχει μια επιλογή παραμετροποίησης όπως φαίνεται στο σχήμα Ως Video Source επιλέγεται η ρύθμιση 5MP daughtercard (TRDB_D5M). Σχήμα 5.18 Ρυθμίσεις του Bayer Pattern Resampler Core

166 152 Κεφάλαιο Ρυθμίσεις του Dual-Clock FIFO Core Το Dual-Clock FIFO Core (dual_clock_buffer_fifo) παρέχει κάποιες επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Στις επιλογές που καθορίζουν την δομή του κάθε pixel (Pixel Format) ορίζεται η τιμή 10 στην επιλογή Color Bits και η τιμή 3 στην επιλογή Color Planes. Σχήμα 5.19 Ρυθμίσεις του Dual-Clock FIFO Core Ρυθμίσεις του RGB Resampler Core Το RGB Resampler Core (video_rgb_resampler) παρέχει κάποιες επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Ως δομή της εισερχόμενης δομής (Incoming Format) ορίζεται η δομή των 24-bit RGB και ως δομή της εξερχόμενης δομής (Outgoing Format) ορίζεται η δομή των 30-bit RGB.

167 Ρυθμίσεις των SOPC Cores του Συστήματος 153 Σχήμα 5.20 Ρυθμίσεις του RGB Resampler Core Ρυθμίσεις των Color-Space Converter Cores Στο σύστημα μας χρησιμοποιούνται δυο Color-Space Converter cores, ο πρώτος για την κατάλληλη μετατροπή (αλλαγή χρωματικού χώρου) της εισερχόμενης ροής ώστε να υποστεί επεξεργασία από τον Edge Detection core και ο δεύτερος για την μετατροπή της εξερχόμενης ροής μετά την επεξεργασία έτσι ώστε να είναι κατάλληλη για είσοδο στο επόμενο core του συστήματος. Ο πρώτος Color-Space Converter Core (video_csc_0) παραμετροποιείται όπως φαίνεται στο σχήμα Στον τρόπο λειτουργίας (Color-Space Conversion) επιλέγεται η μετατροπή 24-bit RGB to Grayscale(Y).

168 154 Κεφάλαιο 5 Σχήμα 5.21 Ρυθμίσεις του πρώτου Color-Space Converter Core Ο δεύτερος Color-Space Converter Core (video_csc_1) παραμετροποιείται όπως φαίνεται στο σχήμα Στον τρόπο λειτουργίας (Color-Space Conversion) επιλέγεται η μετατροπή Grayscale(Y) to 24-bit RGB. Σχήμα 5.22 Ρυθμίσεις του δεύτερου Color-Space Converter Core

169 Ρυθμίσεις των SOPC Cores του Συστήματος Ρυθμίσεις του Alpha Blender Core Το Alpha Blender Core (alpha_blender) παρέχει μια επιλογή παραμετροποίησης όπως φαίνεται στο σχήμα Στην επιλογή Alpha Blending Mode επιλέγεται η ένδειξη simple. Σχήμα 5.23 Ρυθμίσεις του Alpha Blender Core Ρυθμίσεις των Video-Stream Router Cores Στο σύστημα μας χρησιμοποιούνται οκτώ Video-Stream Router cores, στους τέσσερις έχει επιλεγεί ο τρόπος λειτουργίας split έτσι ώστε η εισερχόμενη ροη να δρομολογηθεί σε μια από τις εξερχόμενες ροές και στους άλλους τέσσερις έχει επιλεγεί ο τρόπος λειτουργία ς merge έτσι ώστε μια από τις δυο εισερχόμενες ροές να δρομολογηθεί στην εξερχόμενη ροή. Οι τέσσερις Video-Stream Router cores στους οποίους έχει επιλεγεί ο τρόπος λειτουργίας split (split, split_1, split_2, split_3) παραμετροποιούνται με τον ίδιο ακριβώς τρόπο, οι ρυθμίσεις φαίνονται στην εικόνα στο σχήμα Στον τρόπο λειτουργίας (Stream Router Type) επιλέγεται το split και η επιλογή Enable Synchronization Stream καθίσταται ενεργή. Επίσης στις επιλογές που καθορίζουν την δομή του κάθε pixel (Pixel Format) ορίζεται η τιμή 8 στην επιλογή Color Bits και η τιμή 3 στην επιλογή Color Planes.

170 156 Κεφάλαιο 5 Σχήμα 5.24 Ρυθμίσεις του Video-Stream Router Core (split mode) Οι τέσσερις Video-Stream Router cores στους οποίους έχει επιλεγεί ο τρόπος λειτουργίας merge (merge, merge _1, merge _2, merge _3) παραμετροποιούνται με τον ίδιο ακριβώς τρόπο, οι ρυθμίσεις φαίνονται στο σχήμα Στον τρόπο λειτουργίας (Stream Router Type) επιλέγεται το merge και η επιλογή Enable Synchronization Stream καθίσταται ενεργή. Επίσης στις επιλογές που καθορίζουν την δομή του κάθε pixel (Pixel Format) ορίζεται η τιμή 8 στην επιλογή Color Bits και η τιμή 3 στην επιλογή Color Planes. Σχήμα 5.25 Ρυθμίσεις του Video-Stream Router Core (merge mode)

171 Ρυθμίσεις των SOPC Cores του Συστήματος Ρυθμίσεις των Clipper Cores Στο σύστημα μας χρησιμοποιούνται δυο Clipper cores, ο πρώτος για την κατάλληλη μετατροπή της εισερχόμενης ροής ώστε να είναι σε μορφή συμβατή με τον VGA Controller Core (LTM) και ο δεύτερος για την μετατροπή της έτσι ώστε να είναι κατάλληλη για είσοδο στο επόμενο core κατά την μεταφορά από την D5M κάμερα στον pixel buffer του συστήματος. Ο πρώτος Clipper Core (clipper) παραμετροποιείται όπως φαίνεται στο σχήμα Στις επιλογές που καθορίζον την ανάλυση του κάθε εισερχόμενου καρέ (Incoming Frame Resolution) ορίζονται οι τιμές 640 και 480 που αντιστοιχούν στο πλάτος και το ύψος. Ακόμη στις επιλογές για μείωση του μεγέθους του καρέ (Reduce Frame Size) ορίζεται παντού η τιμή μηδέν. Στις επιλογές για αύξηση του μεγέθους του καρέ (Enlarge Frame Size) ορίζεται η τιμή 80 στις επιλογές Columns to add to the left side και Columns to add to the right side, ενώ στις υπόλοιπες επιλογές ορίζεται η τιμή μηδέν. Τέλος στις επιλογές που καθορίζουν την δομή του κάθε pixel (Pixel Format) ορίζεται η τιμή 10 στην επιλογή Color Bits και η τιμή 3 στην επιλογή Color Planes.

172 158 Κεφάλαιο 5 Σχήμα 5.26 Ρυθμίσεις του πρώτου Clipper Core Ο δεύτερος Clipper Core (clipper_d5m) παραμετροποιείται όπως φαίνεται στο σχήμα Στις επιλογές που καθορίζον την ανάλυση του κάθε εισερχόμενου καρέ (Incoming Frame Resolution) ορίζονται οι τιμές 1296 και 972 που αντιστοιχούν στο πλάτος και το ύψος. Ακόμη στις επιλογές για μείωση του μεγέθους του καρέ (Reduce Frame Size) ορίζεται η τιμή 8 στις επιλογές Columns to remove from the left side και Columns to remove from the right side, ενώ στις επιλογές Rows to remove from the top και Rows to remove from the bottom ορίζεται η τιμή 6. Στις επιλογές για αύξηση του μεγέθους του καρέ (Enlarge Frame Size) ορίζεται παντού η τιμή μηδέν. Τέλος στις επιλογές που καθορίζουν την δομή του κάθε pixel (Pixel Format) ορίζεται η τιμή 8 στην επιλογή Color Bits και η τιμή 3 στην επιλογή Color Planes.

173 Ρυθμίσεις των SOPC Cores του Συστήματος 159 Σχήμα 5.27 Ρυθμίσεις του δεύτερου Clipper Core Ρυθμίσεις του Video-In Decoder Core Το Video-In Decoder Core (D5M_Video_in) παρέχει μια επιλογή παραμετροποίησης όπως φαίνεται στο σχήμα Ως Video-In Source επιλέγεται η ρύθμιση 5MP Daughtercard (TRDB_D5M). Σχήμα 5.28 Ρυθμίσεις του Video-In Decoder Core

174 160 Κεφάλαιο Ρυθμίσεις του Scaler Core Το Scaler Core (scaler_d5m) παρέχει κάποιες επιλογές παραμετροποίησης όπως φαίνονται στο σχήμα Ως Width Scaling Factor και ως Height Scaling Factor ορίζεται η τιμή 0.5. Στις επιλογές που καθορίζον την ανάλυση του κάθε εισερχόμενου καρέ (Incoming Frame Resolution) ορίζονται οι τιμές 1280 και 960 που αντιστοιχούν στο πλάτος και το ύψος. Επίσης στις επιλογές που καθορίζουν την δομή του κάθε pixel (Pixel Format) ορίζεται η τιμή 8 στην επιλογή Color Bits και η τιμή 3 στην επιλογή Color Planes. Σχήμα 5.29 Ρυθμίσεις του Scaler Core

175 ΚΕΦΑΛΑΙΟ 6 Τα Custom Cores του συστήματος Για τις ανάγκες του συστήματος μας ήταν αναγκαία η δημιουργία τριών custom cores μέσω του SOPC Builder. Στο κεφάλαιο αυτό παρουσιάζονται αυτά τα cores, καθώς και η διαδικασία δημιουργίας τους. 6.1 Δημιουργία ενός Custom Core Για τις ανάγκες του συστήματος μας ήταν αναγκαία η δημιουργία τριών custom components, του Negative Core, του Median Filter Core και του Sharpen Convolution Core. Η δημιουργία έγινε σε δυο μέρη : συγγραφή σε κώδικα VHDL των απαραίτητων αρχείων για την υλοποίηση της σωστής λειτουργία του κάθε core

176 162 Κεφάλαιο 6 δημιουργία των κατάλληλων σημάτων για την δυνατότητα σύνδεσης του core με άλλα cores μέσω των Avalon διασυνδέσεων Για την δημιουργία των ζητούμενων cores χρησιμοποιήθηκε ο SOPC Builder που αποτελεί ένα εργαλείο του Quartus Ο SOPC Builder Ο SOPC Builder είναι ένα εργαλείο του Quartus που επιτρέπει στους χρήστες να δημιουργήσουν ένα σύστημα χρησιμοποιώντας έτοιμα υποσυστήματα (cores) ή υποσυστήματα που έχουν δημιουργήσει οι ίδιοι (custom components). Τέτοια συστήματα συνήθως αποτελούνται από έναν ή περισσότερους επεξεργαστές, διασυνδέσεις μνήμης, θύρες I/O και υλικό που έχει δημιουργηθεί από τον χρήστη. Κάθε υποσύστημα, αναφέρεται ως SOPC Builder component, περιέχει τουλάχιστον μια Avalon διασύνδεση που υποστηρίζεται από τον SOPC builder. Με καθορισμένη τώρα την διασύνδεση του υποσυστήματος, ο SOPC Builder μπορεί να δημιουργήσει τις εσωτερικές διασυνδέσεις μεταξύ των υποσυστημάτων που ονομάζονται Avalon Interconnect, επιτρέποντας στα υποσυστήματα να ανταλλάσουν δεδομένα. Ο SOPC Builder μπορεί να δημιουργήσει ένα σύστημα βασισμένο στο επιλεγμένο σύνολο των υποσυστημάτων και τις παραμέτρους που επιλέγει ο χρήστης. Το σύστημα που δημιουργείται περιέχει κώδικα σε Verilog ή VHDL για κάθε υποσύστημα που χρησιμοποιήθηκε καθώς και για τις διασυνδέσεις μεταξύ τους, επιτρέποντας έτσι την σύνθεση και την τοποθέτηση σε ένα FPGA Ένα SOPC Builder component Ένα SOPC Builder component είναι ένα hardware design block διαθέσιμο μέσω του SOPC Builder που μπορεί να χρησιμοποιηθεί σε ένα σύστημα. Ένα SOPC Builder component αποτελείται από δυο μέρη: εσωτερικές μονάδες υλικού( inside hardware modules) και διασυνδέσεις Avalon (Avalon Interfaces)

177 Τα Custom Cores του συστήματος 163 Οι εσωτερικές μονάδες υλικού είναι κυκλώματα που είναι σχεδιασμένα έτσι ώστε να υλοποιούν την ζητούμενη λειτουργία και να προκύπτει το επιθυμητό αποτέλεσμα, ενώ οι διασυνδέσεις Avalon χρησιμοποιούνται από τις εσωτερικές μονάδες για να επικοινωνούν με μονάδες εξωτερικά του τρέχοντος υποσυστήματος Δημιουργία ενός custom component Παρακάτω παρουσιάζεται αναλυτικά η διαδικασία δημιουργίας ενός component. Το component που θα δημιουργηθεί είναι το Median Filter Core. Ο κώδικας σε VHDL για το Median Filter Core παρατίθεται στο παράρτημα Β. Αρχικά ανοίγουμε τον SOPC Builder και δημιουργούμε το βασικό μας σύστημα χρησιμοποιώντας τα έτοιμα core που παρέχονται από το Quartus και την University Program Library. Για να δημιουργήσουμε ένα νέο component επιλέγουμε την ένδειξη New Σχήμα 6.1 Αρχικό παράθυρο του SOPC Builder

178 164 Κεφάλαιο 6 Όταν επιλεγεί η ένδειξη New... τo παράθυρο του Component Editor που περιλαμβάνει έξι καρτέλες θα ανοίξει. Σχήμα 6.2 Αρχικό παράθυρο του Component Editor Στην συνέχεια επιλέγουμε την καρτέλα με όνομα HDL Files και με την επιλογή της ένδειξης Add εισάγουμε τα VHDL αρχεία που περιγράφουν το υλικό του ζητούμενου component. Αν το component περιέχει πάνω από ένα αρχεία μετά την εισαγωγή των αρχείων προσδιορίζεται και το αρχείο που περιέχει την the top-level entity.

179 Τα Custom Cores του συστήματος 165 Σχήμα 6.3 Εισαγωγή HDL αρχείων στον Component Editor Μετά την εισαγωγή των αρχείων HDL, ο Component Editor τα αναλύει για να προσδιορίσει τους τύπους των διασυνδέσεων που υποστηρίζει η μονάδα υλικού που έχει εισαχθεί. Αρχικά ο Component Editor μπορεί να εμφανίσει μερικά σφάλματα είτε λόγο λαθών στον HDL κώδικα είτε λόγο του γεγονότος ότι ο Component Editor δεν αναγνώρισε σωστά τα σήματα εισόδου και εξόδου της μονάδας υλικού. Ο τύπος και οι αρχικές τιμές των σημάτων του component που θέλουμε να δημιουργήσουμε εμφανίζονται όταν επιλέγουμε την καρτέλα με το όνομα Signals.

180 166 Κεφάλαιο 6 Σχήμα 6.4 Αρχικές ρυθμίσεις για τα σήματα του component Αν ο επιλεγμένος, τύπος των διασυνδέσεων δεν είναι ο σωστός μπορούμε επιλέγοντας την καρτέλα Interfaces να εισάγουμε και να αφαιρέσουμε διασυνδέσεις όλων των υποστηριζόμενων τύπων. Η πρώτη και βασικότερη διασύνδεση που χρησιμοποιείται από το component που θέλουμε να δημιουργήσουμε είναι η Clock Input.

181 Τα Custom Cores του συστήματος 167 Σχήμα 6.5 Η διασύνδεση Clock Input Η δεύτερη διασύνδεση που χρησιμοποιείται είναι η Reset Input. Σχήμα 6.6 Η διασύνδεση Reset Input

182 168 Κεφάλαιο 6 Η τρίτη διασύνδεση που χρησιμοποιείται είναι Avalon streaming sink η οποία επιτρέπει στο component να λαμβάνει σήματα ελέγχου και δεδομένων από άλλα components. Σχήμα 6.7 Η διασύνδεση Avalon streaming sink Η τέταρτη και τελευταία διασύνδεση που χρησιμοποιείται είναι Avalon streaming source η οποία επιτρέπει στο component να στέλνει σήματα ελέγχου και δεδομένων σε άλλα components.

183 Τα Custom Cores του συστήματος 169 Σχήμα 6.8 Η διασύνδεση Avalon streaming source Μετά την ολοκλήρωση της εισαγωγής των απαιτούμενων διασυνδέσεων πρέπει να επιλεγεί ο κατάλληλος τύπος για το κάθε σήμα που ανήκει στην εκάστωτε διασύνδεση, ώστε να γίνει αντιστοίχιση των σημάτων των διασυνδέσεων με τα σήματα εισόδου και εξόδου των HDL αρχείων.

184 170 Κεφάλαιο 6 Σχήμα 6.9 Τελικές ρυθμίσεις για τα σήματα του component Το τελευταίο βήμα στην δημιουργία ενός νέου component είναι η ονομασία του και ο τρόπος που αυτό θα εμφανίζεται στον SOPC Builder. Επιτρέπει στον χρήστη να καθορίσει με ποιο όνομα και σε ποιο σημείο της λίστας των component του SOPC Builder το νέο υποσύστημα θα εμφανίζεται.

185 Τα Custom Cores του συστήματος 171 Σχήμα 6.10 Παράθυρο Library Info Όταν ένα νέο component ολοκληρωθεί εισάγεται στον SOPC Builder. Μπορεί επομένως να εισαχθεί σε ένα σύστημα όπως εισάγεται οποιοδήποτε άλλο component. Σχήμα 6.11 Εισαγωγή του νέου component σε ένα σύστημα

186 172 Κεφάλαιο Το Median Filter Core Το Median Filter core είναι ένα υποσύστημα σχεδιασμένο από τον χρήστη το οποίο χρησιμοποιείται για την αφαίρεση θορύβου από ένα video frame. Το block διάγραμμα του Median Filter core παρουσιάζεται στην παρακάτω εικόνα. Σχήμα 6.12 Το block διάγραμμα του Median Filter Core Το Median Filter (φίλτρο ενδιάμεσης τιμής) είναι ένα μη γραμμικό ψηφιακό φίλτρο που ανήκει στην κατηγορία των λεγομένων order statistic φίλτρων και είναι μια μέθοδος εξομάλυνσης και μείωσης του θορύβου. Αυτή η μέθοδος χρησιμοποιείται στα δισδιάστατα σήματα και κυρίως στην εικόνα για δυο κυρίως λόγους : Συνήθης θόρυβος στις εικόνες είναι ο θόρυβος αιχμών, τον οποίο τα φίλτρα ενδιάμεσης τιμής εξαλείφουν εντελώς. Τα φίλτρα ενδιάμεσης τιμής δεν αλλοιώνουν τις ακμές στην εικόνα, οι οποίες αποτελούν σημαντικό χαρακτηριστικό για την ανθρώπινη όραση. Οι αλγόριθμοι που χρησιμοποιούνται για τον υπολογισμό της ενδιάμεσης τιμής ονομάζονται windowing operators. Χρησιμοποιούν ένα παράθυρο από pixel και υπολογίζουν την ενδιάμεση τιμή αυτού του παραθύρου. Αναλυτικότερα οι τιμές των εικονοστοιχείων αυτής της γειτονιάς ταξινομούνται και η τιμή κάθε pixel της νέας εικόνας είναι η μεσαία (διάμεση ή ενδιάμεση) από τις τιμές των εικονοστοιχείων της γειτονιάς του

187 Τα Custom Cores του συστήματος 173 αντίστοιχου pixel της αρχικής. Το pixel γύρω από το οποίο σχηματίζεται το παράθυρο ονομάζεται origin. Ένα βασικό παράθυρο 3x3 παρουσιάζεται στο παρακάτω σχήμα. Σχήμα 6.13 Βασικό παράθυρο 3x3 Για την υλοποίηση του Median Filter σε hardware μέσω VHDL είναι απαραίτητη η δημιουργία ενός 3x3 παραθύρου το οποίο θα κινείται πάνω στο εισερχόμενο video frame και θα λαμβάνει τα αντίστοιχα εννέα pixel που στην συνέχεια θα στέλνονται για επεξεργασία. Η υλοποίηση αυτή γίνεται χρησιμοποιώντας δυο shift registers που λειτουργούν ως line buffers και εννέα καταχωρητές που τελικά θα περιέχουν τις τιμές των εννέα pixel του ζητούμενου παραθύρου. Ο τρόπος υλοποίησης παρουσιάζεται στο παρακάτω σχήμα. X10 X11 X12 X20 X21 X22 X30 X31 X32 Σχήμα 6.14 Στοιχεία παραθύρου 3x3 Σχήμα 6.15 Τρόπος υλοποίησης παραθύρου 3x3

188 174 Κεφάλαιο 6 Έπειτα τα εννέα στοιχειά του παραθύρου πρέπει να ταξινομηθούν. Για την ταξινόμηση τους χρησιμοποιείται μια σειρά από καταχωρητές και μονάδες σύγκρισης. Οι μονάδες σύγκρισης υλοποιούνται σε VHDL με την χρήση της ακόλουθης if/else επιλογής : if (x10 > x11) then h1 <= x10; l1 <= x11; else h1 <= x11; l1 <= x10; end if; Σχήμα 6.16 Μονάδα σύγκρισης Η διαδικασία ταξινόμησης έχει μια αρχική καθυστέρηση 9 κύκλων ρολογιού. Όμως επειδή το όλο σύστημα είναι διασωληνωμένο (pipelined) μετά την αρχική καθυστέρηση των 9 κύκλων ρολογιού έχουμε την εύρεση μιας έγκυρης ενδιάμεσης τιμής σε κάθε κύκλο ρολογιού. Αναλυτικό διάγραμμα της διαδικασίας ταξινόμησης παρουσιάζεται στο παρακάτω σχήμα.

189 Τα Custom Cores του συστήματος 175 Σχήμα 6.17 Διάγραμμα της διαδικασίας ταξινόμησης

190 176 Κεφάλαιο Σχολιασμός του κώδικα σε VHDL του Median Filter core avalon_median_filter.vhd library ieee; use ieee.std_logic_1164.all; Σχήμα 6.18 Avalon median filter Α Αρχικά συμπεριλαμβάνονται η βιβλιοθήκη και τα πακέτα που είναι απαραίτητο να χρησιμοποιηθούν για τη σωστή λειτουργία του compiler. Η βιβλιοθήκη ieee και το πακέτο std_logic_1164 περιέχουν τις δηλώσεις των κύριων στοιχείων ενός VHDL κώδικα. entity avalon_median_filter is port ( --- clock and reset input signals clk, reset: in std_logic ; --- avalon streaming interface input signals (sink interface) in_startofpacket, in_endofpacket, in_valid, out_ready: in std_logic; in_data: in std_logic_vector (23 downto 0) ; --- avalon streaming interface output signals (source interface) out_startofpacket, out_endofpacket: out std_logic; in_ready : buffer std_logic; out_valid: buffer std_logic; out_data : out std_logic_vector (23 downto 0)); end; Σχήμα 6.19 Avalon median filter Β Στην συνέχεια περιγράφεται το hardware module με το να ορίζονται τα σήματα εισόδου και εξόδου. Σήματα εισόδου, εκτός από τα βασικά σήματα clock και reset, αποτελούν και τα σήματα της διασύνδεσης sink της κύριας avalon streaming διασύνδεσης. Σήματα εξόδου, αποτελούν τα σήματα της διασύνδεσης source της κύριας avalon streaming διασύνδεσης.

191 Τα Custom Cores του συστήματος 177 architecture arc of avalon_median_filter is --- declare the components that are called and used in the --- architecture component median_filter is port ( clk, reset : in std_logic; data_in : in std_logic_vector (23 downto 0); data_en : in std_logic; data_out : out std_logic_vector (23 downto 0)); end component; component median_signal_shift_register is port ( aclr : in std_logic; clken : in std_logic; clock : in std_logic; shiftin : in std_logic_vector (2 downto 0); shiftout : out std_logic_vector (2 downto 0); taps : out std_logic_vector (1 downto 0)); end component; --- declare the internal signals that are used in the architecture signal transfer_data : std_logic ; signal median_filter_out, median_value : std_logic_vector (23 downto 0); signal signal_in :std_logic_vector (2 downto 0); signal signal_out :std_logic_vector (2 downto 0); signal data :std_logic_vector (23 downto 0); signal clear :std_logic ; begin Σχήμα 6.20 Avalon median filter Γ Έπειτα σηματοδοτείται η αρχή του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Σε αυτό το σημείο ορίζεται επίσης ορίζονται και τα διάφορα components που θα χρησιμοποιηθούν στην συνέχεια καθώς και τα εσωτερικά σήματα που είναι απαραίτητα για την σύνδεση των προαναφερθέντων component αλλά και την μεταφορά δεδομένων μεταξύ καταχωρητών.

192 178 Κεφάλαιο Accept incoming data process(clk) begin if rising_edge(clk) then if (reset='1') then data <= (others => '0'); else if (transfer_data='1') then data <= in_data; end if; end if; end if; end process; Σχήμα 6.21 Avalon median filter Δ Στο κυρίως μέρος της αρχιτεκτονικής ορίζεται η διαδικασία λήψης των εισερχόμενων δεδομένων. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά στο μηδέν του σήματος data. Αλλιώς αν το σήμα transfer_data είναι ένα (αποτελεί την συνθήκη ομαλής λειτουργίας του Median Filter core) το σήμα data λαμβάνει την τιμή του εισερχομένου σήματος δεδομένων in_data. --- Output control signals and data process(clk) begin if rising_edge(clk) then if (reset='1') then out_data out_startofpacket <= '0'; out_endofpacket <= '0'; out_valid <= '0'; <= (others => '0'); else if (transfer_data='1') then out_data <= median_value;

193 Τα Custom Cores του συστήματος 179 else out_startofpacket <= signal_out(1); out_endofpacket <= signal_out(2); out_valid <= signal_out(0); if (out_ready='1') then out_valid <= '0'; end if; end if; end if; end if; end process; Σχήμα 6.22 Avalon median filter Ε Ακόμη ορίζεται η διαδικασία με την οποία οδηγούνται στην έξοδο τα τελικά σήματα έλεγχου και το σήμα δεδομένων. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά όλων των σημάτων στο μηδέν. Αλλιώς αν το σήμα transfer_data είναι ένα (αποτελεί την συνθήκη ομαλής λειτουργίας του Median Filter core) το σήμα out_data λαμβάνει την τιμή που προκύπτει μετά τον υπολογισμό της ενδιάμεσης τιμής μέσω του αντίστοιχου component (η λειτουργία του θα αναλυθεί στην συνέχεια), ενώ τα σήματα ελέγχου λαμβάνουν τις τιμές της εξόδου του median_signal_shift_register.επίσης αν δεν επιτρέπεται η μεταφορά δεδομένων και το σήμα out_ready είναι ένα το σήμα out_valid λαμβάνει την τιμή μηδέν. --- clear the median_signal_shift_register process(clk) begin if rising_edge(clk) then if (reset='1') then clear <= '0'; else if ((in_valid and in_ready and in_endofpacket) ='1') then clear <= '1';

194 180 Κεφάλαιο 6 else if ((in_valid and in_ready and in_startofpacket)='1') then end if; clear <= '0'; end if; end if; end if; end process; Σχήμα 6.23 Avalon median filter ΣΤ Ακόμη ορίζεται η διαδικασία με την οποία ο median_signal_shift_register αδειάζει από δεδομένα. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά του σήματος clean στο μηδέν. Αλλιώς αν τα σήματα in_valid και in_ready και in_endofpacket είναι ένα το σήμα clean λαμβάνει την τιμή ένα. Αλλιώς αν τα σήματα in_valid και in_ready και in_startofpacket είναι ένα το σήμα clean λαμβάνει την τιμή μηδέν. Ο λόγος που είναι απαραίτητο να υπάρχει η παραπάνω διαδικασία είναι ότι αν έχει εισέρθει στον median_signal_shift_register το θετικό σήμα in_endofpacket και διακοπεί η ροη εγκύρων δεδομένων προς το core το σήμα in_endofpacket θα παγιδευτεί στον median_signal_shift_register και η λειτουργία του όλου συστήματος θα έχει σφάλματα. Αυτό γιατί άλλα core που χρησιμοποιούνται (όπως τα split και merge) απαιτούν ως είσοδο το σήμα που σηματοδοτεί το τέλος ενός πακέτου για να ρυθμίσουν την ομαλή ροη δεδομένων. Έτσι με την παραπάνω διαδικασία το σήμα που σηματοδοτεί το τέλος ενός πακέτου (άλλα και τα εναπομείναντα σήματα ελέγχου και το σήμα δεδομένων οδηγούνται στην έξοδο). in_ready <= out_ready or (not out_valid); median_value <= median_filter_out; Σχήμα 6.24 Avalon median filter Ζ Σε αυτό το σημείο ορίζεται το σήμα in_ready αλλά και το εσωτερικό σήμα median_value που παίρνει την τιμή που προκύπτει μετά τον υπολογισμό της ενδιάμεσης τιμής.

195 Τα Custom Cores του συστήματος condition for the median filter core to receive and output control --- signals and data transfer_data <= (in_valid or clear) and in_ready ; --- input control signals signal_in(2) <= in_endofpacket; signal_in(1) <= in_startofpacket; signal_in(0) <= in_valid ; Σχήμα 6.25 Avalon median filter Η Εδώ ορίζεται η συνθήκη που πρέπει να ικανοποιείται για να εξασφαλίζεται η ομαλή είσοδος και έξοδος σημάτων ελέγχου και δεδομένων από και προς το median filter core έτσι ώστε να μην υπάρχει συμφόρηση δεδομένων στην έξοδο. Επίσης ορίζεται κάθε ένα από τα bits του σήματος signal_in που αποτελεί την είσοδο του median_signal_shift_register. --- component for the calculation of the new pixel SR1: median_filter port map (clk, reset, data, transfer_data, median_filter_out); Σχήμα 6.26 Avalon median filter Θ Εδώ καλείται το component στο οποίο γίνεται ο υπολογισμός της νέας τιμής του αντίστοιχου pixel ώστε το εξερχόμενο video frame να είναι απαλλαγμένο από θόρυβο. Επίσης ορίζονται τα σήματα εισόδου και εξόδου του. --- shift register used to delay the input control signals SR2: median_signal_shift_register port map (reset, transfer_data, clk, signal_in, signal_out); end; Σχήμα 6.27 Avalon median filter Ι Ακόμη καλείται ο median_signal_shift_register ο οποίος είναι υπεύθυνος για την καθυστέρηση των σημάτων ελέγχου. Επίσης ορίζονται τα σήματα εισόδου και εξόδου του. Τέλος σηματοδοτείται το τέλος του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module.

196 182 Κεφάλαιο 6 Η αρχιτεκτονική του median_signal_shift_register περιγράφεται αναλυτικά στο αρχείο median_signal_shift_register.vhd και παρατίθεται στο παράρτημα Β. Έχει μέγεθος 653 στοιχείων και το κάθε στοιχείο είναι τριών bit. median_filter.vhd library ieee; use ieee.std_logic_1164.all; Σχήμα 6.28 Median filter Α Αρχικά συμπεριλαμβάνονται η βιβλιοθήκη και τα πακέτα που είναι απαραίτητο να χρησιμοποιηθούν για τη σωστή λειτουργία του compiler. Η βιβλιοθήκη ieee και το πακέτο std_logic_1164 περιέχουν τις δηλώσεις των κύριων στοιχείων ενός VHDL κώδικα. entity median_filter is port ( --- clock and reset input signals clk, reset : in std_logic ; --- input data signal data_in : in std_logic_vector(23 downto 0) ; --- enable input signal data_en : in std_logic ; --- output data signal data_out : out std_logic_vector(23 downto 0)); end; Σχήμα 6.29 Median filter Β Στην συνέχεια περιγράφεται το hardware module με το να ορίζονται τα σήματα εισόδου και εξόδου. Σήματα εισόδου, εκτός από τα βασικά σήματα clock και reset, αποτελούν και τo σήμα data_en καθώς και το σήμα δεδομένων data_in που αποτελεί την τιμή του εισερχόμενου pixel. Σήμα εξόδου είναι το σήμα data_out που αποτελεί την νέα τιμή του pixel.

197 Τα Custom Cores του συστήματος 183 architecture arc of median_filter is --- declare the components that are called and used in the --- architecture component median_data_shift_register is port ( aclr : in std_logic ; clken : in std_logic ; clock : in std_logic ; shiftin : in std_logic_vector(23 downto 0); shiftout : out std_logic_vector(23 downto 0); taps : out std_logic_vector(23 downto 0)); end component; component median_value is port ( clk : in std_logic; reset : in std_logic; data_en : in std_logic; x10 : in std_logic_vector(7 downto 0); x11 : in std_logic_vector(7 downto 0); x12 : in std_logic_vector(7 downto 0); x20 : in std_logic_vector(7 downto 0); x21 : in std_logic_vector(7 downto 0); x22 : in std_logic_vector(7 downto 0); x30 : in std_logic_vector(7 downto 0); x31 : in std_logic_vector(7 downto 0); x32 : in std_logic_vector(7 downto 0); median_end : out std_logic_vector(7 downto 0)); end component; --- declare the internal signals that are used in the architecture signal x10,x11,x12: std_logic_vector(23 downto 0):=(others => '0'); signal x20,x21,x22: std_logic_vector(23 downto 0):=(others => '0'); signal x30,x31,x32: std_logic_vector(23 downto 0):=(others => '0'); signal reg_0,reg_1,result: std_logic_vector(23 downto 0); signal median_end_r, median_end_g, median_end_b: std_logic_vector(7 downto 0); begin Σχήμα 6.30 Median filter Γ

198 184 Κεφάλαιο 6 Έπειτα σηματοδοτείται η αρχή του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Σε αυτό το σημείο ορίζεται επίσης ορίζονται και τα διάφορα components που θα χρησιμοποιηθούν στην συνέχεια καθώς και τα εσωτερικά σήματα που είναι απαραίτητα για την σύνδεση των προαναφερθέντων component αλλά και την μεταφορά δεδομένων μεταξύ καταχωρητών. --- receive input data, transfer data between registers, output new --- pixel process(clk) begin if rising_edge(clk) then if (reset ='1') then x12 <= (others => '0'); x22 <= (others => '0'); x32 <= (others => '0'); x11 <= (others => '0'); x21 <= (others => '0'); x31 <= (others => '0'); x10 <= (others => '0'); x20 <= (others => '0'); x30 <= (others => '0'); result <= (others => '0'); else if (data_en= '1') then x10 <= x11; x20 <= x21; x30 <= x31; x11 <= x12; x21 <= x22; x31 <= x32; x32 <= data_in; x22 <= reg_0;

199 Τα Custom Cores του συστήματος 185 x12 <= reg_1; result(23 downto 16) <= median_end_r ; result(15 downto 8) <= median_end_g ; result( 7 downto 0) <= median_end_b ; end if; end if; end if; end process; Σχήμα 6.31 Median filter Δ Στο κυρίως μέρος της αρχιτεκτονικής ορίζεται η διαδικασία για την λήψη των τιμών των εννέα pixel που αντιστοιχούν στο 3x3 παράθυρο. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά όλων των καταχωρητών στο μηδέν. Αλλιώς αν το σήμα data_en είναι ένα γίνεται μεταφορά των δεδομένων εισόδου, των εξόδων των δυο shift registers αλλά και των περιεχομένων των καταχωρητών έτσι ώστε να σχηματιστεί το 3x3 παράθυρο. Τέλος η νέα τιμή του αντίστοιχου pixel αποθηκεύεται προσωρινά στο σήμα result. data_out <= result; Σχήμα 6.32 Median filter Ε Σε αυτό το σημείο ορίζεται το σήμα εξόδου data_out παίρνει την νέα τιμή του αντίστοιχου pixel. --- component for the calculation of the median value of the r color --- plane R: median_value port map ( clk, reset, data_en, x10(23 downto 16),x11(23 downto 16),x12(23 downto 16), x20(23 downto 16),x21(23 downto 16),x22(23 downto 16), x30(23 downto 16),x31(23 downto 16),x32(23 downto 16), median_end_r); --- component for the calculation of the median value of the g color --- plane G: median_value port map ( clk, reset, data_en, x10(15 downto 8),x11(15 downto 8),x12(15 downto 8), x20(15 downto 8),x21(15 downto 8),x22(15 downto 8), x30(15 downto 8),x31(15 downto 8),x32(15 downto 8),

200 186 Κεφάλαιο 6 median_end_g); --- component for the calculation of the median value of the b color --- plane B: median_value port map ( clk, reset, data_en, x10(7 downto 0),x11(7 downto 0),x12(7 downto 0), x20(7 downto 0),x21(7 downto 0),x22(7 downto 0), x30(7 downto 0),x31(7 downto 0),x32(7 downto 0), median_end_b); Σχήμα 6.33 Median filter ΣΤ Εδώ καλείται τρεις φορές το component στο οποίο γίνεται η εύρεση της ενδιάμεσης τιμής των εννέα τιμών εισόδου. Στο πρώτο component που ονομάζεται R γίνεται η εύρεση της ενδιάμεσης τιμής στοιχείων της r χρωματικής συνιστώσας των στοιχείων του παραθύρου (την r συνιστώσα αποτελούν τα bit από το 23 έως και το 16 των αντιστοίχων pixel). Στο δεύτερο component που ονομάζεται G γίνεται η εύρεση της ενδιάμεσης τιμής στοιχείων της g χρωματικής συνιστώσας των στοιχείων του παραθύρου (την g συνιστώσα αποτελούν τα bit από το 15 έως και το 8 των αντιστοίχων pixel). Στο τρίτο component που ονομάζεται B γίνεται η εύρεση της ενδιάμεσης τιμής στοιχείων της b χρωματικής συνιστώσας των στοιχείων του παραθύρου (την b συνιστώσα αποτελούν τα bit από το 7 έως και το 0 των αντιστοίχων pixel). Επίσης ορίζονται τα σήματα εισόδου και εξόδου του κάθε ένα από τα τρία components. --- shift registers used as line buffers S1: median_data_shift_register port map (reset,data_en,clk,data_in,reg_0); S2: median_data_shift_register port map (reset,data_en,clk,reg_0,reg_1); end; Σχήμα 6.34 Median filter Ζ Ακόμη καλούνται δυο median_data_shift_register οι οποίοι λειτουργούν ως line buffers έτσι ώστε να είναι δυνατή η δημιουργία του 3x3 παραθύρου. Επίσης ορίζονται τα σήματα εισόδου και εξόδου τους. Τέλος σηματοδοτείται το τέλος του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module.

201 Τα Custom Cores του συστήματος 187 Η αρχιτεκτονική των median_data_shift_register περιγράφεται αναλυτικά στο αρχείο median_data_shift_register.vhd και παρατίθεται στο παράρτημα Β. Έχουν μέγεθος 640 στοιχείων και το κάθε στοιχείο είναι εικοσιτεσσάρων bit. median_value.vhd library ieee; use ieee.std_logic_1164.all; Σχήμα 6.35 Median value Α Αρχικά συμπεριλαμβάνονται η βιβλιοθήκη και τα πακέτα που είναι απαραίτητο να χρησιμοποιηθούν για τη σωστή λειτουργία του compiler. Η βιβλιοθήκη ieee και το πακέτο std_logic_1164 περιέχουν τις δηλώσεις των κύριων στοιχείων ενός VHDL κώδικα. entity median_value is port ( --- clock and reset input signals clk : in std_logic; reset : in std_logic; --- enable input signal data_en : in std_logic; --- input color plane values from the 3x3 window pixels x10 : in std_logic_vector(7 downto 0); x11 : in std_logic_vector(7 downto 0); x12 : in std_logic_vector(7 downto 0); x20 : in std_logic_vector(7 downto 0); x21 : in std_logic_vector(7 downto 0); x22 : in std_logic_vector(7 downto 0); x30 : in std_logic_vector(7 downto 0); x31 : in std_logic_vector(7 downto 0); x32 : in std_logic_vector(7 downto 0);

202 188 Κεφάλαιο output median value median_end : out std_logic_vector(7 downto 0)); end; Σχήμα 6.36 Median value Β Στην συνέχεια περιγράφεται το hardware module με το να ορίζονται τα σήματα εισόδου και εξόδου. Σήματα εισόδου, εκτός από τα βασικά σήματα clock και reset, αποτελούν και τo σήμα data_en καθώς και οι τιμές μιας χρωματικής συνιστώσας των pixel του 3x3 παράθυρου. Σήμα εξόδου είναι το σήμα median_end που αποτελεί την ενδιάμεση τιμή των εννέα εισερχομένων τιμών. architecture arc of median_value is --- declare the internal signals that are used in the architecture signal h1,l1,h2,l2,h3,l3:std_logic_vector(7 downto 0); signal h21,l21,h22,l22,h23,l23:std_logic_vector(7 downto 0); signal h31,l31,h32,l32,h33,l33:std_logic_vector(7 downto 0); signal l41,h42,l42,h43:std_logic_vector(7 downto 0); signal l51,h52,h53:std_logic_vector(7 downto 0); signal l6,h7,l7,h8:std_logic_vector(7 downto 0); --- delay registers signal dx12, dx22,dx32:std_logic_vector(7 downto 0); signal dh1,dh2,dh3:std_logic_vector(7 downto 0); signal dl23,dl22:std_logic_vector(7 downto 0); signal dh33,dl33,ddl21,dl21:std_logic_vector(7 downto 0); signal dh42:std_logic_vector(7 downto 0); signal dl51:std_logic_vector(7 downto 0); signal ddh53,dh53:std_logic_vector(7 downto 0); signal dh7:std_logic_vector(7 downto 0); begin Σχήμα 6.37 Median value Γ Έπειτα σηματοδοτείται η αρχή του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Σε αυτό το σημείο ορίζεται επίσης ορίζονται και τα

203 Τα Custom Cores του συστήματος 189 εσωτερικά σήματα που είναι απαραίτητα για την μεταφορά δεδομένων μεταξύ των καταχωρητών. --- calculate the median value process(clk) begin if rising_edge(clk) then if (reset ='1') then h1 <= (others=>'0'); l1 <= (others=>'0'); dh7 <=(others=>'0'); median_end <= (others=>'0'); else if (data_en= '1') then --line 1 if (x10>x11) then h1 <= x10; l1 <= x11; else h1 <= x11; l1 <= x10; end if;

204 190 Κεφάλαιο 6 --line 9 if (dh7>h8) then median_end <= h8; else median_end <= dh7; end if; end if; end if; end if; end process; end; Σχήμα 6.38 Median value Δ Στο κυρίως μέρος της αρχιτεκτονικής ορίζεται η διαδικασία για την εύρεση της ενδιάμεσης τιμής. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά όλων των καταχωρητών στο μηδέν. Αλλιώς αν το σήμα data_en είναι ένα οι τιμές της χρωματικής συνιστώσας των pixel του 3x3 παράθυρου εισέρχονται σε ένα σύστημα καταχωρητών και μονάδων σύγκρισης ώστε να βρεθεί η ενδιάμεση τιμή η οποία στη συνέχεια οδηγείται στην έξοδο. Επίσης σηματοδοτείται το τέλος του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Για συντομία δεν παρατίθενται εδώ το σύνολο των γραμμών του median_value.vhd αρχείου. Αναλυτικά το σύνολο των γραμμών του αρχείου median_value.vhd παρατίθεται στο παράρτημα Β Σύγκριση των αποτελεσμάτων του Median filter core με το Matlab

205 Τα Custom Cores του συστήματος 191 Για την επιβεβαίωση της σωστής λειτουργίας του Median filter core αναπτύχτηκε σε Matlab κώδικας ο οποίος εκτελεί την ίδια λειτουργιά με το Median filter core, δηλαδή την αφαίρεση θορύβου από ένα video frame. Αρχικά αναπτύχτηκε σε Matlab κώδικας για την προσθήκη θορύβου salt and pepper σε μια εικόνα έτσι ώστε να έχουμε μια εικόνα αναφοράς στην οποία στη συνέχεια θα εφαρμοστεί ένα φίλτρο ενδιάμεσης τιμής 3x3. % Read an image. I = imread('dogs.bmp'); %Add salt and pepper noise to the original image J = imnoise(i,'salt & pepper', 0.02); % Display the original color image. imshow(i) % Display the image with the salt and pepper noise. figure,imshow(j) % Save the image with the salt and pepper noise. imwrite(j,'salt.bmp') Σχήμα 6.39 Προσθήκη θορύβου salt and pepper Η εικόνα που πρόεκυψε μετά την προσθήκη θορύβου salt and pepper αλλά και η αρχική εικόνα παρουσιάζονται παρακάτω:

206 192 Κεφάλαιο 6 Σχήμα 6.40 Αρχική εικόνα Σχήμα 6.41 Εικόνα μετά την προσθήκη salt and pepper noise

207 Τα Custom Cores του συστήματος 193 Έπειτα αναπτύχτηκε σε Matlab κώδικας για την αφαίρεση θορύβου με τη χρήση median filter από ένα video frame. % Read an image. I = imread('salt.bmp'); % Extract the individual red, green, and blue color channels. redchannel = I(:, :, 1); greenchannel = I(:, :, 2); bluechannel = I(:, :, 3); % Perform median filtering the individual channels. redmf = medfilt2(redchannel, [3 3]); greenmf = medfilt2(greenchannel, [3 3]); bluemf = medfilt2(bluechannel, [3 3]); % Reconstruct the noise free RGB image. J(:, :, 1)= redmf; J(:, :, 2)= greenmf; J(:, :, 3)= bluemf; % Display the original color image. imshow(i) % Display noise free image. figure,imshow(j) Σχήμα 6.42 Μedian filtering Έπειτα έγινε σύγκριση των αποτελεσμάτων του Median filter core και του κώδικα σε Matlab. Οι εικόνες που πρόεκυψαν από τους δυο αυτούς τρόπους επεξεργασίας αλλά και η αρχική εικόνα παρουσιάζονται παρακάτω:

208 194 Κεφάλαιο 6 Σχήμα 6.43 Αρχική εικόνα Σχήμα 6.44 Εικόνα που πρόεκυψε μετά από επεξεργασία με το Median filter core

209 Τα Custom Cores του συστήματος 195 Σχήμα 6.45 Εικόνα που πρόεκυψε μετά από επεξεργασία με το Matlab Τα αποτελέσματα από την επεξεργασία της αρχικής εικόνας από το Median filter core και από τον κώδικα σε Matlab ταυτίζονται, όπως μπορεί κανείς να δει από τις παραπάνω εικόνες. Αυτό επιβεβαιώνει την σωστή λειτουργία του Median filter core αφού μετά την έξοδο ενός video frame από τον Median filter core έχουμε τα επιθυμητά αποτελέσματα.

210 196 Κεφάλαιο Το Sharpen Convolution Core Το Sharpen Convolution Core είναι ένα υποσύστημα σχεδιασμένο από τον χρήστη το οποίο χρησιμοποιείται για τον τονισμό των ακμών που υπάρχουν σε ένα video frame. Το block διάγραμμα του Sharpen Convolution Core παρουσιάζεται στην παρακάτω εικόνα. Σχήμα 6.46 Το block διάγραμμα του Sharpen Convolution Core Για την δημιουργία του Sharpen Convolution Filter χρησιμοποιείται η διαδικασία της συνέλιξης. Η συνέλιξη είναι μια διαδικασία που παρέχει αποτελέσματα φιλτραρίσματος γενικού σκοπού σε εικόνες. Η συνέλιξη πραγματοποιείται μεταξύ ενός πίνακας συντελεστών (kernel) και ενός παραθύρου που αποτελείται από τιμές των pixel της εικόνας. Αρχικά κάθε τιμή του παραθύρου πολλαπλασιάζεται με τον αντίστοιχο συντελεστή του kernel και όλα τα γινόμενα προσθέτονται μαζί. Τέλος για να παραμείνει η φωτεινότητα της νέας εικόνας ίδια με την αρχική γίνεται κανονικοποίηση του αθροίσματος. Το άθροισμα δηλαδή διαιρείται με το άθροισμα των συντελεστών του convolution kernel. Η μέθοδος της συνέλιξης μπορεί να χρησιμοποιηθεί για blurring, sharpening, embossing, edge-detection και πολλά ακόμη είδη επεξεργασίας εικόνων. Οι αλγόριθμοι που χρησιμοποιούνται για την συνέλιξη ενός video frame με ένα convolution kernel χρησιμοποιούν ένα παράθυρο από pixel. Το pixel γύρω από το οποίο σχηματίζεται το παράθυρο ονομάζεται origin. Ένα βασικό παράθυρο 3x3 παρουσιάζεται στο παρακάτω σχήμα.

211 Τα Custom Cores του συστήματος 197 Σχήμα 6.47 Βασικό παράθυρο 3x3 Για την υλοποίηση του Sharpen Convolution Filter σε hardware μέσω VHDL είναι απαραίτητη η δημιουργία ενός 3x3 παραθύρου το οποίο θα κινείται πάνω στο εισερχόμενο video frame και θα λαμβάνει τα αντίστοιχα εννέα pixel που στην συνέχεια θα στέλνονται για επεξεργασία. Η υλοποίηση αυτή γίνεται χρησιμοποιώντας δυο shift registers που λειτουργούν ως line buffers και εννέα καταχωρητές που τελικά θα περιέχουν τις τιμές των εννέα pixel του ζητούμενου παραθύρου. Ο τρόπος υλοποίησης παρουσιάζεται στο παρακάτω σχήμα. X10 X11 X12 X20 X21 X22 X30 X31 X32 Σχήμα 6.48 Στοιχεία παραθύρου 3x3 Σχήμα 6.49 Τρόπος υλοποίησης παραθύρου 3x3 Έπειτα γίνεται συνέλιξη του παραθύρου με το convolution kernel. Για το Sharpen Convolution Filter το kernel που επιλέχτηκε για να γίνει ο τονισμός των ακμών του video frame παρουσιάζεται στο παρακάτω σχήμα.

212 198 Κεφάλαιο Σχήμα 6.50 Το Convolution Kernel Η διαδικασία συνέλιξης έχει μια αρχική καθυστέρηση 4 κύκλων ρολογιού. Όμως επειδή το όλο σύστημα είναι διασωληνωμένο (pipelined) μετά την αρχική καθυστέρηση των 4 κύκλων ρολογιού έχουμε την εύρεση ενός έγκυρου pixel σε κάθε κύκλο ρολογιού. Η συνέλιξη πραγματοποιείται με μια σειρά από adders, comparators και ένα shift register. Αναλυτικό διάγραμμα της διαδικασίας συνέλιξης παρουσιάζεται στο παρακάτω σχήμα. Σχήμα 6.51 Διάγραμμα της διαδικασίας συνέλιξης

213 Τα Custom Cores του συστήματος Σχολιασμός του κώδικα σε VHDL του Sharpen Convolution Core avalon_sharpen_convolution_filter.vhd library ieee; use ieee.std_logic_1164.all; Σχήμα 6.52 Avalon sharpen convolution filter Α Αρχικά συμπεριλαμβάνονται η βιβλιοθήκη και τα πακέτα που είναι απαραίτητο να χρησιμοποιηθούν για τη σωστή λειτουργία του compiler. Η βιβλιοθήκη ieee και το πακέτο std_logic_1164 περιέχουν τις δηλώσεις των κύριων στοιχείων ενός VHDL κώδικα. entity avalon_sharpen_convolution_filter is port ( --- clock and reset input signals clk, reset: in std_logic ; --- avalon streaming interface input signals (sink interface) in_startofpacket, in_endofpacket, in_valid, out_ready: in std_logic; in_data: in std_logic_vector (23 downto 0) ; --- avalon streaming interface output signals (source interface) out_startofpacket, out_endofpacket: out std_logic; in_ready : buffer std_logic; out_valid: buffer std_logic; out_data : out std_logic_vector (23 downto 0)); end; Σχήμα 6.53 Avalon sharpen convolution filter Β Στην συνέχεια περιγράφεται το hardware module με το να ορίζονται τα σήματα εισόδου και εξόδου. Σήματα εισόδου, εκτός από τα βασικά σήματα clock και reset, αποτελούν και τα σήματα της διασύνδεσης sink της κύριας avalon streaming διασύνδεσης. Σήματα εξόδου, αποτελούν τα σήματα της διασύνδεσης source της κύριας avalon streaming διασύνδεσης.

214 200 Κεφάλαιο 6 architecture arc of avalon_sharpen_convolution_filter is --- declare the components that are called and used in the --- architecture component sharpen_convolution_filter is port ( clk, reset : in std_logic; data_in : in std_logic_vector (23 downto 0); data_en : in std_logic; data_out : out std_logic_vector (23 downto 0)); end component; component sharpen_convolution_signal_shift_register is port ( aclr : in std_logic; clken : in std_logic; clock : in std_logic; shiftin : in std_logic_vector (2 downto 0); shiftout : out std_logic_vector (2 downto 0); taps : out std_logic_vector (1 downto 0)); end component; --- declare the internal signals that are used in the architecture signal transfer_data : std_logic ; signal sharpen_convolution_filter_out,sharpen_convolution_value: std_logic_vector (23 downto 0); signal signal_in :std_logic_vector (2 downto 0); signal signal_out :std_logic_vector (2 downto 0); signal data :std_logic_vector (23 downto 0); signal clear :std_logic ; begin Σχήμα 6.54 Avalon sharpen convolution filter Γ Έπειτα σηματοδοτείται η αρχή του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Σε αυτό το σημείο ορίζεται επίσης ορίζονται και τα διάφορα components που θα χρησιμοποιηθούν στην συνέχεια καθώς και τα εσωτερικά σήματα που είναι απαραίτητα για την σύνδεση των προαναφερθέντων component αλλά και την μεταφορά δεδομένων μεταξύ καταχωρητών.

215 Τα Custom Cores του συστήματος Accept incoming data process(clk) begin if rising_edge(clk) then if (reset='1') then data <= (others => '0'); else if (transfer_data='1') then data <= in_data; end if; end if; end if; end process; Σχήμα 6.55 Avalon sharpen convolution filter Δ Στο κυρίως μέρος της αρχιτεκτονικής ορίζεται η διαδικασία λήψης των εισερχόμενων δεδομένων. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά στο μηδέν του σήματος data. Αλλιώς αν το σήμα transfer_data είναι ένα (αποτελεί την συνθήκη ομαλής λειτουργίας του Sharpen Convolution Filter core) το σήμα data λαμβάνει την τιμή του εισερχομένου σήματος δεδομένων in_data. --- Output control signals and data process(clk) begin if rising_edge(clk) then if (reset='1') then out_data <= (others => '0'); out_startofpacket <= '0'; out_endofpacket <= '0'; out_valid <= '0'; else if (transfer_data='1') then

216 202 Κεφάλαιο 6 out_data <= sharpen_convolution_value; out_startofpacket <= signal_out(1); out_endofpacket <= signal_out(2); out_valid <= signal_out(0); else if (out_ready='1') then out_valid <= '0'; end if; end if; end if; end if; end process; Σχήμα 6.56 Avalon sharpen convolution filter Ε Ακόμη ορίζεται η διαδικασία με την οποία οδηγούνται στην έξοδο τα τελικά σήματα έλεγχου και το σήμα δεδομένων. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά όλων των σημάτων στο μηδέν. Αλλιώς αν το σήμα transfer_data είναι ένα (αποτελεί την συνθήκη ομαλής λειτουργίας του Sharpen Convolution Filter core) το σήμα out_data λαμβάνει την τιμή που προκύπτει μετά τον υπολογισμό της νέας τιμής του pixel (με τονισμένες τις ακμές) μέσω του αντίστοιχου component (η λειτουργία του θα αναλυθεί στην συνέχεια), ενώ τα σήματα ελέγχου λαμβάνουν τις τιμές της εξόδου του sharpen_convolution_signal_shift_register.επίσης αν δεν επιτρέπεται η μεταφορά δεδομένων και το σήμα out_ready είναι ένα το σήμα out_valid λαμβάνει την τιμή μηδέν. --- clear the sharpen_convolution_signal_shift_register process(clk) begin if rising_edge(clk) then if (reset='1') then clear <= '0'; else if ((in_valid and in_ready and in_endofpacket) ='1') then

217 Τα Custom Cores του συστήματος 203 clear <= '1'; else if ((in_valid and in_ready and in_startofpacket)='1') then clear <= '0'; end if; end if; end if; end if; end process; Σχήμα 6.57 Avalon sharpen convolution filter ΣΤ Ακόμη ορίζεται η διαδικασία με την οποία ο sharpen_convolution_signal_shift_register αδειάζει από δεδομένα. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά του σήματος clean στο μηδέν. Αλλιώς αν τα σήματα in_valid και in_ready και in_endofpacket είναι ένα το σήμα clean λαμβάνει την τιμή ένα. Αλλιώς αν τα σήματα in_valid και in_ready και in_startofpacket είναι ένα το σήμα clean λαμβάνει την τιμή μηδέν. Ο λόγος που είναι απαραίτητο να υπάρχει η παραπάνω διαδικασία είναι ότι αν έχει εισέρθει στον sharpen_convolution_signal_shift_register το θετικό σήμα in_endofpacket και διακοπεί η ροη εγκύρων δεδομένων προς το core το σήμα in_endofpacket θα παγιδευτεί στον sharpen_convolution_signal_shift_register και η λειτουργία του όλου συστήματος θα έχει σφάλματα. Αυτό γιατί άλλα core που χρησιμοποιούνται (όπως τα split και merge) απαιτούν ως είσοδο το σήμα που σηματοδοτεί το τέλος ενός πακέτου για να ρυθμίσουν την ομαλή ροη δεδομένων. Έτσι με την παραπάνω διαδικασία το σήμα που σηματοδοτεί το τέλος ενός πακέτου (άλλα και τα εναπομείναντα σήματα ελέγχου και το σήμα δεδομένων οδηγούνται στην έξοδο). in_ready <= out_ready or (not out_valid); sharpen_convolution_value <= sharpen_convolution_filter_out; Σχήμα 6.58 Avalon sharpen convolution filter Ζ Σε αυτό το σημείο ορίζεται το σήμα in_ready αλλά και το εσωτερικό σήμα sharpen_convolution_value που παίρνει την τιμή που προκύπτει μετά τον τονισμό των ακμών.

218 204 Κεφάλαιο condition for the sharpen convolution filter core to receive and --- output control signals and data transfer_data <= (in_valid or clear) and in_ready ; --- input control signals signal_in(2) <= in_endofpacket; signal_in(1) <= in_startofpacket; signal_in(0) <= in_valid ; Σχήμα 6.59 Avalon sharpen convolution filter Η Εδώ ορίζεται η συνθήκη που πρέπει να ικανοποιείται για να εξασφαλίζεται η ομαλή είσοδος και έξοδος σημάτων ελέγχου και δεδομένων από και προς το sharpen convolution filter core έτσι ώστε να μην υπάρχει συμφόρηση δεδομένων στην έξοδο. Επίσης ορίζεται κάθε ένα από τα bits του σήματος signal_in που αποτελεί την είσοδο του sharpen_convolution_signal_shift_register. --- component for the calculation of the new pixel SR1: sharpen_convolution_filter port map (clk, reset, data, transfer_data, sharpen_convolution_filter_out); Σχήμα 6.60 Avalon sharpen convolution filter Θ Εδώ καλείται το component στο οποίο γίνεται ο υπολογισμός της νέας τιμής του αντίστοιχου pixel ώστε το εξερχόμενο video frame να έχει τονισμένες τις ακμές που υπάρχουν σε αυτό. Επίσης ορίζονται τα σήματα εισόδου και εξόδου του. --- shift register used to delay the input control signals SR2: sharpen_convolution_signal_shift_register port map (reset, transfer_data, clk, signal_in, signal_out); end; Σχήμα 6.61 Avalon sharpen convolution filter Ι Ακόμη καλείται ο sharpen_convolution _signal_shift_register ο οποίος είναι υπεύθυνος για την καθυστέρηση των σημάτων ελέγχου. Επίσης ορίζονται τα σήματα εισόδου και εξόδου

219 Τα Custom Cores του συστήματος 205 του. Τέλος σηματοδοτείται το τέλος του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Η αρχιτεκτονική του sharpen_convolution_signal_shift_register περιγράφεται αναλυτικά στο αρχείο sharpen_convolution_signal_shift_register.vhd και παρατίθεται στο παράρτημα Β. Έχει μέγεθος 648 στοιχείων και το κάθε στοιχείο είναι τριών bit. sharpen_convolution_filter.vhd library ieee; use ieee.std_logic_1164.all; Σχήμα 6.62 Sharpen convolution filter Α Αρχικά συμπεριλαμβάνονται η βιβλιοθήκη και τα πακέτα που είναι απαραίτητο να χρησιμοποιηθούν για τη σωστή λειτουργία του compiler. Η βιβλιοθήκη ieee και το πακέτο std_logic_1164 περιέχουν τις δηλώσεις των κύριων στοιχείων ενός VHDL κώδικα. entity sharpen_convolution_filter is port ( --- clock and reset input signals clk, reset : in std_logic ; --- input data signal data_in : in std_logic_vector(23 downto 0) ; --- enable input signal data_en : in std_logic ; --- output data signal data_out : out std_logic_vector(23 downto 0)); end; Σχήμα 6.63 Sharpen convolution filter Β Στην συνέχεια περιγράφεται το hardware module με το να ορίζονται τα σήματα εισόδου και εξόδου. Σήματα εισόδου, εκτός από τα βασικά σήματα clock και reset, αποτελούν και τo

220 206 Κεφάλαιο 6 σήμα data_en καθώς και το σήμα δεδομένων data_in που αποτελεί την τιμή του εισερχόμενου pixel. Σήμα εξόδου είναι το σήμα data_out που αποτελεί την νέα τιμή του pixel. architecture arc of sharpen_convolution_filter is --- declare the components that are called and used in the --- architecture component sharpen_convolution_data_shift_register is port ( aclr : in std_logic ; clken : in std_logic ; clock : in std_logic ; shiftin : in std_logic_vector(23 downto 0); shiftout : out std_logic_vector(23 downto 0); taps : out std_logic_vector(23 downto 0)); end component; component sharpen_convolution_value is port ( clk : in std_logic; reset : in std_logic; data_en : in std_logic; x10 : in std_logic_vector(7 downto 0); x11 : in std_logic_vector(7 downto 0); x12 : in std_logic_vector(7 downto 0); x20 : in std_logic_vector(7 downto 0); x21 : in std_logic_vector(7 downto 0); x22 : in std_logic_vector(7 downto 0); x30 : in std_logic_vector(7 downto 0); x31 : in std_logic_vector(7 downto 0); x32 : in std_logic_vector(7 downto 0); sharpen_convolution_end : out std_logic_vector(7 downto 0)); end component; --- declare the internal signals that are used in the architecture signal x10,x11,x12: std_logic_vector(23 downto 0):=(others => '0'); signal x20,x21,x22: std_logic_vector(23 downto 0):=(others => '0'); signal x30,x31,x32: std_logic_vector(23 downto 0):=(others => '0'); signal reg_0,reg_1,result: std_logic_vector(23 downto 0);

221 Τα Custom Cores του συστήματος 207 signal sharpen_convolution_end_r, sharpen_convolution_end_g, sharpen_convolution_end_b: std_logic_vector(7 downto 0); begin Σχήμα 6.64 Sharpen convolution filter Γ Έπειτα σηματοδοτείται η αρχή του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Σε αυτό το σημείο ορίζεται επίσης ορίζονται και τα διάφορα components που θα χρησιμοποιηθούν στην συνέχεια καθώς και τα εσωτερικά σήματα που είναι απαραίτητα για την σύνδεση των προαναφερθέντων component αλλά και την μεταφορά δεδομένων μεταξύ καταχωρητών. --- receive input data, transfer data between registers, output new --- pixel process(clk) begin if rising_edge(clk) then if (reset ='1') then x12 <= (others => '0'); x22 <= (others => '0'); x32 <= (others => '0'); x11 <= (others => '0'); x21 <= (others => '0'); x31 <= (others => '0'); x10 <= (others => '0'); x20 <= (others => '0'); x30 <= (others => '0'); result <= (others => '0'); else if (data_en= '1') then x10 <= x11; x20 <= x21;

222 208 Κεφάλαιο 6 x30 <= x31; x11 <= x12; x21 <= x22; x31 <= x32; x32 <= data_in; x22 <= reg_0; x12 <= reg_1; result(23 downto 16) <= sharpen_convolution_end_r ; result(15 downto 8) <= sharpen_convolution_end_g ; result( 7 downto 0) <= sharpen_convolution_end_b ; end if; end if; end if; end process; Σχήμα 6.65 Sharpen convolution filter Δ Στο κυρίως μέρος της αρχιτεκτονικής ορίζεται η διαδικασία για την λήψη των τιμών των εννέα pixel που αντιστοιχούν στο 3x3 παράθυρο. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά όλων των καταχωρητών στο μηδέν. Αλλιώς αν το σήμα data_en είναι ένα γίνεται μεταφορά των δεδομένων εισόδου, των εξόδων των δυο shift registers αλλά και των περιεχομένων των καταχωρητών έτσι ώστε να σχηματιστεί το 3x3 παράθυρο. Τέλος η νέα τιμή του αντίστοιχου pixel αποθηκεύεται προσωρινά στο σήμα result. data_out <= result; Σχήμα 6.66 Sharpen convolution filter Ε Σε αυτό το σημείο ορίζεται το σήμα εξόδου data_out παίρνει την νέα τιμή του αντίστοιχου pixel. --- component for the calculation of the sharpen convolution value of --- the r color plane R: sharpen_convolution_value port map ( clk, reset, data_en, x10(23 downto 16),x11(23 downto 16),x12(23 downto 16),

223 Τα Custom Cores του συστήματος 209 x20(23 downto 16),x21(23 downto 16),x22(23 downto 16), x30(23 downto 16),x31(23 downto 16),x32(23 downto 16), sharpen_convolution_end_r); --- component for the calculation of the sharpen convolution value of --- the g color plane G: sharpen_convolution_value port map ( clk, reset, data_en, x10(15 downto 8),x11(15 downto 8),x12(15 downto 8), x20(15 downto 8),x21(15 downto 8),x22(15 downto 8), x30(15 downto 8),x31(15 downto 8),x32(15 downto 8), sharpen_convolution_end_g); --- component for the calculation of the sharpen convolution value of --- the b color plane B: sharpen_convolution_value port map ( clk, reset, data_en, x10(7 downto 0),x11(7 downto 0),x12(7 downto 0), x20(7 downto 0),x21(7 downto 0),x22(7 downto 0), x30(7 downto 0),x31(7 downto 0),x32(7 downto 0), sharpen_convolution _end_b); Σχήμα 6.67 Sharpen convolution filter ΣΤ Εδώ καλείται τρεις φορές το component στο οποίο γίνεται η συνέλιξη των εννέα τιμών εισόδου με τους αντίστοιχους συντελεστές του kernel που χρησιμοποιείται για των τονισμό των ακμών της εκάστοτε εικόνας. Στο πρώτο component που ονομάζεται R γίνεται ο τονισμός ακμών στην r χρωματική συνιστώσα χρησιμοποιώντας τα στοιχεία του παραθύρου (την r συνιστώσα αποτελούν τα bit από το 23 έως και το 16 των αντιστοίχων pixel). Στο δεύτερο component που ονομάζεται G γίνεται ο τονισμός ακμών στην g χρωματική συνιστώσα χρησιμοποιώντας τα στοιχεία του παραθύρου (την g συνιστώσα αποτελούν τα bit από το 15 έως και το 8 των αντιστοίχων pixel). Στο τρίτο component που ονομάζεται B γίνεται ο τονισμός ακμών στην b χρωματική συνιστώσα χρησιμοποιώντας τα στοιχεία του παραθύρου (την b συνιστώσα αποτελούν τα bit από το 7 έως και το 0 των αντιστοίχων pixel). Επίσης ορίζονται τα σήματα εισόδου και εξόδου του κάθε ένα από τα τρία components. --- shift registers used as line buffers S1: sharpen_convolution_data_shift_register port map

224 210 Κεφάλαιο 6 (reset,data_en,clk,data_in,reg_0); S2: sharpen_convolution_data_shift_register port map (reset,data_en,clk,reg_0,reg_1); end; Σχήμα 6.68 Sharpen convolution filter Ζ Ακόμη καλούνται δυο sharpen_convolution_data_shift_register_data_shift_register οι οποίοι λειτουργούν ως line buffers έτσι ώστε να είναι δυνατή η δημιουργία του 3x3 παραθύρου. Επίσης ορίζονται τα σήματα εισόδου και εξόδου τους. Τέλος σηματοδοτείται το τέλος του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Η αρχιτεκτονική των sharpen_convolution_data_shift_register περιγράφεται αναλυτικά στο αρχείο sharpen_convolution_data_shift_register.vhd και παρατίθεται στο παράρτημα Β. Έχουν μέγεθος 640 στοιχείων και το κάθε στοιχείο είναι εικοσιτεσσάρων bit. sharpen_convolution_value.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; Σχήμα 6.69 Sharpen convolution value Α Αρχικά συμπεριλαμβάνονται η βιβλιοθήκη και τα πακέτα που είναι απαραίτητο να χρησιμοποιηθούν για τη σωστή λειτουργία του compiler. Η βιβλιοθήκη ieee και το πακέτο std_logic_1164 περιέχουν τις δηλώσεις των κύριων στοιχείων ενός VHDL κώδικα ενώ το πακέτο numeric_std περιέχει δηλώσεις για αριθμητικούς υπολογισμούς και ορίζει τύπους όπως ο τύπος unsigned. entity sharpen_convolution_value is port ( --- clock and reset input signals

225 Τα Custom Cores του συστήματος 211 clk : in std_logic; reset : in std_logic; --- enable input signal data_en : in std_logic; --- input color plane values from the 3x3 window pixels x10 : in std_logic_vector(7 downto 0); x11 : in std_logic_vector(7 downto 0); x12 : in std_logic_vector(7 downto 0); x20 : in std_logic_vector(7 downto 0); x21 : in std_logic_vector(7 downto 0); x22 : in std_logic_vector(7 downto 0); x30 : in std_logic_vector(7 downto 0); x31 : in std_logic_vector(7 downto 0); x32 : in std_logic_vector(7 downto 0); --- output sharpen convolution value sharpen_convolution_end : out std_logic_vector(7 downto 0)); end; Σχήμα 6.70 Sharpen convolution value Β Στην συνέχεια περιγράφεται το hardware module με το να ορίζονται τα σήματα εισόδου και εξόδου. Σήματα εισόδου, εκτός από τα βασικά σήματα clock και reset, αποτελούν και τo σήμα data_en καθώς και οι τιμές μιας χρωματικής συνιστώσας των pixel του 3x3 παράθυρου. Σήμα εξόδου είναι το σήμα sharpen_convolution_end που αποτελεί την τιμή που προκύπτει μετά την συνέλιξη των εννέα εισερχομένων τιμών με το convolution kernel. architecture arc of sharpen_convolution_value is --- declare the internal signals that are used in the architecture signal sum_level_10:std_logic_vector(10 downto 0); signal sum_level_11:std_logic_vector(10 downto 0); signal sum_level_12:std_logic_vector(10 downto 0); signal sum_level_13:std_logic_vector(10 downto 0); signal sum_level_21:std_logic_vector(10 downto 0); signal sum_level_22:std_logic_vector(10 downto 0); signal sum_level_3 :std_logic_vector(10 downto 0);

226 212 Κεφάλαιο 6 begin Σχήμα 6.71 Sharpen convolution value Γ Έπειτα σηματοδοτείται η αρχή του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Σε αυτό το σημείο ορίζεται επίσης ορίζονται και τα εσωτερικά σήματα που είναι απαραίτητα για την μεταφορά δεδομένων μεταξύ των καταχωρητών. --- calculate the sharpen convolution value process(clk) begin if rising_edge(clk) then if (reset ='1') then sum_level_10 <= (others=>'0'); sum_level_11 <= (others=>'0'); sum_level_12 <= (others=>'0'); sum_level_13 <= (others=>'0'); sum_level_21 <= (others=>'0'); sum_level_22 <= (others=>'0'); sum_level_3 <= (others=>'0'); else sharpen_convolution_end <= (others=>'0'); if (data_en= '1') then -- Sharpen Convolution Kernel [ ] -- [ ] -- [ ] sum_level_10 <= std_logic_vector(unsigned("000" & x11) + unsigned("000" & x20)); sum_level_11 <= std_logic_vector(unsigned("000" & x22) + unsigned("000" & x31));

227 Τα Custom Cores του συστήματος 213 sum_level_12 <= std_logic_vector(unsigned('0' & x21 & "00")); sum_level_13 <= std_logic_vector(unsigned("000" & x21)); sum_level_21 <= std_logic_vector(unsigned(sum_level_10) + unsigned(sum_level_11)); sum_level_22 <= std_logic_vector(unsigned(sum_level_12) + unsigned(sum_level_13)); if (sum_level_21 > sum_level_22) then sum_level_3 <= (others => '0'); else sum_level_3 <= std_logic_vector(unsigned(sum_level_22) - unsigned(sum_level_21)); end if; if ((sum_level_3(10) ='1')or(sum_level_3(9) ='1') or(sum_level_3(8) ='1')) then sharpen_convolution_end <= (others => '1'); else sharpen_convolution_end <= sum_level_3(7 downto 0); end if; end if; end if; end if; end process; end; Σχήμα 6.72 Sharpen convolution value Δ Στο κυρίως μέρος της αρχιτεκτονικής ορίζεται η διαδικασία για την συνέλιξη των εισερχόμενων τιμών με το sharpen convolution kernel. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά όλων των καταχωρητών στο μηδέν. Αλλιώς αν το σήμα data_en είναι ένα οι τιμές της χρωματικής συνιστώσας των pixel του 3x3 παράθυρου πολλαπλασιάζονται με τον αντίστοιχο συντελεστή του convolution kernel και μετά από δυο

228 214 Κεφάλαιο 6 έλεγχους για αποφυγή τυχόν υπερχείλισης η τελική τιμή οδηγείται στην έξοδο. Επίσης σηματοδοτείται το τέλος του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module Σύγκριση των αποτελεσμάτων του Sharpen convolution filter core με το Matlab Για την επιβεβαίωση της σωστής λειτουργίας του Sharpen convolution filter core αναπτύχτηκε σε Matlab κώδικας ο οποίος εκτελεί την ίδια λειτουργιά με το Sharpen convolution filter core, δηλαδή τον τονισμό των ακμών σε ένα video frame. % Read an image. I2 = imread('car.bmp'); % Convert image to double precision. I = im2double(i2); % Extract the individual red, green, and blue color channels. redchannel = I(:, :, 1); greenchannel = I(:, :, 2); bluechannel = I(:, :, 3); % Convolution kernel filter = [0, -1, 0-1, 5, -1 0, -1, 0]; % Perform sharpen convolution on the individual channels. red = conv2(redchannel, filter,'same'); green = conv2(greenchannel, filter,'same'); blue = conv2(bluechannel, filter,'same'); % Reconstruct new RGB image. J(:, :, 1)= red; J(:, :, 2)= green; J(:, :, 3)= blue;

229 Τα Custom Cores του συστήματος 215 % Display the original color image. imshow(i) % Display new image. figure,imshow(j) Σχήμα 6.73 Sharpen convolution Έπειτα έγινε σύγκριση των αποτελεσμάτων του Sharpen convolution filter core και του κώδικα σε Matlab. Οι εικόνες που πρόεκυψαν από τους δυο αυτούς τρόπους επεξεργασίας αλλά και η αρχική εικόνα παρουσιάζονται παρακάτω: Σχήμα 6.74 Αρχική εικόνα

230 216 Κεφάλαιο 6 Σχήμα 6.75 Εικόνα που πρόεκυψε μετά από επεξεργασία με το Sharpen convolution filter core Σχήμα 6.76 Εικόνα που πρόεκυψε μετά από επεξεργασία με το Matlab

231 Τα Custom Cores του συστήματος 217 Τα αποτελέσματα από την επεξεργασία της αρχικής εικόνας από το Sharpen convolution filter core και από τον κώδικα σε Matlab ταυτίζονται, όπως μπορεί κανείς να δει από τις παραπάνω εικόνες. Αυτό επιβεβαιώνει την σωστή λειτουργία του Sharpen convolution filter core αφού μετά την έξοδο ενός video frame από το Sharpen convolution filter core έχουμε τα επιθυμητά αποτελέσματα. 6.4 Το Negative Core Το Negative core είναι ένα υποσύστημα σχεδιασμένο από τον χρήστη το οποίο υπολογίζει το αρνητικό (negative) ενός video frame. Το block διάγραμμα του Negative core παρουσιάζεται στην παρακάτω εικόνα. Σχήμα 6.77 Το block διάγραμμα του Negative Core Το Negative core δέχεται ως είσοδο video streams 24-bit. Αρχικά το κάθε pixel διαχωρίζεται στις τρεις χρωματικές του συνιστώσες (R, G, B) και στην συνέχεια υπολογίζεται ξεχωριστά το αρνητικό για κάθε χρωματική συνιστώσα. Ο υπολογισμός του αρνητικού της κάθε συνιστώσας γίνεται αφαιρώντας από τον αριθμό 255, που είναι η μεγίστη τιμή που μπορεί να έχει κάθε μια από τις τρεις χρωματικές συνιστώσες, την τιμή της εκάστοτε συνιστώσας. Τέλος ο συνδυασμός των τιμών που προκύπτουν από τον υπολογισμό του αρνητικού της κάθε συνιστώσας του εισερχομένου pixel αποτελεί το τελικό εξερχόμενο pixel. Το Negative

232 218 Κεφάλαιο 6 core έχει έξοδο video streams 24-bit. Μια σχηματική περιγραφή του τρόπου που γίνεται η επεξεργασία του κάθε εισερχομένου pixel παρουσιάζεται στο παρακάτω διάγραμμα. Σχήμα 6.78 Υπολογισμός της τιμής του αρνητικού ενός pixel Σχολιασμός του κώδικα σε VHDL του Negative core library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; Σχήμα 6.79 Negative Α Αρχικά συμπεριλαμβάνονται η βιβλιοθήκη και τα πακέτα που είναι απαραίτητο να χρησιμοποιηθούν για τη σωστή λειτουργία του compiler. Η βιβλιοθήκη ieee και το πακέτο std_logic_1164 περιέχουν τις δηλώσεις των κύριων στοιχείων ενός VHDL κώδικα ενώ το πακέτο numeric_std περιέχει δηλώσεις για αριθμητικούς υπολογισμούς και ορίζει τύπους όπως ο τύπος unsigned. entity negative is port ( --- clock and reset input signals clk, reset: in std_logic; --- avalon streaming interface input signals (sink interface) in_startofpacket, in_endofpacket, in_valid, out_ready: in std_logic;

233 Τα Custom Cores του συστήματος 219 in_data: in std_logic_vector (23 downto 0); --- avalon streaming interface output signals (source interface) out_startofpacket, out_endofpacket: out std_logic; in_ready, out_valid: buffer std_logic; out_data: out std_logic_vector (23 downto 0)); end; Σχήμα 6.80 Negative Β Στην συνέχεια περιγράφεται το hardware module με το να ορίζονται τα σήματα εισόδου και εξόδου. Σήματα εισόδου, εκτός από τα βασικά σήματα clock και reset, αποτελούν και τα σήματα της διασύνδεσης sink της κύριας avalon streaming διασύνδεσης. Σήματα εξόδου, αποτελούν τα σήματα της διασύνδεσης source της κύριας avalon streaming διασύνδεσης. architecture arc of negative is signal number: std_logic_vector (7 downto 0); begin --- initialize the signal number with the value 255 number <= " "; Σχήμα 6.81 Negative Γ Έπειτα σηματοδοτείται η αρχή του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module. Σε αυτό το σημείο ορίζεται επίσης και το εσωτερικό σήμα number και αρχικοποιείται στην τιμή 255. process (clk) begin if rising_edge (clk) then if (reset ='1') then --- reset the output control signals and data out_data <= (others=>'0'); out_startofpacket <= '0'; out_endofpacket <= '0';

234 220 Κεφάλαιο 6 out_valid <= '0'; else if (in_ready ='1') then --- calculate the negative value of the r component --- (255 - r) out_data (23 downto 16) <= std_logic_vector (unsigned (number) unsigned (in_data (23 downto 16))); --- calculate the negative value of the g component --- (255 - g) out_data (15 downto 8) <= std_logic_vector (unsigned (number) - unsigned (in_data (15 downto 8))); --- calculate the negative value of the b component --- (255 - b) out_data (7 downto 0) <= std_logic_vector (unsigned (number) - unsigned (in_data (7 downto 0))); --- output control signals out_startofpacket <= in_startofpacket; out_endofpacket <= in_endofpacket; out_valid <= in_valid; end if; end if; end if; end process; Σχήμα 6.82 Negative Δ Στο κυρίως μέρος της αρχιτεκτονικής περιγράφεται ο τρόπος που γίνεται η επεξεργασία των εισερχόμενων pixel και ο υπολογισμός του αρνητικού. Σε κάθε θετική ακμή ρολογιού αν το σήμα reset είναι ένα γίνεται επαναφορά στο μηδέν όλων των εξερχομένων σημάτων. Αλλιώς αν το σήμα in_ready είναι ένα (αποτελεί την συνθήκη ομαλής λειτουργίας του Negative core) εισέρχεται ένα pixel από το video frame και άμεσα πραγματοποιείται ο υπολογισμός του αρνητικού για κάθε μια από τις τρεις χρωματικές συνιστώσες του

235 Τα Custom Cores του συστήματος 221 εισερχομένου pixel και ο συνδυασμός τους που αποτελεί το επεξεργασμένο pixel προωθείται στην έξοδο. Επίσης τα σήματα έλεγχου προωθούνται στην έξοδο. --- condition for the negative core to receive and output control --- signals and data in_ready <= out_ready or (not out_valid); end; Σχήμα 6.83 Negative Ε Τέλος ορίζεται η συνθήκη που πρέπει να ικανοποιείται για να εξασφαλίζεται η ομαλή είσοδος και έξοδος σημάτων ελέγχου και δεδομένων από και προς το negative core έτσι ώστε να μην υπάρχει συμφόρηση δεδομένων στην έξοδο. Επίσης σηματοδοτείται το τέλος του κομματιού του VHDL κώδικα όπου περιγράφεται η αρχιτεκτονική του hardware module Σύγκριση των αποτελεσμάτων του Negative core με το Matlab Για την επιβεβαίωση της σωστής λειτουργίας του Negative core αναπτύχτηκε σε Matlab ο παρακάτω κώδικας ο οποίος εκτελεί την ίδια λειτουργιά με το Negative core, δηλαδή τον υπολογισμό του αρνητικού ενός video frame. % Read an image. I2 = imread ('CAR.bmp'); % Convert image to double precision. I = im2double (I2); % Calculate the negative of the image. J = imcomplement (I); % Display the original image. imshow (I) % Display the negative of the original image. figure, imshow (J) Σχήμα 6.84 Negative

236 222 Κεφάλαιο 6 Έπειτα έγινε σύγκριση των αποτελεσμάτων του Negative core και του κώδικα σε Matlab. Οι εικόνες που πρόεκυψαν από τους δυο αυτούς τρόπους επεξεργασίας αλλά και η αρχική εικόνα παρουσιάζονται παρακάτω: Σχήμα 6.85 Αρχική εικόνα

237 Τα Custom Cores του συστήματος 223 Σχήμα 6.86 Εικόνα που πρόεκυψε μετά από επεξεργασία με το Negative core Σχήμα 6.87 Εικόνα που πρόεκυψε μετά από επεξεργασία με το Matlab

238 224 Κεφάλαιο 6 Τα αποτελέσματα από την επεξεργασία της αρχικής εικόνας από τον Negative core και από τον κώδικα σε Matlab ταυτίζονται, όπως μπορεί κανείς να δει από τις παραπάνω εικόνες. Αυτό επιβεβαιώνει την σωστή λειτουργία του Negative core αφού μετά την έξοδο ενός video frame από τον Negative core έχουμε τα επιθυμητά αποτελέσματα.

239 ΚΕΦΑΛΑΙΟ 7 Περιγραφή Του Συστήματος Σκοπός του συστήματος που αναπτύχθηκε είναι να εκμεταλλευτεί τα περιφερειακά που είναι διαθέσιμα στην αναπτυξιακής κάρτας DE2-70, και ιδιαίτερα της SD Card, της κάμερας D5M και της οθόνης αφής LTM ενώ ταυτόχρονα να κάνει χρήση του επεξεργαστή Nios II. 7.1 Περιγραφή Λειτουργίας του Συστήματος Το σύστημα που αναπτύχθηκε χρησιμοποιεί: την κάμερα D5M, η οποία συνδέεται στην αναπτυξιακή κάρτα DE2-70 ώστε να δέχεται συνεχή ροή video την SD Card, για την φόρτωση εικόνων επιλεγμένων από τον χρήστη και την οθόνη αφής LTM για την εμφάνιση του video ή των εικόνων.

240 226 Κεφάλαιο 7 Το σύστημα εκτελεί διάφορες βασικές ρουτίνες επεξεργασίας εικόνας, όπως Median Filtering, Negative, Edge Detection, Image Sharpening, σύμφωνα με το τι θα επιλέξει ο χρήστης ακουμπώντας το σημείο της οθόνης με την αντίστοιχη ένδειξη. Ακόμη το σύστημα παρέχει δυο τρόπους λειτουργίας video και photo, έτσι ώστε να είναι δυνατή η επίδειξη των εικόνων που βρίσκονται στην SD Card. Τέλος η έξοδος του συστήματος οδηγείται στην οθόνη LTM. Το switch SW9 εκτελεί επανεκκίνηση (reset) του συστήματος. Το πρόγραμμα αποθηκεύεται και εκτελείται από την SDRAM μνήμη. Οι επιλογές που παρέχονται από το σύστημα είναι οι εξής: Η επιλογή Video Mode Το σύστημα εισέρχεται στον τρόπο λειτουργίας video. Σε αυτό τον τρόπο λειτουργίας η συνεχής ροή video από την κάμερα προβάλλεται στην οθόνη. Τα video frames δεν υπόκεινται σε καμιά επεξεργασία. Ο τρόπος λειτουργίας video είναι η κατάσταση που εισέρχεται το σύστημα κατά την αρχικοποίηση και την επαναφορά του. Η επιλογή Photo Mode Το σύστημα εισέρχεται στον τρόπο λειτουργίας photo. Σε αυτό τον τρόπο λειτουργίας η συνεχής ροή video από την κάμερα διακόπτεται. Το τελευταίο video frame αποθηκεύεται ως εικόνα σε ένα buffer στην sdram μνήμη του συστήματος. Στον τρόπο λειτουργίας photo είναι δυνατή η προβολή (και επεξεργασία) των εικόνων του χρήστη που έχουν φορτωθεί από την sd card στην sdram μνήμη του συστήματος. Η επιλογή Normal Με την επιλογή Normal αναιρείται οποιαδήποτε μορφή επεξεργασίας έχει επιλεγεί προηγουμένως από τον χρήστη. Η επιλογή Normal είναι διαθέσιμη και στους δυο τρόπους λειτουργίας του συστήματος (Video και Photo Mode). Η επιλογή Edge Με την επιλογή Edge πραγματοποιείται επεξεργασία ανίχνευσης ακμών στο εισερχόμενο frame. Αρχικά αναιρείται οποιαδήποτε μορφή επεξεργασίας έχει επιλεγεί προηγουμένως από τον χρήστη και στην συνέχεια πραγματοποιείται επεξεργασία ανίχνευσης ακμών στο

241 Περιγραφή Του Συστήματος 227 εισερχόμενο frame μέσω hardware (Edge Detection core). Η επιλογή Edge είναι διαθέσιμη και στους δυο τρόπους λειτουργίας του συστήματος (Video και Phot Mode). Η αναλυτική παρουσίαση του Edge Detection core βρίσκεται στην ενότητα του κεφαλαίου 4 ενώ οι ρυθμίσεις αυτού του core παρουσιάζονται στην ενότητα του κεφαλαίου 5. Η επιλογή Negative Με την επιλογή Negative πραγματοποιείται επεξεργασία υπολογισμού του αρνητικού του εισερχόμενου frame. Αρχικά αναιρείται οποιαδήποτε μορφή επεξεργασίας έχει επιλεγεί προηγουμένως από τον χρήστη και στην συνέχεια πραγματοποιείται επεξεργασία υπολογισμού του αρνητικού του εισερχόμενου frame μέσω hardware (Negative core). Η επιλογή Negative είναι διαθέσιμη και στους δυο τρόπους λειτουργίας του συστήματος (Video και Photo Mode). Το Negative core παρουσιάζεται αναλυτικά στην ενότητα 6.4 του κεφαλαίου 6. Η επιλογή Median Με την επιλογή Median πραγματοποιείται αφαίρεση θορύβου αιχμών από το εισερχόμενο frame με την εύρεση της ενδιάμεσης τιμής των τιμών ενός κυλιόμενου παραθύρου στο εισερχόμενο frame. Αρχικά αναιρείται οποιαδήποτε μορφή επεξεργασίας έχει επιλεγεί προηγουμένως από τον χρήστη και στην συνέχεια πραγματοποιείται επεξεργασία αφαίρεση θορύβου αιχμών στο εισερχόμενο frame μέσω hardware (Median Filter core). Η επιλογή Median είναι διαθέσιμη και στους δυο τρόπους λειτουργίας του συστήματος (Video και Photo Mode). Το Median Filter core παρουσιάζεται αναλυτικά στην ενότητα 6.2 του κεφαλαίου 6. Η επιλογή Sharp Με την επιλογή Sharp πραγματοποιείται τονισμός (ενίσχυση) των ακμών του εισερχόμενου frame. Αρχικά αναιρείται οποιαδήποτε μορφή επεξεργασίας έχει επιλεγεί προηγουμένως από τον χρήστη και στην συνέχεια πραγματοποιείται τονισμός (ενίσχυση) των ακμών του εισερχόμενου frame μέσω hardware (Sharpen Convolution Filter core). Η

242 228 Κεφάλαιο 7 επιλογή Sharp είναι διαθέσιμη και στους δυο τρόπους λειτουργίας του συστήματος (Video και Photo Mode). Το Sharpen Convolution Filter core παρουσιάζεται αναλυτικά στην ενότητα 6.3 του κεφαλαίου 6. Η επιλογή Previous Με την επιλογή Previous προβάλλεται στην οθόνη η προηγούμενη κατά σειρά εικόνα που έχει φορτωθεί από την sd card στην sdram μνήμη του συστήματος. Αρχικά αναιρείται οποιαδήποτε μορφή επεξεργασίας έχει επιλεγεί προηγουμένως από τον χρήστη και στην συνέχεια προβάλλεται στην οθόνη η προηγούμενη κατά σειρά εικόνα. Η επιλογή Previous είναι διαθέσιμη μόνο στον τρόπο λειτουργίας Photo Mode. Η επιλογή Next Με την επιλογή Next προβάλλεται στην οθόνη η επόμενη κατά σειρά εικόνα που έχει φορτωθεί από την sd card στην sdram μνήμη του συστήματος. Αρχικά αναιρείται οποιαδήποτε μορφή επεξεργασίας έχει επιλεγεί προηγουμένως από τον χρήστη και στην συνέχεια προβάλλεται στην οθόνη η επόμενη κατά σειρά εικόνα. Η επιλογή Next είναι διαθέσιμη μόνο στον τρόπο λειτουργίας Photo Mode. 7.2 Το Υλικό και το Λογισμικό του Συστήματος Το SOPC σύστημα καθώς και το τελικό Nios II σύστημα, συμπεριλαμβανομένου των εξωτερικών υποκυκλωμάτων, παρουσιάζονται στα σχήματα 7.1 και 7.2. Πιο συγκεκριμένα, στο σχήμα 7.1 παρουσιάζονται τα υποκυκλώματα που χρησιμοποιήθηκαν για το SOPC σύστημα καθώς και οι μεταξύ τους διασυνδέσεις. Επιπλέον, φαίνεται και η προτεραιότητα των πηγών διακοπών (IRQs), η οποία καθορίζεται αυτόματα από τον SOPC Builder. Επίσης, αυτόματα καθορίζεται και το εύρος της μνήμης (αρχική και τελική διεύθυνση) που καταλαμβάνουν τα επιμέρους υποκυκλώματα στον χάρτη διευθύνσεων του συστήματος. Τέλος, το σήμα clk (50MHz) είναι το σήμα ρολογιού του συστήματος.

243 Περιγραφή Του Συστήματος 229 Σχήμα 7.1 Το SOPC σύστημα Το τελικό Nios II σύστημα παρουσιάζεται στο σχήμα 7.2. Αναλυτικότερα, το σύμβολο με όνομα nios32 είναι το κύκλωμα που παράγεται από τον SOPC Builder και εμπεριέχει όλα τα υποκυκλώματα που έχουν προστεθεί σε αυτό. Έτσι στην αριστερή πλευρά του είναι τα σήματα εισόδου, που συνδέονται στους αντίστοιχους ακροδέκτες εισόδου του Cyclone II, ενώ στην δεξιά πλευρά, είναι τα σήματα εξόδου, που συνδέονται στους αντίστοιχους ακροδέκτες εξόδου του Cyclone II. Ως είσοδοι ορίζονται το σήμα ρολογιού, το σήμα επαναφοράς του συστήματος, τα σήματα χρονισμού και δεδομένων της κάμερας D5M, τα σήματα διακοπής και συντεταγμένων από την οθόνη LTM και τα σήματα που προέρχονται από τα δυο PIO Cores για την επιλογή του τρόπου λειτουργίας του συστήματος και της ζητούμενης επεξεργασίας. Τα σήματα εξόδου προέρχονται από τα UP IP Cores (Avalon Clocks Core, VGA Core, SD Card Core, SPI Core, PIO Cores και άλλα). Κάποια σήματα από αυτά όμως δεν οδηγούνται κατευθείαν σε ακροδέκτες του Cyclone II, αλλά λειτουργούν ως είσοδοι σε άλλα υποκυκλώματα. Έτσι, τα σήματα από τα PIOs: lcd_i2c_en και lcd_i2c_scl, καθώς και τα σήματα από το SPI Core οδηγούνται στo υποκύκλωμα adc_out και οι έξοδοι αυτού συνδέονται στους κατάλληλους ακροδέκτες του FPGA. Ομοίως, τα σήματα των PIOs: pio_4 και pio_mode, χρησιμοποιούνται ως είσοδοι του συστήματος για την επιλογή της ζητούμενης επεξεργασίας και του τρόπου λειτουργίας του συστήματος.

244 230 Κεφάλαιο 7 Σχήμα 7.2 Το τελικό Nios II σύστημα Στο σχήμα 7.3 απεικονίζεται το διάγραμμα ροής της κύριας εφαρμογής που εκτελεί ο Nios II (ο κώδικας της οποίας παρουσιάζεται αναλυτικά στο Παράρτημα Α), σύμφωνα με το οποίο, μετά από την δήλωση και αρχικοποίηση των μεταβλητών και των συναρτήσεων ακολουθούν οι αρχικοποιήσεις των cores του συστήματος, η εμφάνιση κειμένου στην LTM οθόνη. Έπειτα, το σύστημα εισέρχεται σε VIDEO MODE, που είναι και η προκαθορισμένη κατάσταση του συστήματος. Ανάλογα με το ποιό σημείο της οθόνης θα πιεστεί, εκτελείται η αντίστοιχη εργασία, όπως αλλαγή σε κατάσταση PHOTO MODE και επεξεργασία εικόνας. Στη συνέχεια, ο Nios επιστρέφει στην εκτέλεση της κύριας εφαρμογής εκτελώντας τις εργασίες που ανήκουν στην κατάσταση που έχει επιλεγεί. Αν δεν πιεστεί κάποιο πλήκτρο τότε συνεχίζεται η εκτέλεση των εργασιών τις παρούσας κατάστασης.

245 Περιγραφή Του Συστήματος 231 Σχήμα 7.3 Το διάγραμμα ροής/καταστάσεων της εφαρμογή 7.3 Σχολιασμός του Τελικού Συστήματος Στο σχήμα 7.4 παρουσιάζεται μία σύνοψη (flow summary) πληροφοριών που αφορούν το σύστημα, όπως αυτή παράχθηκε μετά την επιτυχή δημιουργία του από το Quartus. Σε αυτήν παρατηρείται ότι το σύστημα καταλαμβάνει το 18% του συνολικού αριθμού των λογικών στοιχείων που περιλαμβάνονται στο Cyclone II FPGA. Επίσης, χρησιμοποιούνται 207 από τους 622 ακροδέκτες του Cyclone II, αριθμός που αντιστοιχεί σε ποσοστό 33%. Επιπλέον, χρησιμοποιείται το 22% των bits μνήμης του Cyclone II, καθώς και 10 από τους 300 ενσωματωμένους πολλαπλασιαστές του (ποσοστό 3%). Τέλος, το σύστημα κάνει χρήση του ενός εκ των τεσσάρων διαθέσιμων PLLs.

246 232 Κεφάλαιο 7 Σχήμα 7.4 Το Flow summary του συστήματος Για την εκτέλεση της κύριας εφαρμογής (102 Kbytes code + initialized data) πρέπει να χρησιμοποιηθεί κάποια από τις διαθέσιμες μνήμες της κάρτας DE2-70. Η μνήμη SRAM (2 Mbytes) χρησιμοποιείται ήδη ως pixel buffer. Άρα είναι απαραίτητη η χρήση της μνήμης SDRAM (64 Mbytes). Στο σχήμα 7.5 παρουσιάζονται τα αποτελέσματα του 'χτισίματος' (build) του. Το μέγεθος της εφαρμογής είναι 102 Kbytes (code + initialized data) ενώ η υπόλοιπη διαθέσιμη μνήμη είναι που είναι Kbytes, αφού η SDRAM έχει μέγεθος 64 Mbytes. Σχήμα 7.5 Λεπτομέρειες μεταγλώττισης της κύριας εφαρμογής