simultánne použitie stúpania a klesania hrana

A

arshad_mir

Guest
Nazdar,

Chcem urobiť nejakú aktivitu na oboch stúpajúcej a klesajúcej hrane signálu (povedzme tick_ip) a niektoré iné aktivity, pokiaľ nie je stúpajúci alebo klesajúci hraneif (tick_ip 'udalosť a tick_ip = '1') then
next_clockout <= '1 ';
iné
next_clockout <= '0 ';

end if;

if (tick_ip 'udalosť a tick_ip = '0') then
next_clockout_new <= '1 ';
iné
next_clockout_new <= '0 ';

end if;

Ale kompilátor nie je schopný syntetizovať to.Môže niekto pomôcť mne mimo

 
Chcete použiť "tick_ip", ako ur hodiny!
Tak čo ur snažia robiť, je immpossible so súčasnými nástrojmi na syntézu.
Mali by ste sa snažiť robiť nejaké asynchrónne digitálne
dizajn, ktorý nie je podporovaný súčasnú syntézou nástroje!
Dúfam, že máš môj názor

 
V mojej predchádzajúcej otázku, čo by som chcel spomenúť, je:

if (tick_ip'event), potom
clock_out <= '1 ';
iné
clock_out <= '0 ';
end if;

Nie som schopný syntetizovať to.

 
arshad_mir Napísal:

V mojej predchádzajúcej otázku, čo by som chcel spomenúť, je:if (tick_ip'event), potom

clock_out <= '1 ';

iné

clock_out <= '0 ';

end if;Nie som schopný syntetizovať to.
 
arshad_mir Napísal:

V mojej predchádzajúcej otázku, čo by som chcel spomenúť, je:if (tick_ip'event), potom

clock_out <= '1 ';

iné

clock_out <= '0 ';

end if;Nie som schopný syntetizovať to.
 
To je možné, ale musíte ho rozdeliť na 2 rôzne procesy.Jeden proces bude zodpovedný za prevádzku na okrajoch rastie.A za druhé - na hrane pádu.

 
Hi arshad_mir,

Pamätajte si, že to, čo píšete vo VHDL popisuje logické prvky alebo flip flop.
Pri použití my_signal'event argument, bude vždy sysnthesiser mapu my_signal na hodiny vstupe flilp flop (alebo naopak hodiny pre zostupný hrana ...).
Zdá sa, že to, čo chcete urobiť, je zistiť stúpajúci alebo klesajúci hrane signálu.
Ak váš signál je pomalé a že máte globálneho hodinového signálu v návrhu (napr.: signál pri 1 kHz a hodiny na 10 MHz ...), môžete urobiť pre detekciu:

Citácia:process (CLK, reset_n)

začať

Ak reset_n = '0 ', potom

signal_d <= '0 ';

clk'event a elsif clk = '1 ', potom

signal_d <= signál;

Ak signal_d / = signál potom - detekcia hrán

output <= '1 ';

iné

output <= '0 ';

end if;

end if;

end process;

 
Chcem tiež upozorniť, že nielen coolrunnerII, ktorí majú dvojité hodiny FF, Virtex-II, Spartan3 a Virtex-4 majú dvojité hodiny FF, ktorý je DDR na FF IOB.

 
Ak používate systém VHDL, myslím, že to nemožno urobiť.
I'm using the @ lter palube, ale môj text knihy a dosky potvrdzuje aj toto.

Problém je sa snažíte použiť rovnaký signál dvakrát.

Príklad:
Proces (hodiny)
if (clock'event a hodiny = '1 ') - predný okraj
potom ...
end if;
end process;

Proces (hodiny)
if (clock'event a hodiny = '0 ') - zostupný hrana
potom ...
end if;
end process;

tento kód nebude fungovať, pretože môžete používať iba hodiny v jednom procese.takže compiller bude generovať nejakú chybu, zvyčajne sa zamerajú na jeden jediný, a disreguard ďalší proces, a nie syntetizovať druhý proces.

sa snaží robiť to takhle zlyhá aj
Príklad:
Proces (hodiny)
if (clock'event a hodiny = '1 ') - predný okraj
potom ...
elsif (clock'event a hodiny = '0 ') --
potom ...
iné
robiť nič;
end if;
end process;

Problém je, môžete použiť clock'event raz.opäť problém je prvá akcia je na prednú hranu, ale kompilátor bude sťažovať na druhej udalosti.

Možno je to ale naopak, som nenašla ešte jeden.Dúfam, že nejaký člen môže a našiel cestu, pretože by to pomôže aj mňa.

Opäť to bolo s použitím byte blaster 2.Mal som projekt, ktorý má v škole (build mini CPU) pomocou jazyka VHDL a mal som rovnaké problémy tiež.

Moje vstupy pre pomoc a ďalšiu diskusiu.
wa

 
WA Napísal:

Ak používate systém VHDL, myslím, že to nemožno urobiť.

....

Problém je sa snažíte použiť rovnaký signál dvakrát.

 
ace-x napísalCitácia:

Teraz, pokiaľ ide o váš problém - som si úplne istý, že to je preto, že sa snažíte priradiť rovnaký signál v rôznych procesoch.
To by mohlo viesť k problémom, pretože rovnaký signál je nútený niekoľko vodičov.
 
Opäť budete musieť použiť rôzne postupy, pokiaľ chcete používať hodiny dvakrát.

statement on clock.

V iných slovách, v jednom procese budete môcť používať len jeden v prípade
vyhlásenia o hodiny.

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

To preto, že konštrukcia jazyka VHDL, ako IF (clk'event a CLK = '1 ')
nie je analyzovaný / syntetizuje ako logická výstavba kompilátorom - je to len uznaný ako prefix, že zvyšok procesu predstavuje synchrónny časť.A pretože každý flip-flop v FPGA / CPLD zvyčajne má len jeden vstup hodiny, preto nemôžeme robiť akcie na oboch stranách sa rovnakým FF (flip-flop), ale môžeme urobiť akciu s jedným FF na pozitívne okraj, s druhý na negatívne a potom nejako pripojiť výsledok na logickej úrovni.Dúfam, že opravy si nižšie uvedené príklady budú jasné to.

Tu sú vaše príklady re-písaný dodržiavať popísaných pravidiel:

Kód:pROCESS (CLK)

BEGIN

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

IF (load = '1 ') THEN

q <= p;

END IF;

END IF;

End if;

PROCESS (CLK)

BEGIN

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

IF (count_ena = '1 ') THEN

p <= q 1;

END IF;

END IF;

END PROCES
 
Môžete použiť "NCLK <= NOT CLK," a dva "proces (ČLK)" a "proces (NCLK)"

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Úsmev" border="0" />
 
Najlepším riešením tohto problému je napísať tri samostatné procesy - je závislý na prednú hranu, ostatné závisí na klesajúcej hrane a tretí nezávislé na signálu

 
Som Súhlasím s Crazyman, pri ktorej sa používajú rôzne postupy.

 
Hey all,
to môže fungovať ... skús to ... a dajte mi vedieť ...
Postup: 1
začať
if (tick_ip'event), potom
signál <= pre_Signal_state;
iné
signál <= current_signal_state;
end if;
ukončenie procesu 1;

Proces: 2
začať
if (tick_ip'event a tip_ip = '0 ') thenend ifMôžete tiež vyskúšať zo štátnych stroj ..., Ktoré môžu fungovať

 

Welcome to EDABoard.com

Sponsor

Back
Top