Προς το περιεχόμενο

γλωσσα vhdl


deppara

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπερα θα ηθελα να ρωτησω πως μπορει να γινει ολισθηση(κατα μια θεση δεξια η αριστερα) μιας εισοδου(πχ 32 bit) σε γλωσσα VHDL.

Δημοσ.

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; )

 

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

Δημοσ.

να ρωτησω αν εχω το παρακατω σε VHDL

>	s<='1' when pout="00000000000000000000000" else
  '0';

 

πως μπορω να το κανω με if else?

Δημοσ.

Κανονική δομή IF, όπως και στις άλλες γλώσσες.

 

Π.χ.

>If pout="0000000000" then
S<="01";
slseif pout="0000000001" then
S<="00";
elseif.......

........
else
S<="11";
end if;

Δημοσ.

το κανω αυτο,αλλα μου εμφανιζει οτι υπαρχει λαθος...

βεβαια εγω βαζω στο If s<='0' και οχι s<="00"

μηπως φταιει αυτο?

Τhanks!!

Δημοσ.

Πως έχεις ορίσει το S? std_logic_Vector ή απλό std_logic - Bit μήκους 1bit? Πέτα τον κώδικα απάνω (τα κομμάτια που χρειάζονται) και βλέπουμε αμα είναι. Αλλιώς άλλαξε τους ορισμούς.

Δημοσ.

να ρωτησω αν εχω το παρακατω σε 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

Δημοσ.

ωραια αυτο το βρηκα,ευχαριστω!!!

Να ρωτησω και κατι αλλο

αν εχω να υλοποιησω ενα αρχειο καταχωρητων ,εχοντας αρχικα δημιουργησει μια μνημη 32χ32 πως μπορει να γινει αυτο?

Εγω εχω δημιουργηση την μνημη και τωρα εχω κολλησει στην υλοποιησει αρχειου καταχωρητη με διπλο αντιγραφο της μνημης που εχω παραγει.

Μηπως υπαρχει κανα παραδειγμα να καταλαβω?

Δημοσ.

ωραια αυτο το βρηκα,ευχαριστω!!!

Να ρωτησω και κατι αλλο

αν εχω να υλοποιησω ενα αρχειο καταχωρητων ,εχοντας αρχικα δημιουργησει μια μνημη 32χ32 πως μπορει να γινει αυτο?

Εγω εχω δημιουργηση την μνημη και τωρα εχω κολλησει στην υλοποιησει αρχειου καταχωρητη με διπλο αντιγραφο της μνημης που εχω παραγει.

Μηπως υπαρχει κανα παραδειγμα να καταλαβω?

 

Μπορείς να κάνεις instantiate τη μνήμη σου δύο φορές σε ένα structural architecture και μετά και μετά με portmap να διασυνδεσεις τα δύο instances μεταξύ τους. Επίσης μπορείς να κάνεις χρήση της εντολής generate που παρέχει η VHDL.

Δημοσ.

Μπορείς να κάνεις instantiate τη μνήμη σου δύο φορές σε ένα structural architecture και μετά και μετά με portmap να διασυνδεσεις τα δύο instances μεταξύ τους. Επίσης μπορείς να κάνεις χρήση της εντολής generate που παρέχει η VHDL.

ωραια το εκανα αυτο,απλα κολλαω στο γεγονος οτι εφοσον κανω πορτ μαπ την μνημη στο αρχειο καταχωρητη δεν θα επρεπε να υπαρχει και ενα αρχειο για την μνημη π να περιεχει μεσα εντολες??

 

ακομα θελω να ρωτησω

η διαφορα μεταξυ ενος for loop και ενος for generate εχει να κανει οτι το στο generate Μπορουμε να βαλουμε πορτ μαπ ενω στο for loop δεν μπορουμε?

Δημοσ.

ωραια το εκανα αυτο,απλα κολλαω στο γεγονος οτι εφοσον κανω πορτ μαπ την μνημη στο αρχειο καταχωρητη δεν θα επρεπε να υπαρχει και ενα αρχειο για την μνημη π να περιεχει μεσα εντολες??

 

ακομα θελω να ρωτησω

η διαφορα μεταξυ ενος for loop και ενος for generate εχει να κανει οτι το στο generate Μπορουμε να βαλουμε πορτ μαπ ενω στο for loop δεν μπορουμε?

 

Κάτσε με μπέρδεψες! Προφανώς και υπάρχει ένα αρχείο VHDL που είναι η RTL περιγραφή της μνήμης σου που έχεις γράψει.

 

Το generate είναι συνδυαστική εντολή με την οποία μπορείς να δημιουργήσεις δομές από instances που επαναλαμβάνονται και όχι μόνο.

 

Ρίξε μια ματιά σε κάποιο βιβλίο ή κάποιο tutorial, τα εξηγεί όλα αυτά!

Δημοσ.

το χω ψάξει αλλα έχω μπερδευτεί...

οι εντόλες της μνήμης γράφονται αυτόματα μόνες τους με την δημιουργία της μνήμης ή πρέπει να τις γράψω εγώ από την αρχή στο αντίστοιχο αρχείο VHDL??

Δημοσ.

το χω ψάξει αλλα έχω μπερδευτεί...

οι εντόλες της μνήμης γράφονται αυτόματα μόνες τους με την δημιουργία της μνήμης ή πρέπει να τις γράψω εγώ από την αρχή στο αντίστοιχο αρχείο VHDL??

 

Ειλικρινά δεν καταλαβαίνω τι εννοείς! Κάνε post τους κώδικες που έχεις φτιάξει (όχι PM!) μήπως και βγάλω άκρη.

Δημοσ.

εχω αυτο τι πρεπει να γραψω μεσα δεν μπορω να καταλαβω.

>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;

Αρχειοθετημένο

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

  • Δημιουργία νέου...