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

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

Δημοσ.

Καλησπέρα σας και καλό μήνα! Έχω να κάνω μια εργασία με θέμα την ρύθμιση των φαναριών σε μια διασταύρωση με χρήση της 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.

post-431374-0-01727400-1485951319_thumb.jpg

Δημοσ.

Αυτό που σου βγάζει δεν έχει σχέση με τον κώδικα αλλά με file permissions ή απλά δεν βρίσκει το αρχείο που αναφέρει. Επίσης οι κώδικες vhdl πρέπει να έχουν κατάληξη .vhd ή .vhdl

 

Τους κώδικες αυτούς τους έγραψες εσύ ή απλά σου δώσανε το φάκελο με το project και προσπαθείς να το τρέξεις;

Δημοσ.

 

Τα δύο φανάρια έχουν την ίδια ονομασία ΝS και τα άλλα δύο EW. Αυτό σημαίνει πως θα προγραμματίσω στην ουσία δύο φανάρια και τα οχήματα θα μπορούν να πάνε μονάχα ευθεία και δεξιά. 

 

 

Προφανώς το NS και το EW είναι το North-South και East-West (Το μεγάλο βελάκι με το Ν στο δρόμο) και δεν έχει σχέση που θα πάνε τα αυτοκίνητα.

Αυτά πηγαίνουν "συνήθως" όπου θέλουν οι οδηγοί  :-)

Για το πρόβλημα δεν καταλαβαίνω τον κώδικά αλλά το λάθος παραπέμπει σε αυτό που λέει ο Dr.Fuzzy 

Δημοσ.

εμένα μου έδωσαν την εικόνα και μου είπαν ΦΤΙΑΞΤΟ! οπότε επισκέφτηκα πολλά λινκς και διάβασα αρκετά για να το φέρω ως έχει... 

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

Δεν είναι απλά προφανές πως το NS και το EW είναι τα σημεία του ορίζοντα, είναι σίγουρο... ;) 

Στο κώδικα έχω (προσπαθήσει) να προγραμματίσω τα 2 φανάρια... υπάρχει ένας αισθητήρας που ενεργοποιεί τα φανάρια κάθε φορά που περνάει ένα όχημα... (timeshort>5 δεύτερα kai timelong>5 λεπτά)..

Pff δε ξέρω... 

Δημοσ.

Ρε συ ψηλέ, τσέκαρες τα δικαιώματα των αρχείων που σου πρότειναν; Δεξί κλικ, πρόπερτιζ και βγάλε το Read Only που πιθανώς θα έχει.

Δημοσ.

εμένα μου έδωσαν την εικόνα και μου είπαν ΦΤΙΑΞΤΟ! οπότε επισκέφτηκα πολλά λινκς και διάβασα αρκετά για να το φέρω ως έχει... 

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

Δεν είναι απλά προφανές πως το NS και το EW είναι τα σημεία του ορίζοντα, είναι σίγουρο... ;)

Στο κώδικα έχω (προσπαθήσει) να προγραμματίσω τα 2 φανάρια... υπάρχει ένας αισθητήρας που ενεργοποιεί τα φανάρια κάθε φορά που περνάει ένα όχημα... (timeshort>5 δεύτερα kai timelong>5 λεπτά)..

Pff δε ξέρω... 

Ξαναδιάβασε την αναφορά σφάλματος και αυτό που σου είπε ο Dr.Fuzzy.

Μετονόμασε το αρχείο σου από .vhd4 σε .vhdl, δες αν είναι το αρχείο μέσα στο σωστό φάκελλο(σωστό path) και ξαναπροσπάθησε

Δημοσ.

Πρώτων, για να σου μιλήσω ξεκάθαρα δεν μπορώ να πιστέψω ότι έχει γράψει τον κώδικα αυτό εσύ αλλά δεν μπορείς να φτιάξεις ένα απλό project στο modelsim και να κάνεις simulation και επίσης δε γνωρίζεις ότι η κατάληξη είναι .vhdl...Συγνώμη!

 

Δεύτερων, γνωρίζεις φαντάζομαι ότι η VHDL είναι κατά κύριο λόγο γλώσσα περιγραφής υλικού, έτσι; Αντιλαμβάνεσαι τι είναι RTL, behavioral, structural τύπος γραφής στη VHDL; Γνωρίζεις τι είναι top entity, τι είναι Testbench; Αν όχι, ξεκίνα διάβασμα και επανέρχεσαι όταν τα μάθεις!

 

Τρίτων, 

μένα μου έδωσαν την εικόνα και μου είπαν ΦΤΙΑΞΤΟ!

ναι αλλά προτού γίνει αυτό ο καθηγητής που σας κάνει ψηφιακά ή σχεδίαση VLSI σας έκανε κάποιες διαλέξεις. Αν εσύ δεν πάτησες ποτέ είναι άλλο θέμα...Μην τα λέμε όπως μας βολεύει!

 

Τέλος ο "κώδικας σου" είναι αντιγραφή από το γνωστό βιβλίο Digital Design: Principles and Practices του John F. Wakerly

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...