jednoczesne korzystanie z wznoszą się i opadają krawędzi

A

arshad_mir

Guest
Cześć,

Chcę zrobić kilka działalność zarówno wznoszą się i opadają krawędzi sygnału (np. tick_ip) i zrobić kilka innych działań, kiedy nie ma wzrostu lub spadku krawędziif (tick_ip "zdarzenie i tick_ip = '1 '), a następnie
next_clockout <= '1 ';
w przeciwnym razie
next_clockout <= '0 ';

end if;

if (tick_ip "zdarzenie i tick_ip = '0 '), a następnie
next_clockout_new <= '1 ';
w przeciwnym razie
next_clockout_new <= '0 ';

end if;

Ale kompilator nie jest w stanie go syntetyzować.Czy ktoś może mi pomóc

 
Czy chcesz użyć "tick_ip" jako ur zegar!
Ur To co staramy się robić to immpossible z obecnych narzędzi syntezy.
Należy spróbować jakiejś asynchronicznego cyfrowego
wzór, który nie jest obsługiwany przez obecne narzędzia synteza!
Hope you got my point

 
W moich wcześniejszych zapytań, co chciałem wspomnieć to:

if (tick_ip'event), a następnie
clock_out <= '1 ';
w przeciwnym razie
clock_out <= '0 ';
end if;

Nie jestem w stanie go syntetyzować.

 
arshad_mir napisał:

W moich wcześniejszych zapytań, co chciałem wspomnieć to:if (tick_ip'event), a następnie

clock_out <= '1 ';

w przeciwnym razie

clock_out <= '0 ';

end if;Nie jestem w stanie go syntetyzować.
 
arshad_mir napisał:

W moich wcześniejszych zapytań, co chciałem wspomnieć to:if (tick_ip'event), a następnie

clock_out <= '1 ';

w przeciwnym razie

clock_out <= '0 ';

end if;Nie jestem w stanie go syntetyzować.
 
Jest to możliwe, ale trzeba podzielić ją na 2 różne procesy.Jeden proces będzie odpowiedzialny za operacje na brzegach rośnie.A po drugie - na krawędzi upadku.

 
Arshad_mir Hi,

Pamiętaj, że to, co piszesz w VHDL opisuje elementy logiki lub flip flop.
podczas korzystania z my_signal'event argument sysnthesiser zawsze mapę my_signal na wejście zegara flilp flop (lub rewersu zegar do opadającego ...).
To, co wydaje się zrobić jest do wykrywania wzrostu lub objętych krawędzi sygnału.
Jeśli sygnał jest wolny i że masz globalnego sygnału zegarowego w projekcie (na przykład: sygnał 1 kHz i zegara przy 10 MHz ...), możesz to zrobić wykrywania:

Cytat:process (CLK, reset_n)

zacząć

jeśli reset_n = '0 'then

signal_d <= '0 ';

elsif clk'event i CLK = '1 'then

signal_d <= sygnał;

jeśli signal_d / = sygnał następnie - wykrywanie krawędzi

wyjściowej <= '1 ';

w przeciwnym razie

wyjściowej <= '0 ';

end if;

end if;

end process;

 
Pragnę również zauważyć, że nie tylko coolrunnerII którzy podwójnego FF zegar, Virtex-II, Spartan3 i Virtex-4 posiada podwójne FF zegar, który jest DDR FF na IOB.

 
Jeśli używasz VHDL, myślę, że nie można tego zrobić.
Używam @ pokładzie ltera, ale moja książka tekst i wyżywienie potwierdza to również.

Problem polega na ty próbujesz użyć tego samego sygnału dwukrotnie.

przykład:
process (zegar)
if (clock'event i zegar = '1 ') - Wzrastające zbocze
wtedy ...
end if;
end process;

process (zegar)
if (clock'event i zegar = '0 ') - falling edge
wtedy ...
end if;
end process;

ten kod nie zadziała, ponieważ można używać tylko zegar w jednym procesie.dzięki czemu compiller wygeneruje jakiś błąd, zwykle będzie to wyglądać w jednej tylko i disreguard inny proces i nie syntetyzują w drugim procesie.

staramy się robić to w ten sposób nie powiedzie się również
przykład:
process (zegar)
if (clock'event i zegar = '1 ') - Wzrastające zbocze
wtedy ...
elsif (clock'event i zegar = '0 ') --
wtedy ...
w przeciwnym razie
nic nie robić;
end if;
end process;

problem można użyć clock'event raz.znowu problem jest pierwszym przypadku jest krawędź rosną, ale kompilator będzie narzekać drugiego epizodu.

Być może istnieje sposób obejścia tego, ale ja nie znalazłem jeszcze.Mam nadzieję, że niektóre państwa mogą i znalazł sposób, ponieważ pomogłoby to ja też.

Znów był przy byte Blaster 2.Miałem projektu w szkole (build CPU mini) za pomocą VHDL i miałem te same problemy również.

Mój wkład w pomoc i do dalszej dyskusji.
wa

 
WA napisał:

Jeśli używasz VHDL, myślę, że nie można tego zrobić.

....

Problem polega na ty próbujesz użyć tego samego sygnału dwukrotnie.

 
ace-x napisałCytat:

Teraz, dotyczące problemu - Jestem całkiem pewien, że to dlatego, że próbuje się przypisać do tego samego sygnału w różnych procesach.
Mogłoby to doprowadzić do problemów, ponieważ sam sygnał zostaje zmuszony przez kilku kierowców.
 
Ponownie musisz używać różnych procesów, jeśli chcesz używać zegar dwa razy.

statement on clock.

W innych słowach, w jednym procesie, które możesz użyć tylko jednego, jeżeli
oświadczenie o zegar.

is not analyzed/synthesized as logic construction by compiler - it is just recognized as prefix that the rest of process represents synchronous part.

Wynika to z faktu budowy VHDL jak IF (clk'event i CLK = '1 ')
nie jest analizowany / syntetyzowane jak budownictwo logiki przez kompilator - to po prostu uznane za prefiks że reszta stanowi proces synchronicznego części.A ponieważ każdy flip-flop w FPGA / CPLD zazwyczaj ma tylko jeden zegar wejścia, więc nie możemy dokonywać działań na obu brzegach przy samym FF (flip-flop), ale możemy wprowadzić działania z jednym FF na pozytywne krawędzi, z sekund na negatywnych, a następnie dołączyć jakiś wynik na poziomie logiki.Mam nadzieję, że korekty swoich przykładach poniżej usunie tego.

Oto ponownej przykłady napisane przestrzegać opisanych zasad:

Kod:process (CLK)

BEGIN

IF (clk'EVENT i CLK = '1 ') THEN

IF (load = '1 ') THEN

q <= p;

END IF;

END IF;

End process;

Process (CLK)

BEGIN

IF (clk'EVENT i CLK = '1 ') THEN

IF (count_ena = '1 ') THEN

p <= q 1;

END IF;

END IF;

KONIEC PROCESU
 
Możesz użyć "NCLK <= NIE CLK;" oraz dwa "proces (CLK)" i "proces (NCLK)"

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Uśmiechać się" border="0" />
 
Najlepszym rozwiązaniem tego problemu jest napisanie trzech oddzielnych procesach - jeden zależy od brzegu rosną, inne zależne od krawędzi upadku i trzeci niezależny od sygnału

 
Ja zgadzam się z Crazyman, u trzeba używać różnych procesów.

 
Hej wszystkim,
może to praca ... try this ... i daj mi znać ...
Proces: 1
zacząć
if (tick_ip'event), a następnie
sygnał <= pre_Signal_state;
w przeciwnym razie
sygnał <= current_signal_state;
end if;
end process 1;

Proces: 2
zacząć
if (tick_ip'event i tip_ip = '0 '), a następnieend ifMożesz także spróbować użyć machiny państwowej ...że może również działać

 

Welcome to EDABoard.com

Sponsor

Back
Top