Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

VHDL - 2 wyświetlacze 7-segmentowe

edwin
-
-
Posty:2
Rejestracja:22 paź 2010, o 12:16
Lokalizacja:BI
VHDL - 2 wyświetlacze 7-segmentowe

Postautor: edwin » 22 paź 2010, o 12:38

Witam.
Jestem nowym użytkownikiem forum :).

Z VHDL'em mam styczność jedynie na studiach, więc nie jestem biegły w programowaniu w tym języku, proszę o wyrozumiałość. Właśnie natrafiłem na (zapewne) trywialny problem, do którego nie wiem jak podejść.

Chcę wyświetlić na 2 wyświetlaczach 7-segmentowych wartość ustawianą przełącznikami SW(7-0), przy czym wartości ustawiane przez SW(7-4) i SW(3-0) mają być wyświetlane niezależnie na wyświetlaczach hex0 i hex1. Stany od 1010 do 1111 mają być nieaktywne. Oto kod:
library ieee;
use ieee.std_logic_1164.all;

entity drugie is
port (
sw: in std_logic_vector(7 downto 0);
hex0: out std_logic_vector(0 to 6);
hex1: out std_logic_vector(0 to 6)
);
end drugie;

architecture program of drugie is
component glowny
port (
a,s,d,f,g,h,j,k : in std_logic;
z,w : out std_logic_vector(3 downto 0)
);
end component;
component dekoder
port (
dekoderIN : in std_logic_vector(3 downto 0);
dekoderOUT: out std_logic_vector(0 to 6)
);
end component;

signal d1 : std_logic_vector(3 downto 0);
signal d2 : std_logic_vector(3 downto 0);

begin
modul1 : glowny port map (sw(7),sw(6),sw(5),(sw(4),sw(3),sw(2),sw(1),sw(0), d1,d2;
e1 : dekoder port map (d1,hex0);
e2 : dekoder port map (d2,hex1);
end program;
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

entity glowny is
port (
a,s,d,f,g,h,j,k : in std_logic;
z,w : out std_logic_vector(3 downto 0);
);
end glowny;

architecture nazwa of glowny is
begin

-- Problem leży w tym miejscu poniżej
-- Nie wiem jak 'skojarzyć' bity wejściowe: a,s,d,f
-- w jeden 'sygnał' 4-bitowy 'z'
-- with select
z <= a,s,d,f

w <= g,h,j,k


end nazwa;
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
entity dekoder is
port (
dekoderIN: in std_logic_vector(3 downto 0);
dekoderOUT: out std_logic_vector(0 to 6)
);
end dekoder;

architecture dekoder of dekoder is
begin
with dekoderIN select
dekoderOUT <= "1001111" when "0001", -- 1
"0010010" when "0010", -- 2
"0000110" when "0011", -- 3
"1001100" when "0100", -- 4
"0100100" when "0101", -- 5
"0100000" when "0110", -- 6
"0001111" when "0111", -- 7
"0000000" when "1000", -- 8
"0000100" when "1001", -- 9
"0000001" when "0000", -- 0
"1001111" when others; -- ERROR: E
end dekoder;
Proszę o wskazówki, jakiej instrukcji użyć.

Piotr Czak
-
-
Posty:22
Rejestracja:1 lut 2009, o 20:07
Lokalizacja:Wejherowo

Postautor: Piotr Czak » 25 paź 2010, o 08:39

Witam,

rozwiązanie jest proste, wystarczy użyć funkcji konkatenacji czyli:

Kod: Zaznacz cały

z <= a & s & d & f; w <= g & h & j & k;
Dobra rada na przyszłość, nazwa modułu powinna mówić o tym co ten moduł ma robić, nazwa "główny" nic nie mówi. Ułatwi Ci to później orientowanie się w projekcie oraz innym osobą, gdy potrzebujesz pomocy.

Pozdrawiam
Piotr

edwin
-
-
Posty:2
Rejestracja:22 paź 2010, o 12:16
Lokalizacja:BI

Postautor: edwin » 29 paź 2010, o 16:09

Dzięki, działa.

Wróć do „PLD/FPGA i inne zagadnienia techniki cyfrowej”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości