Re: VHDL - signaly v processu?

j.Krajinka@seznam.cz j.Krajinka@seznam.cz
Úterý Listopad 24 11:51:40 CET 2009


Predpokladam, ze  c_en := '0'; v prvnim prikladu je promenna ?


>U VHDL (pro syntezu)  povazuji za dulezite si uvedomit, ze to je jazyk
jenz popisuje realne zapojeni a je tedy nutne mit predstavu, jak by dany
obvod mel vypadat ve skutecnosti. Tedy i ja doporucuji si pri uceni
nejdrive nakreslit pozadovane schema a pak to prepsat do VHDL, nez to
cinit obracene. Muzete pouzit treba priklady zakladnich bloku treba tuto
stranku: http://esd.cs.ucr.edu/labs/tutorial/

K vasemu dotazu jen zkracene:

vami uvadeny kod (upraveno):

process (c_en, Zc)
begin
 if (Zc = '1') then
    c_en := '0';
 else
    c_en := not(c_en);
 end if;
end process ;

je kombinacni process, jenz zde modeluje multiplexer, prepinani je
rizeno signalem Zc, jeden vstup je pripojen na nulu. Druhy vstup je pres
invertor pripojen na vystup.

Muj drive uvadeny proces (upraveno)

process (clock)
begin
    if falling_edge(clock) then
       clock_en <= not(clock_en);
    end if;
end;

je sekvencni(!) process, jenz modeluje registr typu D, zde jiz propojeni
vystupu a vstupu pres invertor dava smysl. Dulezita je tam podminka
falling_edge(clock) - coz je nahrada za podminku (clock'event and
clock='0').

J.S.

j.Krajinka@seznam.cz wrote:
> Aktualne nic, snazim se trochu naucit VHDL, ci presneji chci se naucit pracovat s CPLD/FPGA, coz jak jsem pochopil neni uplne to same. Poridil jsme si knihu Cislicove systyemy a jazyk VHDL + spoustu anglicky psane literatury. S cesky psanou knihou jsme si zrovna nepadli do oka a i kdyz anglicky nadavam celkem plynne, cteni mi nedela problem, tak pokud ctu neco co mi prilis nedochazi tak radeji v cestine. Bohuzel v tom az neskutecne plavu. Asi starnu, jsem natvrdly nebo nemam ty spravne informacni zdroje ci oboji.
> Priklad, v knize uvedou 
> ...
> clk <='0';
> wait for 20ns;
> clk <='1';
> ...
> Ja na to cucim a rikam si, to je nejaka blbost, jak sakra ten obvod odmeri 20ns,kdyz nema hodiny, nasledne minu mnoho PeV enegrie pri googleni, abych nasledne zjistil, ze tento kond neni urcen pro syntezu,ale autor tuto informaci nepovazoval za dulezitou atd.
>
> Nac se potam, pujcim si kod, ktery tu nedavno probehl. Pokud to spravne chapu, tak by to nemelo fungovat, protoze signalu clock_en
> se hodnota priradi az na konci procesu a tudiz ji uvnitr nelze smysluplne negovat?
> Pletu se nebo pokud tomu tak je tak jak se to resi spravne?
>
> signal clock_en: std_logic;
> signal clock: std_logic;
> signal clock_out: std_logic;
>
> process (clock, rst)
> begin
>     if (rst = '1') then
>        clock_en <= '0';
>     elsif falling_edge(clock) then	-- prepiname v neaktivni fazi hodin (kvuli zakmitum!)
>        clock_en <= not(clock_en);	-- delic 2
>     end if;
> end;
> -- clock enable
> clock_out <= clock and clock_en;
>
>
>
>  
>
>   
>> Asi by bylo lepsi uvest co chcete vytvorit, protoze takovouhle hruzu 
>>     
> prepisovat ani snad nema cenu. Obecne plati to ze se signaly pripravuji 
> o cykl hodin predem, pokud to nelze, tak se pouzivaji asynchronni 
> vstupy. Nejvic pomaha a predevsim u takto jednoduchych veci si pro 
> zacatek nakreslit schema jak bych to realizoval obvodove. Pokud zjistim, 
> ze na to potrebuji nejaky specialni trik tak to nelze implementovat. 
> Pokud pouzivate predchozi stav nejakeho signalu, tak to nelze bez toho 
> abyste si ten stav nekde ulozil, do registru. Registr je potreba ridit 
> hodinovym signalem. Mam takovy pocit, ze vam nekdo rekl ze z FPGA a VHDL 
> se da vyzdimat uplne cokoliv, ale to neda.
>
> Tosa
>
>
>
> j.Krajinka@seznam.cz wrote:
>   
>> To je samozrejme mozne. 
>> Jak tedy resit nasledujici, nejde o logiku, a zda to vubec nejakou ma, ted jsem si tu vycucal z prstu , jde o pouziti pomocne promenne, signalu ci neceho uvnitr procesu, tak abych si to pak mohl odsimulovat a pripadne v tom najit chybu.
>> Pouzit signal nejde, protoze tomu se hodnota priradi az nakonci procesu, uvnitr procesu hodnotu nema a nelze ji pouzit v podmince ci logicne operaci. Promenou pouzit jde , ale zase ji nejde dat do simulatoru.
>>
>> signal c_en : std_logic; -- pomocny signal
>>
>> process (Clk, Zc)
>> begin
>> if (Zc = '1') then
>> c_en := '0';
>> then
>> c_en := not(c_en);
>> end if;
>> c_out <= Clk and c_en;
>> end process ;
>>
>> Jirka
>>
>>
>>   
>>     
>>> Promenna nejde zobrazit asi proto ze je to programatorska pomucka, ktera 
>>>     
>>>       
>> se nesyntetizuje a simulace se provadi na navrhu, ktery prosel syntezou.
>> Nejak si nemuzu vzpomenout jestli jsem nekdy chtel zobrazit v simulaci 
>> promennou a jak to dopadlo, ale jak rikam nedivil bych se, kdyby to neslo.
>>
>> Tosa
>>
>>
>> j.Krajinka@seznam.cz wrote:
>>   
>>     
>>> Jde nejak zabranit sekvencnimu prirazeni signalu v processu?
>>> Repektive rekneme, ze uvnitr procesu potrebuji pomocny signal, ktery se uvnitr procesu muze podle podminek menit a nakonec se ma priradit. Pouzit klasicky signal nelze, protoze ten se sekvencne priradi az nakonci procesu, tudiz se priradi pouze posledni hodnota a nelze ji treba negovat. 
>>> Asi by slo pouzit promenne a sekvencni prirazeni :=, ale promene se mi pro zmenu nedari priradit do okna simulaci s Isim.
>>>
>>> Jak se spravne postupuje?
>>>
>>>       
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>   


More information about the Hw-list mailing list