VHDL ( zegar, powielanie )

Oct 18, 2004 39 Replies

Witmam,



Mam co¶ takiego:



ENTITY ZegarVHD IS PORT ( CLOCK : IN STD_LOGIC; Q : OUT STD_LOGIC ); END ZegarVHD;



ARCHITECTURE ZegarVHD_architecture OF ZegarVHD IS SIGNAL Tick: STD_LOGIC; BEGIN



Zeg: PROCESS ( Clock ) BEGIN IF Clock = '1' THEN Tick <= NOT Tick; ELSE Tick <= '0'; END IF; Q <= Tick AFTER 1 NS; END PROCESS Zeg;



END ZegarVHD_architecture;



U¿ywam uk³adu EP1K30TI208-3 Altery. Je¿eli stan sygna³u zegarowego jest wysoki to nastêpujê "autogeneracja" przebiegu na wyj¶ciu Q uk³adu. Wszystko jest OK dopuki nie chcê wstawiæ zliczania sygna³u "Tick" i np. po



12 tykniêciach ustawiæ Q w stan niski.

Czyli: po dodatnim zboczu sygna³u CLK chcê wygenerowaæ np. 12 wewnetrznych tykniêæ zegerowych.



Czy w ten sposób to jest mo¿liwe ?


Odpowiem Ci, jak powiedzia³a z³ota rybka pewnemu go¶ciowi:

"Nie, nie i jeszcze raz nie"

Dz.

Czy powy¿szy przyk³ad jest w ogóle syntezowalny?? Wydaje siê, ¿e nie.

Mister

^^^^^^^^^^^ Wiesz o tym ze to bedzie dzialac _tylko_i_wylacznie_ w ModelSimie? Takie cos jest nierealizowalne w strukturze FPGA.

Za bardzo nie rozumiem.

Szybszych nic CLK? Nie da sie.

Jakby wywalic after 1ns to cos by wyszlo. Pytanie do autora - niech przeanalizuje co :-)

Dizêki za zainteresowanie, wiêc tak mo¿e zbiorczo :) :

Po usuniêciu "AFTER 1 NS" - nic - to znaczy ¿adnej ró¿nicy.

Po przerobieniu tego poprzedniego problemu na :

Zeg: PROCESS ( CLK_uP ) BEGIN IF rising_edge ( CLK_uP ) THEN -- linia 30 Licznik <= 3; ELSE Licznik <= 0; END IF; END PROCESS Zeg;

PROCESS ( Licznik ) BEGIN IF Licznik > 0 THEN Licznik <= Licznik - 1; Tick <= NOT Tick; ELSE Tick <= '0'; END IF; END PROCESS; Q <= Tick;

,kompilator ( syntezator ) Quartus'a: "Error: VHDL error at ZegarVHD.vhd(30): can't infer register for signal Licznik[0] because signal does not hold its value outside clock edge"

Efekt który chcê usyskaæ jest na stronce:

formatting link
Z tego co Panowie piszecie wychodzi na to, ¿e nie da siê obej¶æ bez dodatkowego generatora podstawy czasu dla potrzeb wewnêtrznych operacji FPGA.

PS. Tematem, który chcia³em siê zaj±æ ( pogry¼æ toszkê ) jest zbudowani uP na FPGA ( có¿ pocz±tki s± trudne zawsze :).

Dzieki, pozdrawiam,

Grzegorz Kepiñski CROSS Sp. z o.o. gg: 1175899

A po co budowaæ procesory w fpga? strata czasu. Mo¿na co¶ gotowego ¶ci±gn±æ z open-source lub kupiæ z

formatting link
:-)

A tak apropo, to ok dwa lata temu by³ tu na grupie go¶æ, który siê chwali³ ¿e napisze procesor 32 bitowy w VHDL, ¿e to kwestia kilku tygodni itp. ... Po miesi±cu znikn±³, mo¿e teraz siê odezwie, mo¿e siê pochwali co z tego wysz³o...

Pozdrawiam Mister

No w³asnie, to jak to ma prawo dzia³aæ w EP1K30TI208-3 ??

Mister

Taki pomys³ powsta³ w g³owie mojego promotora - jeszcze go nie odwodzi³em od tego, ale wolê sie przymierzyæ do problemu :)

Dwa lata temu to nie wiedzia³em ¿e to siê wogóle da :)

Dla mnie procesor to taki uk³adzik cyfrowy z mas± niepotrzebnych szlaczków po których pod±¿aj± wróweczki (sygna³y) aby i Królowa Matka ( ALU ) mia³a co robiæ a i spichlerz ( pamiêæ ) nie straszy³ pustkami. :0)

A na powa¿nie, uwa¿am ¿e 8 miesiêcy na zrobienie czego¶ takiego to nie jest tak sporo.

Ale zobaczymy - mo¿e bêdê musia³ :) ( swoj± drog± ciekawe zagadnienie )

Pozdrawiam, Grzegorz K.

U¿ytkownik "Mister" <wojpie@wywal_to.poczta.onet.pl> napisa³ w wiadomo¶ci news:cl0gd4$dkm$ snipped-for-privacy@nemesis.news.tpi.pl...

ju¿ w³a¶nie zauwa¿y³em ¿e na ACEXsie 1K to nie dzia³a :)

U¿ytkownik "Mister" <wojpie@wywal_to.poczta.onet.pl> napisa³ w wiadomo¶ci news:cl0g84$cso$ snipped-for-privacy@nemesis.news.tpi.pl...

Od tamtego czasu, koles nieodezwa³ sie na grupie ani razu. Przynajmniej nie jako On.

K.

PS. Tak z nudy przejzalem archiwum ;-)

Chyba nie umiem znalezc tego watku (google na "pl.misc.elektronika vhdl 32-bitowy procesor" zwraca tylko jeden, niezbyt pasujacy), wiec sie zapytam: w czym lezy zasadnicza trudnosc? W sporzadzeniu specyfikacji tego CPU, zapisaniu jej w VHDL, czy (jak przypuszczam) niskiej jakosci syntezy?

Pozdrawiam Piotr Wyderski

Zgadza sie - przy P&R jest to olewane, natomiast ma znaczenie tylko przy symulacji kodu _zrodlowego_ i jest glownie uzywane do opisywania wymuszen, czyli tego co na piny podajemy.

Ma racje :-)

Zmieniasz jeden sygnal (Licznik) w dwoch procesach - i teraz ktore zmiany uwzgledniac? Zawszyj wszystko w jednym bloku if(rising_edge(clk)) then ... end if.

Aha... no to potrzebujesz CLK o czestotliwosci takiej, jakie Ci potrzebne impulsy Q. Potrzebujesz do generaowania sygnalu ENABLE dla reszty logiki a NIE do generowania tej logice sygnalu zegara. Zegar ma byc jeden! Wtedy w odpowiednich momentach wlaczasz sobie enable.

He??

Hmm... mozna, ale po co? Potem problem jest ze stworzeniem dla tego procka kompilatora :-) Natomiast jesli w celach edukacyjnych to proponowalbym cos prostszego. Jako przyklad przychodzi mi napisanie UARTU (moze byc z predkoscia transmisji ustalona na stale) takiego, ze czas bitu dzieli na 16, probkuje 7,8,9 czesc (srodek) bitu transmisji i decyduje o wyniku. W tym przykladzie bedziesz musial rozwiazac wlasnie takie problemy o ktorych tutaj piszesz, a poza tym... jak zrobisz procka, to fajnie miec do niego wlasny uart :-)

No co¿, jedni wycofuj± siê rakiem, a drudzy mówi±: "podda³em siê, mo¿e innym razem jak bêdê m±drzejszy :)"

pozdrawiam, Grzegorz Kêpiñski

kiedys stoczylem dlugie boje probujac przekonac pewnego programiste (z Chorwacji), ktory pisal w vhdl i twierdzil ze ich syntezer syntezuje petle for i while oraz te neiszczesne after...i ze dla neigo nei ma roznicy miedzy vhdl a c++, i ze vhdl to jest tak banalny ze nei ma co o nim gadac...zagialem go na przeniesieniach w sumatorze :) coz, kwestia gustu widac:)

a co myslicie o napisaniu MAC'a gigabit ethernet z protokolem IP i uproszczonym TCP? mysle zeby sei za to zabrac..mam rdzenie IP z MoreThanIp na razie do prototypu, ale wole miec swoj wlasny i nei placic kilku tys EUR:) kolega sie podjal napisac to w ciagu meisiaca za 400EUR, ale jakos nie za bardzo mu wierze..

To jest nawet krotszy termin. Jeszcze w liceum sie bawilem w programowanie maszynki ktora potrafi tylko dodac i odjac jeden :-)

O, ciekawe zadanie z p.s.matematyka: procesor wykonuje 3 instrukcje:

1) zmienna++ - powieksza zmienna o 1, 2) zmienna-- - zmniejsza o 1, ale tylko gdy zmienna byla wieksza od zera [czyli nie ma liczb ujemnych] 3) zmienna ? etyk - skok warunkowy do etyk, o ile zmienna jest <>0

zmiennych do dyspozycji skolko ugodno, poczatkowo sa wyzerowane.

Jaka najwieksza wartosc zmiennej da obliczyc w programie o 23 rozkazach ..

J.

Czy ja dobrze rozumiem ze usilujesz powielic czestotliwosc zegara ? Owszem - to se ne da :-)

Chcesz wygenerowac zmiane w momencie w ktorym nie masz zadnego zdarzenia. Wiec albo zastosujesz opoznienia czasowe [nieeleganckie], albo PLL z osobnym generatorem - ale tego VHDL ci nie wygeneruje :-)

Szkoda czasu. Ale jesli nie szkoda - zacznij tak jak Intel - jedna instrukcja w 12 taktach zegara. [Czy raczej jak w 8080 - instrukcja od

1 do czterech faz, faza 3 do 5 cykli zegara, a zegary doprowadzone dwa, przesuniete w fazie, robione z kwarca 9x wiekszego niz cykl zegara - zeby te przesuniecia precyzyjnie wykonac].

Chyba ze masz wielka ochote .. chodzi mi po glowie procerorek asynchroniczny, bez zegara :-)

J.

Bo programisci mysla, ze jak mozna napisac tekstowo, to juz jest rownoznaczne z programem. I tlumacz potem dla matola podstawy... A jeszcze sie obraza - bo on przeciez "Pan" programista :-)))

mi też... A dokłądniej: mi chodzi po głowie falownik z error diffusion robiony w połowie asynchronicznie... Jak powiedziałem w robocie, to mnie przechrzcili...

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required