ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd....

39
ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1 Σε αυτή την εισαγωγική εργαστηριακή άσκηση θα δούμε αναλυτικά τη χρήση του εργαλείου Vivado IDE της Xilinx για τη δημιουργία ενός απλού κυκλώματος δυαδικού μετρητή με χρήση της VHDL και την υλοποίηση του στην αναπτυξιακή κάρτα ZedBoard. Θα δούμε αναλυτικά τα βήματα της προσομοίωσης, του ορισμού περιορισμών (constraints), της σύνθεσης και της υλοποίησης (implementation) του σχεδίου χρησιμοποιώντας τις προκαθορισμένες ρυθμίσεις και της ανάλυσης των αποτελεσμάτων σε κάθε βήμα. Τέλος, θα δούμε πως παράγεται το bitstream ώστε να μπορεί να «κατέβει» το σχέδιο στο υλικό (FPGA device) για να γίνει η επαλήθευση της λειτουργίας του. Στόχοι Με την ολοκλήρωση του εργαστηρίου θα είστε σε θέση να: Δημιουργείτε ένα project στο Vivado, να ορίζετε τα αρχεία HDL που περιγράφουν το μοντέλο του κυκλώματος και να ορίζετε ως target, το ZYNQ FPGA που φιλοξενείται στην κάρτα ZedBoard. Χρησιμοποιείτε το αρχείο Xilinx Design Constraint (XDC) για να ορίζετε τα constraints που αφορούν τις θέσεις των pin του FPGA και timing constraints Προσομοιώνετε το σχέδιο με τον simulator του Vivado Kάνετε σύνθεση (synthesis) και υλοποίηση (implementation) του σχεδίου VHDL Αναλύετε τα αποτελέσματα Παράγετε το αρχείο προγραμματισμού (bitstream) του FPGA Προγραμματίζετε το ZYNQ FPGA χρησιμοποιώντας το αρχείο bitstream

Transcript of ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd....

Page 1: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

Σε αυτή την εισαγωγική εργαστηριακή άσκηση θα δούμε αναλυτικά τη χρήση του εργαλείου Vivado IDE της

Xilinx για τη δημιουργία ενός απλού κυκλώματος δυαδικού μετρητή με χρήση της VHDL και την υλοποίηση

του στην αναπτυξιακή κάρτα ZedBoard. Θα δούμε αναλυτικά τα βήματα της προσομοίωσης, του ορισμού

περιορισμών (constraints), της σύνθεσης και της υλοποίησης (implementation) του σχεδίου

χρησιμοποιώντας τις προκαθορισμένες ρυθμίσεις και της ανάλυσης των αποτελεσμάτων σε κάθε βήμα.

Τέλος, θα δούμε πως παράγεται το bitstream ώστε να μπορεί να «κατέβει» το σχέδιο στο υλικό (FPGA device)

για να γίνει η επαλήθευση της λειτουργίας του.

Στόχοι

Με την ολοκλήρωση του εργαστηρίου θα είστε σε θέση να:

Δημιουργείτε ένα project στο Vivado, να ορίζετε τα αρχεία HDL που περιγράφουν το μοντέλο του

κυκλώματος και να ορίζετε ως target, το ZYNQ FPGA που φιλοξενείται στην κάρτα ZedBoard.

Χρησιμοποιείτε το αρχείο Xilinx Design Constraint (XDC) για να ορίζετε τα constraints που αφορούν

τις θέσεις των pin του FPGA και timing constraints

Προσομοιώνετε το σχέδιο με τον simulator του Vivado

Kάνετε σύνθεση (synthesis) και υλοποίηση (implementation) του σχεδίου VHDL

Αναλύετε τα αποτελέσματα

Παράγετε το αρχείο προγραμματισμού (bitstream) του FPGA

Προγραμματίζετε το ZYNQ FPGA χρησιμοποιώντας το αρχείο bitstream

Page 2: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

2

Περιγραφή του σχεδίου

Το κύκλωμα που θα αρχικά θα ξεκινήσετε είναι ένας απλός, δυαδικός μετρητός των 4-bit. Επειδή το clk του

συστήματος δίδεται από τον εξωτερικό κρύσταλλο 100MHz που διαθέτει η κάρτα, για να μπορέσετε να

επαληθεύσετε την ορθή λειτουργία του μετρητή οπτικά από τα διαθέσιμα LEDs μετά τον προγραμματισμό

του FPGA, θα πρέπει ο μετρητής να δέχεται ένα σήμα enable με χαμηλή συχνότητα. Σε πρώτη φάση, το σήμα

enable αυτό θα παράγεται εσωτερικά από το ίδιο το σύστημα από τη μονάδα Enable_gen. Η μονάδα

Enable_gen είναι μια γεννήτρια παλμών (pulse generator) που δίνει 1 παλμό enable μετά από συγκεκριμένο

αριθμό κύκλων (ticks). Ο αριθμός των ticks αυτός δίδεται ως VHDL generic έτσι ώστε αφενός να μπορέσετε

να προσομοιώσετε την ορθή λειτουργία του συστήματος θέτοντας τον αριθμό των ticks να είναι σχετικά

μικρός (πχ. 10), αφετέρου να παράγετε σήμα enable με συχνότητα περίπου 1Hz θέτοντας τον αριθμό των

ticks να είναι αντίστοιχα μεγάλος (πχ. 100,000,000).

Ενναλακτικά, σύστημα μπορεί να δέχεται το σήμα enable εξωτερικά από τον χρήστη με την χρήση ενός Push

Button (BTNC) της κάρτας με κατάλληλα κυκλώματα αποκλειδωνισμού (debouncing) και ανίχνευσης

ανερχόμενης ακμής (edge detection).

Το αρχικό σύστημα παρουσιάζεται παρακάτω ενώ ο πηγαίος κώδικας βρίσκεται στο e-class.

Εικόνα 1. Περιγραφή του βασικού συστήματος που περιέχει τον δυαδικό μετρητή

Η γενική ροή σχεδίασης που θα ακολουθήσετε φαίνεται στο παρακάτω σχήμα.

Εικόνα 2. Γενική ροή σχεδίασης

System

Counter

Enable_gen

enable

Clk 100MHz

Reset

q[3:0]

Βήμα 5:

Χρονική Προσομοίωση

(Timing Simulation)

Βήμα 6:

Επαλήθευση του λειτουργίας στο

υλικό

Βήμα 1: Δημιουργία ενός Vivado Project

χρησιμοποιώντας το IDE

Βήμα 2: Προσομοίωση του σχεδίου με

το Vivado Simulator

Βήμα 3:

Σύνθεση του σχεδίου

Βήμα 4:

Υλοποίηση του σχεδίου

Page 3: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

3

Δημιουργία ενός Vivado Project με το IDE Βήμα 1

1-1. Ανοίξτε το Vivado και δημιουργείστε ένα project έχοντας ως target το device XC7Z020clg484-1 και χρησιμοποιώντας την VHDL. Χρησιμοποιήστε τον πηγαίο κώδικα που σας παρέχεται και το αρχείο lab1.xdc.

1-1-1. Ανοίξτε το Vivado επιλέγοντας Start > All Programs > Xilinx Design Tools > Vivado 2016.4 > Vivado 2016.4

1-1-2. Πατήστε Create New Project για να ξεκινήσετε τον wizard. Θα δείτε ένα κουτί διαλόγου Create A New Vivado Project. Πατήστε Next.

1-1-3. Πατήστε το κουμπί Browse του πεδίου Project location της φόρμας New Project, και κάνετε browse στο φάκελο που θα τοποθετήσετε το project σας (πχ. d:\ADSDLabs) και πατήστε Select.

1-1-4. Γράψτε lab1 στο πεδίο Project name. Βεβαιωθείτε ότι το κουτί Create Project Subdirectory box είναι επιλεγμένο. Πατήστε Next.

Εικόνα 3. Εισαγωγή Project Name και Project Location

1-1-5. Επιλέξτε την επιλογή RTL Project στην φόρμα Project Type, και επιλέξτε Next.

1-1-6. Χρησιμοποιώντας τα κουμπιά drop-down, επιλέξτε VHDL ως Target Language και Simulator Language στην φόρμα Add Sources.

Page 4: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

4

Εικόνα 4. Επιλογή Target και Simulator language

1-1-7. Πατήστε το Πράσινο Κουμπί + και μετά Add Files… και επιλέξτε τα αρχεία counter.vhd, enable_gen.vhd και system.vhd μετά πατήστε OK.

Εάν δεν είναι ήδη επιλεγμένο, επιλέξτε Copy sources into project και μετά πατήστε Next για να πάτε στη φόρμα Add Existing IP.

1-1-8. Εφόσον δεν έχουμε να προσθέσουμε κάποιο πυρήνα IP (IP Core), επιλέξτε Next για να μεταβείτε στην φόρμα Add Constraints.

1-1-9. Πατήστε το Πράσινο Κουμπί +, και μετά Add Files… πηγαίνετε στον κατάλληλο φάκελο και επιλέξτε το αρχείο lab1.xdc, και πατήστε OK (εάν είναι απαραίτητο). Εάν δεν είναι ήδη επιλεγμένο, επιλέξτε Copy constraints files into project και μετά πατήστε Next.

Αυτό το αρχείο Xilinx Design Constraints file αναθέτει τα Ι/Ο Pins του FPGA στους διακόπτες και τα LEDs της αναπτυξιακής κάρτας. Αυτή την πληροφορία μπορείτε να την πάρετε είτε από το σχηματικό διάγραμμα είτε από το user guide της αναπτυξιακής κάρτας.

1-1-10. Στη φόρμα Default Part, χρησιμοποιήστε την επιλογή Parts και τα διάφορα πεδία drop-down της επιλογής Filter. Για την ZedBoard, επιλέξτε το part XC7Z020clg484-1.

Page 5: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

5

Εικόνα 5. Επιλογή Part (FPGA device) για την αναπτυξιακή κάρτα ZedBoard

Μπορείτε επίσης να επιλέξετε την επιλογή Boards, επιλέξτε em.avnet.com στο μενού του φίλτρου Vendor και επιλέξτε την κατάλληλη αναπτυξιακή κάρτα (ZedBoard).

Figure 6. Επιλογή της αναπτυξιακής κάρτας

1-1-11. Επιλέξτε Next.

1-1-12. Πατήστε Finish για να δημιουργήσετε το Vivado project.

Χρησιμοποιήστε το Windows Explorer και κοιτάξτε στο φάκελο που ορίσατε το project (πχ d:\ADSD\lab1). Θα βρείτε ότι έχουν δημιουργηθεί οι φάκελοι lab1.cache και lab1.srcs και το αρχείο project lab1.xpr (Vivado). Ο φάκελος lab1.cache είναι το μέρος που αποθηκεύεται το Vivado program database. Δύο φάκελοι constrs_1 και sources_1, έχουν δημιουργηθεί μέσα στον φάκελο lab1.srcs. Βαθιά μέσα τους έχουν αντιγραφεί τα αρχεία πηγαίου κώδικα lab1.xdc (constraint) και τα αντίστοιχα αρχεία .vhd (sources).

Page 6: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

6

1-2. Ανοίξτε τα αρχεία πηγαίου κώδικα *.vhd και μελετήστε τα περιεχόμενά τους.

1-2-1. Στο παράθυρο Sources, κάντε double-click στο αρχεία .vhd για ανοίξετε το αρχεία σε text mode .

Εικόνα 7. Ανοίγοντας τον πηγαίο κώδικα VHDL

1-3. Ανοίξτε το αρχείο πηγαίου κώδικα lab1.xdc και μελετήστε το περιεχόμενό του.

1-3-1. Στο παράθυρο Sources, επεκτείνετε το φάκελο Constraints και κάντε double-click στο αρχείο lab1.xdc για να ανοίξετε το αρχείο σε text mode.

Εικόνα 8. Ανοίγοντας το constraint file

Page 7: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

7

########################################################

# ZedBoard Pin Assignments

########################################################

# Clk - Zedboard 100MHz oscillator

set_property -dict { PACKAGE_PIN Y9 IOSTANDARD LVCMOS33 } [get_ports {clk}]

# Reset - BTNU

set_property -dict { PACKAGE_PIN T18 IOSTANDARD LVCMOS33} [get_ports {rst}]

# On-board led

set_property -dict { PACKAGE_PIN U21 IOSTANDARD LVCMOS33} [get_ports {q[3]}]

set_property -dict { PACKAGE_PIN U22 IOSTANDARD LVCMOS33} [get_ports {q[2]}]

set_property -dict { PACKAGE_PIN T21 IOSTANDARD LVCMOS33} [get_ports {q[1]}]

set_property -dict { PACKAGE_PIN T22 IOSTANDARD LVCMOS33} [get_ports {q[0]}]

########################################################

##ZedBoard Timing Constraints

########################################################

# define clock and period

create_clock -period 10 -name clk -waveform {0.000 5.000} [get_ports clk]

# Global timing constraints

set_input_delay -clock clk 0.000 [get_ports { rst }]

set_input_delay -clock clk -min -0.500 [get_ports { rst }]

set_output_delay -clock clk 0.000 [all_outputs]

Ο κώδικας στο αρχείο lab1.xdc ορίζει τα constraints για τις θέσεις των pin για τις εισόδους και τις εξόδους, την περίοδο ρολογιού (10 ns), καθώς επίσης input και output delays.

1-4. Εκτέλεση ανάλυσης RTL στον πηγαίο κώδικα.

1-4-1. Επεκτείνετε το Open Elaborated Design του RTL Analysis task στο παράθυρο Flow Navigator και πατήστε το Schematic.

Το μοντέλο του σχεδίου θα γίνει elaborate και μια παρουσίαση του σχεδίου σε επίπεδο συστήματος θα εμφανιστεί στο παράθυρο schematic.

Εικόνα 9. Το σχηματικό διάγραμμα του σχεδίου (system level)

Page 8: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

8

Εάν πατήσετε στα (+) μπορείτε να δείτε το σχέδιο σε RTL για τον μετρητή και τον enable generator.

Εικόνα 10. Το σχηματικό διάγραμμα του δυαδικού μετρητή

Εικόνα 11. Το σχηματικό διάγραμμα του enable generator

Page 9: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

9

Προσομοίωση του Σχεδίου με τον Vivado Simulator Βήμα 2

2-1. Προσθέστε το αρχείο testbench system_tb.vhd.

2-1-1. Πατήστε Add Sources στο Project Manager task του παραθύρου Flow Navigator

Εικόνα 12. Προσθήκη πηγαίου κώδικα

2-1-2. Επιλέξτε την επιλογή Add or Create Simulation Sources (προσοχή!) και πατήστε Next.

Εικόνα 13. Επιλογή πηγαίου κώδικα για προσομοίωση

2-1-3. Στην φόρμα Add Sources, πατήστε το Πράσινο Κουμπί +, και στη συνέχεια Add Files…

2-1-4. Επιλέξτε τον κατάλληλο φάκελο όπου υπάρχει το αρχείο testbench system_tb.vhd, επιλέξτε το και πατήστε OK.

Εάν δεν είναι ήδη επιλεγμένο, επιλέξτε Copy sources into project.

2-1-5. Πατήστε το Finish.

2-1-6. Επιλέξτε την καρτέλα Sources και επεκτείνετε την ομάδα Simulation Sources.

Το αρχείο system_tb.vhd έχει προστεθεί στην ομάδα Simulation Sources και το αρχείο system.vhd αυτόματα τοποθετείται στην ιεραρχία ως uut (unit under test) instance.

Page 10: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

10

Εικόνα 14. Ιεραρχία Simulation Sources

2-1-7. Κάντε double-click στο system_tb στο παράθυρο Sources για να μελετήσετε τα περιεχόμενά του.

2-2. Προσομοίωση του σχεδίου για 1000 ns χρησιμοποιώντας το Vivado simulator.

2-2-1. Επιλέξτε το Simulation Settings από τα Project Manager tasks του παραθύρου Flow Navigator.

Η φόρμα Project Settings θα εμφανιστεί δείχνοντας την φόρμα με τις παραμέτρους του Simulation.

2-2-2. Επιλέξτε την καρτέλα Simulation, θέστε το Simulation Run Time στα 1000 ns και πατήστε OK.

Εικόνα 15. Ορισμός της διάρκειας της προσομοίωσης (simulation run time)

Page 11: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

11

Πατήστε στο Run Simulation > Run Behavioral Simulation που βρίσκεται στα Project Manager tasks του

παραθύρου Flow Navigator.

Το testbench και τα αρχεία του πηγαίου κώδικα θα γίνουν compiled και θα τρέξει ο Vivado simulator (εφόσον βέβαια δεν υπάρχουν σφάλματα). Θα δείτε την έξοδο του simulator που είναι παρόμοια με την παρακάτω.

Εικόνα 16. Έξοδος του Simulator

Θα δείτε τέσσερα κύρια παράθυρα:

(i) Scopes, όπου παρουσιάζεται η ιεραρχία του testbench καθώς και τα instantiations,

(ii) (ii) Objects, όπου εμφανίζονται τα top-level σήματα της ιεραρχίας,

(iii) (iii) το παράθυρο με τις κυματομορφές, και

(iv) Console, όπου εμφανίζονται οι ενέργειες του.

Παρατηρείστε ότι μέσα στον φάκελο lab1 έχει δημιουργηθεί ο φάκελος lab1.sim, μαζί με πολλούς άλλους φακέλους σε χαμηλότερο επίπεδο.

Δίπλα στο παράθυρο με τις κυματομορφές, θα δείτε διάφορα κουμπιά που μπορούν να χρησιμοποιηθούν για συγκεκριμένο σκοπό όπως φαίνονται στο παρακάτω πίνακα.

Page 12: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

12

Waveform options

Save the waveform

Zoom In

Zoom Out

Zoom Fit

Zoom to cursor

Go to Time 0

Go to Last Time

Previous Transition

Next Transition

Add Marker

Previous Marker

Next Marker

Swap Cursors

Snap to Transition Floating Ruler

Πίνακας 1: Διάφορα κουμπιά διαθέσιμα για την εμφάνιση των κυματομορφών

2-2-3. Πατήστε το κουμπί Zoom Fit ( ) για να δείτε όλη την κυματομορφή.

Μπορείτε επίσης να ανοίξετε τις κυματομορφές σε ένα νέο μεγάλο παράθυρο πατώντας το κουμπί Float που βρίσκεται στο πάνω δεξιά μέρος. Για να επαναφέρετε το floating παράθυρο πίσω στο GUO, απλά πατήστε στο κουμπί Dock Window.

Εικόνα 17. Κουμπί Float

Εικόνα 18. Κουμπί Dock Window

2-3. Αλλάξτε το format της παρουσίασης εάν το επιθυμείτε

Πατώντας δεξί click στο σήμα q[3:0] που περιγράφει δίαυλο, επιλέξτε Radix, και στη συνέχεια επιλέξτε Unsigned decimal για να βλέπετε τις εισόδους στο δεκαδικό αντί του προεπιλεγμένου δεκαεξαδικού (Hexadecimal) .

Page 13: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

13

Εικόνα 19. Παράθυρο κυματομορφής

2-4. Προσθέστε περισσότερα σήματα για να παρακολουθήσετε τα σήματα χαμηλότερου επιπέδου και για να συνεχίσετε την προσομοίωση για άλλα 1000 ns.

2-4-1. Επεκτείνετε το instance system_tb, εάν είναι απαραίτητο, στο παράθυρο Scopes και επιλέξτε το instance uut instance.

Το εσωτερικό σήμα του enable θα εμφανιστεί στο παράθυρο Objects.

Εικόνα 20. Επιλογή σημάτων χαμηλότερου επιπέδου από το instance uut

Επιλέξτε το σήμα enable και κάντε drag στο παράθυρο με τις κυματομορφές για να το παρακολουθήσετε και αυτό το σήμα επιπέδου.

Παρόμοια, επιλέξτε το instance en_gen, και επιλέξτε το εσωτερικό σήμα counter για να το κάνετε drag στο παράθυρο με τις κυματομορφές.

Εικόνα 21. Επιλογή σημάτων χαμηλότερου επιπέδου από το en_gen

Page 14: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

14

2-4-2. Στο ribbon bar του παραθύρου με τα εργαλεία της προσομοίωσης πληκτρολογήστε 1000 στο πεδίο simulation run time, πατήστε click στο drop-down κουμπί του πεδίου με τις μονάδες και επιλέξτε ns εφόσον θέλουμε να τρέξει η προσομοίωση για 1000 ns (συνολικά 2000 ns) και πατήστε το κουμπί.

Η προσομοίωση θα τρέξει για επιπλέον 1000 ns.

2-4-3. Στο ribbon bar του παραθύρου με τα εργαλεία της προσομοίωσης πατήστε το βελάκι Restart για να ξανατρέξετε την προσομοίωση με όλα τα σήματα του waveform από την αρχή.

2-4-4. Πατήστε στο κουμπί Zoom Fit ή μετακινήστε το roll bar στο κάτω μέρος της οθόνης και παρατηρείστε την έξοδο.

Εικόνα 22. Εκτέλεση προσομοίωσης για επιπλέον 2000 ns

Μπορείτε να παρατηρήσετε το παράθυρο Tcl Console για να δείτε την έξοδο.

Επιβεβαιώστε την ορθή λειτουργία του συστήματος (enable generator και μετρητή).

2-4-5. Κλείστε τον simulator επιλέγοντας File > Close Simulation.

2-4-6. Πατήστε OK και στην συνέχεια πατήστε Discard για να κλείσει χωρίς να σώσετε την κυματομορφή.

Page 15: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

15

Σύνθεση του Σχεδίου Βήμα 3

3-1. Κάντε σύνθεση στο σχέδιο με το εργαλείο σύνθεσης του Vivado και αναλύστε την έξοδο Project Summary

3-1-1. Πατήστε στο Run Synthesis που βρίσκεται στα Synthesis tasks του παραθύρου Flow Navigator.

Η διαδικασία της σύνθεσης θα εκτελεστεί στο αρχείο system.vhd (και σε όλα τα αρχεία της ιεραρχίας εφόσον υπάρχουν). Όταν η διαδικασία ολοκληρωθεί, θα εμφανιστεί ένα κουτί διαλόγου Synthesis Completed dialog box με τρεις επιλογές.

3-1-2. Επιλέξτε την επιλογή Open Synthesized Design και πατήστε OK εφόσον επιθυμούμε να δούμε την έξοδο της σύνθεσης πριν προχωρήσουμε στο στάδιο της υλοποίησης (implementation).

Πατήστε Yes για να κλείσετε το elaborated design εάν εμφανιστεί το παράθυρο διαλόγου.

3-1-3. Επιλέξτε την καρτέλα Project Summary και μελετήστε τα διάφορα παράθυρα.

Εάν δεν βλέπετε την καρτέλα Project Summary τότε επιλέξτε Layout > Default Layout, ή πατήστε στο

εικονίδιο Project Summary .

Εικόνα 23. Project Summary για τα αποτελέσματα της σύνθεσης

Πατήστε στα διάφορα links για να δείτε τι πληροφορία παρέχουν και ποια επιτρέπουν να αλλάξετε τις ρυθμίσεις της σύνθεσης.

Device, Project name, Top module name

Ολοκλήρωση σύνθεσης Το implementation δεν έχει ξεκινήσει

Επιλογή γραφικών ή πίνακα

Το utilization σε γραφικά

Page 16: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

16

3-1-4. Πατήστε στην καρτέλα Table που βρίσκεται στην καρτέλα Project Summary.

Παρατηρήστε ότι κατ’ εκτίμηση έχει χρησιμοποιηθεί 49 LUTs, 32 FFs, 6 IOs (2 είσοδοι και 4 έξοδοι) και 1 BUFG (global clock buffer primitive).

Εικόνα 24. Εκτίμηση χρήσης πόρων για το FPGA του ZedBoard

3-1-5. Στο Flow Navigator, μέσα στο Synthesis (επεκτείνετε το Synthesized Design εάν είναι απαραίτητο), πατήστε το Schematic για να δείτε το synthesized design του συστήματος σε σχηματική αναπαράσταση.

Εικόνα 25. Σχηματική αναπαράσταση του synthesized design (system level)

Παρατηρείστε ότι έχουν αυτόματα προστεθεί IBUFs, OBUFs και BUFG primitives στο σχέδιο.

Page 17: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

17

Πατήστε στο (+) του cntr για να δείτε το σχηματικό διάγραμμα του δυαδικού μετρητή. Οι λογικές πύλες στην έξοδο της ανάλυσης RTL έχουν γίνει mapped σε LUTs στην έξοδο της σύνθεσης.

Εικόνα 26. Σχηματική αναπαράσταση του synthesized design (δυαδικός μετρητής)

Page 18: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

18

3-2. Ανάλυση του Timing report

3-2-1. Πατήστε στο Report Timing Summary που βρίσκεται ανάμεσα στα Synthesized Design Tasks, του Synthesis του Flow Navigator.

Στο synthesized σχέδιο, το Vivado κάνει μια εκτίμηση των net delays βάσει των συνδέσεων και του fanout. Σε ένα implemented σχέδιο, τα net delays βασίζονται στην πραγματική πληροφορία του routing. Εάν θέλετε να χρησιμοποιήσετε το Timing Summary report για timing signoff, τότε θα πρέπει να εκτελεστεί μετά το routing.

Εικόνα 27. Επιλογές για το report του Timing Summary

Η επιλογή Path delay type επιλέγει τον τύπο της ανάλυσης που θα τρέξει. Για τα synthesized designs το default αφορά μόνο το max delay analysis. Για τα implemented designs και το min και το max delay analysis γίνεται από default.

3-2-2. Πατήστε OK για να παραχθεί το Timing_1 report.

Εικόνα 28. Timing report μετά τη Σύνθεση

Παρατηρείστε ότι το Design Timing Summary έχει κόκκινες ενδείξεις που σημαίνουν timing violations. Στο δεξί παράθυρο η πληροφορία είναι ομαδοποιημένη σε στήλες Setup, Hold και Pulse Width.

Page 19: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

19

Στη στήλη Setup παρουσιάζονται όλοι οι έλεγχοι που αφορούν το max delay analysis.

To Worst Negative Slack (WNS) είναι μια τιμή (με link) που αντιστοιχεί στο χειρότερο slack από όλα τα timing paths του max delay analysis. Μπορεί να είναι θετικό η αρνητικό.

Το Total Negative Slack (TNS) είναι το άθροισμα όλων των WNS violations, όταν θεωρούμε μόνο το χειρότερο violation για κάθε timing path endpoint. Η τιμή είναι 0 ns όταν όλα τα timing constraints για το max delay analysis έχουν ικανοποιηθεί και αρνητική όταν υπάρχουν κάποια violations.

Το Number of Failing Endpoints αφορά τον συνολικό αριθμό των endpoints που έχουν violation (WNS<0 ns)

Το Total Number of Endpoints αφορά τον συνολικό αριθμό των end points που έχουν αναλυθεί.

Στη στήλη Hold παρουσιάζονται όλοι οι έλεγχοι που αφορούν το min delay analysis.

To Worst Hold Slack (WHS) είναι μια τιμή (με link) που αντιστοιχεί στο χειρότερο slack από όλα τα timing paths του min delay analysis. Μπορεί να είναι θετικό η αρνητικό.

Το Total Hold Slack (THS) είναι το άθροισμα όλων των WHS violations, όταν θεωρούμε μόνο το χειρότερο violation για κάθε timing path endpoint. Η τιμή είναι 0 ns όταν όλα τα timing constraints για το min delay analysis έχουν ικανοποιηθεί και αρνητική όταν υπάρχουν κάποια violations.

Το Number of Failing Endpoints αφορά τον συνολικό αριθμό των endpoints που έχουν violation (WΗS<0 ns)

Το Total Number of Endpoints αφορά τον συνολικό αριθμό των end points που έχουν αναλυθεί.

3-2-3. Πατήστε στο WNS link και δείτε τα 10 χειρότερα paths (δηλαδή με το μικρότερο θετικό slack αφού δεν αφορούν violations).

Εικόνα 29. Τα 10 χειρότερα paths (setup) με το μικρότερο θετικό slack μετά τη σύνθεση

Page 20: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

20

3-2-4. Πατήστε στο Path 1 που αφορά clock-to-out output port delay για να το δείτε αναλυτικά.

Εικόνα 30. Το path με το μικρότερο θετικό slack (setup) μετά τη σύνθεση

Page 21: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

21

3-2-5. Πατήστε στο Path 5 (που αφορά την περίοδο ρολογιού) για να το δείτε αναλυτικά.

Εικόνα 31. Το Path 5 (critical path) (setup) μετά τη σύνθεση

Page 22: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

22

Σημειώστε ότι οι παραπάνω καθυστερήσεις αποτελούν εκτίμηση αφού αφορούν το synthesized design. Τα nets φαίνονται ότι είναι unplaced.

Στο header μεταξύ άλλων υπάρχει η εξής πληροφορία:

Slack: Ένα θετικό slack δείχνει ότι το path πληροί τα constraints. Η εξίσωση του slack εξαρτάται από το είδος της ανάλυσης που εκτελείται.

Max delay analysis (setup/recovery): slack = data required time – data arrival time

Min delay analysis (hold/removal): slack = data arrival time – data required time

Οι χρόνοι data required και data arrival υπολογίζονται και παρουσιάζονται σε άλλα τμήματα του timing path report.

Data path Delay: Το άθροισμα μέσα από τους πόρους λογικής (logic) του path.

Logic Levels: Ο αριθμός από κάθε τύπο primitive που βρίσκονται στο data section του path, χωρίς να υπολογίζονται τα startpoint και endpoint cells.

Clock Path Skew: Η καθυστέρηση μεταξύ της ακμής του source clock και του destination clock

Μετά το header, το timing path report παρέχει περισσότερες πληροφορίες για τα cells, τα pins, τα ports και τα nets που διασχίζει το path. Χωρίζεται σε 3 μέρη:

Source Clock Path: Το κύκλωμα που διασχίζει το source clock από την πηγή του μέχρι το clock pin στο σημείο εκκίνησης στο datapath.

Data Path: Το κύκλωμα που διασχίζουν τα δεδομένα από το σημείο εκκίνησης μέχρι το σημείο προορισμού.

Destination Clock Path: Το κύκλωμα που διασχίζει το destination clock από σημείο εκκίνησης του μέχρι το clock pin στο σημείο προορισμού στο datapath.

3-2-6. Πατήστε δεξί click στο Path 5 και επιλέξτε Schematic για να το δείτε στο σχηματικό διάγραμμα.

Εικόνα 32. Το Path 5 (critical path) μετά τη σύνθεση στο σχηματικό διάγραμμα

Χρησιμοποιώντας τον Windows Explorer, επαληθεύστε ότι έχει δημιουργηθεί ο φάκελος lab1.runs μέσα στον φάκελο lab1. Μέσα στον φάκελο runs, έχει δημιουργηθεί ο φάκελος synth_1 που περιέχει διάφορα αρχεία σχετικά με την σύνθεση.

Page 23: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

23

Implementation του Σχεδίου Βήμα 4

4-1. Προχωρήστε στο implementation του σχεδίου με τις προκαθορισμένες ρυθμίσεις του Vivado Implementation και αναλύστε την έξοδο Project Summary.

4-1-1. Πατήστε Run Implementation που βρίσκεται στα Implementation tasks του παραθύρου Flow Navigator.

Η διαδικασία του implementation θα εκτελεστεί στο synthesized design. Όταν η διαδικασία ολοκληρωθεί, θα εμφανιστεί ένα κουτί διαλόγου Implementation Completed με τρεις επιλογές.

4-1-2. Επιλέξτε το Open implemented design και πατήστε OK αφού θέλουμε να δούμε το implemented design στην καρτέλα Device view.

4-1-3. Εάν το implementation αποτύχει να ικανοποιήσει τα timing constraints θα βγάλει ένα μήνυμα όπως το αυτό στην εικόνα που ακολουθεί. Πατήστε OK για να συνεχίσετε.

Εικόνα 33. Μήνυμα αποτυχίας στα timing requirements

4-1-4. Πατήστε Yes, εφόσον σας ζητηθεί, για να κλείσετε το synthesized design.

Το implemented design θα ανοίξει.

Χρησιμοποιώντας τον Windows Explorer, επαληθεύστε ότι ο φάκελος impl_1 έχει δημιουργηθεί στο ίδιο επίπεδο με το synth_1 μέσα στο φάκελο lab1.runs. Ο φάκελος impl_1 περιέχει αρκετά αρχεία συμπεριλαμβανομένων και των αρχείων report του implementation.

4-1-5. Στο παράθυρο Netlist, επιλέξτε ένα από τα nets (π.χ. q_ΟBUF[0]) και παρατηρείστε ότι το net εμφανίζεται στο X1Y0 clock region στην καρτέλα Device view (μπορεί να χρειαστεί να κάνετε zoom).

4-1-6. Εάν δεν είναι επιλεγμένο, πατήστε στο εικονίδιο Routing Resources για να δείτε τα routing resources.

Page 24: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

24

Εικόνα 34. Επιλογή ενός net

Εικόνα 35. Βλέποντας το implemented design

4-1-7. Εάν επιθυμείτε μπορείτε να μεγεθύνετε όσο επιθυμείτε τον όψη του implemented design για να δείτε λεπτομέρειες (Slices LUTs κλπ.)

Εικόνα 36. Βλέποντας τμήμα του implemented design (SLICE_X113Y46) σε μεγέθυνση

Page 25: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

25

4-1-8. Κλείστε το implemented design επιλέγοντας File > Close Implemented Design, και επιλέξτε την καρτέλα Project Summary (μπορεί να χρειαστεί να αλλάξετε στην όψη Default Layout) και παρατηρείστε τα αποτελέσματα.

Επιλέξτε την καρτέλα Post-Implementation.

Παρατηρείστε ότι το πραγματικό resource utilization είναι 23 LUTs (παρατηρείστε ότι είναι λιγότερα από αυτά της σύνθεσης), 32 FFs, 6 IOs και 1 BUFG.

Επίσης παρατηρήστε ότι δεν ικανοποιείται το timing constraint (WNS, TNS αρνητικά και κόκκινα).

Εικόνα 37. Project Summary για τα αποτελέσματα του implementation

Page 26: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

26

4-2. Ανάλυση του Timing report

4-2-1. Πατήστε στο Report Timing Summary που βρίσκεται ανάμεσα στα Implemented Design Tasks, του Implementation του Flow Navigator.

Εικόνα 38. Επιλογές για το report του Timing Summary

Ενεργοποιείστε την επιλογή «Report Datasheet”.

4-2-2. Πατήστε OK για να παραχθεί το Timing_1 report.

Εικόνα 39. Timing report μετά το Implementation

Παρατηρείστε ότι μετά το implementation, το Design Timing Summary έχει και πάλι timing violations άλλα διαφορετικά από αυτά της σύνθεσης. Πλέον, το Worst Negative Slack (WNS) έγινε αρνητικό ενώ το Worst Hold Slack (WHS) έγινε θετικό.

4-2-3. Πατήστε στο WNS link και δείτε και πάλι τα χειρότερα 10 paths. Σημειώστε ότι αυτά είναι πλέον τα πραγματικά αφού είναι μετά το routing. Τα 4 πρώτα που έχουν αρνητικό slack (είναι violations) αφορούν καθυστερήσεις clock-to-out.

Εικόνα 40. Τα 10 χειρότερα paths μετά το Implementation

Page 27: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

27

4-2-4. Πατήστε στο Path 1 για να το δείτε αναλυτικά.

Εικόνα 41. Το χειρότερο setup path (violation) μετά το implementation

Παρατηρήστε ότι το clock χρειάζεται 5.641 ns (clock path skew) για να φθάσει από τον ακροδέκτη εισόδου στο FF ενώ τα δεδομένα χρειάζονται 5.803 ns (data path delay) για φθάνουν στον ακροδέκτη εξόδου μέσω του OBUF. Συνολικά, χρειάζονται 11.444 ns ενώ το constraint ήταν 9.965 ns (10.000-0.035 clock uncertainty). Άρα το slack είναι 9.965 ns -11.444 ns = - 1.480 ns (αρνητικό).

Από τα 5.803 ns του data path delay, το 70.8% αφορά το logic (1 levels για τον OBUF) και το 29.2% το routing.

4-2-5. Πατήστε δεξί click στο χειρότερο Path 1 και επιλέξτε Schematic για να το δείτε στο σχηματικό διάγραμμα.

Εικόνα 42. Το χειρότερο path (Path 1) μετά το implementation στο σχηματικό διάγραμμα

Page 28: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

28

4-3. Βελτίωση του timing με προσθήκη επιπλέον constraint

4-3-1. Προσθέστε το παρακάτω constraint ώστε να τοποθετηθούν στα FF της εξόδου (που στο παράδειγμα είναι οι μοναδικές έξοδοι) στα IOBs με στόχο την μείωση του αντίστοιχου routing delay και συνεπώς την ικανοποίηση των constraints του clock-to-out για τα output ports.

set_property IOB TRUE [all_outputs]

Σε περίπτωση που δεν θέλετε όλες οι έξοδοι να μπουν σε IOBs τότε πρέπει να τις προσδιορίσετε.

Πατήστε Run Implementation που βρίσκεται στα Implementation tasks του παραθύρου Flow Navigator ώστε να εκτελεστεί και πάλι όλο το flow (σύνθεση, implementation).

4-3-2. Παρατήστε ότι πλέον ικανοποιούνται τα timing constraints (θετικό WNS). Επίσης παρατηρείστε ότι τo resource utilization παραμένει αμετάβλητο σε σχέση με το προηγούμενο implementation: 23 LUTs, 32 FFs, 6 IOs και 1 BUFG.

Εικόνα 43. Project Summary για τα αποτελέσματα του ΝΕΟΥ implementation

Page 29: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

29

4-4. Ανάλυση του Timing report για το ΝΕΟ implementation

4-4-1. Πατήστε στο Report Timing Summary που βρίσκεται ανάμεσα στα Implemented Design Tasks, του Implementation του Flow Navigator. Ενεργοποιείστε την επιλογή «Report Datasheet”.

4-4-2. Πατήστε OK για να παραχθεί το Timing_1 report.

Εικόνα 44. Timing report μετά το NEO Implementation

Παρατηρείστε ότι μετά την προσθήκη του νέου constraint, το Design Timing Summary δεν έχει timing violations. Πλέον, όλα τα slacks είναι θετικά.

4-4-3. Πατήστε στο WNS link και δείτε και πάλι τα χειρότερα 10 paths (χωρίς violations πια).

Εικόνα 45. Τα 10 με το μικρότερο θετικό slack μετά το NEO Implementation

4-4-4. Πατήστε στο Path 1 για να το δείτε αναλυτικά.

Page 30: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

30

Εικόνα 46. Το χειρότερο setup path (violation) μετά το implementation

Παρατηρήστε ότι το clock χρειάζεται περίπου τον ίδιο χρόνο 5.664 ns (clock path skew) για να φθάσει από τον ακροδέκτη εισόδου στο FF αλλά τα δεδομένα χρειάζονται πλέον 4.004 ns (data path delay) για φθάνουν στον ακροδέκτη εξόδου μέσω του OBUF. Συνολικά, χρειάζονται 9,668 ns οπότε ικανοποιείται το constraint του 9.965 ns (10.000-0.035 clock uncertainty). Άρα το slack πλέον είναι θετικό 9.965 ns - 9.668 ns = 0.297 ns (θετικό).

Από τα 4.004 ns του data path delay, το 99,9% αφορά το logic (1 levels για τον OBUF) ενώ το routing μετά την τοποθέτηση του FF στο IOB έχει γίνει αμελητέο .

4-4-5. Πατήστε στο Path 6 (critical path) για να το δείτε αναλυτικά και επιλέξτε Schematic για να δείτε το σχηματικό διάγραμμα.

Page 31: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

31

Εικόνα 47. Το critical path (Path 6) μετά το NEO implementation

Παρατηρήστε στο παραπάνω report ότι το critical path είναι 4.330 ns (datapath delay) και περιλαμβάνει 3 logic levels (2 LUT4 και 1 LUT5). Το clock χρειάζεται 5.641 ns για να φθάσει από το pin στο source FF και μετά τα δεδομένα χρειάζονται άλλα 4.330 ns να φθάσουν στο destination FF, δηλαδή σύνολο 9,971 ns (arrival time). Από την άλλη, το clk χρειάζεται 5.582 ns για να φθάσει από το pin στο destination FF (με setup time 0,031 ns). Άρα τα δεδομένα πρέπει να έχουν φθάσει στο capture clock (1 περίοδο αργότερα) στα 10+ 5.582-0,031 = 15.613 ns (required time). Συνεπώς, το slack είναι θετικό 15.613 ns - 9,971 ns = 5,642 ns. Το critical path φαίνεται στην παρακάτω εικόνα.

Εικόνα 48. Το critical path (Path 6) μετά το NEO implementation στο σχηματικό διάγραμμα

Page 32: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

32

4-4-6. Πατήστε στο datasheet στο αριστερό μέρος του Timing summary report για να δείτε αναλυτικά τα Input Ports Setup/hold, Output Ports Setup/hold, Max/Min Delays for Output Busses κλπ.

Στην παρακάτω εικόνα φαίνονται τα clock-to-out delays για τα output ports από το datasheet.

Εικόνα 49.Clock-to-out output port delays από το datasheet

4-4-7. Στο Vivado, επιλέξτε την καρτέλα Reports που βρίσκεται χαμηλά στο panel (εάν δεν είναι ορατή, κάντε click στο Window στην μπάρα του menu και επιλέξτε Reports), και κάντε double-click στο Utilization Report μέσα στο τμήμα Place Design. Το report θα εμφανιστεί στο σχετικό παράθυρο παρουσιάζοντας το resource utilization.

Εικόνα 50. Διαθέσιμα reports

Page 33: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

33

Εικόνα 51. Utilization report

4-5. Δείτε τα FPGA resources του design με το Report Utilization.

4-5-1. Στο Flow Navigator, επιλέξτε Open Implemented Design > Report Utilization.

Το παράθυρο διαλόγου Report Utilization ανοίγει.

4-5-2. Πατήστε OK.

Το utilization report εμφανίζεται στο κάτω μέρος του Vivado. Μπορείτε να επιλέξετε όποια από τα resources επιθυμείτε στο αριστερό μέρος για να δείτε το αντίστοιχο utilization.

Εικόνα 52. Report Utilization από το Flow Navigator

Page 34: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

34

4-5-3. Επιλέξτε πχ. τα slice LUTs για αν δείτε πόσο πολύ και ποιες μονάδες καταναλώνουν τα resources.

4-5-4. Εάν επιθυμείτε μπορείτε να μεγεθύνετε όσο επιθυμείτε τον όψη του νέου implemented design για να δείτε λεπτομέρειες και να επαληθεύσετε την χρήση των καταχωρητών στα IOBs.

Εικόνα 53. Βλέποντας τμήμα του ΝΕΟΥ implemented design (IOBs) σε μεγέθυνση

Page 35: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

35

Εκτέλεση Χρονικής Προσομοίωσης (Timing Simulation) Βήμα 5

5-1. Εκτελέστε ένα timing simulation.

5-1-1. Επιλέξτε Run Simulation > Run Post-Implementation Timing Simulation που βρίσκεται στα tasks του Simulation του παραθύρου Flow Navigator.

Ο Vivado simulator θα ξεκινήσει χρησιμοποιώντας το implemented design και το system_tb ως top-level module.

Χρησιμοποιώντας τον Windows Explorer, επαληθεύστε ότι ο φάκελος timing έχει δημιουργηθεί μέσα στο φάκελο lab1.sim > sim_1 > impl. Ο φάκελος timing περιέχει τα αρχεία που παρήχθησαν για να εκτελεστεί το timing simulation.

5-1-2. Συνεχίστε την προσομοίωση για επιπλέον 1000 ns, επιλέξτε για την έξοδο q[3:0] radix unsigned decimal και πατήστε στο κουμπί Zoom Fit για να δείτε το παράθυρο με τις κυματομορφές από 0 έως τα 2000 ns.

5-1-3. Επιβεβαιώστε την ορθή λειτουργία.

5-1-4. Μπορείτε να προσθέσετε markers είτε με click στο κουμπί Add Marker ( ) είτε επιλέγοντας με τον time cursor την χρονική στιγμή που επιθυμείτε και κάνοντας δεξί click στο Markers->Add Marker.

Εικόνα 54. Οι κυματομορφές του timing simulation

Παρατηρήστε τις πραγματικές καθυστερήσεις και επιβεβαιώστε τα αποτελέσματα του timing report (clock skew, clock-to-out, κλπ.)

5-1-5. Κλείστε τον simulator επιλέγοντας File > Close Simulation χωρίς να σώσετε κάποιες αλλαγές.

Page 36: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

36

Παραγωγή του Bitstream και Επαλήθευση Λειτουργίας Βήμα 6

6-1. Συνδέστε την αναπτυξιακή κάρτα ZedBoard και τροφοδοτήστε την. Παράγετε το bitstream, ξεκινήστε ένα hardware session, και προγραμματίστε το FPGA.

6-1-1. Σιγουρευτείτε ότι το καλώδιο Micro-USB cable είναι συνδεδεμένο στο βύσμα JTAG PROG δίπλα στο βύσμα της τροφοδοσίας (power supply).

6-1-2. Η αναπτυξιακή κάρτα Zedboard χρειάζεται μια ξεχωριστή πηγή τροφοδοσίας, που συνδέεται μέσω το J20, που βρίσκεται δίπλα στο διακόπτη POWER.

Εικόνα 55. Σύνδεση αναπτυξιακής κάρτας ZedBoard

6-1-3. Τροφοδοτήστε την κάρτα (Power ON).

6-1-4. Πατήστε στο Generate Bitstream που βρίσκεται στα tasks Program and Debug του παραθύρου Flow Navigator.

Η διαδικασία της παραγωγής του bitstream θα εκτελεστεί στο implemented design. Όταν η διαδικασία ολοκληρωθεί, θα εμφανιστεί ένα παράθυρο διαλόγου Bitstream Generation Completed dialog box με τέσσερις επιλογές.

Εικόνα 56. Παραγωγή bitstream

Αυτή η διαδικασία θα παράγει ένα αρχείο system.bit μέσα στο φάκελο impl_1 στο φάκελο lab1.runs.

6-1-5. Επιλέξτε την επιλογή Open Hardware Manager και πατήστε OK.

Το παράθυρο Hardware Manager θα ανοίξει δείχνοντας ότι βρίσκεται σε κατάσταση “unconnected”.

Page 37: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

37

6-1-6. Πατήστε στο link Open target.

Εικόνα 57. Άνοιγμα νέου hardware target

6-1-7. Από το dropdown menu του link Open target, πατήστε Auto Connect.

Η κατάσταση του Hardware Session αλλάζει από Unconnected στο όνομα του server και το FPGA device γίνεται highlighted. Επίσης παρατηρείστε ότι το Status δείχνει ότι δεν έχει προγραμματιστεί.

Εικόνα 58. Hardware session για την αναπτυξιακή κάρτα ZedBoard

Επιλέξτε το FPGA device και επαληθεύστε ότι το αρχείο system.bit έχει επιλεχθεί ως το αρχείο προγραμματισμού στην καρτέλα General.

Εικόνα 59. Ιδιότητες του FPGA device της αναπτυξιακής κάρτας ZedBoard

6-1-8. Πατήστε στο Program device > XC7Z020_1 ή στο σύνδεσμο XC7Z010_1 στην πράσινη μπάρα πληροφοριών για να προγραμματίσετε το target FPGA device.

Ένας άλλος τρόπος είναι να κάνετε δεξί click στο device και να επιλέξετε Program Device

Εικόνα 60. Επιλογή προγραμματισμού του FPGA

Page 38: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

38

Εικόνα 61. Επιλογή αρχείου προγραμματισμού του FPGA

6-1-9. Πατήστε Program για να προγραμματίσετε το FPGA (θα ανάψει το μπλε DONE led).

6-1-10. Επαληθεύστε την λειτουργία του σχεδίου παρατηρώντας την έξοδο στα LEDs και χρησιμοποιώντας το επάνω push-button για το Reset. Τι παρατηρείτε?

6-1-11. Εάν το σχέδιό σας δεν συμπεριφέρεται όπως αναμένεται ζητήστε τη βοήθεια του εκπαιδευτή. Εάν λειτουργεί ορθά, έχετε ολοκληρώσει με επιτυχία την άσκηση. Όταν ολοκληρώσετε την επαλήθευση, κλείστε την κάρτα (power OFF).

6-1-12. Μεταβάλλετε το generic ticks στο system.vhd (θα περάσει και στον enable generator) έτσι ώστε τα σήματα enable να παράγονται τόσο αργά ώστε οι αλλαγές στις εξόδους του δυαδικού μετρητή στα LEDs να είναι ορατές με το μάτι. Επαναλάβετε την διαδικασία παραγωγής του bitstream (η προσομοίωση δεν είναι δυνατή σε αυτή τη χρονική κλίμακα). Θα εκτελεστούν όλα τα βήματα από την αρχή (σύνθεση, implementation, generate bitstream). Εξετάστε προσεκτικά τα resource utilization και timing reports μετά το implementation. Σημειώστε τα παρακάτω:

Slices: __________ Slice LUTs: ______________ FF: ______________ I/O: ______________

Clock Period (ns): ______ WNS (ns):_______TNS (ns): _____WHS (ns):______ THS (ns): ____________

Max Delay Path:

Slack : _______________________________________

Source: _______________________________________

Destination: _______________________________________

Data Path Delay: _______________________________________

Logic Levels: _______________________________________

Clock Path Skew: _______________________________________

Min Delay Path:

Slack : _______________________________________

Source: _______________________________________

Destination: _______________________________________

Data Path Delay: _______________________________________

Logic Levels: _______________________________________

Clock Path Skew: _______________________________________

Input Port Setup to Clk (Max) (ns): ______

Output Port Clock-to-out (Max) (ns): ______ Output Port Clock-to-out (Min) (ns): ______

6-1-13. Κλείστε το hardware session επιλέγοντας File > Close Hardware Manager.

6-1-14. Πατήστε OK για να κλείσετε το session.

6-1-15. Κλείστε το πρόγραμμα Vivado επιλέγοντας File > Exit και πατήστε OK.

Page 39: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1...2-1. Προσθέσ ο αρχίο testbench system_tb.vhd. 2-1-1. Παήσε Add Sources σοProject Manager task ο παραθύρο Flow

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

39

ΕΡΓΑΣΙΑ 1η: Υλοποίηση up/down δυαδικού μετρητή

Να τροποποιήσετε το κύκλωμα του δυαδικού μετρητή της εργαστηριακής άσκησης 1 και των constraints

ώστε:

να μετρά προς τα πάνω ή προς τα κάτω με επιλογή από μια νέα είσοδο up (SW6) (θα μετρά προς τα

επάνω για up = 1, ή προς τα κάτω για up = 0).

να υποστηρίζει παράλληλη φόρτωση δεδομένων με είσοδο load (SW7) και δεδομένα

load_data [3:0] -> [SW3, SW2, SW1, SW0].

Για τα pin constraints συμβουλευτείτε το manual της κάρτας.

Ελέγξτε τη λειτουργία του κυκλώματος τόσο με προσομοίωση όσο και στο υλικό προγραμματίζοντας το FPGA.

Να επιδείξετε την ορθή λειτουργία στον εκπαιδευτή.

Εξετάστε προσεκτικά τα resource utilization και timing reports μετά το implementation.

Σημειώστε τα παρακάτω:

Slices: __________ Slice LUTs: ______________ FF: ______________ I/O: ______________

Clock Period (ns): ______ WNS (ns):_______TNS (ns): _____WHS (ns):______ THS (ns): ____________

Max Delay Path:

Slack : _______________________________________

Source: _______________________________________

Destination: _______________________________________

Data Path Delay: _______________________________________

Logic Levels: _______________________________________

Clock Path Skew: _______________________________________

Min Delay Path:

Slack : _______________________________________

Source: _______________________________________

Destination: _______________________________________

Data Path Delay: _______________________________________

Logic Levels: _______________________________________

Clock Path Skew: _______________________________________

Input Port Setup to Clk (Max) (ns): ______

Output Port Clock-to-out (Max) (ns): ______ Output Port Clock-to-out (Min) (ns): ______