<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-2" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
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: <a class="moz-txt-link-freetext" href="http://esd.cs.ucr.edu/labs/tutorial/">http://esd.cs.ucr.edu/labs/tutorial/</a><br>
<br>
K vasemu dotazu jen zkracene:<br>
<br>
vami uvadeny kod (upraveno):<br>
<pre wrap="">process (c_en, Zc)
begin
if (Zc = '1') then
c_en := '0';
else
c_en := not(c_en);
end if;
end process ;
</pre>
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. <br>
<br>
Muj drive uvadeny proces (upraveno)<br>
<pre wrap="">process (clock)
begin
if falling_edge(clock) then
clock_en <= not(clock_en);
end if;
end;</pre>
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').<br>
<br>
J.S.<br>
<br>
<a class="moz-txt-link-abbreviated" href="mailto:j.Krajinka@seznam.cz">j.Krajinka@seznam.cz</a> wrote:
<blockquote cite="mid:234.243-31747-839657398-1259055887@seznam.cz"
type="cite">
<pre wrap="">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;
</pre>
<blockquote type="cite">
<pre wrap="">Asi by bylo lepsi uvest co chcete vytvorit, protoze takovouhle hruzu
</pre>
</blockquote>
<pre wrap=""><!---->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
<a class="moz-txt-link-abbreviated" href="mailto:j.Krajinka@seznam.cz">j.Krajinka@seznam.cz</a> wrote:
</pre>
<blockquote type="cite">
<pre wrap="">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
</pre>
<blockquote type="cite">
<pre wrap="">Promenna nejde zobrazit asi proto ze je to programatorska pomucka, ktera
</pre>
</blockquote>
<pre wrap="">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
<a class="moz-txt-link-abbreviated" href="mailto:j.Krajinka@seznam.cz">j.Krajinka@seznam.cz</a> wrote:
</pre>
<blockquote type="cite">
<pre wrap="">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?
</pre>
</blockquote>
</blockquote>
<pre wrap=""><!---->_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<br>
</body>
</html>