Jak działają procesy w VHDL z argumentami clk i rst oraz ich implementacja w logice?
vhdl a process(clk, rst)
From: "Adam Ślosarski" <adam.slosarski_at_nospam_contec.com.pl>
Subject: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 18:24:49 +0200
na jakiej zasadzie to dziala, ze wymieniam np. 2 argumenty clk, rst w
kluzuli process:
process(clk, rst)
begin
.....
a pozniej po syntezie on reaguje na to?
chodzi mi o to jak te bramki wygladaja ze potrafia czuwac nad takimi 2
zmianami?
i to oznacza tylko czulosc na z 0 na 1 i z 1 na 0?
jak to jest polaczone z bramkami ze wykrywa ze sie powinien rozpoczac
proces?
na jakiej zasadzie on wykrywa ze zmienil sie clk, albo rst i zaczyna
wykonywac dalej proces (kolejne bramki logincze)?
From: Grzegorz Domagala <grzegorz.domagata_at_nospam_chello.at>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 16:30:19 GMT
"Adam Ślosarski" <adam.slosarski_at_nospam_contec.com.pl> wrote:
na jakiej zasadzie to dziala, ze wymieniam np. 2 argumenty clk, rst w
kluzuli process:
process(clk, rst)
begin
.....
a pozniej po syntezie on reaguje na to?
chodzi mi o to jak te bramki wygladaja ze potrafia czuwac nad takimi 2
zmianami?
i to oznacza tylko czulosc na z 0 na 1 i z 1 na 0?
Oznacza to ze reaguje na jakakolwiek zmiane na tych wejsciach - jesli
chcesz zlapac zbocze dodatnie np. na clk piszesz wewnatrz procesu cos
takiego:
if (clk'EVENT and clk = '1') then ....
jak to jest polaczone z bramkami ze wykrywa ze sie powinien rozpoczac
proces?
Np. clk wchodzi na wejscia zegarowe przerzutnikow buforujacych wszystkie
inne sygnaly :). Proces sie nie zaczyna - "proces" to
po prostu ciag przezutnikow i bramek logicznych. Zreszta dokladna
zgodnosc z programamem uzyskasz tylko w symulacji - logika wypalona w
kostce moze sie zachowywac nieco inaczej. Przy okazji - nie wszystko co
sie da zapisac i zasymulowac w VHDL da sie zsyntetyzowac :( np. taka
konstrukcja
if (clk'EVENT and clk = '1') then ....
elsif (clk'EVENT and clk '0' ) then ...
nie chciala sie syntetyzowac na EPM7128 - w jednym procesie mozna bylo
lapac zbocza dodatnie lub ujemne - ale nie oba na raz.
GRG
From: "Adam Ślosarski" <adam.slosarski_at_nospam_contec.com.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 19:23:06 +0200
ale jak te bramki wykrywaja ze jest np. zbocze dodatnie i ze dopiero po tym
moga dalej wykonywac kod (tzn. kolejne bramki)?
--
Z poważaniem
---------------------------------------------------------
Adam Ślosarski - Programista
Contec - Call Management Solutions
Dział Rozwoju Oprogramowania
01-939 Warszawa
ul. Burleska 3a
adam.slosarski_at_nospam_contec.com.pl
www.contec.com.pl
"Grzegorz Domagala" <grzegorz.domagata_at_nospam_chello.at> wrote in message
news:eirbpa.jq1.ln_at_nospam_gregor.traiskirchen.at...
> "Adam Ślosarski" <adam.slosarski_at_nospam_contec.com.pl> wrote:
> > na jakiej zasadzie to dziala, ze wymieniam np. 2 argumenty clk, rst w
> > kluzuli process:
>
>
> > process(clk, rst)
> > begin
> > .....
> > a pozniej po syntezie on reaguje na to?
> > chodzi mi o to jak te bramki wygladaja ze potrafia czuwac nad takimi 2
> > zmianami?
> > i to oznacza tylko czulosc na z 0 na 1 i z 1 na 0?
>
> Oznacza to ze reaguje na jakakolwiek zmiane na tych wejsciach - jesli
> chcesz zlapac zbocze dodatnie np. na clk piszesz wewnatrz procesu cos
> takiego:
>
> if (clk'EVENT and clk = '1') then ....
>
> > jak to jest polaczone z bramkami ze wykrywa ze sie powinien rozpoczac
> > proces?
>
> Np. clk wchodzi na wejscia zegarowe przerzutnikow buforujacych wszystkie
> inne sygnaly :). Proces sie nie zaczyna - "proces" to
> po prostu ciag przezutnikow i bramek logicznych. Zreszta dokladna
> zgodnosc z programamem uzyskasz tylko w symulacji - logika wypalona w
> kostce moze sie zachowywac nieco inaczej. Przy okazji - nie wszystko co
> sie da zapisac i zasymulowac w VHDL da sie zsyntetyzowac :( np. taka
> konstrukcja
>
> if (clk'EVENT and clk = '1') then ....
> elsif (clk'EVENT and clk '0' ) then ...
>
> nie chciala sie syntetyzowac na EPM7128 - w jednym procesie mozna bylo
> lapac zbocza dodatnie lub ujemne - ale nie oba na raz.
>
> GRG
>
From: Marek Lewandowski <nospamabuse_at_nospam_poczta.onet.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 18:16:08 GMT
Adam Ślosarski wrote:
ale jak te bramki wykrywaja ze jest np. zbocze dodatnie i ze dopiero po tym
moga dalej wykonywac kod (tzn. kolejne bramki)?
POczytaj o układach asynchronicznych, najlepiej weź jakąś książkę typu
"technika cyfrowa - podstawy" i się dowiesz, jak takie rzeczy się
robi. To jest ładny wykład na ten temat,.
--
Marek Lewandowski ICQ# 10139051/GG# 154441
locustXpoczta|onet|pl
http://locust.republika.pl
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]
From: Grzegorz Domagala <grzegorz.domagata_at_nospam_chello.at>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 18:30:19 GMT
"Adam Ślosarski" <adam.slosarski_at_nospam_contec.com.pl> wrote:
ale jak te bramki wykrywaja ze jest np. zbocze dodatnie i ze dopiero po tym
moga dalej wykonywac kod (tzn. kolejne bramki)?
Musisz troche poczytac o przezutnikach - sposob uzyskiwania reakcji
na zbocze najlatwiej zrozumiec analizujac dzialanie przezutnika
MasterSlave - AFAIR nie jest to "prawdziwy" przezutnik reagujacy na
zbocze ale jest latwy w analizie - schemat "prawdziwego" jest dla mnie
niezrozumialy - co zreszta niema znaczenia: nigdy czegos takiego nie
musialem z bramek skladac.
Jesli nie chce ci sie szukac mozesz przyjac na wiare - istnieja uklady
ktore potrafia zapamietac swoj stan i zareagowac na zbocze syganalu
zegarowego.
GRG
From: Marek Lewandowski <nospamabuse_at_nospam_poczta.onet.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 18:40:22 GMT
Grzegorz Domagala wrote:
schemat "prawdziwego" jest dla mnie
niezrozumialy - co zreszta niema znaczenia: nigdy czegos takiego nie
musialem z bramek skladac.
eee, z tym to nie jest tak źle, tylko trzeba pamiętać, że bramki
składają się z elementów dyskretnych ;-)
--
Marek Lewandowski ICQ# 10139051/GG# 154441
locustXpoczta|onet|pl
http://locust.republika.pl
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]
From: Grzegorz Domagala <grzegorz.domagata_at_nospam_chello.at>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 21:00:17 GMT
Marek Lewandowski <nospamabuse_at_nospam_poczta.onet.pl> wrote:
Grzegorz Domagala wrote:
eee, z tym to nie jest tak źle, tylko trzeba pamiętać, że bramki
składają się z elementów dyskretnych ;-)
Na tym poziomie nie probowalem analizowac :))))
Pamietam jednak jak kiedys zobaczylem schemat "bramkowy" jakies
przerzutnika reagujacego na zbocze - zdolalem rozpoznac cos z piec
przezutnikow RS ale polaczone byly w sposob dla mnie niepojety (moze za
krotko analizowalem) - schemat momentalnie skojarzyl mi sie z
"displejami" z filmow SF klasy B i niestety byl rownie czytelny :((((
GRG
From: jfox_at_nospam_poczta.onet.pl (J.F.)
Subject: Re: vhdl a process(clk, rst)
Date: Sat, 26 Oct 2002 19:25:51 GMT
On Fri, 25 Oct 2002 21:00:17 GMT, Grzegorz Domagala wrote:
Na tym poziomie nie probowalem analizowac :))))
Pamietam jednak jak kiedys zobaczylem schemat "bramkowy" jakies
przerzutnika reagujacego na zbocze - zdolalem rozpoznac cos z piec
przezutnikow RS ale polaczone byly w sposob dla mnie niepojety
Klasyczny przerzutnik D [7474] sklada sie z 6 bramek, i faktycznie
jest to 3x RS. Tylko ze ja tez nie potrafie pojac jak to dziala :-(
J.
From: "Adam Ślosarski" <adamslosarski_at_nospam_tlen.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 23:19:18 +0200
Musisz troche poczytac o przezutnikach - sposob uzyskiwania reakcji
na zbocze najlatwiej zrozumiec analizujac dzialanie przezutnika
MasterSlave - AFAIR nie jest to "prawdziwy" przezutnik reagujacy na
zbocze ale jest latwy w analizie - schemat "prawdziwego" jest dla mnie
niezrozumialy - co zreszta niema znaczenia: nigdy czegos takiego nie
musialem z bramek skladac.
Jesli nie chce ci sie szukac mozesz przyjac na wiare - istnieja uklady
ktore potrafia zapamietac swoj stan i zareagowac na zbocze syganalu
zegarowego.
GRG
czyli wtedy gdy jest reakcja na zmiane np. process (clk)
to wyglada to tak, ze istnieje tam na samym poczatku wejscia clk np. jakis
przerzutnik, ktory trzyma poprzednią wartość a pozniej ta wartosc ktora tam
'siedzi' jest xor-owana z linią clk? i jesli wyjdzie 1 to znaczy ze byl
skok? cos w tym rodzaju dobrze myślę (zaczalem nauke vhdl-a 12 dni temu i
dlatego tak sie pytam o takie szczegoly)
From: Grzegorz Domagala <grzegorz.domagata_at_nospam_chello.at>
Subject: Re: vhdl a process(clk, rst)
Date: Sat, 26 Oct 2002 07:40:17 GMT
"Adam Ślosarski" <adamslosarski_at_nospam_tlen.pl> wrote:
czyli wtedy gdy jest reakcja na zmiane np. process (clk)
to wyglada to tak, ze istnieje tam na samym poczatku wejscia clk np. jakis
przerzutnik, ktory trzyma poprzednią wartość a pozniej ta wartosc ktora tam
'siedzi' jest xor-owana z linią clk? i jesli wyjdzie 1 to znaczy ze byl
skok? cos w tym rodzaju dobrze myślę (zaczalem nauke vhdl-a 12 dni temu i
dlatego tak sie pytam o takie szczegoly)
Nie - dokladna implementacja zalezy od kompilatora i ukladu docelowego.
Konstrukcja if (clk'EVENT and clk ='1')... nie jest analizowana
"doslownie" - kompilator rozpoznaje pewien wzorzec i podstawia
przezutnik, bramke czy co tam. Kompilatory VHDL niestety nie
przypominaja dzialaniem kompilatora asm gdzie kazde slowo mozna
analizowac odzielnie - kompilaotry VHDL musza dopasowywac sprzet do
calego programu. I z tego powodu niektore konstrukcje "zrozumiale" dla
czlowieka czy symulatora VHDL nie dadza sie skompilowac, a naewt jesli
dadza sie skompilowac niekoniecznie dzialaja zgodnie z zalozeniami.
Zakodowanie w VHDL pewnej idei tak zeby uklad dzialal DOALDNIE z
zalozeniami jest sztuka znacznie trudniejsza niz napisanie odpowiedniego
programu np. w C (gdzie np. nie musisz pamietac o opoznieniach syganlu).
Przy okazji - z twoich pytan wnioskuje ze nizabardzo znasz sie na
technice cyfrowej - zanim na powaznie zajmiesz sie VHDLem poczytaj pare
ksiazek na temat elektroniki cyfrowej - to naprawde pomaga.
(polecam "Technika cyfrowa" - autora nie pamietam)
GRG
--
From: k.rozniak.XXX_at_nospam_ien.gda.pl (Krzysztof Rozniak)
Subject: Re: vhdl a process(clk, rst)
Date: Sat, 26 Oct 2002 00:47:36 +0200
On Fri, 25 Oct 2002 19:23:06 +0200, "Adam ?losarski"
<adam.slosarski_at_nospam_contec.com.pl> wrote:
ale jak te bramki wykrywaja ze jest np. zbocze dodatnie i ze dopiero po tym
moga dalej wykonywac kod (tzn. kolejne bramki)?
A może warto trochę poczytać o podstawach zanim zadasz kolejne
idiotyczne pytanie. O ile na grupie lokalnej (pl.misc.elektronika)
jest to tolerowane, to wysyłanie tego typu zapytań na specjalistyczne
grupy o zasięgu światowym (comp.lang.vhdl - Message-ID:
<ap6feq$qen$1_at_nospam_news.tpi.pl>) woła o pomstę do nieba.
Nie bardzo wiem, jak Pan Programista z firmy Contec skończył studia,
nie mając pojęcia o _podstawach_ elektroniki. No chyba, że dzisiaj
już tego nie ma w programie ;-)
Znajomość C++ ma się nijak do projektowania układów CPLD/FPGA/ASIC, a
opanowanie języka VHDL/Verilog, przy braku elementarnej wiedzy o
technice cyfrowej, nie uczyni z Ciebie projektanta hardware'u.
Polecam dowolną książkę/skrypt z podstaw układów cyfrowych. Potem
możesz spojrzeć na stronę http://www.optimagic.com - angielski znasz,
więc nie powinno być problemów ;-)
Mimo wszystko pozdrawiam i życzę trochę pokory na przyszłość.
Krzysztof.
P.S.
Mam dzisiaj naprawdę paskudny nastrój :(
--
Krzysztof Rożniak, Gdańsk
E-mail: k.rozniak.XXX_at_nospam_ien.gda.pl
Usuń .XXX z adresu przed wysłaniem poczty
From: "Adam Ślosarski" <adamslosarski_at_nospam_tlen.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Sat, 26 Oct 2002 22:45:44 +0200
ale jak te bramki wykrywaja ze jest np. zbocze dodatnie i ze dopiero po
tym
moga dalej wykonywac kod (tzn. kolejne bramki)?
A może warto trochę poczytać o podstawach zanim zadasz kolejne
idiotyczne pytanie.
To nie są idiotyczne pytania, z punktu widzenia programisty problem z tym
moim pytaniem moglbym przelozyc tak:
pewien kolega np. pyta się mnie tak "co robi funkcja lstrncpy?", ja (w tym
przypadku odpowiem tak jak Pan) odpowiadam mu ze kopiuje ilość znaków z
łańcucha źródlowego do docelowego. Odpowiedz jest oczywiscie prawidlowa, ale
np. Osoba pytajaca jest dopiero świezo upieczonym programistą i tak
dokładnie nie zna sie na terminologii ale chce sie czegoś bardziej
zaawansowanego dowiedzieć, wiec pyta ponownie (czyli na tej grupie
dyskusyjnej pytam sie ponownie) "Ale jak to się dzieje tzn. jak ta funkcja
dziala?" - No to ja (znowu odpowiadam tak jak Pan odpowiada) czyli mowie mu
tak: Ta funkcja po prostu kopiuje po jednym znaku ze źródla do celu i
sprawdza ile jeszcze skopiowac - a w myślach uważam, że idiotyczne pytania
mi zadaje. A teraz odpowiedz jaka się chciała spodziewać ta osoba (osoba ta
nie wiedziala o czymś takim jak asembler - a o to jej chodzilo czyli jak
dokladnie dziala ta funkcja):
Funkcja ta zawiera instrukcje asemblera:
....
REP MOVSD
....
bo pytająca osoba nie wiedziała o czymś takim co nazywa się asembler a
chciala dostać dokładną informację.
A teraz z innej strony (są też programiści, którzy nie wiedzą dokladnie jak
to jest z tym asemblerem) tacy programiści amatorzy szybko uczą się C++ i
udawają że wszystko umieją. Aby być dobrym trzeba znać również podstawy -
nawet takie o których nie potrzebujesz wiedzieć - w moim przypadku dokladna
implementacja czulosci proces-u. Ja dokladnie wiem co ona robi i o co
chodzi - czytalem ksiazke o VHDL-u Kevin-a Skahil-a ok 600str. i sporo juz
wiem (tylko 2 tygodnie siedzialem przy vhdl-u) - bede probowal zaprojektowac
jakis scalak CPU np. 8 bitowy. Wiem jak dzialają bramki - są to tak jak w C
operacje logiczne - ale głównie ciekawiło mnie jak jest wykonane samo
"WYKRYWANIE" ze cos sie zmienilo.
O ile na grupie lokalnej (pl.misc.elektronika)
jest to tolerowane, to wysyłanie tego typu zapytań na specjalistyczne
grupy o zasięgu światowym (comp.lang.vhdl - Message-ID:
<ap6feq$qen$1_at_nospam_news.tpi.pl>) woła o pomstę do nieba.
Polecam dowolną książkę/skrypt z podstaw układów cyfrowych. Potem
możesz spojrzeć na stronę http://www.optimagic.com - angielski znasz,
więc nie powinno być problemów ;-)
Mimo wszystko pozdrawiam i życzę trochę pokory na przyszłość.
Krzysztof.
P.S.
Mam dzisiaj naprawdę paskudny nastrój :(
--
> Krzysztof Rożniak, Gdańsk
> E-mail: k.rozniak.XXX_at_nospam_ien.gda.pl
> Usuń .XXX z adresu przed wysłaniem poczty
From: k.rozniak.XXX_at_nospam_ien.gda.pl (Krzysztof Rozniak)
Subject: Re: vhdl a process(clk, rst)
Date: Tue, 29 Oct 2002 23:18:26 +0100
On Sat, 26 Oct 2002 22:45:44 +0200, "Adam ?losarski"
<adamslosarski_at_nospam_tlen.pl> wrote:
ale jak te bramki wykrywaja ze jest np. zbocze dodatnie i ze dopiero po
tym
moga dalej wykonywac kod (tzn. kolejne bramki)?
A może warto trochę poczytać o podstawach zanim zadasz kolejne
idiotyczne pytanie.
To nie są idiotyczne pytania, z punktu widzenia programisty problem z tym
moim pytaniem moglbym przelozyc tak:
Problem jest w tym, że pisząc kod w VHDL'u nie można myśleć jak
programista. Bramki nie wykrywają zbocza i nie wykonują żadnego kodu -
to nie procesor!!!
pewien kolega np. pyta się mnie tak "co robi funkcja lstrncpy?", ja (w tym
przypadku odpowiem tak jak Pan) odpowiadam mu ze kopiuje ilość znaków z
łańcucha źródlowego do docelowego. Odpowiedz jest oczywiscie prawidlowa, ale
np. Osoba pytajaca jest dopiero świezo upieczonym programistą i tak
dokładnie nie zna sie na terminologii ale chce sie czegoś bardziej
zaawansowanego dowiedzieć, wiec pyta ponownie (czyli na tej grupie
dyskusyjnej pytam sie ponownie) "Ale jak to się dzieje tzn. jak ta funkcja
dziala?" - No to ja (znowu odpowiadam tak jak Pan odpowiada) czyli mowie mu
tak: Ta funkcja po prostu kopiuje po jednym znaku ze źródla do celu i
sprawdza ile jeszcze skopiowac - a w myślach uważam, że idiotyczne pytania
mi zadaje. A teraz odpowiedz jaka się chciała spodziewać ta osoba (osoba ta
nie wiedziala o czymś takim jak asembler - a o to jej chodzilo czyli jak
dokladnie dziala ta funkcja):
Funkcja ta zawiera instrukcje asemblera:
....
REP MOVSD
....
bo pytająca osoba nie wiedziała o czymś takim co nazywa się asembler a
chciala dostać dokładną informację.
A teraz z innej strony (są też programiści, którzy nie wiedzą dokladnie jak
to jest z tym asemblerem) tacy programiści amatorzy szybko uczą się C++ i
udawają że wszystko umieją. Aby być dobrym trzeba znać również podstawy -
nawet takie o których nie potrzebujesz wiedzieć - w moim przypadku dokladna
implementacja czulosci proces-u. Ja dokladnie wiem co ona robi i o co
chodzi - czytalem ksiazke o VHDL-u Kevin-a Skahil-a ok 600str. i sporo juz
wiem (tylko 2 tygodnie siedzialem przy vhdl-u) - bede probowal zaprojektowac
jakis scalak CPU np. 8 bitowy. Wiem jak dzialają bramki - są to tak jak w C
operacje logiczne - ale głównie ciekawiło mnie jak jest wykonane samo
"WYKRYWANIE" ze cos sie zmienilo.
Twoim problemem nie jest nieznajomość "dokladnej implementacji
czulosci procesu", ale brak zrozumienia działania hardware'u. I to są
podstawy, o ktorych _musisz_ wiedzieć, jeśli masz zamiar zajmować
się projektowaniem logiki programowalnej!
Stosując Twoje porównania: zachowujesz się jak programista który
opanował składnię języka C (C++) i pisze w tym języku programy, ale
nie ma pojęcia o tym, że istnieje coś takiego jak assembler, nie
wspominając już o kodzie maszynowym. A urządzenia wejścia/wyjścia to
dla niego kompletna abstrakcja - wszystko załatwiają metody cin/cout!
Takie podejście zdaje egzamin przy pisaniu oprogramowania baz danych
itp. wysokopoziomowych aplikacji, lecz zawodzi chociażby w przypadku
sterowników urządzeń.
BTW: jeden na dziesięć ( optymistycznie rzecz biorąc!) programistów
jest w stanie napisać driver urządzenia np.: pod Windows, mimo tego,
że ma dostęp do SDK, DDK, czy jak to tam się nazywa.
Pewnie czytałeś "VHDL for programmable logic" (ISBN 0-201-89573-0).
W sumie niezła (sprawdziłem na półce ;-)), ale podstawy "cyfrówki"
trzeba znać.
Stwierdzenie "wiem jak dzialają bramki - są to tak jak w C operacje
logiczne" utwierdza mnie w przekonaniu, że myślisz jak programista.
Być może za 5/10/20 lat syntezery będą na tyle "inteligentne", że
zsyntezują w miarę optymalnie kod VHDL'a pisany przez "programistę
amatora" ( to Twoje słowa;)), ale dzisiaj tak nie jest.
Reasumując, moje przesłanie było proste: jeśli już pytasz o podstawy,
to nie rozgłaszaj tego na cały świat - po to są grupy lokalne. Poza
tym denerwuje mnie podejście: znam C/C++ i dziesięć innych języków a
nie mam pojęcia co to bramka/przerzutnik, ale nic to - nauczę się
VHDL'a i będę projektował układy cyfrowe.
Tak się nie da. Moim zdaniem łatwiej sprzętowca przerobić na
programistę niż odwrotnie.!!!
P.S.
To "Pan" to sobie daruj ;)
--
Krzysztof Rożniak, Gdańsk
E-mail: k.rozniak.XXX_at_nospam_ien.gda.pl
Usuń .XXX z adresu przed wysłaniem poczty
From: "Adam Ślosarski" <adamslosarski_at_nospam_tlen.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Tue, 29 Oct 2002 23:48:20 +0100
"Krzysztof Rozniak" <k.rozniak.XXX_at_nospam_ien.gda.pl> wrote in message
news:b1toru417pdnh03ef2tbgk0rkujtuc19l5_at_nospam_4ax.com...
On Sat, 26 Oct 2002 22:45:44 +0200, "Adam ?losarski"
<adamslosarski_at_nospam_tlen.pl> wrote:
Problem jest w tym, że pisząc kod w VHDL'u nie można myśleć jak
programista. Bramki nie wykrywają zbocza i nie wykonują żadnego kodu -
to nie procesor!!!
juz sie chyba domyslilem jak to jest z tym wykrywaniem zbocza, zobacz moj
tok myslenia i potwierdz jak jest dobrze.
wykrywanie np. gdy jest test: process(clk)
to nic innego jak przerzutnik ktory pamieta poprzednie ustawienie np. '0' i
gdy teraz padnie 1 czyli 'event' bo wczesniej bylo '0' to:
wyjscie D z przerzutnika xor-uje sie z aktualnym clk czyli bylo w D wartosc
'0' a z xor-em bedzie jeden wiec jedynka, pozniej clk utrzymuje sie np.
przez 30ns na '1' a przerzutnik w tej chwili ma tez 1 wiec xor-wanie z
aktualnym clk czyli 1 xor 1 da 0 wiec juz nie ma event'ow az do 30-tej ns,
pozniej clk = 0 wchodzi 0 do ukladu i ten wejsciowy przerzutnik ma 1 i xor 1
z clk ktory teraz ma '0' to = 1 i jest 'event', oczywiscie ten przerzutnik
teraz przeskakuje na 0 itd. a przez caly czas gdy wynik xorowania daje 1
sygnal to ten sygnal leci do kolejnych juz bramek czyli if(clk = 1) sprawdza
czy byl to narastajacy clk i jak tak to dalej i id. Jesli mam racje to o
taka odpowiedz mi przez caly czas chodzilo bo nie wiedzialem jak to jest
wykrywane ale juz sobie w koncu sam doszedlem ze moze to robic przerzutnik i
pozniej xor z np. clk (o ile to jest prawda co tu napisalem - czekam na
potwierdzenie)
dlatego tez szukalem caly czas jakiegos programu ktory by mi narysowal
bramki i przerzutniki wtedy szybciej bym sie domyslil o co chodzi z tym np.
process(clk)
swoja droga to tez znam troche jak jest zbudowany przerzutnik - bistabilny
symetryczny uklad w ktorym nie ma jednoznacznosci i dlatego sie tak
przelacza - czy cos w tym rodzaju
Twoim problemem nie jest nieznajomość "dokladnej implementacji
czulosci procesu", ale brak zrozumienia działania hardware'u. I to są
podstawy, o ktorych _musisz_ wiedzieć, jeśli masz zamiar zajmować
się projektowaniem logiki programowalnej!
potrafi rozroznic logike C od VHDL-a - to prawda ze trzeba z innej
perspektywy patrzec, to jest cos w rodzaju kodu w C, ktory dziala tylko na
zdarzeniach tzn. w VHDL-u wlasciwie wszystko na zdarzeniach trzeba robic i
jesli mam kod taki w pseudo C:
void ReadAsmInstructionAndOpCode()
{
BYTE instrukcja = ReadDataFromMemory();
if(instrukcja = nop)
return
else // tu np. instrukcja mov ax, bx - wiec pobieram srcreg i destreg
{
BYTE srcreg = ReadDataFromMemory();
BYTE destreg ReadDataFromMemory();
}
}
// czyli odczytanie instrukcji a pozniej rejestrow to w C jak najbardziej
ale w Hardwarze to jest dziwaczne (widze juz twoja mine).
po pierwsze dlatego ze gdyby tak analizowal Hardware CPU to czas propagacji
(sciezka danych) bylby za dlugi a poza tym takie w trakcie jeszcze
pobieranie danych to wogole odpada)
i ja bym to zrobil w VHDL-u tak, ze
bylby proces ktory sciaga nonstop dane z pamieci do instruction prefetcha -
czyli jakiejs np. kolejki FIFO na np. 64 bajty (srednio 16 - 20 instrukcji
intelowych)
to inne procesy na zdarzeniach operowaly by juz za wczasu na tym FIFO tzn.
dekoder instrukcji ruszylby teraz z FIFO(0)
oraz dekoder zrodla z FIFO(1) - od razu przygotowalby odp. rejestr tzn.
wejscie enable by ustawil na odp. rejestrze aby byl juz uzywany przez ALU
oraz dekoder dest z FIFO(2) do ktorego wrzucano by wynik z ALU tzn. ALU
wiedzialo by gdzie wrzucac bo wrzucalby na oslep niby do wszystkich
rejestrow ale ten dekoder dest z FIFO(2) wystawial by odpowiedni '1' na
wejscie EN - enable od odpowiedniego rejestru
dobrze mysle? juz powoli kumam z tym VHDL-em i ze sprzetem - zamierzam za
tydzien zrealizowac uklad CPU 32 bitowy albo 16 bitowy z dostepem do SRAM na
4GB - jak mi bedzie dobrze szlo to zrobie cache podreczne, burst ram dla
prefetcha aby ladowal od razu 64 bity danych, a ponadto (to juz moze byc
trudne) rozdzielenie dekodowania potokowo na np. 2 kanaly ale zrobie to
dosyc prymitywnie bo tylko nie ktore instrukcje beda sie tak skalowac np.
inc ax oraz nop bo nop nie wplywa na wynik rejestrow flag itp.
Stosując Twoje porównania: zachowujesz się jak programista który
opanował składnię języka C (C++) i pisze w tym języku programy, ale
nie ma pojęcia o tym, że istnieje coś takiego jak assembler, nie
wspominając już o kodzie maszynowym.
10 lat temu w wieku 12 lat napisalem pierwsza gre, na Atari 65xe w
Asemblerze
4 lata pozniej na Amidze 16/32 bitowej tez w asemblerze, na PC tez pisalem
az do momentu gdy zainstalowalem sobie kompilator C++
A urządzenia wejścia/wyjścia to
dla niego kompletna abstrakcja - wszystko załatwiają metody cin/cout!
Takie podejście zdaje egzamin przy pisaniu oprogramowania baz danych
itp. wysokopoziomowych aplikacji, lecz zawodzi chociażby w przypadku
sterowników urządzeń.
BTW: jeden na dziesięć ( optymistycznie rzecz biorąc!) programistów
to prawda, nawet 1 na 100 moze. ale to tez dlatego ze nie maja potrzeby tego
robic w swoim zakresie (no bo po co im pisac driver skoro nie maja wlasnych
plytek np. PCI)
jest w stanie napisać driver urządzenia np.: pod Windows, mimo tego,
że ma dostęp do SDK, DDK, czy jak to tam się nazywa.
DDK oczywiscie Driver Development Kit
Pewnie czytałeś "VHDL for programmable logic" (ISBN 0-201-89573-0).
W sumie niezła (sprawdziłem na półce ;-)), ale podstawy "cyfrówki"
trzeba znać.
Stwierdzenie "wiem jak dzialają bramki - są to tak jak w C operacje
logiczne" utwierdza mnie w przekonaniu, że myślisz jak programista.
Być może za 5/10/20 lat syntezery będą na tyle "inteligentne", że
zsyntezują w miarę optymalnie kod VHDL'a pisany przez "programistę
amatora" ( to Twoje słowa;)), ale dzisiaj tak nie jest.
Reasumując, moje przesłanie było proste: jeśli już pytasz o podstawy,
to nie rozgłaszaj tego na cały świat - po to są grupy lokalne. Poza
tym denerwuje mnie podejście: znam C/C++ i dziesięć innych języków a
nie mam pojęcia co to bramka/przerzutnik, ale nic to - nauczę się
VHDL'a i będę projektował układy cyfrowe.
Tak się nie da. Moim zdaniem łatwiej sprzętowca przerobić na
programistę niż odwrotnie.!!!
Adams
From: "Piotr Zbysinski, EP \(H\)" <piotr.zbysinski_at_nospam_ep.com.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Tue, 29 Oct 2002 23:56:00 +0100
wykrywanie np. gdy jest test: process(clk)
to nic innego jak przerzutnik ktory pamieta poprzednie ustawienie np. '0'
i
gdy teraz padnie 1 czyli 'event' bo wczesniej bylo '0' to:
wyjscie D z przerzutnika xor-uje sie z aktualnym clk czyli bylo w D
wartosc
'0' a z xor-em bedzie jeden wiec jedynka, pozniej clk utrzymuje sie np.
przez 30ns na '1' a przerzutnik w tej chwili ma tez 1 wiec xor-wanie z
aktualnym clk czyli 1 xor 1 da 0 wiec juz nie ma event'ow az do 30-tej ns,
pozniej clk = 0 wchodzi 0 do ukladu i ten wejsciowy przerzutnik ma 1 i xor
1
z clk ktory teraz ma '0' to = 1 i jest 'event', oczywiscie ten przerzutnik
teraz przeskakuje na 0 itd. a przez caly czas gdy wynik xorowania daje 1
sygnal to ten sygnal leci do kolejnych juz bramek czyli if(clk = 1)
sprawdza
czy byl to narastajacy clk i jak tak to dalej i id. Jesli mam racje to o
taka odpowiedz mi przez caly czas chodzilo bo nie wiedzialem jak to jest
wykrywane ale juz sobie w koncu sam doszedlem ze moze to robic przerzutnik
i
pozniej xor z np. clk (o ile to jest prawda co tu napisalem - czekam na
potwierdzenie)
Kurcze, nie zrozumialem... ;-))
dlatego tez szukalem caly czas jakiegos programu ktory by mi narysowal
bramki i przerzutniki wtedy szybciej bym sie domyslil o co chodzi z tym
np.
process(clk)
Nie ma takiego programu, bo jest on niepotrzebny.
swoja droga to tez znam troche jak jest zbudowany przerzutnik - bistabilny
symetryczny uklad w ktorym nie ma jednoznacznosci i dlatego sie tak
przelacza - czy cos w tym rodzaju
Chyba prof. Majewski wstanie z grobu... Tym razem pisze serio...
Twoim problemem nie jest nieznajomość "dokladnej implementacji
czulosci procesu", ale brak zrozumienia działania hardware'u. I to są
podstawy, o ktorych _musisz_ wiedzieć, jeśli masz zamiar zajmować
się projektowaniem logiki programowalnej!
potrafi rozroznic logike C od VHDL-a - to prawda ze trzeba z innej
Logike? Roznia sie? Really?
perspektywy patrzec, to jest cos w rodzaju kodu w C, ktory dziala tylko na
zdarzeniach tzn. w VHDL-u wlasciwie wszystko na zdarzeniach trzeba robic i
Nieprawda. Zdarzenia wystepuja w ukladach sekwencyjnych, a w PLD mozna
implementowac takze kombinacyjne, dla ktoeych os czasu (taktowania) jest
liniowa.
jesli mam kod taki w pseudo C:
void ReadAsmInstructionAndOpCode()
{
BYTE instrukcja = ReadDataFromMemory();
if(instrukcja = nop)
return
else // tu np. instrukcja mov ax, bx - wiec pobieram srcreg i destreg
{
BYTE srcreg = ReadDataFromMemory();
BYTE destreg ReadDataFromMemory();
}
}
//
Jesli wolisz pisac w C dla PLD to mozna: www.celoxica.com. W tej chwili jest
to tragiczny topor, ale moze za 5 lat?
czyli odczytanie instrukcji a pozniej rejestrow to w C jak najbardziej
ale w Hardwarze to jest dziwaczne (widze juz twoja mine).
po pierwsze dlatego ze gdyby tak analizowal Hardware CPU to czas
propagacji
(sciezka danych) bylby za dlugi a poza tym takie w trakcie jeszcze
pobieranie danych to wogole odpada)
i ja bym to zrobil w VHDL-u tak, ze
bylby proces ktory sciaga nonstop dane z pamieci do instruction
prefetcha -
czyli jakiejs np. kolejki FIFO na np. 64 bajty (srednio 16 - 20 instrukcji
intelowych)
Kup sobie pare ksiazek, jest juz z czego wybierac, naprawde!
Mam dzis chyba zly dzien... A moze to uzsadnione?
Pzdr
PZb
From: "epson" <kip1234_at_nospam_poczta.onet.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 18:44:42 +0200
lista czulosci procesu okresla na zmiany ktorych sygnalow proces jest
wrazliwy tzn na ktore reaguje. reszta czy to ma byc konkretny poziom czy
zbocze wynika z tego co napiszesz juz w samym procesie. nie zawsze lista
czulosci jest potrzebna, czesto programy same "znajduja" sobie sygnaly na
ktore proces jest wrazliwy nie zwracajac uwagi na to co wpiszesz w
nawiasach. tak jest np. z webpackiem. po co sie wiec je wypisuje?? niektore
srodowiska nie radza sobie dobrze gdy nic nie napiszesz w nawiasach.
co do polaczen na poziomie bramek/przerzutnikow itp to program tworzy sobie
na podstawie rownan jakie wyjda mu w trakcie syntezy, schemat polaczen dla
danej struktury logiki programowalnej.
np napiszesz cos w stylu:
process(clk,reset)
begin
if reset='0' then --tu jest zerowani asynchr na poziom niski
wy<='0'; -- zresetowanie
elsif rising_edge(clk) then -- lub moze byc np clk'event and clk='1'
, tu masz wykrycie narastajacego zbocza clk
wy<=we; -- przepisanie z we na wy po wyst zbocza narast. o ile
nie bylo resetu
end if;
end process;
taki zapis zostanie rozpoznany jako przerzytnik synchroniczny typu D z
asynchronicznym resetem aktywnym 0. i tyle. jesli napiszesz jakis bardziej
skomplikowany proces moze zostanie stworzony duzy schemat wielu
multiplekserow,bramek i przerzutnikow, moze bedzie kilka sygn zegarowych
itd. jednak to juz "wymysli" program , twoim zadaniem jest opisac poprawnie
zachowanie ukl. cyfrowego.
wiecej nie rozpisuje sie, jest masa ksiazek na ten temat, szczegolnie jesli
chodzi o podstawy vhdla.
pzdr
epson
Użytkownik "Adam Ślosarski" <adam.slosarski_at_nospam_contec.com.pl> napisał w
wiadomości news:apbpqh$ck4$1_at_nospam_news.tpi.pl...
na jakiej zasadzie to dziala, ze wymieniam np. 2 argumenty clk, rst w
kluzuli process:
process(clk, rst)
begin
.....
a pozniej po syntezie on reaguje na to?
chodzi mi o to jak te bramki wygladaja ze potrafia czuwac nad takimi 2
zmianami?
i to oznacza tylko czulosc na z 0 na 1 i z 1 na 0?
jak to jest polaczone z bramkami ze wykrywa ze sie powinien rozpoczac
proces?
na jakiej zasadzie on wykrywa ze zmienil sie clk, albo rst i zaczyna
wykonywac dalej proces (kolejne bramki logincze)?
From: "Adam ślosarski" <adam.slosarski_at_nospam_contec.com.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 19:22:06 +0200
Jeszcze nie do konca mi o taka odpowiedz chodzilo - choc i tak dziekuje za
wszelkie odpowiedzi.
chodzilo mi o to jak z punktu widzenia elektroniki i bramek rozpoznajš one
ze jest nagle zmiana np. clk z 0 na 1 i ze wtedy cos dalej one wykonuja
From: "Górski Adam" <gorskia_at_nospam_wp.pl>
Subject: Re: vhdl a process(clk, rst)
Date: Fri, 25 Oct 2002 18:39:40 GMT
Użytkownik "Adam ślosarski" <adam.slosarski_at_nospam_contec.com.pl> napisał w
wiadomości news:apbt62$sd3$1_at_nospam_news.tpi.pl...
Jeszcze nie do konca mi o taka odpowiedz chodzilo - choc i tak dziekuje za
wszelkie odpowiedzi.
chodzilo mi o to jak z punktu widzenia elektroniki i bramek rozpoznajš one
ze jest nagle zmiana np. clk z 0 na 1 i ze wtedy cos dalej one wykonuja
W układach FPGA ,CPLD i innych głównie występują daw rodzaje elementów:
bramki i przerzutniki. I wszelkie konstrukcje wykonane są w oparciu o nie.
Przeważnie w każdej makrokomórce znajduje się konfigurowalny przerzutnik i
nieduża matryca z bramek. Proszę sobie obejrzeć schemat makrokomórki z
dowolnego układu.
Makrokomórki łączone są między sobą w zależności od producenta w różne
sposoby. Ogólnie przypomina to wielką konfigurowalną sieć połączeń.
Także do tej sieci podłączone są przez układy wejściowe (pin).
Właściwie w VHDL implementowalne są dwie konstrukcje.
1.np:
a)A<=X or Y
b)A<= X when Z else Y;
c) process(X,Y)
begin
A<=X or Y;
end process ;
Konstrukcje te zostaną zamienione na siatkę bramek tzn układ kombinacyjny.
Konstrukcja 1a i 1c są równoważne.
2.
process( C)
begin
if C'event and C='1' (or '0') then
A<=X or Y;
end if;
end process;
Kostrukcja ta zostanie zamieniona na układ kombinacyjny a wynik zostanie
zapamiętany w rejestrze. Sygnałem zapisującym do rejestru jest C czyli
zostanie on podłączony do wejścia zapisującego rejestru. Funkcja OR zostanie
zrealizowana na bramkach znajdujących się w pierwszej części makrokomórki.
wynik z układu kombinayjnego zostanie podany na wejście informacyjne
przerzutnika (D).
Dozwolone jest mieszanie powyższych konstrukcji.
Np. Fragment kodu przedstawiający przerzutnik synchroniczny z
asynchronicznym Setem i Resetem
Register:process(Set,Reset,Clk)
begin
if Reset='1' then
Q<='0';
elsif Set='1' then
Q<='1';
elsif Clk'event and clk='0' then
Q<=D;
end if;
end process;
Adam Górski
From: "Bart SimpsoN" <bsimpson_at_nospam_poczta.fm>
Subject: Re: vhdl a process(clk, rst)
Date: Mon, 28 Oct 2002 21:39:48 +0100
Użytkownik "Adam ślosarski" <adam.slosarski_at_nospam_contec.com.pl> napisał w
wiadomości news:apbt62$sd3$1_at_nospam_news.tpi.pl...
Jeszcze nie do konca mi o taka odpowiedz chodzilo - choc i tak dziekuje za
wszelkie odpowiedzi.
chodzilo mi o to jak z punktu widzenia elektroniki i bramek rozpoznajš one
ze jest nagle zmiana np. clk z 0 na 1 i ze wtedy cos dalej one wykonuja
wejdz na strone www.xilinx.com i poszukaj sobie dokumentacji dowolnego
ukladu FPGA - dowiedz sie to co jest mikrokomorka i CLB'ek i z czego sie
sklada...