EDITING VHDL DESIGNS
Μία σωστή VHDL σχεδίαση θα έχει μαζί μία οντότητα (entity) και μία αρχιτεκτονική (architecture). Μπορούμε να τις βάλουμε στο ίδιο αρχείο ή σε ξεχωριστά αρχεία. Αυτή είναι προσωπική επιλογή. Στο παράδειγμά μας θα υποθέσουμε ότι η οντότητα και οι αρχιτεκτονικές είναι σε διαφορετικά αρχεία.
Σε αυτό το παράδειγμα θα κατασκευάσουμε και θα εξομοιώσουμε έναν 4-bit καταχωρητή. Τα παρακάτω βήματα θα μας οδηγήσουν στην διαδικασία της δημιουργίας και compilation της οντότητας και αρχιτεκτονικών του καταχωρητή.
Για ευκολία όλα τα δεδομένα της σχεδίασης είναι τοποθετημένα στο παρακάτω directory στο CEC: $CLASS/ee560/qv_tutorial. Εσείς πρέπει να αντιγράψετε όλα τα δεδομένα σε αυτό το directory στο δικό σας τοπικό directory, που εσείς θέλετε να τοποθετήσετε τα εκπαιδευτικά (tutorial) δεδομένα (προτεινόμενο directory : ~/mentor/VHDL/tutorial. Ο κατάλογος mentor θα υπάρχει ήδη, αλλά εσείς πρέπει να δημιουργήσετε τους άλλους. Μπορείτε επίσης να εισάγετε τα δεδομένα μόνοι σας όπως αυτά θα αναπαραχθούν σε αυτό το tutorial.
1. Το πρώτο πράγμα που έχουμε να κάνουμε είναι να εισάγουμε την περιγραφή της οντότητας του καταχωρητή. Μπορούμε να χρησιμοποιήσουμε οποιοδήποτε κειμενογράφο (editor) που παράγει καθαρά ASCII αρχεία. Η οντότητα για τον 4-bit καταχωρητή είναι:
entity reg4 is
port (d0, d1, d2, d3, en, clk : in bit ;
q0, q1, q2, q3 : out bit ) ;
end entity reg4 ;
2. Τώρα μπορούμε να εισάγουμε την αρχιτεκτονική για αυτό το εξάρτημα. Θα χρησιμοποιήσουμε το μοντέλο συμπεριφοράς και θα ονομάσουμε αυτήν την αρχιτεκτονική behav .
architecture behav of reg4 is
begin
storage : process
variable stored_d0, stored_d1, stored_d2, stored_d3 : bit ;
begin
if en = ‘1’ and clk = ‘1’ then
stored_d0 := d0 ;
stored_d1 := d1 ;
stored_d2 := d2 ;
stored_d3 := d3 ;
end if ;
q0 <= stored_d0 after 5 ns ;
q1 <= stored_d1 after 5 ns ;
q2 <= stored_d2 after 5 ns ;
q3 <= stored_d3 after 5 ns ;
wait on d0, d1, d2, d3, en, clk ;
end process ;
end architecture ;
entity test_bench is
end entity test_bench ;
architecture test_reg4 of test_bench is
signal d0, d1, d2, d3, en, clk, q0, q1, q2, q3 : bit ;
begin
dut : entity work.reg4(behav)
port map (d0, d1, d2, d3, en, clk, q0, q1, q2, q3 ) ;
stimulus : process
begin
d0 <= ‘1’ ; d1<=’1’ ; d2<=’1’ ; d3<= ‘1’ ;
en <= ‘0’ ; clk <= ‘0’ ;
wait for 20 ns ;
en <= ‘1’ ; wait for 20 ns ;
clk <= ‘1’ ; wait for 20 ns;
d0 <= ‘0’ ; d1<=’0’ ; d2<=’0’ ; d3<= ‘0’ ; wait for 20 ns ;
en <= ‘0’ ; wait for 20 ns;
--…
wait ;
end process stimulus ;
end architecture test_reg4 ;