Βοήθεια με VHDL

S

sjamil02

Guest
Όλα Hi,

Είμαι νέος στην ψηφιακή σχεδίαση.Προσπάθησα να προσομοίωση κωδικό μου VHDL, συμπεριλαμβανομένης της testbench (βλέπε παρακάτω).

IEEE βιβλιοθήκη?
χρήση IEEE.std_logic_1164.all?

tb_keypad οντότητα

τέλος tb_keypad?

συμπεριφορά αρχιτεκτονική του είναι tb_keypad

keypad_in μήνυμα: std_logic_vector (6 downto 0)?
- Dec_in σήμα: std_logic_vector (3 downto 0)?
CLK μήνυμα: std_logic: = '0 '?
reset_N μήνυμα: std_logic?
καταμέτρηση μήνυμα: std_logic_vector (2 downto 0)?
- Καταμέτρηση μήνυμα: std_logic?
dec_out μήνυμα: std_logic_vector (3 downto 0)?
accept_out μήνυμα: std_logic?
error_out μήνυμα: std_logic?

συνιστώσα πληκτρολόγιο
λιμένα (keypad_in: σε std_logic_vector (6 downto 0)?
- Dec_in: σε std_logic_vector (3 downto 0)?
CLK: σε std_logic?
reset_N: σε std_logic?
count: std_logic_vector InOut (2 downto 0)?
dec_out: std_logic_vector InOut (3 downto 0)?
- Καταμέτρηση: έξω std_logic?
accept_out: std_logic έξω?
error_out: std_logic out)?

τέλος συνιστώσα?

αρχίσει

test_unit: πληκτρολόγιο
λιμένα χάρτη (keypad_in => keypad_in,
CLK => CLK,
count = μετράνε>,
dec_out = dec_out>,
reset_N = reset_N>,
accept_out = accept_out>,
error_out => error_out)?test_block: block
αρχίσει
<Keypad_in = "0001010",
"0000010" μετά από 100 ns,
"0000100" μετά από 200 ns,
"0000110" μετά από 300 ns,
"0001000" μετά από 400 ns,
"0001011" μετά από 500 ns,

"1111010" μετά από 600 ns,
"1110010" μετά από 700 ns,
"1110100" μετά από 800 ns,
"1110110" μετά από 900 ns,
"1111001" μετά το 1000 ns,
"1111011" μετά το 1100 ns?

<Reset_N = «0», «1» μετά από 50 ns, «0» μετά από 100 ns, «0» μετά από 200 ns?
<CLK = δεν CLK μετά από 30 ns?

τέλος μπλοκ?
συμπεριφορά τέλος?IEEE βιβλιοθήκη?

χρήση IEEE.std_logic_1164.all?

keypad_dec_lb οντότητα
τέλος keypad_dec_lb?decoder_logicblock αρχιτεκτονική του είναι keypad_dec_lb

σήματος σύνδεση: std_logic_vector (3 downto 0)?

keypad_dec_lb συνιστώσα είναι

λιμένα (key_pad: σε std_logic_vector (6 downto 0)?
CLK: σε std_logic?
reset_N: σε std_logic?
logblk_input: σε std_logic_vector (3 downto 0)?
accept_out: std_logic έξω?
error_out: std_logic έξω?
dec_out: std_logic_vector έξω (0 έως 3))?

τέλος keypad_dec_lb συνιστώσα?

skey_pad μήνυμα: std_logic_vector (6 downto 0)?
sclk μήνυμα: std_logic?
sreset_N μήνυμα: std_logic?
slogblk_input μήνυμα: std_logic_vector (3 downto 0)?
saccept_out μήνυμα: std_logic?
serror_out μήνυμα: std_logic?
sdec_out μήνυμα: std_logic_vector (0 έως 3)?

αρχίσει

keypad_unit: keypad_dec_lb

λιμένα χάρτη (key_pad> = skey_pad,
CLK => sclk,
reset_N = sreset_N>,
logblk_input = sdec_out>,
accept_out = saccept_out>,
error_out = serror_out>,
dec_out => συνδεθείτε
)?

decoder_logicblock τέλος?IEEE βιβλιοθήκη?
χρήση IEEE.std_logic_1164.all?

πληκτρολόγιο οντότητα
λιμένα (key_pad: σε std_logic_vector (6 downto 0)?
CLK: σε std_logic?
reset_N: σε std_logic?
logblk_input: σε std_logic_vector (3 downto 0)?
accept_out: std_logic out: = '0 '?
error_out: std_logic έξω?
dec_out: std_logic_vector έξω (0 έως 3))?

τέλος πληκτρολόγιο?Αρχιτεκτονική rtl_decoder του πληκτρολογίου είναι

αρχίσει
διαδικασία (CLK)
αρχίσει

key_pad υπόθεση
ΟΤΑΝ "0110111" => dec_out <= "0001"?
ΟΤΑΝ "1010111" => dec_out <= "0010"?
ΟΤΑΝ "1100111" => dec_out <= "0011"?
ΟΤΑΝ "0111011" => dec_out <= "0100"?
ΟΤΑΝ "1011011" => dec_out <= "0101"?
ΟΤΑΝ "1101011" => dec_out <= "0110"?
ΟΤΑΝ "0111101" => dec_out <= "0111"?
ΟΤΑΝ "1011101" => dec_out <= "1000"?
ΟΤΑΝ "1101101" => dec_out <= "1001"?
ΟΤΑΝ "0111110" => dec_out <= "0000"?
ΟΤΑΝ "1011110" => dec_out <= "1010"?
ΟΤΑΝ "1101110" => dec_out <= "1011"?

Όταν οι άλλοι => dec_out <= "XXXX"?

περίπτωση λήξης?

διαδικασία τέλος?

rtl_decoder τέλος?

IEEE βιβλιοθήκη?
χρήση IEEE.std_logic_1164.all?

keypad_lb οντότητα
λιμένα (key_pad: σε std_logic_vector (6 downto 0)?
CLK: σε std_logic?
reset_N: σε std_logic?
logblk_input: σε std_logic_vector (3 downto 0)?
accept_out: std_logic out: = '0 '?
error_out: std_logic έξω?
dec_out: std_logic_vector έξω (0 έως 3))?

τέλος keypad_lb?logic_block_rtl αρχιτεκτονική του είναι keypad_lb

σήμα εισόδου: std_logic_vector (3 downto 0)?

σήματος output_1: std_logic_vector (3 downto 0)?
σήματος output_2: std_logic_vector (3 downto 0)?
σήματος output_3: std_logic_vector (3 downto 0)?
σήματος output_4: std_logic_vector (3 downto 0)?
σήματος output_5: std_logic_vector (3 downto 0)?
σήματος output_6: std_logic_vector (3 downto 0)?

ΤΥΠΟΣ byte_cnt IS (cnt1, cnt2, cnt3, cnt4, cnt5, cnt6)?
ΣΗΜΑ byte_cnt_state: byte_cnt: = cnt1?

αρχίσει

διαδικασία (CLK, byte_cnt_state)
μεταβλητή count: ακέραιος: = 0?

αρχίσει

IF (reset_N = '1 ') ΤΟΤΕ
<Accept_out = "0"?
<Error_out = "0"?
count: = 0?
byte_cnt_state <= cnt1?
ΑΛΛΟ
byte_cnt_state <= cnt1?

τέλος, αν?

byte_cnt_state υπόθεση

όταν cnt1 =>
output_1 <= logblk_input?
εάν (output_1 = "1010"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt2?
αλλιώς
byte_cnt_state <= cnt2?
τέλος, αν?

όταν cnt2 =>
output_2 <= logblk_input?
εάν (output_2 = "0010"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt3?
αλλιώς
byte_cnt_state <= cnt3?
τέλος, αν?

όταν cnt3 =>
output_3 <= logblk_input?
εάν (output_3 = "0100"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt3?
αλλιώς
byte_cnt_state <= cnt3?
τέλος, αν?

όταν cnt4 =>
output_4 <= logblk_input?
εάν (output_4 = "0110"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt5?
αλλιώς
byte_cnt_state <= cnt5?
τέλος, αν?

όταν cnt5 =>
output_5 <= logblk_input?
εάν (output_1 = "1000"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt6?
αλλιώς
byte_cnt_state <= cnt6?
τέλος, αν?

όταν cnt6 =>
output_6 <= logblk_input?
εάν (output_1 = "1011"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt1?
αλλιώς
byte_cnt_state <= cnt1?
τέλος, αν?

όταν οι άλλοι =>
byte_cnt_state <= cnt1?

περίπτωση λήξης?

if (count = 6), στη συνέχεια
<Accept_out = '1 '?
<Error_out = "0"?
byte_cnt_state <= cnt1?
αλλιώς
<Accept_out = "0"?
<Error_out = '1 '?
byte_cnt_state <= cnt1?

τέλος, αν?

διαδικασία τέλος?

logic_block_rtl τέλος?

************************************************** *****************

Μπορώ να καταρτίζουν το αρχείο με επιτυχία, ωστόσο αυτό gaves σφάλμα όταν θα ξεκινήσει η προσομοίωση μου.

# ** Error: C: / ModelSim 6.4/VHDL/Keypad/src/KeypadTB.vhd (42): Bad προεπιλογή δεσμευτική για παράδειγμα συνιστώσα "test_unit: πληκτρολόγιο".
# (Component port "μετράνε" δεν είναι κατά της οντότητας.)
# ** Προειδοποίηση: [1] C: / ModelSim 6.4/VHDL/Keypad/src/KeypadTB.vhd (42): (Vopt-3473), Component παράδειγμα "test_unit: πληκτρολόγιο" δεν είναι συνδεδεμένο.
# Βελτιστοποίηση απέτυχε
# Σχεδιασμού φόρτωσης Error

Παρακαλώ βοηθήστε.

εβίβα
sj

 
Γεια σου,

Η συνιστώσα δήλωση μιας οντότητας πρέπει να ταιριάζει με το πρόσωπο ακριβώς, οπότε η συνιστώσα πληκτρολόγιο πρέπει να έχει τα ίδια λιμάνια (όνομα, διεύθυνση, τύπος), καθώς η οικονομική οντότητα πληκτρολόγιο.Στην περίπτωσή σας δεν είναι (για παράδειγμα, το στοιχείο που έχει ένα λιμάνι «μετράνε», όπου η οντότητα δεν έχει), οπότε ο προσομοιωτής δεν μπορεί να βρει την οντότητα που ανήκει στη συνιστώσα.

Devas

 
Thks devas.

Έχω ένα άλλο πρόβλημα.Προσπάθησα να γράψω VHDL κώδικα παρακάτω.σωστό συνδυασμό είναι εγγεγραμμένος, σήμα '= accept_out υψηλή »και« error_out »= Όταν Χαμηλή.Μπορώ να καταρτιστούν με επιτυχία τον κώδικα και εκτελέστηκε με επιτυχία την προσομοίωση.Ωστόσο, το σήμα δεν παρέχει τη σωστή λειτουργία.

Παρακαλώ να με βοηθήσει τον εντοπισμό σφαλμάτων.

IEEE βιβλιοθήκη?
χρήση IEEE.std_logic_1164.all?

tb_keypad_lb οντότητα

τέλος tb_keypad_lb?

συμπεριφορά αρχιτεκτονική του είναι tb_keypad_lb

key_pad μήνυμα: std_logic_vector (3 downto 0)?
CLK μήνυμα: std_logic: = '0 '?
reset_N μήνυμα: std_logic?
accept_out μήνυμα: std_logic?
error_out μήνυμα: std_logic?

συνιστώσα keypad_lb
λιμένα (key_pad: σε std_logic_vector (3 downto 0)?
CLK: σε std_logic?
reset_N: σε std_logic?
accept_out: std_logic έξω?
error_out: std_logic out)?

τέλος συνιστώσα?

αρχίσει

test_unit: keypad_lb
λιμένα χάρτη (key_pad> = key_pad,
CLK => CLK,
reset_N = reset_N>,
accept_out = accept_out>,
error_out => error_out)?test_block: block
αρχίσει
key_pad <= "1010",
"0010" μετά από 100 ns,
"0100" μετά από 200 ns,
"0110" μετά από 300 ns,
"1000" μετά από 400 ns,

"1011" μετά από 500 ns,
"1111" μετά από 600 ns,
"1010" μετά από 700 ns,
"0111" μετά από 800 ns,
"1011" μετά από 900 ns,
"1101" μετά το 1000 ns,
"0111" μετά το 1100 ns,
"1011" μετά το 1200 ns,
"1101" μετά από 1300 ns?

<Reset_N = «0», «1» μετά από 50 ns, «0» μετά από 100 ns, «0» μετά από 200 ns?
<CLK = δεν CLK μετά από 30 ns?

τέλος μπλοκ?
συμπεριφορά τέλος?IEEE βιβλιοθήκη?
χρήση IEEE.std_logic_1164.all?
ieee.std_logic_arith.all χρήση?
ieee.std_logic_unsigned.all χρήση?

keypad_lb οντότητα
λιμένα (key_pad: σε std_logic_vector (3 downto 0)?
CLK: σε std_logic?
reset_N: σε std_logic?
accept_out: std_logic out: = '0 '?
error_out: std_logic out)?

τέλος keypad_lb?logic_block_rtl αρχιτεκτονική του είναι keypad_lb

σήμα εισόδου: std_logic_vector (3 downto 0)?

σήματος input_1: std_logic_vector (3 downto 0)?
σήματος input_2: std_logic_vector (3 downto 0)?
σήματος input_3: std_logic_vector (3 downto 0)?
σήματος input_4: std_logic_vector (3 downto 0)?
σήματος input_5: std_logic_vector (3 downto 0)?
σήματος input_6: std_logic_vector (3 downto 0)?

ΤΥΠΟΣ byte_cnt IS (cnt1, cnt2, cnt3, cnt4, cnt5, cnt6)?
ΣΗΜΑ byte_cnt_state: byte_cnt: = cnt1?

αρχίσει

διαδικασία (CLK, byte_cnt_state)
μεταβλητή count: ακέραιος: = 0?

αρχίσει

IF (reset_N = '1 ') ΤΟΤΕ
<Accept_out = "0"?
<Error_out = "0"?
count: = 0?
byte_cnt_state <= cnt1?
ΑΛΛΟ
byte_cnt_state <= cnt1?

τέλος, αν?

byte_cnt_state υπόθεση

όταν cnt1 =>
input_1 <= key_pad?
εάν (input_1 = "1010"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt2?
αλλιώς
byte_cnt_state <= cnt2?
τέλος, αν?

όταν cnt2 =>
input_2 <= key_pad?
εάν (input_2 = "0010"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt3?
αλλιώς
byte_cnt_state <= cnt3?
τέλος, αν?

όταν cnt3 =>
input_3 <= key_pad?
εάν (input_3 = "0100"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt3?
αλλιώς
byte_cnt_state <= cnt3?
τέλος, αν?

όταν cnt4 =>
input_4 <= key_pad?
εάν (input_4 = "0110"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt5?
αλλιώς
byte_cnt_state <= cnt5?
τέλος, αν?

όταν cnt5 =>
input_5 <= key_pad?
εάν (input_1 = "1000"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt6?
αλλιώς
byte_cnt_state <= cnt6?
τέλος, αν?

όταν cnt6 =>
input_6 <= key_pad?
εάν (input_1 = "1011"), τότε
count: = αριθμός 1?
byte_cnt_state <= cnt1?
αλλιώς
byte_cnt_state <= cnt1?
τέλος, αν?

όταν οι άλλοι =>
byte_cnt_state <= cnt1?

περίπτωση λήξης?

if (count = 6), στη συνέχεια
<Accept_out = '1 '?
<Error_out = "0"?
byte_cnt_state <= cnt1?
αλλιώς
<Accept_out = "0"?
<Error_out = '1 '?
byte_cnt_state <= cnt1?

τέλος, αν?

διαδικασία τέλος?

logic_block_rtl τέλος?εβίβα
sj

 
Γεια σου,

Η αρχιτεκτονική του keypad_lb έχει 1 διαδικασία με 3 ασύγχρονα τμήματα:
1.Αν-αλλού στη επαναφορά
2.Υπόθεση για την byte_cnt_state
3.Αν-αλλού στη μέτρηση

Σε nr.1 byte_cnt_state πάντα παίρνει την τιμή cnt1, οπότε δήλωση υπόθεσή σας εκτελεί πάντα "όταν cnt1 =>".Η δήλωσή σας σε αυτό όταν ο εν λόγω "byte_cnt_state <= cnt2" έρχεται σε αντίθεση με τη δήλωσή σας στο nr 1.Αυτή είναι μια πολύ επικίνδυνη κατάσταση ως έχει μέχρι εξομοιωτή σας αυτό που εκτελεί σε συγκεκριμένο χρονικό σημείο κατά το τελευταίο (nr. 1 ή nr. 2 εκχώρηση).

Δεν χρησιμοποιείτε οποιοδήποτε ρολόι σήμα σε αυτή τη διαδικασία.

Devas

 

Welcome to EDABoard.com

Sponsor

Back
Top