konto usunięte

Temat: Programowanie sprzętu dla laika

Kłaniam się,
jestem studentem informatyki, z programowaniem sprzętu nie mam za dużo do czynienia(w sumie nic), ale chciałem się w głebić w ten temat. Na codzień pracuję w C#, dobrze znam też Javę.

Będę używał Veriloga, na razie chcę nauczyć się podstaw programowania, potem wykorzystam to w praktyce. Pozwolę sobię zadawać w tym wątku pytania, które przychodzą do głowy laikowi.

Pytanie nr 1.
Co w verilogu można umieszczać w bloku always? Czy można tam umieścić jakąś długą pętlę lub skomplikowanego taska? Jakie są ograniczenia, które mogą zostać wykonane w jednym ticku zegara?

To na początek, jeśli temat będzie odpowiadał będę zadawał kolejne pytania.

PozdrawiamBartosz Serocki edytował(a) ten post dnia 18.02.09 o godzinie 23:57
Paweł K.

Paweł K. engineer

Temat: Programowanie sprzętu dla laika

proponuje nauczyc sie najpierw podstaw elektroniki cyfrowej
Grzegorz Roszak

Grzegorz Roszak Hardware/Software
Engineer

Temat: Programowanie sprzętu dla laika

Bartosz Serocki:
Pytanie nr 1.
Co w verilogu można umieszczać w bloku always? Czy można tam umieścić jakąś długą pętlę lub skomplikowanego taska? Jakie są ograniczenia, które mogą zostać wykonane w jednym ticku zegara?

Nie da się ukryć, że trudno jest opisywać w języku HDL hardware, z którego budową nie jest się dobrze zaznajomionym.

Nie wiem jak na Twojej uczelni do tego podchodzą, ale z tego co wiem np. na Politechnice Poznańskiej na kierunku Informatyka jest kilka przedmiotów wprowadzających w zagadnienia budowy układów cyfrowych (zapewne analogowych też). Jeśli miałeś takie zajęcia to powinieneś mieć mniej więcej pojęcie o zagadnieniach takich jak przerzutniki, liczniki, multipleksery, dekodery, sumatory, itp. Powinieneś też wiedzieć czym różni się logika kombinacyjna od sekwencyjnej.

Jeśli nie to polecam "Wstęp do elektroniki cyfrowej" J. Kalisza lub "Digital Design" Morrisa Mano.

Projektowanie układów cyfrowych przy użyciu języków OPISU sprzętu różni się fundamentalnie od PROGRAMOWANIA w C# czy Java.

konto usunięte

Temat: Programowanie sprzętu dla laika

Na początku może przyczepię się do nazewnictwa. Być może popełniam jakiś błąd metodologiczny ale dla mnie rozróżnienie o którym napiszę pozwala jasno i precyzjnie wyrazić istotę sprawy. Ale do rzeczy...
Programuje się procesory. "Programowanie" to pisanie ciągu instrukcji wykonywanych przez procesor (nieważne czy bezpośrednio w ASMie czy w języku wyższego poziomu który kompilator i tak zamienia na asm danego proca). Natomiast w przypadku sprzętu, opis w języku HDL nie jest programem tylko modelem danego rozwiązania sprzętowego. Informatykom (w sensie programistów) bardzo często trudno się przestawić z "myśleniem" z proceduralnego (programowanie) na strukturalne (modelowanie). Oczywiście w przypadku test bench'ów czy innego behawiorala które z założenia działają tylko w symulacjach mamy do czynienia z większym podobieństwem do programowania niż w przypadku pisania RTL, jednak tam również uzywa się np. przypisań współbieznych więc w dalszym ciągu jest to model a nie program. No to by było na tyle czepiania się nomenklatury z mojej strony ;)

Pewna rada dla założyciela wątku. Jeżeli bierzesz się za modelowanie w Verilogu to zapomnij o tym że znasz C# czy Javę. To jest co innego. Pisząc kod HDL musisz przełożyc pożądane działanie z szeregu instrukcji na strukturę sprzętu (rejestry, sygnały kombinacyjne, bloki typu sumator etc.).

Zgadzam się z przedmówcami że zanim zaczniesz coś modelować, musisz poznać (o ile jeszcze nie znasz) podstawy elektroniki cyfrowej.

W razie pytań pisz, zawsze się tu ktoś znajdzie, kto wyjaśni wątpliwości ;)

pzdrPaweł Duc edytował(a) ten post dnia 19.02.09 o godzinie 16:16

konto usunięte

Temat: Programowanie sprzętu dla laika

Grzegorz Roszak:

Projektowanie układów cyfrowych przy użyciu języków OPISU sprzętu różni się fundamentalnie od PROGRAMOWANIA w C# czy Java.

Właściwie to zdanie doskonale streszcza to nad czym się rozwodziłem przez pół strony :D ... muszę się nauczyć bardziej zwięźle przekazywać myśli ;)
Grzegorz Roszak

Grzegorz Roszak Hardware/Software
Engineer

Temat: Programowanie sprzętu dla laika

Heh... kolejny skutecznie zniechęcony ;)

konto usunięte

Temat: Programowanie sprzętu dla laika

Grzegorz Roszak:
Heh... kolejny skutecznie zniechęcony ;)

niekoniecznie :)
musiałem po prostu zebrać myśli, nie tak łatwo będzie mnie odciągnąć od tego :)

Na początęk dziękuję za odzew!!

Oczywiście nie mam dużego pojęcia o podstawach, na uniwerku nie miałem żadnego przedmiotu, który dotyczyłby modelowania sprzętu.

Jak na razie to załatwiłem sobie książkę pana Kalisza - dzięki za cynk. Wygąda na fajnie napisaną.

Wracająć do pytania nr 1, to rozumie, że jest tak głupie, że nie ma na nie ... prostej odpowiedzi. szkoda :(

Zapytam trochę przewrotnie, czy jak przeczytam tą książkę, będę umiał na nie odpowiedzieć?

Acha, doskonale zdaję sobie sprawę, że modelowanie sprzętu to zupełnie inna bajka niż Java i C#, ale chciałem się po prostu przedstawić, żeby było wiadomo skąd przychodzę.

Pozdrawiam

konto usunięte

Temat: Programowanie sprzętu dla laika

Bartosz Serocki:
Grzegorz Roszak:
Heh... kolejny skutecznie zniechęcony ;)

niekoniecznie :)
musiałem po prostu zebrać myśli, nie tak łatwo będzie mnie odciągnąć od tego :)
jak na moje oko dobrze rokujesz ;)
Na początęk dziękuję za odzew!!
proszę bardzo
Jak na razie to załatwiłem sobie książkę pana Kalisza - dzięki za cynk. Wygąda na fajnie napisaną.
Wracająć do pytania nr 1, to rozumie, że jest tak głupie, że nie ma na nie ... prostej odpowiedzi. szkoda :(

dzisiaj zauważyłem, że się rozpisałem i zapomniałem odpowiedzieć na Twoje pytanie, wybacz, odpowiadam teraz.
W bloku always można umieszczać ... wszystko :) (czasem będą to maszyny stanów na kilkaset linii) oczywiście w ramach pewnych ograniczeń wynikających ze specyfiki modelowania w sprzęcie. No niestety dalsza częśc pytania sugeruje że skręcasz w złym kierunku (stąd był ten mój rozpasiony wykłąd nt. różnic programowania i modelowania).
Czy można tam umieścić jakąś długą pętlę lub skomplikowanego taska?
jeszcze raz powtarzam: to nie jest program! pętla w sprzęcie Ci się nie będzie wykonywać x razy, gdzie x wynika z jakiegoś iteratora. Jedyne pętle które możesz zawierać w RTLu (Register Transfer Level - poziom przesłań między rejestrowych - dość sugestywna nazwa - poziom w którym modeluje się elementy syntezowalne) to takie które będą robiły przypisywania do poszczególnych bitów wektora, albo poszczególnych elementów tablicy rejestrów. To tak w skrócie ;)
Jakie są ograniczenia, które mogą zostać wykonane w jednym ticku zegara?
znów elementarny błąd... zapis
always@(posedge clk)

nie oznacza ze ten kod będzie wykonywany w jednym "ticku zegara" (o ile Cię dobrze zrozumiałem) - to nie program, tylko że proces reaguje na dodatnie zbocze zegara. W skrócie: za "always" znajduje się tzw. lista czułości. 'posedge nazwa_sygnału_zegarowego' czy też 'negedge nazwa_sygnału_zegarowego' powoduje że narzedzia do syntezy rozpoznają w tym procesie model rejestru (przerzutnik D) lub kilku rejestrów - jeśli tak zamodelujesz, zapisywanych odpowiednim zboczem zegara (narastającym lub opadającym).
W przypadku procesów modelujących sygnały kombinacjne (asynchroniczne), na liście czułości znajdują się nazwy sygnałów które wpływają na proces, czyli mogą spowodować zmianę na sygnale(-łach) modelowanym przez proces. Co ważne, muszą to być wszystkie takie sygnały, żeby zachowanie układu w trakcie symulacji RTL jak i po syntezie było takie samo.
Napewno jeszcze dużo niejasności będziesz miał w tym zakresie...
pytaj, będziemy na bieżąco korygować :)
Zapytam trochę przewrotnie, czy jak przeczytam tą książkę, będę umiał na nie odpowiedzieć?
możliwe, tym bardziej że o ile pamiętam, są tam rozdziały o modelowaniu w HDL, ale na przykładzie VHDLa. Ale raczej odradzałbym Ci czytanie tej książki od deski do deski. Czytanie w ten sposób takich książek to mordęga. Jeśli chcesz to w najbliższym czasie ją przejrzę i podsunę Ci propozycje z czym się zapoznać najpierw.
Acha, doskonale zdaję sobie sprawę, że modelowanie sprzętu to zupełnie inna bajka niż Java i C#, ale chciałem się po prostu przedstawić, żeby było wiadomo skąd przychodzę.
no to mamy jasność ;)
Pozdrawiam
pzdrPaweł Duc edytował(a) ten post dnia 26.02.09 o godzinie 00:18
Paweł K.

Paweł K. engineer

Temat: Programowanie sprzętu dla laika

zapomnij o czymś takim jak "pętla", "task"? jeśli chcesz modelować syntezowalną logikę. Zapoznaj się z modelowaniem behawioralnym, strukturalnym, RTL. Polecam na początek:

The Designer's Guide to VHDL, Ashenden Peter J.

Aha, hardware jest dla twardych ludzi z jajami :)

konto usunięte

Temat: Programowanie sprzętu dla laika

Paweł Kulak:
zapomnij o czymś takim jak "pętla", "task"? jeśli chcesz modelować syntezowalną logikę. Zapoznaj się z modelowaniem behawioralnym, strukturalnym, RTL.
nie zgodzę się :) w RTLu też mozna stosować pętle (już podałem gdzie) i taski... a poza tym w końcu i tak trzeba napisać jakiś test bench, a behawioralu już taka np. pętla while w procesie 'initial' będzie stosowana tak samo jak w programie.
Polecam na początek: The Designer's Guide to VHDL, Ashenden Peter J.
A tu już się zgadzam, świetna książka. Tak wogóle to Ashenden jest jednym z ludzi odpowiedzialnych za rozwój VHDLa. Ale może niech koelga najpierw faktycznie zapozna się z podstawowymi elementami elektroniki cyfrowej? :)
Aha, hardware jest dla twardych ludzi z jajami :)
a tego nie wiedziałem ;D dzięki za uświadomienie ;P
Paweł K.

Paweł K. engineer

Temat: Programowanie sprzętu dla laika

rzeczywiście kolega Paweł Duc ma racje, przypomniało mi się że pętle stosuje się też w modelowaniu strukturalnym: w instrukcji
generate

konto usunięte

Temat: Programowanie sprzętu dla laika

Paweł Kulak:
rzeczywiście kolega Paweł Duc ma racje, przypomniało mi się że pętle stosuje się też w modelowaniu strukturalnym: w instrukcji
generate

To też, choć miałem na myśli pętle typu 'for' i 'while'. W dodatku nie tylko w strukturalnym ale w RTL też ... i o ile możesz sobie pozwolić na stosowanie Veriloga 2001.
Przemysław Kozieł

Przemysław Kozieł Programista C++

Temat: Programowanie sprzętu dla laika

Ostatnio dorwałem świetną książkę o VHDL zorientowaną na syntezę. RTL Hardware Design Using VHDL, jest na books.google.pl.
Jerzy G.

Jerzy G. Konstruktor, Secom

Temat: Programowanie sprzętu dla laika

Tak, zdecydowanie zacznij od VHDL'a. Verilog jest jakiś dziwny :)
Pozdrawiam,

Jerzy Gbur

konto usunięte

Temat: Programowanie sprzętu dla laika

Jerzy Gbur:
Tak, zdecydowanie zacznij od VHDL'a. Verilog jest jakiś dziwny :)

czyżbym zauważał jakieś uprzedzenia? ;) mam nadzieję że nie zaczniemy nowej "świętej wojny" :)

a tak bardziej poważnie... jak wszędzie, obydwie "opcje" mają tzw. zady i walety. Żadnego z tych dwóch języków nie uważam za zdecydowanie lepszy, znam obydwa. Po prostu jeśli się któregoś używa częściej to się do niego przyzwyczaja. Myślę, że zaletą Veriloga w tym przypadku jest to że ma składnię podobną do C, co w przypadku kolegi programisty będzie łatwiejsze do opanowania w stosunku do "opisowości" VHDL (wszelkie when, then etc.). Poza tym Verilog jest bardziej popularny w Ameryce i powstaje trochę ciekawych open-source'owych narzędzi umożliwiających wykorzytywanie modeli w Verilog wraz z np. SystemC, Perlem, Pythonem.

PozdrawiamPaweł Duc edytował(a) ten post dnia 09.03.09 o godzinie 13:51
Jerzy G.

Jerzy G. Konstruktor, Secom

Temat: Programowanie sprzętu dla laika

Tak, to miała być prowokacja :)
Prawda jest taka, że nie znam Veriloga :) więc w razie pytań nie będę mógł pomóc, przeciwieństwie do VHDL'a.

Pozdrawiam,

Jerzy Gbur
Marcin Bońka

Marcin Bońka Programista, Neubloc
Polska Sp. z o.o.

Temat: Programowanie sprzętu dla laika

Prawde mowiac, w Stanach bardziej popularny jest VHDL, poniewaz kazda dokumentacja ma wymog opisania ukladu w tym jezyku. Verilog akurat jest czesciej uzywany w Europie. Ale to taki szczegol...

Co do samego pytania, wszystko sprowadza sie do tego co jest dostepne, w czym sie najlepiej czujemy i do jakiego jezyka sa odpowiednie narzedzia. tak wiec mamy:
- VHDL - rozpowszechniony z mnostwem narzedzi dostepnymi na rynku
- Verilog - jak wyzej
- SystemVerilog - pochodna Veriloga zaproponowana przez Accelera (organizacja sponsorowana przez Cadence'a), bardziej abstrakcyjna i obiektowa, jest juz dosc sporo narzedzi do tego jezyka
- SystemC - projektowanie ukladow w C++, malo narzedzi jeszcze jest, a te ktore sa, maja spore problemy np. z synteza do ukladu.

Co do skladni, Verilog rzeczywiscie jest bardziej podobny do C, tak samo jak SystemVerilog. VHDL ma swoje podstawy w jezyku ADA, dlatego jest rozbudowany skladniowo. SystemC, to nic innego jak biblioteka klas wzorcow dla C++.

Wiec mozliwosci sa, pytanie brzmi, co nam bardziej pasuje i czego jestesmy zmuszeni uzywac w pracy.

Teoretycznie jest jeszcze mozliwosc "pisania" w EDIF'ie, ale to pomysl dla wyjatkowych sado-masochistow...

Pozdrawiam,
Marcin



Wyślij zaproszenie do