despinap Δημοσ. 1 Φεβρουαρίου 2017 Δημοσ. 1 Φεβρουαρίου 2017 Καλησπέρα σας και καλό μήνα! Έχω να κάνω μια εργασία με θέμα την ρύθμιση των φαναριών σε μια διασταύρωση με χρήση της VHDL. Τα δύο φανάρια έχουν την ίδια ονομασία ΝS και τα άλλα δύο EW. Αυτό σημαίνει πως θα προγραμματίσω στην ουσία δύο φανάρια και τα οχήματα θα μπορούν να πάνε μονάχα ευθεία και δεξιά. Παρακάτω σας στέλνω τον κώδικα αλλά δεν μου τρέχει επειδή υπάρχει κάποιο πρόβλημα και δε μπορώ να το βρω οπότε απευθύνομαι σε εσάς που ίσως να γνωρίζεται. Θα ήταν μεγάλη βοήθεια να μου απαντήσει κάποιος στοχευμένα. Για την υλοποίηση χρησιμοποιείται FSM μηχανή πεπερασμένων καταστάσεων. Σας ευχαριστώ εκ των προτέρων. Code one: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity project is port(nscar, ewcar, tmshort, tmlong: in std_logic; clk, reset: in std_logic; override, flashclk: in std_logic; nsred, nsyellow, nsgreen: out std_logic; ewred, ewyellow, ewgreen: out std_logic; tmreset: out std_logic); end project; architecture arch of project is type state_type is (ns_s0, ns_s1, ns_s2, ew_s3, ew_s4, ew_s5, nsdelay, ewdelay); signal state: state_type; begin process (clk, reset) begin if (clk'event and clk = '1') then if reset = '1' then state <= nsdelay; else case state is when ns_s0 => if tmshort = '0' then state <= ns_s0; elsif tmlong='1' then state <= sn_s1; elsif ewcar='1' and nscar='0' then state <= ns_s0; elsif ewcar='1' and nscar='1' then state <= ns_s1; elsif ewcar='0' and nscar='1' then state <= ns_s1; else state <= ns_s0; end if; when ns_s1 => state <= ns_s2; when ns_s2 => state <= nsdelay; when nsdelay => state <= ew_s3; when ew_s3 => if tmshort = '0' then state <= ew_s3; elsif tmlong='1' then state <= ew_s4; elsif nscar='1' and ewcar='0' then state <= ew_s3; elsif nscar='1' and ewcar='1' then state <= ew_s4; elsif nscar='0' and ewcar='1' then state <= ew_s4; else state <= ew_s3; end if; when ew_s4 => state <= ew_s5; when ew_s5 => state <= ewdelay; when ewdelay => state <= ns_s0; when others => state <= nsdelay; end case; end if; end if; end process; logic: process (state) begin case state is when tmreset <= '1' when state=sn_s2 or state=ew_s5 else '0'; when ns_s0=> if FLASHCLK when OVERRIDE='1' else '1' when state/=NS_s0 and state/=NS_s1 and state/=ns_s2 else '0' then nsred<='0011000'; end if; when ns_s1=> if '0' when OVERRIDE='1' else '1' when state=sn_s1 or state=sn_s2 else '0' then nsyellow<='0101000'; end if; when ns_s2=> if '0' when OVERRIDE='1' else '1' when state=sn_s0 else '0' then nsgreen<='0101001'; end if; when ew_s3=> if FLASHCLK when OVERRIDE='1' else '1' when state/=ew_s3 and state/=ew_s4 and state/=ew_s5 else '0' then ewred<='1000010'; end if; when ew_s4=> if '0' when OVERRIDE='1' else '1' when state=ew_s4 or state=ew_s5 else '0' then ewyellow<='1000100'; end if; when ew_s5=> if '0' when OVERRIDE='1' else '1' when state=ew_s4 or state=ew_s5 else '0' then ewgreen<='1000101'; end if; end case; end process; end arch; Code 2: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity project is port(nscar, ewcar, tmshort, tmlong: in std_logic; clk, reset: in std_logic; override, flashclk: in std_logic; nsred, nsyellow, nsgreen: out std_logic; ewred, ewyellow, ewgreen: out std_logic; tmreset: out std_logic); end project; architecture arch of project is --type state_type is (s0, s1, s2, s3, s4, s5, nsdelay, ewdelay); signal state: state_type; signal state:std_logic_vector (1 downto 7); constant s0: std_logic_vector (1 downto 7):= "0011000"; constant s1: std_logic_vector (1 downto 7):= "0101000"; constant s2: std_logic_vector (1 downto 7):= "0101001"; constant s3: std_logic_vector (1 downto 7):= "1001000"; constant s4: std_logic_vector (1 downto 7):= "1000010"; constant s5: std_logic_vector (1 downto 7):= "1000100"; constant nsdelay: std_logic_vector (1 downto 7):= "1000101"; constant ewdelay: std_logic_vector (1 downto 7):= "1001001"; begin process (clk, reset) begin if clk'event and clk = '1' then if reset = '1' then state <= nsdelay; else case state is when s0 => if tmshort = '0' then state <= s0; elsif tmlong='1' then state <= s1; elsif ewcar='1' and nscar='0' then state <= s0; elsif ewcar='1' and nscar='1' then state <= s1; elsif ewcar='0' and nscar='1' then state <= s1; else state <= s0; end if; when s1 => state <= s3; when s3 => state <= nsdelay; when nsdelay => state <= s3; when s3 => if tmshort = '0' then state <= s3; elsif tmlong='1' then state <= s4; elsif nscar='1' and ewcar='0' then state <= s3; elsif nscar='1' and ewcar='1' then state <= s4; elsif nscar='0' and ewcar='1' then state <= s4; else state <= s3; end if; when s4 => state <= s5; when s5 => state <= ewdelay; when ewdelay => state <= s0; when others => state <= nsdelay; end case; end if; end if; end process; tmreset <= '1' when state=s2 or state=s5 else '0'; nsred <= state(1); nsyellow <= state(2) nsgreen <= state(3); ewred <= state(4); ewyellow <= state(5); ewgreen <= state(6); end arch; To λάθος που μου βγάζει στο modelsim είναι: ** Error: (vcom-7) Failed to open design unit file "project2.vhd4" in read mode.
Dr.Fuzzy Δημοσ. 1 Φεβρουαρίου 2017 Δημοσ. 1 Φεβρουαρίου 2017 Αυτό που σου βγάζει δεν έχει σχέση με τον κώδικα αλλά με file permissions ή απλά δεν βρίσκει το αρχείο που αναφέρει. Επίσης οι κώδικες vhdl πρέπει να έχουν κατάληξη .vhd ή .vhdl Τους κώδικες αυτούς τους έγραψες εσύ ή απλά σου δώσανε το φάκελο με το project και προσπαθείς να το τρέξεις;
k33theod Δημοσ. 1 Φεβρουαρίου 2017 Δημοσ. 1 Φεβρουαρίου 2017 Τα δύο φανάρια έχουν την ίδια ονομασία ΝS και τα άλλα δύο EW. Αυτό σημαίνει πως θα προγραμματίσω στην ουσία δύο φανάρια και τα οχήματα θα μπορούν να πάνε μονάχα ευθεία και δεξιά. Προφανώς το NS και το EW είναι το North-South και East-West (Το μεγάλο βελάκι με το Ν στο δρόμο) και δεν έχει σχέση που θα πάνε τα αυτοκίνητα. Αυτά πηγαίνουν "συνήθως" όπου θέλουν οι οδηγοί Για το πρόβλημα δεν καταλαβαίνω τον κώδικά αλλά το λάθος παραπέμπει σε αυτό που λέει ο Dr.Fuzzy
despinap Δημοσ. 2 Φεβρουαρίου 2017 Μέλος Δημοσ. 2 Φεβρουαρίου 2017 εμένα μου έδωσαν την εικόνα και μου είπαν ΦΤΙΑΞΤΟ! οπότε επισκέφτηκα πολλά λινκς και διάβασα αρκετά για να το φέρω ως έχει... Τώρα απλά δε ξέρω γιατί δεν μου τρέχει και προσπαθώ να βρω το λάθος. Απλά αν κάποιος γνωρίζει από VHDL θα μπορέσει να με βοηθήσει. Προσωπικά δε γνωρίζω κανέναν που να έχει γνώσεις σε αυτή τη γλώσσα. Δεν είναι απλά προφανές πως το NS και το EW είναι τα σημεία του ορίζοντα, είναι σίγουρο... Στο κώδικα έχω (προσπαθήσει) να προγραμματίσω τα 2 φανάρια... υπάρχει ένας αισθητήρας που ενεργοποιεί τα φανάρια κάθε φορά που περνάει ένα όχημα... (timeshort>5 δεύτερα kai timelong>5 λεπτά).. Pff δε ξέρω...
anon667 Δημοσ. 2 Φεβρουαρίου 2017 Δημοσ. 2 Φεβρουαρίου 2017 Ρε συ ψηλέ, τσέκαρες τα δικαιώματα των αρχείων που σου πρότειναν; Δεξί κλικ, πρόπερτιζ και βγάλε το Read Only που πιθανώς θα έχει.
k33theod Δημοσ. 2 Φεβρουαρίου 2017 Δημοσ. 2 Φεβρουαρίου 2017 εμένα μου έδωσαν την εικόνα και μου είπαν ΦΤΙΑΞΤΟ! οπότε επισκέφτηκα πολλά λινκς και διάβασα αρκετά για να το φέρω ως έχει... Τώρα απλά δε ξέρω γιατί δεν μου τρέχει και προσπαθώ να βρω το λάθος. Απλά αν κάποιος γνωρίζει από VHDL θα μπορέσει να με βοηθήσει. Προσωπικά δε γνωρίζω κανέναν που να έχει γνώσεις σε αυτή τη γλώσσα. Δεν είναι απλά προφανές πως το NS και το EW είναι τα σημεία του ορίζοντα, είναι σίγουρο... Στο κώδικα έχω (προσπαθήσει) να προγραμματίσω τα 2 φανάρια... υπάρχει ένας αισθητήρας που ενεργοποιεί τα φανάρια κάθε φορά που περνάει ένα όχημα... (timeshort>5 δεύτερα kai timelong>5 λεπτά).. Pff δε ξέρω... Ξαναδιάβασε την αναφορά σφάλματος και αυτό που σου είπε ο Dr.Fuzzy. Μετονόμασε το αρχείο σου από .vhd4 σε .vhdl, δες αν είναι το αρχείο μέσα στο σωστό φάκελλο(σωστό path) και ξαναπροσπάθησε
Dr.Fuzzy Δημοσ. 3 Φεβρουαρίου 2017 Δημοσ. 3 Φεβρουαρίου 2017 Πρώτων, για να σου μιλήσω ξεκάθαρα δεν μπορώ να πιστέψω ότι έχει γράψει τον κώδικα αυτό εσύ αλλά δεν μπορείς να φτιάξεις ένα απλό project στο modelsim και να κάνεις simulation και επίσης δε γνωρίζεις ότι η κατάληξη είναι .vhdl...Συγνώμη! Δεύτερων, γνωρίζεις φαντάζομαι ότι η VHDL είναι κατά κύριο λόγο γλώσσα περιγραφής υλικού, έτσι; Αντιλαμβάνεσαι τι είναι RTL, behavioral, structural τύπος γραφής στη VHDL; Γνωρίζεις τι είναι top entity, τι είναι Testbench; Αν όχι, ξεκίνα διάβασμα και επανέρχεσαι όταν τα μάθεις! Τρίτων, μένα μου έδωσαν την εικόνα και μου είπαν ΦΤΙΑΞΤΟ! ναι αλλά προτού γίνει αυτό ο καθηγητής που σας κάνει ψηφιακά ή σχεδίαση VLSI σας έκανε κάποιες διαλέξεις. Αν εσύ δεν πάτησες ποτέ είναι άλλο θέμα...Μην τα λέμε όπως μας βολεύει! Τέλος ο "κώδικας σου" είναι αντιγραφή από το γνωστό βιβλίο Digital Design: Principles and Practices του John F. Wakerly 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα