Jump to content

Quartus ii- VHDL πρόβλημα


jimakos21
 Share

Recommended Posts

Γειά σας παίδες.. Εν όψη μια εργασία που ετοιμάζω πάνω στην σχεδίαση ψηφιακών συστημάτων (αρχικά σε low level) αντιμετωπίζω πρόβλημα πάνω σε μία άσκηση...

η εκφώνηση της άσκησης είναι αυτή:

Η παρακάτω Εικόνα 1 (a) παρουσιάζει ένα κύκλωμα αθροίσματος γινομένων που υλοποιεί έναν πολυπλέκτη 2-σε-1 με μια γραμμή επιλογής s. Εάν s=0 η έξοδος του πολυπλέκτη m είναι ίση με την είσοδο x, και εάν s=1 η έξοδος είναι ίση με y. Το μέρος (β) της Εικόνας 1 δίνει έναν πίνακα αληθείας για αυτόν τον πολυπλέκτη και το μέρος © δείχνει το σύμβολο του κυκλώματος.

Ο πολυπλέκτης μπορεί να περιγραφεί από την ακόλουθη εντολή VHDL: m <= (NOT (s) AND x) OR (s AND y);

Ζητείται να γράψετε μία οντότητα VHDL που να περιλαμβάνει οκτώ εντολές αντιστοίχησης όπως η παραπάνω για να περιγράψει το κύκλωμα που παρουσιάζεται στην επόμενη Εικόνα 2.

26130458.png

Εικόνα 2: Ένας πολυπλέκτης 2 σε 1 που πολυπλέκει δύο 8 bit ποσότητες

Αυτό το κύκλωμα έχει δύο εισόδους 8-bit, X και Υ, και παράγει μία έξοδο 8-bit M. Εάν s=0 τότε Μ=Χ ενώ εάν s=1 τότε Μ=Υ. Ονομάζουμε αυτό το κύκλωμα ως ένα πολυπλέκτη 2 σε 1 που πολυπλέκει δύο 8 bit ποσότητες. Παρίσταται με το σύμβολο κυκλώματος της εικόνας 2b στην οποία τα Χ, Υ και Μ αναπαρίστανται ως καλώδια 8-bit.

Πραγματοποιείστε τα παρακάτω βήματα: 1. ∆ημιουργείστε ένα Quartus II project για το κύκλωμα σας 2. Να γράψετε κώδικα VHDL για έναν πολυπλέκτη 2 σε 1 που πολυπλέκει δύο 8

bit ποσότητες 3. Να μεταγλωττίσετε το project 4. Να ελέγξετε την ορθότητα της υλοποίησης σας μέσω προσομοίωσης του

κυκλώματος.

39512355.png

Απάντηση μου:

Αρχικά προσπάθησα να κατασευάσω τον πολυπλέκτη 2-1 σε ένα project και όταν χρειαστεί (σαν σκεπτικό)

να τον καλέσω 8φορές !

Φτιάχνω λοιπόν τον πολυπλέκτη με ονομασία POL1

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity POL1 is

port(s,x,y:in STD_LOGIC;

m:out STD_LOGIC);

end POL1;

architecture V1 of POL1 is

begin

m<=(NOT (s) AND x) OR (s AND y);

end V1;

--end of vhdl code.

20066873.jpg

Mετά συνεχίζω απτόητος να φτιάξω ένα δεύτερο project με ονομασία POL8BIT

όπου θα καλέσω 8φορές τον πάνω πολυπλέκτη .

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity POL8BIT is

port(SEL,x1,x2,x3,x4,x5,x6,x7,x8,y1,y2,y3,y4,y5,y6,y7,y8:in STD_LOGIC;

m:out STD_LOGIC);

end;

architecture STRUCT of POL8BIT is

component POL1

port(s,x,y:in STD_LOGIC;

m:out STD_LOGIC);

end component;

signal SELB:STD_LOGIC;

begin

G1:POL1 port map(SEL,x1,y1);

G2:POL1 port map(SEL,x2,y2);

G3:POL1 port map(SEL,x3,y3);

G4:POL1 port map(SEL,x4,y4);

G5:POL1 port map(SEL,x5,y5);

G6:POL1 port map(SEL,x6,y6);

G7:POL1 port map(SEL,x7,y7);

G8:POL1 port map(SEL,x8,y8);

end;

70527777.jpg

Eκτός του ότι δεν ξέρω αν μέχρι εκεί είμαι σωστός, δεν μπορώ για κανένα λόγο να ενώσω τα τσιπάκια με την έξοδο!!(8bit) δεν μπορώ... Προσπάθησα με: singal SELB:STD_LOGIC;

αλλά τίποτα.. Προσπάθησα να το κάνω με new project αλλα πάλι τίποτα.....

Παίδες είμαι καινούργιος στον τομέα απο vhdl ξέρω ελάχιστες εντολές και γενικά είμαι πολύ πρωτάρης..

Αλλά έχω πεισμώση θέλω να στείλω την εργασία άψογη!!!

Όποιος γνωρίζει το αντικείμενο παρακαλώ να βοηθήσει

Link to comment
Share on other sites

Ζητείται να γράψετε μία οντότητα VHDL που να περιλαμβάνει οκτώ εντολές αντιστοίχησης όπως η παραπάνω για να περιγράψει το κύκλωμα που παρουσιάζεται στην επόμενη Εικόνα 2.

Απ'οτι καταλαβαίνω αυτό που ζητάει η άσκηση είναι να γράψεις 8 εντολές VHDL όπως αυτή που σου δίνει

για τον mux 2σε1 1bit. Άρα για τα 2 8bit σήματα που σου έρχονται θα γράψεις μια εντολή για κάθε bit απο τις

2 εισόδους. Το αποτέλεσμα της κάθε εντολής που θα γράψεις θα είναι 1 απο τα 8 bit του αποτελέσματος.

Αν έχεις ένα signal A : std_logic_vector(1 downto 0), τότε για να πάρεις το πρώτο bit (MSB) γράφεις Α(1)

και για να πάρεις το 2ο bit (LSB) γράφεις Α(0).

Αν συνδιάσεις αυτά με την εντολή που σου δίνει είναι εύκολο να γράψεις αυτό που ζητά.

Το σκεπτικό σου είναι σωστό αλλα δε σου ζητάει να φτιάξεις component τον mux2σε1 1bit και μετά να πάρεις

8 τετοια components (να κάνεις 8 port maps) για να φτιάξεις ενα mux2σε1 8bit.

  • Like 1
Link to comment
Share on other sites

Δηλαδή η λογική με την οποία ξεκίνησα τα project είναι λάθος....?

Ναί θέλει να το κάνουμε όπως το mux 2σε 1 όπως εκεί δεν είναι 8bit!

Δεν καταλαβαίνω ακριβώς τι μου λέω να κάνω.. :o

:)

Link to comment
Share on other sites

Έχεις μία εντολή για σήματα 1bit. Πρέπει να γράψεις 8 παρόμοιες εντολές 1 για κάθε bit απο τα 8 που θα έχεις για κάθε

σήμα εισόδου. Άρα για το LSB του σήματος εξόδου θα έχεις την εντολή

m(0)<=(NOT (s) AND x(0)) OR (s AND y(0))

όπου τα x,y,m είναι 8bit σήματα.

  • Like 1
Link to comment
Share on other sites

και τα ορίζω κάπως ότι τα σήματα είναι 8bit? με κάποια εντολή??

Στη δήλωση των σημάτων βάζεις πχ signal A : std_logic_vector(7 downto 0);

για σήματα 8bit

  • Like 1
Link to comment
Share on other sites

Σε ευχαριστώ νομίζω την έλυσα με το STD_LOGIC_VECTOR(...) σ ευχαριστώ

πάρα πολύ φίλος...

Μην το κλείσετε το θέμα θα εμφανιστούν και άλλες απορίες μου :p (ταλαίπωρα members)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...