Introduction IP Cores Introduction Ένας hardware engineer έχει στα χέρια του πολύ ισχυρά εργαλεία που µπορούν να απλοποιήσουν το στόχο του σχεδίου υλικού. Μεταξύ αυτών των εργαλείων είναι και το IP core, πυρήνες IP, προσυσκευασµένα τµήµατα του κώδικα VHDL που µπορούν να µειώσουν το χρόνο που ένας µηχανικός πρέπει να ξοδέψει σε ένα σχέδιο. Σε αυτό το µέρος του σεµιναρίου, θα µάθετε πώς να χρησιµοποιήσετε το Xilinx's CORE Generator System για να δηµιουργήσετε έναν core, πυρήνα VHDL IP core και να τον ενσωµατώσετε σε ένα VHDL project. Goals Με την ολοκλήρωση αυτού του εργαστηρίου θα µπορείτε: Να καταλάβετε το two s complement σύστηµα αρίθµησης. Να χρησιµοποιείτε το IP Cores για να δηµιουργήσετε projects. Να χρησιµοποιείτε το structural level of abstraction για να περιγράφετε ψηφιακά κυκλώµατα.
Start Project Navigator and Create the Project Step 1 Όπως και στα προηγούµενα εργαστήρια, ο κώδικας σας δίνετε στην ιστοσελίδα του µαθήµατος. ηµιουργήστε ένα καινούργιο κατάλογο C:/home/student_name/lab4. Κατεβάστε το αρχείο complement.vhd από την ιστοσελίδα και συµπεριλάβετε το στο Project. Τα στάδια για τη δηµιουργία αυτού του project θα είναι λίγο διαφορετικά από τα προηγούµενα εργαστήρια. 1. ηµιουργήστε ένα νέο project. Από τον Project Navigator, επιλέξτε File New Project. Αυτό θα φέρει ένα παράθυρο όπως αυτό που παρουσιάζεται στο Figure 1. Γράψετε lab4 ως όνοµα για το project σας, µετά πατήστε στο... κουµπί για να επιλέξετε τον κατάλογό σας. Επιλέξτε HDL για Top-Level Module Type; επειδή θα εφαρµόσουµε το πρόγραµµα σε VHDL, το οποίο είναι µια περιγραφική γλώσσα υλικού, Hardware Descriptive Language (HDL). Εάν έχετε κάνει τις επιλογές σας πατήστε Next. Figure 1: Device Settings Create a Core using Coregen Step 2 1. Add new source; Πατήστε στο New Source κουµπί. Ονοµάστε το αρχείο σας twos_comp. Στην αριστερή µεριά του παραθύρου επιλέξτε IP (CoreGen). Πατήστε Next. Βλέπε Figure 2. 2
2. Να πατήσετε µε το mouse πάνω στο + για να επεκτείνετε το Math Functions, Complementers. Πατήστε Twos Complementer. Πατήστε Next. Πατήστε Finish. Βλέπε to figure 3. Figure 2: New Source Settings Figure 3: Select Core Type 3. Πατήσετε Next, Next, Finish. Τότε το παράθυρο του Core Generator θα ανοίξει. Figure 4: IP Core Generator Settings We are setting up a 2 s complementer with a data width of 5 bits and registered (which means that flip-flops will be setup at the inputs and outputs). A bypass signal is also setup. Active high means that the complementer will be bypassed whenever the signal bypass is setup too high. Later it will become clear why we need this signal. Click Generate. 3
Θα δηµιουργήσουµε ένα 2 s complementer µε εύρος δεδοµένων, data width 5 bit και καταχωρηµένο, registered (που σηµαίνει ότι flip-flops θα εγκατασταθούν στις εισόδους και εξόδους). To σήµα, bypass παράκαµψης είναι επίσης οργάνωση. Active high σηµαίνει ότι το complementer θα παρακαµφθεί όποτε το σήµα "παράκαµψη " είναι high (1). Αργότερα Θα γίνει πιο σαφές γιατί χρειαζόµαστε αυτό το σήµα. Πατήστε Generateι. 4. Μετά από κάποιο χρόνο, ένα πλαίσιο διαλόγου θα σας πει ότι το core, πρότυπο, πυρήνας, έχει παραχθεί επιτυχώς, πατήστε OK. Πατήστε το Dismiss κουµπί. Incorporate the Core Step 3 Maximize the Project Navigator window. If you look to the left, you will notice that core now appears in your project. However, it is not really incorporated into your design, nor is your design ready to be simulated. In order to proceed we will use a wrapper (or top-level ) file called complement.vhd which was provided (step 1). The only role of this file is to take the core we just generated and place it into a design, connecting its inputs and outputs to the inputs and outputs of the design as shown in figure 5. Μεγιστοποιήστε το παράθυρο Project Navigator. Εάν κοιτάξετε στο αριστερό µέρος του παραθύρου, θα παρατηρήσετε ότι ο πυρήνας (core) εµφανίζεται τώρα στο πρόγραµµά σας. Εντούτοις, δεν ενσωµατώνεται πραγµατικά στο κύκλωµα σας, ούτε είναι το κύκλωµα σας έτοιµο για προσοµοίωση. Προκειµένου να προχωρήσουµε θα χρησιµοποιήσουµε ένα "περιτύλιγµα" (ή "top-level") αποκαλούµενο αρχείο complement.vhd που σας δόθηκε στο βήµα 1. Ο µόνος ρόλος αυτού του αρχείου είναι να πάρει τον πυρήνα, core, που µόλις παράγαµε και να τον τοποθετήσει στο κύκλωµα µας συνδέοντας τις εισόδους και τις εξόδους µε τις εισόδους και τις εξόδους του κυκλώµατος µας, όπως φαίνεται στο σχήµα 5. Core generated by Coregen wrapper file Figure 5. Wrapper file and core Figure 6: Sources in Project 1. Επιλέξετε το αρχείο που µόλις παράγαµε από το παράθυρο το Sources in Project, but DO NOT double-click it. Βλέπε Figure 6. 2. Πατήστε το Open button από task bar. Γράψετε το όνοµα του αρχείου twos_comp.vho και πατήστε Open. Αυτό θα ανοίξει ένα από τα αρχεία που δηµιούργησε ο CORE Generator System. 3. Προσθέστε το αρχείο complement.vhd στο project; Πατήστε Project, Add Source. Επιλέξετε το αρχείο complement.vhd, πατήστε Open. Επιλέξτε VHDL Design File σαν Source Type, πατήστε Ok. Τώρα θα πρέπει να αντιγράψουµε τα τµήµατα του κώδικα από twos_comp.vho αρχείο για να ολοκληρώσουµε τον κώδικα. 4
4. Πατήστε πάνω στην ετικέτα που λέει twos_comp.vho. Να αντιγράψετε το component declaration (βλέπε Figure 6) και να το βάλετε στο complement.vhd αρχείο εκεί που δείχνουν τα σχόλια. 5. Να αντιγράψετε το port map (shown in Figure 7) από το αρχείο twos_comp.vho, και να το βάλετε στο αρχείο complement.vhd εκεί που δείχνουν τα σχόλια. Figure 6: Component Declaration Figure 7: Port Map 6. Επιλέξτε το αρχείο complement.vhd. Double-click Synthesize στο Processes for Source. Θα πάρετε µερικές προειδοποιήσεις (κίτρινα σηµάδια) που είναι µέρος της διαδικασίας, µην τις λάβετε υπόψη. Σιγουρευτείτε ότι δεν παίρνετε οποιαδήποτε λάθη (κόκκινα σηµάδια). Simulate the system Step 4 1. Προσθέστε το αρχείο complement_tb.vhd στο project; Κατεβάστε το αρχείο complement_tb.vhd από την ιστοσελίδα του εργαστηρίου. Πατήστε Project Add source, να βρείτε το αρχείο complement_tb.vhd και να το επιλέξετε. Επιλέξτε VHDL Testbench File σαν Source Type, πατήστε Ok. 2. Να επιλέξετε το test bench και να κάνετε double-click πάνω στο Simulate Behavioral Model µέσα στα Processes for Current Source. 3. Οι κυµατοµορφές πρέπει να είναι ίδιες µε το Figure 8. Figure 8: ModelSim Waveform 4. Εάν κάνετε right click πάνω στα σήµατα εισόδων και εξόδων µπορείτε να αλλάξετε τον τρόπο που θα παρουσιάζονται σε εσάς τα σήµατα. Πατήστε Radix, πατήστε Decimal. 5
Figure 9; ModelSim Waveform with radix changed Στο παρελθόν είχατε τα µεµονωµένα σήµατα όπου high (1) ήταν µια γραµµή και αντιθέτως, µια χαµηλή επίπεδη γραµµή ήταν ένα 0. Όταν βλέπετε 10000, αυτό σηµαίνει ότι είναι ένα bus (συλλογή των καλωδίων) αντί µιας µεµονωµένης εισόδου ή µιας εξόδου. Μπορείτε να δείτε τα µεµονωµένα καλώδια για κάθε bus εάν πατήσετε στο σηµείο + δίπλα από κάθε σήµα. Final Task: Design of an Adder/Substractor Step 5 Σε αυτό το τµήµα θα χρησιµοποιήσουµε ότι έχουµε µάθει πιο πάνω και θα το εφαρµόσουµε για να δηµιουργήσουµε ένα adder/subtractor που παρουσιάζεται στο Figure 10. Ο adder και ο 2 s complement θα δηµιουργηθούν χρησιµοποιώντας Coregen. Θα πρέπει να δηµιουργήσετε ένα top αρχείο και µε structural description, δοµική περιγραφή να συνδέσετε αυτά τα συστατικά και να χτίσετε το κύκλωµα σας. Από τις σηµειώσεις τις διάλεξης είναι γνωστό ότι προκειµένου να αφαιρέσουµε δύο αριθµούς (A - B) σε 2 s complement µορφή παίρνουµε το συµπλήρωµα του τελεστέου (B) και το αποτέλεσµα το προσθέτουµε στον δεύτερο τελεστέο (A). Σχηµατική αναπαράσταση που παρουσιάζεται στο Figure 10 έχει 2 s complement block και µε ένα σήµα που ονοµάζεται bypasss το οποίο θα ενεργοποιήσει ή θα απενεργοποιήσει το 2 s complement block βάση του σήµατος add_sub από το σύστηµα. Εάν προσθέσουµε το Α και το Β. Το add_sub σηµα θα είναι high (1) και το 2 s complement block θα παρακαµφθεί. Ως αποτέλεσµα η πρόσθεση Α και Β να γίνει από το Adder block. Εάν αναιρέσουµε το Β από το Α τότε το add_sub σήµα θα είναι low (0). Το 2 s complement block θα τεθεί σε λειτουργία και θα κάνει το συµπλήρωµα του B και µετά θα το στείλει στο Adder block. Το Adder block θα προσθέσει το Α και το 2 s complement s Β που ισοδυναµεί µε (Α-Β). A B A 2's complement Q clk bypass clk add_sub A B Adder clk Q entity: black_box output 6
Figure 10. Adder Subtractor schematic. 1. ηµιουργήστε ένα νέο project; Όπως κάνατε πιο πάνω, δηµιουργήστε ένα νέο project, ονοµάστε το lab4_2. 2. Ενσωµατώστε το source file. Κατεβάστε από την ιστοσελίδα του εργαστηρίου το αρχείο top.vhd µετά πατήστε Project Add source από το ISE main interface window. Να ψάξετε να βρείτε το αρχείο top.vhd, επιλέξτε το και πατήστε Open. Να επιλέξετε VHDL Design File σαν Source Type, πατήστε Ok. 3. ηµιουργήστε και ενσωµατώστε 2 s complement core; Να επαναλάβετε τα βήµατα 2 και 3 αυτού του εργαστηρίου και δηµιουργήστε και ενσωµατώστε 2 s complement core (χρησιµοποιήστε τις ίδιες παραµέτρους µε πριν). Σηµειώστε ότι σε αυτή την περίπτωση πρέπει να αντιγράψετε component declaration και component instantiation στο top.vhd αρχείο. 4. ηµιουργήστε Adder core. Να επαναλάβετε το βήµα 2 αυτού του εργαστηρίου για να δηµιουργήσετε το core του adder. Χρησιµοποιήστε Adder Subtracter core το οποίο βρίσκετε κάτω από Math Functions / Adders & Subtracters µέσα στο Coregen παράθυρο. Στο figure 11 θα δείτε τις παραµέτρους που πρέπει να βάλετε στο Adder Subtracter. Μετά πατήστε Next button και συµπληρώστε τις παραµέτρους που παρουσιάζονται στο figure 12. Figure 11; First window parameters for Adder Subtracter Core. 7
Figure 12; Second window parameters for Adder Subtracter Core. 5. Να ενσωµατώσετε τον adder core στο project σας; Όπως κάνατε στο βήµα 3 πιο πάνω, να αντιγράψετε το component declaration και το component instantiation templates µέσα στο top.vhd αρχείο. 6. Να ολοκληρώσετε την περιγραφή συστηµάτων χρησιµοποιώντας structural description; ολοκληρώστε την περιγραφή του συστήµατος συµπληρώνοντας τις συνδέσεις component instantiation section του κώδικα, βλέποντας το schematic βλέπε figure 10. Οι συνδέσεις που πρέπει να ολοκληρώσετε είναι σε πράσινο χρώµα. Σηµειώστε ότι η έξοδος Q του 2 s complement block είναι 6 bits wide και η είσοδος B του adder-subtracter είναι 5 bits wide. Εδώ πρέπει να αφήσετε αποσυνδεδεµένο το most significant bit of Q. (Hint: instead of connecting Q, connect only Q(4 donwto 0). Αυτό θα αφήσει αποσυνδεδεµένο το Q(5)). 7. Προσοµοιώστε το project σας; Όπως και στο βήµα 4 κατεβάστε το top_tb.vhd αρχείο και ενσωµατώστε το στο project. Σε αυτήν την περίπτωση πρέπει να ολοκληρώσετε testbench αρχείο. Ακολουθήστε τα σχόλια και τους υπαινιγµούς στο ίδιο το αρχείο. Πρέπει τουλάχιστον να έχετε τις ακόλουθες περιπτώσεις στην προσοµοίωσή σας: Add two small positive numbers together (say 00110 and 00001). Add a positive number (00010) and a negative number (11110). Subtract two small positive numbers together (say 00110 and 00001). Subtract a positive number (00010) and a negative number (11110). 8