FAQ | Points | Add... | Recent posts | Search | Register | Log in


VHDL - Połączenie komponentów - port map


Post new topic  This topic is locked      Main Page -> Forum Index -> Microcontrollers Generally -> Programmable Systems -> VHDL - Połączenie komponentów - port map
Author
Message
Szef_FBI
Poziom 14
Poziom 14


Joined: 28 Jun 2005
Posts: 163
Location: Jelenia Góra

Post#1 Post from the author of the topic 13 Dec 2011 12:21   

VHDL - Połączenie komponentów - port map


Witam serdecznie.

Wykonałem projekt kodera/dekodera kodu liniowego Hamminga 7,4 w VHDL.
Cały projekt był jednym modułem, co nie podobało się prowadzącemu, więc zgodnie z zasadami projektowania, chcę teraz podzielić mój projekt na moduły.

Wygladałoby to tak:

Top.vhd - odpowiada za wczytanie danych -> wysłanie ich do modułu koder/dekoder, a następnie odebranie gotowych danych i wyrzucenie ich na fizyczny port

Koder.vhd - moduł kodera

Dekoder.vhd - moduł dekodera

Poniżej zamieszczam spis portów dla modułów kodera i dekodera.
Całego kodu nie ma chyba sensu prezentować, wszystko działa jak należy :D

Code VHDL - [expand]
 
entity Koder is
Port (
clk : in STD_LOGIC;-- Sygnał zegarowy
reset : in STD_LOGIC;-- Reset
wczytaj_dane : in STD_LOGIC;-- Przycisk uruchamiajacy wczytywanie danych
dane_we_koder : in STD_LOGIC_VECTOR (0 to 3);-- Wektor wejsciowy dla kodera ( 4 bity )
dane_wy_koder : out STD_LOGIC_VECTOR (0 to 6)); -- Wektor wyjsciowy po zakodowaniu ( 7 bitow )
 
 
end Koder;
 
architecture Behavioral of Koder is
 
signal dane_we_k : STD_LOGIC_VECTOR(0 to 3):= (others => '0'); -- Sygnal danych wejsciowych dla kodera
signal dane_wy_k : STD_LOGIC_VECTOR(0 to 6):= (others => '0'); -- Sygnal danych wyjsciowych kodera
signal temp_k : STD_LOGIC_VECTOR(0 to 3):= (others => '0'); -- Wektor tymczasowy do wykonywania operacji XOR


Code VHDL - [expand]
entity Dekoder is
Port (
clk : in STD_LOGIC;-- Sygnał zegarowy
reset : in STD_LOGIC;-- Reset
wczytaj_dane : in STD_LOGIC;-- Przycisk uruchamiajacy wczytywanie danych
wyjscie_bledu : out STD_LOGIC;-- Wyjscie na ktorym pojawia sie komunikat o bledzie odebranego wektora (1)
dane_we_dekoder : in STD_LOGIC_VECTOR (0 to 6); -- Wektor wejsciowy dla dekodera ( 7 bitow )
dane_wy_dekoder : out STD_LOGIC_VECTOR (0 to 3));-- Wektor wyjsciowy po zdekodowaniu ( 4 bitoy )
 
end Dekoder;
 
architecture Behavioral of Dekoder is
 
signal dane_we_d : STD_LOGIC_VECTOR(0 to 6):= (others => '0'); -- Sygnal danych wejsciowych dla dekodera
signal dane_wy_d : STD_LOGIC_VECTOR(0 to 3):= (others => '0'); -- Sygnal danych wyjsciowych dekodera
signal temp_d : STD_LOGIC_VECTOR(0 to 6):= (others => '0'); -- Wektor tymczasowy do wykonywania operacji XOR
signal syndrom : STD_LOGIC_VECTOR(0 to 2):= (others => '0'); -- Wektor z syndromem
signal blad : integer range 0 to 8 :=8 ; -- Sygnal bledu dekodowania ( przenoszony na wyjscie fizyczne )



Poniżej znajduje się proces wczytywania danych, jak widać dane były wczytywane z portu na sygnał wewnętrzny.
Code VHDL - [expand]
 
wczytywanie_danych : process (wczytaj_dane, reset, dane_we_koder, dane_we_dekoder)-- Proces realizujacy rejestr wejsciowy pierwszego stopnia
begin
if reset = '1' then
dane_we_k <= (others => '0');-- Zeruj dane wejsciowe po nacisnieciu reset
dane_we_d <= (others => '0');
elsif wczytaj_dane = '1' then
dane_we_k <= dane_we_koder;-- Wprowadz dane wejsciowe
dane_we_d <= dane_we_dekoder;
end if;
end process;


No i teraz rodzi się moje pytanie, jak wykonać mapowanie portów, aby funkcja wczytywania danych była w module Top i przenosiła dane wejściowe do poszczególnych modułów, a na koniec dane wyjściowe wracały do modułu Top na porty wyjścia?
VHDL - Połączenie komponentów - port map
Back to top
   
lss
Poziom 17
Poziom 17


Joined: 14 Dec 2008
Posts: 352
Location: Warszawa

Post#2 13 Dec 2011 13:55   

Re: VHDL - Połączenie komponentów - port map


Przecierze sam prawie zapisałeś to co ci trzeba. Skorzystaj z tego http://pl.wikibooks.org/wiki/VHDL/Przykłady_kodu jest tu pokazany bardzo prosto jak mapować. Na pewno zrozumiesz jak nie to pisz będziemy tłumaczyć.
Back to top
   
Google

Google Adsense


Post# 13 Dec 2011 13:55   





Back to top
   
Szef_FBI
Poziom 14
Poziom 14


Joined: 28 Jun 2005
Posts: 163
Location: Jelenia Góra

Post#3 Post from the author of the topic 13 Dec 2011 14:00   

Re: VHDL - Połączenie komponentów - port map


Czytałem już ten opis i o ile przy takich prostych bramkach wszystko łapię, to przy moim problemie robi się to już zbyt skomplikowane (mapowanie jest w 2 strony przecież).

W sumie to sam już nie wiem, czy subkomponenty mam dodawać do Top, czy odwrotnie...

Używam funkcji "View HDL Instantiation Template" z ISE.
Back to top
   
lss
Poziom 17
Poziom 17


Joined: 14 Dec 2008
Posts: 352
Location: Warszawa

Post#4 13 Dec 2011 14:27   

Re: VHDL - Połączenie komponentów - port map


a jaka jest relacja miedzy dekoderem a koderem oraz jakie maja byc I/O w topie
Back to top
   
Szef_FBI
Poziom 14
Poziom 14


Joined: 28 Jun 2005
Posts: 163
Location: Jelenia Góra

Post#5 Post from the author of the topic 13 Dec 2011 14:37   

Re: VHDL - Połączenie komponentów - port map


Między koderem i dekoderem nie ma żadnych relacji. Tak jak przedstawiłem to na obrazku.

W Topie chcę żeby były wejścia/wyjścia fizyczne (porty) dla kodera/dekodera, port błędu dekodera i cały proces wczytywania danych.

VHDL - Połączenie komponentów - port map
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 13 Dec 2011 14:37   





Back to top
   
lss
Poziom 17
Poziom 17


Joined: 14 Dec 2008
Posts: 352
Location: Warszawa

Post#6 13 Dec 2011 22:54helpful post - solution   

Re: VHDL - Połączenie komponentów - port map


Tworzysz sobie topa
Code VHDL - [expand]
entity top is
Port ( clk : in STD_LOGIC;-- Sygnał zegarowy
reset : in STD_LOGIC;-- Reset
wczytaj_dane : in STD_LOGIC;-- Przycisk uruchamiajacy wczytywanie danych
dane_we_koder : in STD_LOGIC_VECTOR (0 to 3);-- Wektor wejsciowy dla kodera ( 4 bity )
dane_we_dekodera : in STD_LOGIC_VECTOR (0 to 6);-- Wektor wejsciowy dla kodera ( 4 bity )
wyjscie_bledu : out STD_LOGIC;
dane_wy_koder : out STD_LOGIC_VECTOR (0 to 6);
dane_wy_dekoder : out STD_LOGIC_VECTOR (0 to 3));
end top;
Mając top zadeklarowany tworzysz sobie tak jak Tobie pokazałem w przykładzie z bramką komponenty które będziesz łączył czy z nich korzystał
Code VHDL - [expand]
component Koder is
Port ( clk : in STD_LOGIC;-- Sygnał zegarowy
reset : in STD_LOGIC;-- Reset
wczytaj_dane : in STD_LOGIC;-- Przycisk uruchamiajacy wczytywanie danych
dane_we_koder : in STD_LOGIC_VECTOR (0 to 3);-- Wektor wejsciowy dla kodera ( 4 bity )
dane_wy_koder : out STD_LOGIC_VECTOR (0 to 6)); -- Wektor wyjsciowy po zakodowaniu ( 7 bitow )
end component Koder;
 
component Dekoder is
Port ( clk : in STD_LOGIC;-- Sygnał zegarowy
reset : in STD_LOGIC;-- Reset
wczytaj_dane : in STD_LOGIC;-- Przycisk uruchamiajacy wczytywanie danych
wyjscie_bledu : out STD_LOGIC;-- Wyjscie na ktorym pojawia sie komunikat o bledzie odebranego wektora (1)
dane_we_dekoder : in STD_LOGIC_VECTOR (0 to 6); -- Wektor wejsciowy dla dekodera ( 7 bitow )
dane_wy_dekoder : out STD_LOGIC_VECTOR (0 to 3));-- Wektor wyjsciowy po zdekodowaniu ( 4 bitoy )
end component Dekoder;
Następnie deklarujesz sobie sygnały, rejestry które wykorzystasz sobie do łączenia komponentów czy do wprowadzenia do nich danych, przetrzymania etc.
Code VHDL - [expand]
signal wczytaj_dane_we: STD_LOGIC;
signal dane_we_k: STD_LOGIC_VECTOR (0 to 3);
signal dane_wy_k: STD_LOGIC_VECTOR (0 to 6);
signal dane_we_d: STD_LOGIC_VECTOR (0 to 6);
signal dane_wy_d: STD_LOGIC_VECTOR (0 to 3);

I tworzysz relacje zgodnie z tym prostym przykładem na podstawie bramki mapujemy komponenty.
Code VHDL - [expand]
 
Koder_Hamminga: port map ( clk => clk,
reset => reset,
wczytaj_dane => wczytaj_dane_we,
dane_we_koder=> dane_we_k,
dane_wy_koder=>dane_wy_k,
Dekoder_Hamminga: port map ( clk => clk,
reset => reset,
wczytaj_dane => wczytaj_dane_we,
dane_we_dekoder=> dane_we_d,
dane_wy_dekoder=>dane_wy_d,
 

Mając podłączone komponenty do do topa teraz trzeba zrobić relacje aby wysyłać i odbierać dane z tych sub komponentów.
Code VHDL - [expand]
 
wczytywanie_danych : process (wczytaj_dane, clk,reset, dane_we_koder, dane_we_dekoder)-- Proces realizujacy rejestr wejsciowy pierwszego stopnia
begin
if rising_edge(clk) then
if (reset = '1' )then
dane_we_k <= (others => '0');
dane_wy_k <= (others => '0');
dane_we_d <= (others => '0');
dane_wy_d <= (others => '0');
elsif (wczytaj_dane = '1') then
dane_we_k <= dane_we_koder;-- Wprowadz dane wejsciowe
dane_we_d <= dane_we_dekoder;
end if;
end if;
end process;
dane_wy_koder <= dane_we_k;
dane_wy_dekoder <= dane_wy_d;
 


Tak na szybko stworzyłem bez kompilatora można to uprościć ale chciałem abyś miał to uwidocznione. Podstawa rzecz rysuj sobie takie rzeczy na kartce a potem je przepisuj na kod to jest najwygodniejsza sprawa a jak nie to wygeneruj sobie komponenty do schematic'ka i połącz je za pomocą "rysunków" i już.
Pzdr.
Back to top
   
Szef_FBI
Poziom 14
Poziom 14


Joined: 28 Jun 2005
Posts: 163
Location: Jelenia Góra

Post#7 Post from the author of the topic 13 Dec 2011 23:22   

Re: VHDL - Połączenie komponentów - port map


No i nie działa, wysypało się spektakularnie ;)
ok, już działa, problem był w tym że dodałeś zerowanie wyjść, a tym steruje inny proces...

Wychodzi, że nie jest to do końca połączone...

VHDL - Połączenie komponentów - port map
Back to top
   
lss
Poziom 17
Poziom 17


Joined: 14 Dec 2008
Posts: 352
Location: Warszawa

Post#8 14 Dec 2011 09:09helpful post - solution   

Re: VHDL - Połączenie komponentów - port map


Zmień na to:
Code VHDL - [expand]
Koder_Hamminga: port map ( clk => clk,
reset => reset,
wczytaj_dane => wczytaj_dane_we,
dane_we_koder=> dane_we_koder,
dane_wy_koder=>dane_wy_k,
Dekoder_Hamminga: port map ( clk => clk,
reset => reset,
wczytaj_dane => wczytaj_dane_we,
wyjscie_bledu =>wyjscie_bledu,
dane_we_dekoder=> dane_we_dekoder,
dane_wy_dekoder=>dane_wy_dekoder,

Back to top
   
Google

Google Adsense


Post# 14 Dec 2011 09:09helpful post - solution   





Back to top
   
Szef_FBI
Poziom 14
Poziom 14


Joined: 28 Jun 2005
Posts: 163
Location: Jelenia Góra

Post#9 Post from the author of the topic 14 Dec 2011 11:42   

Re: VHDL - Połączenie komponentów - port map


Tak już też kombinowałem...
Back to top
   
tymon_x
Poziom 20
Poziom 20


Joined: 17 Jun 2010
Posts: 814
Location: Gdańsk

Post#10 14 Dec 2011 22:55   

Re: VHDL - Połączenie komponentów - port map


Code VHDL - [expand]
wczytywanie_danych : process (wczytaj_dane, clk,reset, dane_we_koder, dane_we_dekoder)-- Proces realizujacy rejestr wejsciowy pierwszego stopnia
begin
if rising_edge(clk) then
if (reset = '1' )then
dane_we_k <= (others => '0');
dane_wy_k <= (others => '0');
dane_we_d <= (others => '0');
dane_wy_d <= (others => '0');
elsif (wczytaj_dane = '1') then
dane_we_k <= dane_we_koder;-- Wprowadz dane wejsciowe
dane_we_d <= dane_we_dekoder;
end if;
end if;
end process;


Zagadka, co się stanie kiedy ani reset oraz wczytaj_dane nie będą miały wartości jeden ? I podawaj zawsze towarzyszące problemowi warningi...
Back to top
   
Szef_FBI
Poziom 14
Poziom 14


Joined: 28 Jun 2005
Posts: 163
Location: Jelenia Góra

Post#11 Post from the author of the topic 14 Dec 2011 23:32   

Re: VHDL - Połączenie komponentów - port map


Skoro kompilator nie wymagał instrukcji else, to przypuszczam że nic się nie stanie :)
Back to top
   
Szef_FBI
Poziom 14
Poziom 14


Joined: 28 Jun 2005
Posts: 163
Location: Jelenia Góra

Post#12 Post from the author of the topic 15 Dec 2011 14:14   

Re: VHDL - Połączenie komponentów - port map


Problem rozwiązany, może trochę metodą "na piechotę", ale ważne że działa :)

Bardzo pomocny okazał się kolega lss, serdeczne dzięki :D
Back to top
   
Post new topic  This topic is locked      Main Page -> Forum Index -> Microcontrollers Generally -> Programmable Systems -> VHDL - Połączenie komponentów - port map
Page 1 of 1
Similar topics
Problem z fragmentem kodu VHDL kalkulator w VHDL (2)
[vhdl składnia problem] Kruczki na instancje w VHDL? (2)
Port LPT, połączenie z masą (2)
VHDL - dwukierunkowe połączenie dwóch magistral (1)
[VHDL] Wprowadzanie wektorów poprzez port wejściowy (2)
[VHDL] Suma szeregu w VHDL (15)
[VHDL] zmienne w vhdl (2)

Page generation time: 0.248 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed