billakoss Δημοσ. 23 Μαΐου 2010 Δημοσ. 23 Μαΐου 2010 Καλησπερα ,ε χω ενα προβληματακι με μια ασκηση στην vhdl. Εχω ενα συστημα το οποιο θα παιρνει δυο εισοδους Α και Β και ενα διακοπτη s , οταν ο διακοπτης εχει '00' τοτε θα εμφανιζει στο 7segment τους αριθμους που εχω βαλει , οταν το s ειναι '01' τοτε οποιος ειναι μεγαλυτερος απο τους 2 θα τον εμφανιζει. Εχω φτιαξει αυτο στο alu.vhd , βαζω και δευτερη εξοδο που θα πηγαινει το μεν f1 στο seg1 και το f2 στο seg 2 για την εμφανιση των αριθμων LIBRARY ieee; USE ieee.STD_LOGIC_1164.all; USE ieee.STD_LOGIC_UNSIGNED.ALL; ENTITY ALU IS PORT (S:IN STD_LOGIC_VECTOR(1 DOWNTO 0); A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); F1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); F2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C:OUT STD_LOGIC); END ALU; ARCHITECTURE BEHAVIOR OF ALU IS BEGIN PROCESS(S,A, BEGIN CASE S IS WHEN "00" => F1 <= 'A'; F2 <= 'B'; WHEN "01" => IF A > B THEN F1 <= 'A'; ELSE F2 <= 'B'; END IF; WHEN "10" =>F<= '0'; WHEN "11" =>F<= '0'; WHEN OTHERS=>F<="1111"; END CASE; END PROCESS; END BEHAVIOR; seg1 και 2, ειανι δυο αρχεια αλλα με το ιδιο κωδικα LIBRARY ieee; USE ieee.STD_LOGIC_1164.all; --×ÑÇÓÉÌÏÐÏÉÏÕÌÅ ÔÇÍ STD_LOGIC_1164 ÂÉÂËÉÏÈÇÊÇ-- ENTITY seg1 IS PORT (I:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Cin:IN STD_LOGIC; led_a : BUFFER STD_LOGIC ; led_b : BUFFER STD_LOGIC ; led_c : BUFFER STD_LOGIC ; led_d : BUFFER STD_LOGIC ; led_e : BUFFER STD_LOGIC ; led_f : BUFFER STD_LOGIC ; led_g : BUFFER STD_LOGIC ); END seg1; ARCHITECTURE BEHAVIOR OF seg1 IS --ÏÑÉÆÏÕÌÅ ÔÇÍ ÓÕÌÐÅÑÉÖÏÑÁ ÔÏÕ ÊÕÊËÙÌÁÔÏÓ ÌÅ ÔÉÓ ÐÁÑÁÊÁÔÙ ÅÍÔÏËÅÓ-- signal leds :STD_LOGIC_VECTOR(7 DOWNTO 1); BEGIN PROCESS(I,Cin) BEGIN IF CIN='1' THEN LEDS<="1111110"; ELSE CASE I IS WHEN "0000" => LEDS<="0000001"; WHEN "0001" => LEDS<="0000001"; WHEN "0010" => LEDS<="0000001"; WHEN "0011" => LEDS<="0000001"; WHEN "0100" => LEDS<="0000001"; WHEN "0101" => LEDS<="0000001"; WHEN "0110" => LEDS<="0000001"; WHEN "0111" => LEDS<="0000001"; WHEN "1000" => LEDS<="0000001"; WHEN "1001" => LEDS<="0000001"; WHEN "1010" => LEDS<="1001111"; WHEN "1011" => LEDS<="1001111"; WHEN "1100" => LEDS<="1001111"; WHEN "1101" => LEDS<="1001111"; WHEN "1110" => LEDS<="1001111"; WHEN "1111" => LEDS<="1001111"; WHEN OTHERS => LEDS<="1111110"; END CASE; END IF; led_a <= leds(7); led_b <= leds(6); led_c <= leds(5); led_d <= leds(4); led_e <= leds(3); led_f <= leds(2); led_g <= leds(1); END PROCESS; END BEHAVIOR; Δεν ξερω κατα ποσο ειναι σωστο κατι τετοιο κυριως στο alu.vhd. οποιος μπορει ας βοηθησει ευχαριστω
Dr.Fuzzy Δημοσ. 23 Μαΐου 2010 Δημοσ. 23 Μαΐου 2010 Αρχικά βάζε τον κώδικα σου μέσα σε tags για να ευανάγνωστος! 1. Ο κώδικας σου είναι κακογραμμένος. 2. Το buffer std_logic δεν είναι RTL και καλό θα ήταν να το αποφύγεις. out std_logic και στα constraints της synthesis θα του πεις να κάνει infer buffer. 3. Όλο το σύστημα μπορεί να περιγραφεί σε ένα αρχείο με δύο combinatorial processes, ένα process για τη σύγκριση και ένα ένα process για το decoding των 7-segment. 4. Πρόσεξε τα σήματα που βάζεις στο sensitivity list των process σου, σιγουρέψου ότι είναι complete! 5. Διάβασε λίγο VHDL για έχεις ξεκινήσει στραβά!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.