deppara Δημοσ. 8 Μαρτίου 2011 Δημοσ. 8 Μαρτίου 2011 καλησπερα θα ηθελα να ρωτησω πως μπορει να γινει ολισθηση(κατα μια θεση δεξια η αριστερα) μιας εισοδου(πχ 32 bit) σε γλωσσα VHDL.
nikos903 Δημοσ. 8 Μαρτίου 2011 Δημοσ. 8 Μαρτίου 2011 3. Shift operators sll srl sla sra rol ror Πηγή: seas.upenn Είναι στο 7 κάτω κάτω. Άμα έχεις stdlogicvector(32) μια μεταβλητή ΤΕΜP τότε για να ολισθήσει μια θέση νομίζω πρέπει να τρέξεις: ΤΕΜP<= TEMP S(Left/Right)(Logic/Arithmetic) 1; (πχ out<= TEMP SRA 1; ) Βασικά σε αυτήν την γλώσσα θέλει να το δοκιμάσεις... Πιάσε πρόγραμμα και τρέχα εξομοίωση να δεις άμα δουλεύει...
deppara Δημοσ. 8 Μαρτίου 2011 Μέλος Δημοσ. 8 Μαρτίου 2011 να ρωτησω αν εχω το παρακατω σε VHDL > s<='1' when pout="00000000000000000000000" else '0'; πως μπορω να το κανω με if else?
nikos903 Δημοσ. 8 Μαρτίου 2011 Δημοσ. 8 Μαρτίου 2011 Κανονική δομή IF, όπως και στις άλλες γλώσσες. Π.χ. >If pout="0000000000" then S<="01"; slseif pout="0000000001" then S<="00"; elseif....... ........ else S<="11"; end if;
deppara Δημοσ. 8 Μαρτίου 2011 Μέλος Δημοσ. 8 Μαρτίου 2011 το κανω αυτο,αλλα μου εμφανιζει οτι υπαρχει λαθος... βεβαια εγω βαζω στο If s<='0' και οχι s<="00" μηπως φταιει αυτο? Τhanks!!
nikos903 Δημοσ. 8 Μαρτίου 2011 Δημοσ. 8 Μαρτίου 2011 Πως έχεις ορίσει το S? std_logic_Vector ή απλό std_logic - Bit μήκους 1bit? Πέτα τον κώδικα απάνω (τα κομμάτια που χρειάζονται) και βλέπουμε αμα είναι. Αλλιώς άλλαξε τους ορισμούς.
Dr.Fuzzy Δημοσ. 9 Μαρτίου 2011 Δημοσ. 9 Μαρτίου 2011 να ρωτησω αν εχω το παρακατω σε VHDL > s<='1' when pout="00000000000000000000000" else '0'; πως μπορω να το κανω με if else? Με if-else αλλα θα πρέπει να μπει μέσα σε process. Όπως έχεις τώρα τη λογική σου είναι συνδιαστική (when ειναι συνδιαστική εντολή) άρα θα πρέπει και το process σου να είναι συνδιαστικο (εκτός και αν θες ακολουθιακό), άρα θα πρέπει να προσεξεις to sensitivility list του process. 3. Shift operators sll srl sla sra rol ror Πηγή: seas.upenn Είναι στο 7 κάτω κάτω. Άμα έχεις stdlogicvector(32) μια μεταβλητή ΤΕΜP τότε για να ολισθήσει μια θέση νομίζω πρέπει να τρέξεις: ΤΕΜP<= TEMP S(Left/Right)(Logic/Arithmetic) 1; (πχ out<= TEMP SRA 1; ) Βασικά σε αυτήν την γλώσσα θέλει να το δοκιμάσεις... Πιάσε πρόγραμμα και τρέχα εξομοίωση να δεις άμα δουλεύει... 1. Τα παραπάνω operators απαιτουν τύπο σήματος BIT VECTOR και δεν ειναι overloaded για STD_LOGIC_VECTOR άρα δεν μπορείς να τα χρησιμοποιήσεις. Εκτός και αν κάνεις castings απο ένα τύπο στον αλλο και πίσω, δηλαδή: to_stdlogicvector(to_bitvector(wrptr2) srl i) (δες τα definitions στο Package Std_logic_1164) 2. Μπορείς να χρησιμοποιείσεις τους παρακάτω operators όπως ορίζονται στο Package Std_logic_arith function SHL(ARG: UNSIGNED; COUNT: UNSIGNED) return UNSIGNED; function SHL(ARG: SIGNED; COUNT: UNSIGNED) return SIGNED; function SHR(ARG: UNSIGNED; COUNT: UNSIGNED) return UNSIGNED; function SHR(ARG: SIGNED; COUNT: UNSIGNED) return SIGNED; 3. To πιο απλό βέβαια είναι να κάνεις κάτι τέτοιο: outdatareg(7 downto 1) <= indatareg(6 downto 0); -- shift left 1 bit Γενικότερα θα πρεπει να αρχίσεις να κοιτάς τα definitions στα packages της VHDL http://www.uic.edu/classes/ece/ece465/08/IEEE%20Standard%20Packages.pdf
deppara Δημοσ. 9 Μαρτίου 2011 Μέλος Δημοσ. 9 Μαρτίου 2011 ωραια αυτο το βρηκα,ευχαριστω!!! Να ρωτησω και κατι αλλο αν εχω να υλοποιησω ενα αρχειο καταχωρητων ,εχοντας αρχικα δημιουργησει μια μνημη 32χ32 πως μπορει να γινει αυτο? Εγω εχω δημιουργηση την μνημη και τωρα εχω κολλησει στην υλοποιησει αρχειου καταχωρητη με διπλο αντιγραφο της μνημης που εχω παραγει. Μηπως υπαρχει κανα παραδειγμα να καταλαβω?
Dr.Fuzzy Δημοσ. 10 Μαρτίου 2011 Δημοσ. 10 Μαρτίου 2011 ωραια αυτο το βρηκα,ευχαριστω!!! Να ρωτησω και κατι αλλο αν εχω να υλοποιησω ενα αρχειο καταχωρητων ,εχοντας αρχικα δημιουργησει μια μνημη 32χ32 πως μπορει να γινει αυτο? Εγω εχω δημιουργηση την μνημη και τωρα εχω κολλησει στην υλοποιησει αρχειου καταχωρητη με διπλο αντιγραφο της μνημης που εχω παραγει. Μηπως υπαρχει κανα παραδειγμα να καταλαβω? Μπορείς να κάνεις instantiate τη μνήμη σου δύο φορές σε ένα structural architecture και μετά και μετά με portmap να διασυνδεσεις τα δύο instances μεταξύ τους. Επίσης μπορείς να κάνεις χρήση της εντολής generate που παρέχει η VHDL.
deppara Δημοσ. 10 Μαρτίου 2011 Μέλος Δημοσ. 10 Μαρτίου 2011 Μπορείς να κάνεις instantiate τη μνήμη σου δύο φορές σε ένα structural architecture και μετά και μετά με portmap να διασυνδεσεις τα δύο instances μεταξύ τους. Επίσης μπορείς να κάνεις χρήση της εντολής generate που παρέχει η VHDL. ωραια το εκανα αυτο,απλα κολλαω στο γεγονος οτι εφοσον κανω πορτ μαπ την μνημη στο αρχειο καταχωρητη δεν θα επρεπε να υπαρχει και ενα αρχειο για την μνημη π να περιεχει μεσα εντολες?? ακομα θελω να ρωτησω η διαφορα μεταξυ ενος for loop και ενος for generate εχει να κανει οτι το στο generate Μπορουμε να βαλουμε πορτ μαπ ενω στο for loop δεν μπορουμε?
Dr.Fuzzy Δημοσ. 10 Μαρτίου 2011 Δημοσ. 10 Μαρτίου 2011 ωραια το εκανα αυτο,απλα κολλαω στο γεγονος οτι εφοσον κανω πορτ μαπ την μνημη στο αρχειο καταχωρητη δεν θα επρεπε να υπαρχει και ενα αρχειο για την μνημη π να περιεχει μεσα εντολες?? ακομα θελω να ρωτησω η διαφορα μεταξυ ενος for loop και ενος for generate εχει να κανει οτι το στο generate Μπορουμε να βαλουμε πορτ μαπ ενω στο for loop δεν μπορουμε? Κάτσε με μπέρδεψες! Προφανώς και υπάρχει ένα αρχείο VHDL που είναι η RTL περιγραφή της μνήμης σου που έχεις γράψει. Το generate είναι συνδυαστική εντολή με την οποία μπορείς να δημιουργήσεις δομές από instances που επαναλαμβάνονται και όχι μόνο. Ρίξε μια ματιά σε κάποιο βιβλίο ή κάποιο tutorial, τα εξηγεί όλα αυτά!
deppara Δημοσ. 10 Μαρτίου 2011 Μέλος Δημοσ. 10 Μαρτίου 2011 το χω ψάξει αλλα έχω μπερδευτεί... οι εντόλες της μνήμης γράφονται αυτόματα μόνες τους με την δημιουργία της μνήμης ή πρέπει να τις γράψω εγώ από την αρχή στο αντίστοιχο αρχείο VHDL??
Dr.Fuzzy Δημοσ. 10 Μαρτίου 2011 Δημοσ. 10 Μαρτίου 2011 το χω ψάξει αλλα έχω μπερδευτεί... οι εντόλες της μνήμης γράφονται αυτόματα μόνες τους με την δημιουργία της μνήμης ή πρέπει να τις γράψω εγώ από την αρχή στο αντίστοιχο αρχείο VHDL?? Ειλικρινά δεν καταλαβαίνω τι εννοείς! Κάνε post τους κώδικες που έχεις φτιάξει (όχι PM!) μήπως και βγάλω άκρη.
deppara Δημοσ. 10 Μαρτίου 2011 Μέλος Δημοσ. 10 Μαρτίου 2011 εχω αυτο τι πρεπει να γραψω μεσα δεν μπορω να καταλαβω. >entity MEM_aRd_sWr_32x32 is port ( A: IN std_logic_VECTOR(4 downto 0); CLK: IN std_logic; D: IN std_logic_VECTOR(31 downto 0); WE: IN std_logic; rA: IN std_logic_VECTOR(4 downto 0); SPO: OUT std_logic_VECTOR(31 downto 0); DPRA: OUT std_logic_VECTOR(31 downto 0)); end MEM_aRd_sWr_32x32; architecture Behavioral of MEM_aRd_sWr_32x32 is begin i_ce<='0'; qspo_ce<='0'; qdpo_clk<='0'; qspo_rst<='0'; qspo_srst<='0'; qdpo_srst<='0'; qspo<='0'; qdpo<='0'; end Behavioral;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.