Verilog Ενώ βρόχο, ο βρόχος for είναι synthesisable;;;;

Για Loop είναι αποδεκτή, αλλά ενώ βρόχος είναι εξαρτώνται από το εργαλείο σας και δεν θα καλή για FPGAs
 
Έχω να γράψω ένα κώδικα Verilog που συνδυάζει τις διαρθρωτικές και συμπεριφορικές καταστάσεις. Αλλά εγώ πρέπει να εκτελέσει τις εν λόγω διαρθρωτικές κωδικό σε κάθε κύκλο ρολογιού. Μπορώ να γράψω αυτά τα Strustural statemnets πάντα μέσα στο μπλοκ?; διαφορετικά hw μπορώ να το κάνω; μια γρήγορη απάντηση θα είναι πολλή βοήθεια ...
 
Νομίζω ότι όλα τα βρόχους που μπορούν να easely αναγράφεται ξετυλίγεται είναι synthesisable. Για να γίνει αυτό, πιστεύω ως προεπεξεργαστή που θα επεκταθούν το βρόχο, αντικαθιστώντας τη μεταβλητή βρόχου, και εκεί θα πάμε ...
 
[Quote = ankit12345] για (i = 0, i <10, i + +) Νομίζω ότι αυτό λειτουργεί ..... όπου, όπως αυτό ...... Για το (i = 0, i
 
κάθε βρόχου είναι synthesizable αν είναι δύο πράγματα ληφθεί μέριμνα .. 1. θα πρέπει να είναι ένας βρόχος πεπερασμένο 2. Δεν δηλώσεις καθυστέρηση, στο βρόχο
 
Για κάποιο λόγο με τη συνέχεια κώδικα Verilog δεν λειτουργεί σωστά σε Quartus II 10.0. Προσπαθώ να γράψω μια συνάρτηση η οποία ορίζεται όλα bits προς τα δεξιά από τα πιο σημαντικά bit να έχει οριστεί:
Code:
 λειτουργία [31:0] μάσκα (είσοδος [31:0] βρύσης)? Ακέραιος δείκτης? Μάσκα = βρύση? Για ( Δείκτης = 1? δείκτης <32? δείκτης = δείκτης * 2) αρχίζουν μάσκα = μάσκα | (μάσκα>> δείκτης)? endfunction τέλος
Ο κωδικός συνθέτει σαν τις διαφορετικές επαναλήψεις του βρόχου for είναι ταυτόχρονες. Οποιαδήποτε εξήγηση εκτιμηθεί. TM
 
Ο κωδικός που γράφετε είναι ταυτόχρονα τότε η σύνθεση φαίνεται κατανόηση, αλλά δεν καταλαβαίνω τι θέλετε να κάνετε
 
Αυτό που θέλω να κάνω είναι απλή. Λαμβάνοντας υπόψη οποιαδήποτε λέξη εισόδου θέλω να επιστρέψω μια λέξη με 1 σε όλες τις θέσεις δεξιά από το αριστερότερο 1. Για παράδειγμα, δίνεται 32b'00000001000000000000000000000000 θέλω 32b'00000001111111111111111111111111 ή να δοθεί 32b'00010100101001010101001010010011 θέλω 32b'00011111111111111111111111111111 Ο βρόχος πρέπει να το κάνετε αυτό, αφού χρησιμοποιεί μια αναστέλλουσα ανάθεση. Ξεκινώντας με 32b'00000001000000000000000000000000 μετά από κάθε επανάληψη θα πρέπει να πάρετε 32b'00000000110000000000000000000000 / / index == 1 32b'00000000111100000000000000000000 / / index == 2 32b'00000000111111110000000000000000 / / index == 4 32b'00000000111111111111111100000000 / / index == 8 32b'00000000111111111111111111111111 / / δείκτης == 16 Ωστόσο, στο τέλος του κώδικα παράγει πραγματικά 32b'00000000110100010000000100000000 σαν όλες τις επαναλήψεις εμφανίζονται concurrantly.
 
Γιατί χρησιμοποιείτε μια λειτουργία και όχι μια ενότητα; Σε μια λειτουργική μονάδα, μπορείτε να χρησιμοποιήσετε μια αρχική δήλωση και θα εργαστεί.
 
ευχαριστίες για την jducluzeau απάντηση, αλλά εάν δεν λειτουργεί σε μια συνάρτηση, γιατί αν αυτή θα λειτουργούσε σε μια λειτουργική μονάδα; Εκτός υπάρχουν άλλα προβλήματα διασύνδεσης κατά τη χρήση ενός module. Με μια λειτουργία, κάθε μονάδα που χρησιμοποιεί μπορεί να έχει το δικό του αντίγραφο του.
 
Ποτέ δεν χρησιμοποιείται γιατί χρησιμοποιείται η λειτουργία αντί ενότητας. Μπορείτε να χρησιμοποιήσετε τη μονάδα σε μια άλλη ενότητα. αυτός ο κώδικας πρέπει να λειτουργεί. module επικαλυπτής (μάσκα, πατήστε)? εξόδου [31:0] μάσκα? εισόδου [31:0] βρύσης? genvar θ? εκχωρήσετε μάσκα [31] = βρύση [31]? παράγουν για (i = 1? θ
 
Ευχαριστώ για το παράδειγμα με τη δημιουργία. Δεν έχω πάρει ποτέ ότι πριν από την κατασκευή. Χρειάζομαι να καταλάβω ότι είναι λάθος με το αρχικό κωδικό, γιατί αν είναι λάθος μπορεί να είχα ένα πρόβλημα με το έργο σε άλλους τομείς.
 
δοκιμάστε μάσκα = μάσκα | (πιέστε>> δείκτης)? Νομίζω ότι το πρόβλημα προέρχεται από αυτή τη γραμμή. Ανοίξτε ένα πρόγραμμα προβολής σχηματικά, θα δείτε το πρόβλημα.
 
Ήμουν πραγματικά πρόκειται να προτείνουν ακριβώς το αντίθετο - ότι το αρχικό κωδικό σας χρησιμοποιείται μάσκα = μάσκα | (πιέστε>> δείκτης)? Αντί για μάσκα = μάσκα | (μάσκα>> δείκτης)? Ακόμα και τότε, δεν βλέπω, όπου μπορείτε να πάρει το αποτέλεσμα που παίρνετε. για παράδειγμα, θα περίμενε κανείς ένα μοτίβο 11101000100000001 ως αποτέλεσμα της μετατοπιστεί ένα ον 1 0, 1, 2, 4, 8 φορές. Φαίνεται να είναι μετατόπιση βρύσης από 1,2,4,8 φορές στη συνέχεια, ή-σης το αποτέλεσμα. Μπορεί να κάνει μια ενδιάμεση μεταβλητή για να δούμε αν αυτό βοηθάει.
 
Προσωπικά, δεν θα το έκανα με βρόχο for. Μερικές φορές για βρόχο βοηθά για την αναγνωσιμότητα, αλλά δικό σου δεν είναι πολύ σαφής με μια πρώτη ματιά. Θα προτιμούσα να πάω με δηλώσεις περίπτωση για μια καλύτερη αναγνωσιμότητα, εκτός αν απαιτεί 100 της γραμμές.
 
Για βρόχος είναι synthesisable αν λειτουργεί για ένα σταθερό χρονικό διάστημα .. Μπορείτε να σκεφτείτε ένα υλικό στο οποίο το τι θα συμβεί αν τον κωδικό σας εκτελεί για ένα χρόνο, και στη συνέχεια αντίγραφα της θα συντίθενται μετά τη χρήση για βρόχο .... Θυμηθείτε, δυναμική τίποτα δεν συντίθεται .. Το θέμα είναι ότι μπορούμε να απεικονίσει το σενάριο Αυτό ήταν ..
 
Ευχαριστούμε όλους όσους δημοσιεύτηκε. Η δήλωση είναι σωστή μάσκα = μάσκα | (μάσκα>> δείκτης)? I ντάμπινγκ το αποτέλεσμα αυτής της λειτουργίας από την 7-segment LED στο ταμπλό dev και επαλήθευσε ότι ο δείκτης * 2 και δείκτη 1 παράγουν στην πραγματικότητα το ίδιο σωστά αποτελέσματα τώρα . Δεν είμαι σίγουρος τι συνέβη με το αρχικό σφάλμα. Αποφάσισα να χρησιμοποιήσετε μια συνάρτηση γραπτή σαν να jducluzeau με ένα βρόχο για να μην, δημιουργούν ένα βρόχο. Πρόκειται για έργα και είναι κατανοητό.
Code:
 λειτουργία [31:0] μάσκα (είσοδος [31:0] βρύσης)? Ακέραιος δείκτης? Μάσκα [31] = βρύση [31]? Για (δείκτης = 30? Δείκτης> = 0? Δείκτης δείκτης = - 1) αρχίζουν μάσκα [δείκτης] = βρύση [δείκτης] | μάσκα [δείκτη + 1]? endfunction τέλος
 

Welcome to EDABoard.com

Sponsor

Back
Top