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

Vhdl


billakoss

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

Δημοσ.

Καλησπερα ,ε χω ενα προβληματακι με μια ασκηση στην 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,B)

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. οποιος μπορει ας βοηθησει ευχαριστω

Δημοσ.

Αρχικά βάζε τον κώδικα σου μέσα σε 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 για έχεις ξεκινήσει στραβά!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...