Implementacja w VHDL, sygnał zegarowy
Masz problem? Zapytaj na forum elektroda.pl
From: "Jarek" <lab_at_nospam_televox.pl>
Subject: Implementacja w VHDL, sygnał zegarowy
Date: Sat, 8 May 2004 16:22:57 +0200
Witam
Mam problem z implementacją układu opisanego w VHDLu gdy jeden z sygnałów
wykorzystywanych jako zegar NIE jest podłączny do linii zegara globalnego
(SPARTAN II XC2S50).
Poniższy fragment programu ma służyć do zatrzaskiwania młodszej części
adresu z multipleksowanej szyny adres/dane mikrokontrolera 8051.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Test is
Port (
uP_DA: in std_logic_vector (7 downto 0); -- dane adres z uP
uP_ALE: in std_logic; -- sygnal ALE z uP
(NIE jest podłączony do jednej z globalnych lini CLK)
SEG: out std_logic_vector (7 downto 0) -- wyswietlacz
);
end Test;
architecture Behavioral of Test is
signal ale_n: std_logic;
begin
ale_n <= uP_ALE;
LACH_ADDR: process (ale_n)
begin
if (ale_n'event and ale_n = '0') then
SEG(7 downto 0) <= uP_DA (7 downto 0);
end if;
end process;
end Behavioral;
niestety podczas procesu implementacji otrzymuję błąd
Using target part "2s50tq144-5".
ERROR:MapLib:93 - Illegal LOC on IPAD symbol "uP_ALE" or BUFGP symbol
"uP_ALE_BUFGP" (output signal=uP_ALE_BUFGP), IPAD-IBUFG should only be LOCed
to GCLKIOB site.
natomiast poniższy przykład implementuje się już poprawnie.
Zmieniono jedynie:
ale_n <= uP_ALE; na ale_n <= uP_ALE and NOTHING; gdzie linia
NOTHING zawsze w stanie '1'.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Test is
Port (
NOTHING: in std_logic;
uP_DA: in std_logic_vector (7 downto 0); -- dane adres z uP
uP_ALE: in std_logic; -- sygnal ALE z uP
(NIE jest podłączony do jednej z globalnych lini CLK)
SEG: out std_logic_vector (7 downto 0) -- wyswietlacz
);
end Test;
architecture Behavioral of Test is
signal ale_n: std_logic;
begin
ale_n <= uP_ALE and NOTHING;
LACH_ADDR: process (ale_n)
begin
if (ale_n'event and ale_n = '0') then
SEG (7 downto 0) <= uP_DA (7 downto 0);
end if;
end process;
end Behavioral;
Pozdrwiam
Jarek
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: Implementacja w VHDL, sygnał zegarowy
Date: Mon, 10 May 2004 13:24:44 +0200
On Sat, 8 May 2004 16:22:57 +0200, "Jarek" <lab_at_nospam_televox.pl> wrote:
Witam
Mam problem z implementacją układu opisanego w VHDLu gdy jeden z sygnałów
wykorzystywanych jako zegar NIE jest podłączny do linii zegara globalnego
(SPARTAN II XC2S50).
Prawidlowo - sygnaly zegarow i resetow sa puszczane w srodku scalaka
dedykowanymi liniami (maly czas propagacji, duzy fanout). Dlatego
zegary i resety musza byc na dedykowanych pinach.
Dlaczego uzywasz ALE jako zegar? Nie lepiej zrobic tak:
if(rising_edge(clk)) then
if(ALE='0') then
SEG(7 downto 0)<=uP_DA(7 downto 0);
end if;
end if;
CLK - to ten sam zegar, co procka.
Poza tym w drugim przykladzie uzywasz bramkowania zegara (gated
clock). Nie nalezy tego stosowac tez ze wzgledu na dedykowane linie
zegarowe. Poza tym w przypadku gated clock otrzymasz f_max ukladu
np: 1MHz zamiast 100MHz :-)
Generalna zasada to jest robienie ukladow synchronicznych. Jesli
robisz inaczej, to BARDZO DOKLADNIE musisz wiedziec co robisz, bo
uklad bedzie dzialac tak jak chce, a nie tak jak chce projektant.
--
Jerry
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Jarek" <lab_at_nospam_televox.pl>
Subject: Re: Implementacja w VHDL, sygnał zegarowy
Date: Tue, 11 May 2004 14:50:31 +0200
Użytkownik "jerry1111" <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
napisał w wiadomości news:h8pu90llvp6rdt3g1innioilv2kqt7fcm5_at_nospam_4ax.com...
On Sat, 8 May 2004 16:22:57 +0200, "Jarek" <lab_at_nospam_televox.pl> wrote:
Witam
Mam problem z implementacją układu opisanego w VHDLu gdy jeden z sygnałów
wykorzystywanych jako zegar NIE jest podłączny do linii zegara globalnego
(SPARTAN II XC2S50).
Prawidlowo - sygnaly zegarow i resetow sa puszczane w srodku scalaka
dedykowanymi liniami (maly czas propagacji, duzy fanout). Dlatego
zegary i resety musza byc na dedykowanych pinach.
Dlaczego uzywasz ALE jako zegar? Nie lepiej zrobic tak:
if(rising_edge(clk)) then
if(ALE='0') then
SEG(7 downto 0)<=uP_DA(7 downto 0);
end if;
end if;
Niestety linie uP_AD nie są stabline podczas całego okresu uP_ALE='0' więc
powyższa propozycja nie zadziała.
CLK - to ten sam zegar, co procka.
Nie procesor działa z innym zegaram niż układ FPGA
Poza tym w drugim przykladzie uzywasz bramkowania zegara (gated
clock). Nie nalezy tego stosowac tez ze wzgledu na dedykowane linie
zegarowe. Poza tym w przypadku gated clock otrzymasz f_max ukladu
np: 1MHz zamiast 100MHz :-)
Generalna zasada to jest robienie ukladow synchronicznych. Jesli
robisz inaczej, to BARDZO DOKLADNIE musisz wiedziec co robisz, bo
uklad bedzie dzialac tak jak chce, a nie tak jak chce projektant.
Jerry
Zdaję sobie sprawę z tego iż łączę dwa układy o różnych CLK.
Bardziej chodziło mi wyjaśnienie dlaczego w jednym przypadku układ może być
zaimplementowany a w drugim nie pomimo że w obu przypadkach sygnał uP_ALE
nie jest podłączony do dedykowanego zegara.
Pozdrawiam
Jarek
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Dziadek" <dziadek.l_at_nospam_wp.pl>
Subject: Re: Implementacja w VHDL, sygnał zegarowy
Date: Wed, 12 May 2004 09:01:20 +0200
Niestety linie uP_AD nie są stabline podczas całego okresu uP_ALE='0'
więc
powyższa propozycja nie zadziała.
Ale chyba sa stabline na ktoryms zboczu - nie?
Nie procesor działa z innym zegaram niż układ FPGA
To podlacz zegar proca do FPGA - Spartan-2 ma 4 wejscia zegarowe
Zdaję sobie sprawę z tego iż łączę dwa układy o różnych CLK.
A z problemow tez sobie zdajesz sprawe? Cytat z pamieci z grupy fpga:
"Uklady asynchroniczne robia tylko projektanci z bardzo duzym doswiadczeniem
i nowicjusze".
Bardziej chodziło mi wyjaśnienie dlaczego w jednym przypadku układ może
być
zaimplementowany a w drugim nie pomimo że w obu przypadkach sygnał uP_ALE
nie jest podłączony do dedykowanego zegara.
Bo taka jest struktura polaczen FPGA - AFAIR na siec globalna mozesz wejsc
tylko z wejscia zegarowego albo z DLL.
Pozdrawiam
Jarek
Pozdr.
Dz.
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.cyf-kr.edu.pl!not-for-mai
From: "toady" <duperelle_at_nospam_NOSPAM.o2.pl>
Subject: =?iso-8859-2?Q?Re:_Implementacja_w_VHDL=2C_sygna=B3_zegarowy?=
Date: Wed, 12 May 2004 09:28:42 +0200
Mam problem z implementacją układu opisanego w VHDLu gdy jeden z sygnałów
wykorzystywanych jako zegar NIE jest podłączny do linii zegara globalnego
(SPARTAN II XC2S50).
Masz 4 wejscia zegarowe w Spartanie, wiec podlacz sygnał ALE na jedno z
nich.
A potem musisz z komponentów wewn. utworzyć taki łańcuszek:
ALE_PIN -> IBUFG -> ewentualnie CLOCKDLL -> BUFG
-> sygnał ALE dostępny w projekcie
U mnie to wyglada tak:
entity ...
ALE_PIN : in std_logic; -- address latch
architecture ...
component IBUFG
port (I: in std_logic; O: out std_logic);
end component;
component BUFG
port (I: in std_logic; O: out std_logic);
end component;
signal ALE_SIG : std_logic;
signal ALE : std_logic;
begin
-- ALE signal
ALE_PAD: IBUFG port map (I=>ALE_PIN, O => ALE_SIG );
ALE_BUFG: BUFG port map (I=>ALE_SIG, O=>ALE);
-- Multiplexed address/data bus - latch address
Address_mux: process (ALE)
begin
if falling_edge(ALE) then
ADR_MUX <= LD_IN(15 downto 0);
end if;
end process;
--
pozdrawiam
toady
========
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mai