Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Jestem nowicjuszem - Kilka pytań o układy programowalne

peter_k 09 Mar 2007 12:53 6588 19
Texa Poland
  • #1
    peter_k
    Level 11  
    Witam.

    Jestem dopiero po pierwszych wykładach z układów programowalnych. Niestety nie jestem na kierunku elektronika, tylko informatyka i temat jest przerabiany trochę po łebkach i tylko podstawy. Zainteresowałem się tym trochę i mam trochę pytań: (byłbym wdzięczny, za krótkie odpowiedzi). Najważniejszą rzeczą jaką jestem zainteresowany jest wydajność układu.

    a) Ile pieniędzy trzeba by zainwestować by móc zacząć się tym bawić? Tzn ile mniej więcej zapłacę za sam układ (tym FPGA) + programator + oprogramowanie komputerowe?

    b) Jak bardzo układy programowalne dorównują prędkością współczesnym procesorom? Np: zrealizuję podobny program dla układu programowalnego (w postaci układu kombinacyjno-sekwencyjnego) i program w języku asemblera dla komputera PC. Wiem, że wyniki takiego porównania zależą od wielu czynników, ale chciałbym z grubsza wiedzieć jak szybkie są układy programowalne.

    c) W jakiej technologii jest wykonany taki układ? Tzn jakiej grubości w nm są ścieżki?

    Właśnie przeczytałem, że niektóre matryce FPGA są produkowane w procesie technologicznym 65 nm.

    d) Czy do takiego układu można dołączyć osobną pamięć? Oczywiście wiem, że jeśli będę korzystał z matrycy FPGA, to wszystko mogę samemu zaprojektować w postaci przerzutników (jest tam coś takiego jak sprzężenie zwrotne).

    Przeczytałem, że da się.

    e) Układy programowalne PLA/PLS można opisać np w postaci liczb N (ilość wejść), P (ilość wyjść AND), M (ilość wyjść OR). W jakich granicach są te liczby (jak duże spotyka się układy)?

    Teraz zaczynam myśleć o FPGA, ich budowa jest zupełnie inna.

    f) Czy teoretycznie dałoby się zaprojektować na układzie programowalnym własny mikroprocesor?

    Da się, właśnie przeczytałem na forum że komuś się to udało.

    g) Jakiej wielkości w cm są owe układy (obudowa)?

    h) Język opisu takich układów to VHDL? Jeśli tak, to znacie może jakieś dobre książki / kursy internetowe poświęcone temu językowi?

    Z góry dziękuję za odpowiedzi!
  • Texa Poland
  • #2
    pndemon
    Level 19  
    a) www.digilentinc.com, myślę że razem ze sprowadzeniem, to jakieś 300-400 zł, w zależności od układu,

    b) na mój gust nie da się tego porównać, bo procesory różnią się całkowicie od matryc i budową i zasadą działania, procesor wykonuje jakiś zapisany w pamięci kod, a przez matrycę sygnały płyną i ona je przetwarza, tak przynajmniej aj to czuję, trzeba trochę się tym pobawić aby zrozumieć, oczywiście każdy będzie mieć inne odczucia

    c)nie interesowałem się tym nigdy, bo nie jest to krytyczny parametr przy wyborze matryc

    d)np na płytce Spartan 3E Starter Board, masz kilka rodzaji pamięci włącznie z DDR, w zasadzie do matryc możesz podłączyć dowolne urządzenie cyfrowe o ile zmieścisz się w zakresie pracy prądowo/napięciowej matrycy

    e)nigdy nie bawiłem się tymi układami, polecam FPGA jeśli chodzi o wejścia/wyjścia takiego układu to jest to zazwyczaj powyżej 80 fizycznie dostępnych nóżek w układzie, ale są ważniejsze parametry takie jak ilość bramek, a raczej komórek

    f)oczywiście, np. w Spartanie 3E PicoBlaze zajmuje ok. 3% powierzchni (z tego co pamiętam), są dostępnie tzw IPCORy czyli gotowe wirtualne układy które można wgrywać na matrycę, jak np. procesory, mnożniki, sumatory, licznik, itp.

    g)różnie, powiedzmy że ok 2cmx2cm

    h) ja używam VHDLa, ale słyszałem że dla tych co z C, to lepiej Verilog, ale jak już to ktoś opisywał, w zasadzie język nie ma znaczenia, ważne co piszesz. Ja osobiście korzystam z książku Kevina Skahilla "Język VHDL"

    A na koniec, tak ku pokrzepieniu serc dodam, że mi też się kiedyś wydawało, że te matryce to cud wynalazek i że ktoś kto nie zna się na elektronice (cyfrowej) jest w stanie zrobić co tylko mu się podoba. Otóż pomyliłem się wielce. W zasadzie programowanie matryc, to tak właściwie składanie elektronicznych takich jak liczniki, czy rejestry w jedną działającą całość. Mimo wszystko powodzenia.
  • Texa Poland
  • #3
    tuzi
    Level 13  
    Witam.

    Sam może też nie jestem jakimś wielkim ekspertem w dziedzinie, ale myślę że trochę będę mógł pomóc przynajmniej z częścią pytań. Po kolei zatem.

    Quote:
    a) Ile pieniędzy trzeba by zainwestować by móc zacząć się tym bawić? Tzn ile mniej więcej zapłacę za sam układ (tym FPGA) + programator + oprogramowanie komputerowe?


    Zabawę najlepiej zacząć od nabycia płytki prototypowej z układem FPGA. Ceny są tutaj różne. Ja zaopatrzyłem się w całkiem przyzwoity zestaw firmy Altium z układem Xilinx Spartan 3. Kupowałem go na allegro, za ok. 450 zł. Z drugiej strony czasem (rzadko niestety) zdarzają się na allegro okazje - np. płytka prototypowa za 200 zł. Poza allegro można nabyć płytkę u producentów. Wydaje mi się, że ogólnie najtańsze tego typu płytki to kwota rzędu $70 (oczywiście bez transportu zza oceanu). Więcej informacji można uzyskać np. na http://www.xilinx.com bądź też http://opencores.org.

    Zestawy takie zawierają wszystko co jest potrzebne aby zacząć zabawę z FPGA - sam układ, przyciski, diodki, wyświetlacze, pamięci itp. Oczywiście - im więcej elementów, tym droższa płytka ;)

    Co do oprogramowania - zabawę z FPGA (opis sprzętu, syntezę, implementację i programowanie) umożliwia udostępniane przez producentów układów darmowe oprogramowanie, dostępne do ściągnięcia w Internecie. Dla układów firmy Xilinx jest to ISE Webpack, dla Altery Qartus.

    Quote:
    g) Jakiej wielkości w cm są owe układy (obudowa)?


    Najmniejsze ok. 1cm x 1cm, górna granica to ok 4,5cm x 4,5cm (dla obudów typu BGA)

    Quote:
    h) Język opisu takich układów to VHDL? Jeśli tak, to znacie może jakieś dobre książki / kursy internetowe poświęcone temu językowi?


    Dosyć popularny jest tutorial Evita opracowany przez firmę Aldec. Do ściągnięcia na stronie http://aldec.com/downloads/.

    Tyle ode mnie. Powodzenia :)
  • #4
    peter_k
    Level 11  
    Dziękuję za odpowiedzi.

    Jestem po podstawach elektroniki cyfrowej, więc już wiem mniej więcej jak to działa, aczkolwiek nie będą nas już więcej uczyć o układach programowalnych i języku VHDL (zagadnienia te poznaliśmy skrótowo na kilku godzinach). Więc wszystkiego będę się musiał nauczyć sam.

    Odnośnie układu znalazłem takie coś -> http://allegro.pl/item172506337_spartan_3_starter_kit_xilinx_.html.

    Co o tym myślicie?
  • #5
    pndemon
    Level 19  
    jak dla mnie ok, co prawda z tego co widzę to wygląda to jak płyta rozszerzeniowa do płyt typu starter, kiedyś dawali takie z układami CPLD, ale widzę że ty jest FPGA, więc z pewnością pobawisz się trochę, no i jest dużo gotowych rzeczy, którymi można kombinować.
  • #6
    tuzi
    Level 13  
    Całkiem sympatyczna płytka za przystępną cenę. No i do tego ma dużo diodek, którymi można mrugać i przełączników, którymi można pstrykać ;)

    Ale na poważnie - myślę, że do nauki jest świetna. Można na niej robić podstawowe mruganie diodkami czy inne sprawdzanie parzystości, jak i bardziej zaawansowane rzeczy.
  • #7
    peter_k
    Level 11  
    1) Znalazłem dość ciekawy kurs czasopisma "Elektronika Praktyczna" układów FPGA (aktualny, niedługo pewnie pojawią się kolejne częsci):
    http://www.kamami.pl/dl/uklady_fpga_w_przykladach_01.pdf
    http://www.kamami.pl/dl/uklady_fpga_w_przykladach_02.pdf
    http://www.kamami.pl/dl/uklady_fpga_w_przykladach_03.pdf
    http://www.kamami.pl/dl/uklady_fpga_w_przykladach_04.pdf
    http://www.kamami.pl/dl/uklady_fpga_w_przykladach_05.pdf

    Oferują oni także zestawy uruchomieniowe:
    http://kamami.pl/?id_prod=6890
    http://kamami.pl/?id_prod=6891

    Zdaje się, że mają ten sam układ FPGA, który znalazłem na allegro (link powyżej). Na samej płycie nie widzę, żadnego wyświetlacza, aczkolwiek w wyposażeniu dodatkowym jest "LCD_1602 - alfanumeryczny wyświetlacz LCD 16x2 z zamontowanym złączem 16-stykowym". To znaczy, że mogę go w każdej chwili podłączyć?

    Kupując oba te zestawy zapłacę trochę więcej, ale będę miał pewność, że są nie używane (w końcu rozprowadzane przez profesjonalne czasopismo), będę umiał je obsłużyć (na podstawie powyższego kursu), w dodatku dostanę dużo wyposażenia dodatkowego! - np przejściówkę na USB.

    Właśnie zauważyłem, że jedną z wad tego układu w stosunku do tego na allegro jest brak osobnej pamięci. No ale chyba można taką dokupić i podłączyć?

    Wiecie może jakie maksymalne taktowanie może mieć ten układ? Ten z allegro ma max 500 MHz. Swoją drogą zastanawia mnie czemu nie potrzebuje on odzielnego układu chłodzenia - przecież jeśli wykorzystam wszystkie bramki naraz to ilość wydzielanego ciepła wzrośnie? A w procesorach PC nawet o niższym taktowaniu bez chłodzenia się nie obejdzie.

    Co myślicie o tych zestawach jak i o samym czasopiśmie (albo powyższym kursie)? W sumie narazie to chciałbym się tylko nauczyć i pobawić trochę, a wydaje mi się, że właśnie te układy się bardzo dobrze nadają. Dodatkowo mają nawet dobre parametry? Jak już będę więcej wiedział i wciąż będę miał na to ochotę, to kupię sobie lepszy układ.

    2) Przeglądałem sobie ostatnio kursy VHDL i Verilog-a. Zastanawia mnie jedno: czasami spotykam różne pętle, instrukcje warunkowe itd. No ale przecież układ cyfrowy jest w stanie robić wszystko RÓWNOLEGLE, tymczasem przez takie zakodowanie programu robi się tylko jedna rzecz naraz? Sorry, jeśli źle coś piszę, dopiero zaczynam naukę.

    I znów dziękuję za odpowiedzi!
  • Helpful post
    #8
    Zaquadnik
    Level 27  
    Co do porównania prędkości procesora i FPGA to można to robic porównując czas wykonywania się danych al;gorytmów, na przykład 1024-punktowego FFT. Najczęściej FPGA będzie bił procesor na głowę w szybkości ;) Przykładowo Spartan3 XC3S400 ma 16 mnożników 18-to bitowych, a co za tym idzie może wykonać 16 mnożeń w ciągu jednego cyklu zegara :] Jednakże o wiele trudniej jest zrobić FFT sprzętowo, na FPGA niż programowo. Tyczy się to też innych algorytmów. Co do maksymalnego taktowania FPGA to mojemu znajomemu udało się pogonić Spartana3 do 450MHz, ale trzeba pamiętać, że jest to wewnętrzna szybkość FPGA. Nie da się uzyskać takiego sygnału "na zewnątrz" ponieważ bufory I/O w Spartanie3 są na to za wolne. O wiele lepiej pod względem prędkości prezentują się Virtexy. Jednakże ich cena przyprawia o zawroty głowy :P Co do instrukcji warunkowych, przykładowo tego typu zbór instrukcji opisuje dwa rejestry liczące w górę z asynchronicznym resetem:
    Code:

       licz : process (clk,rst) is
       begin         
          if rst = '0' then
             AdresSin <= "0000000000"; 
             AdresCos <=   "0100000000";
          elsif falling_edge(clk) then
             AdresSin <= AdresSin + 1;
             AdresCos <= AdresCos + 1;
          end if;
       end process licz;   


    Poniższa konstrukcja służy natomiast do generacji regularnych struktur, a pętla for decyduje ile pojedynczych bloczków ma wejść w skład struktury:
    Code:

       ADD: for i in 0 to L generate
          ADD_BEG : if i = 0 generate
             AB : full_adder port map(i1 => in1(0), i2 => in2(0), c0 => carry(0), c1 => c1, y => res(0));
          end generate;
          ADD_MIG : if i > 0 and i < L generate
             AM : full_adder port map(i1 => in1(i), i2 => in2(i), c0 => carry(i), c1 => carry(i-1), y => res(i));
          end generate;
          ADD_END : if i = L generate   
             AE : full_adder port map(i1 => in1(L), i2 => in2(L), c0 => '0', c1 => carry(L-1), y => res(L));
          end generate;
       end generate;

    Także nie są to instrukcje warunkowe i pętle w takim sensie, w jakim są one obecne w programowaniu ;)
  • #9
    peter_k
    Level 11  
    Dziękuję za odpowiedź! No i to właśnie chciałem wiedzieć - czy istnieje taka sfera problemów w których FPGA będzie bardziej wydajne od komputera PC :)

    Ale to wszystko jest skomplikowane. W tradycyjnych układach PLA/PLS, PROM, PAL/GAL było tylko kilka warstw z prostymi funktorami. A tutaj wszystko jest tak rozbudowane - jakieś gotowe układy o których Pan napisał realizujące mnożenia itd. Ciekawi mnie np czy owe mnożenie jest funkcją oferowaną przez sam układ FPGA, czy też przez kompilator po stronie PC, który sam dobierz odpowiedni linie i funktory by układ wykonywał mnożenie. Utrudnia to trochę początkującym realizację układów i pojęcie tego wszystkiego. Ciężko też znaleźć dobry kurs VHDL w sieci...

    Zainteresowałem się układami VHDL, ponieważ fascynuje mnie optymalizacja na najniższym poziomie (wcześniej wydawało mi się, że nie ma niczego niższego od asemblera, a tymczasem tu można operować na poziomie bitów, bramek logicznych lub nawet tranzystorów). No ale hmm tymczasem oferuje mi się tu jakieś kombajny które robią rozbudowane rzeczy. Czy VHDL umożliwia także łączenie takich wysoko poziomowych funkcjonalności (jak np mnożenie) z bramkami logicznymi?
    Zaquadnik wrote:
    Code:

       licz : process (clk,rst) is
       begin         
          if rst = '0' then
             AdresSin <= "0000000000"; 
             AdresCos <=   "0100000000";
          elsif falling_edge(clk) then
             AdresSin <= AdresSin + 1;
             AdresCos <= AdresCos + 1;
          end if;
       end process licz;   


    Domyślam się (jeszcze nie znam vhdl), że ten fragment kodu jest definicją bloku dwu-wejściowego, który w momencie wysłania sygnału resetu ustawia dwie zmienne, a w momencie opadającego zbocza sygnału zegarowego inkrementuje je. Aczkolwiek wiele rzeczy pozostaje dla mnie zagadką (i przez to utrudnia efektywne wykorzystanie układu):

    x) czy cały ten fragment kodu jest wykonywany jednocześnie (chyba dałoby się tak zrobić tworząc układ kombinacyjny), czy też może układ naprawdę wykonuje ten elsif?

    y) czy operacja inkrementowania zmiennych korzysta z jakiejś wbudowanej funkcjonalności FPGA (jakiegoś bloku arytmetycznego) czy też może inkrementowanie działa także dzięki jakiemuś układowi kombinacyjno-iteracyjnego wygenerowanego przez kompilator po stronie pc?
  • #10
    pndemon
    Level 19  
    to jest proces, instrukcję tu wykonywane są sekwencyjnie, natomiast procesy same ze sobą są współbieżne. ten proces zostanie zsyntetyzowany do dwóch liczników inkrementujących, czyli po prostu zestawu bramek i przerzutników.

    operacja if..else jest dosyć prosta do wykonania w sprzęcie, dla pojedynczego sygnału (1bit) jest to po prostu bramka AND (no może przesadziłem :), no w każdym razie jak się zastanowić to nie jest to takie trudne

    mnożenie sprzętowe może być zaimplementowane w logice FPGA, ale skoro jest dostępny układ mnożący to lepiej jest go użyć, jest znacznie szybszy. z resztą w opcjach syntezy można dokonać wyboru co do tego czy chcemy korzystać z gotowych układów wew. FPGA.

    co do poziomów abstrakcji, to jak chcesz to możesz sobie układać brameczki, FPGA na to pozwala, co jednak gdy musisz ich ułożyć powiedzmy 10000?? wtedy taki kombajn się przyda, poza tym, żeby dobrze optymalizować kod musiałbyś znać b. dobrze budowę wew. danej matrycy na której pracujesz.
  • #11
    Zaquadnik
    Level 27  
    Można w kodzie VHDL łączyć takie procesy, jak opisany wyżej oraz zwykłe funktory logiczne, przykładowo kod :
    Code:

    y <= a and b;

    Opisuje bramkę AND z wejściami a i b i wyjściem y. Proces, który zawiera, jak powiedziałeś, zmienne. Jednakże są one zadeklarowane w postaci signal i są typu std_logic_vector, czyli całość zostanie przez syntezer zinterpretowana jako rejestry. Co do układów mnożących, wystarczy wykorzystać odpowiednią strukturę kodu (i w opcjach syntezera wybrać multiplier style jako block), aby syntezer wiedział, że ma użyć wbudowanych w FPGA układów mnożących, o ile dany układ FPGA takowe posiada. Podobnie wykorzystuje się wbudowane pamięci SRAM. W Xilinx ISE jest coś takiego jak language templates i tam można podejrzeć sobie jak ma wyglądać kod do opisu wyżej wymienionych urządzeń ;)
    Co do samego VHDL to pomiędzy słowami kluczowymi architecture i end architecture jest tak zwana część współbieżna kodu i wszystko, co tam umieścimy będzie wykonywało się jednocześnie. Wewnątrz procesu można powiedzieć, że instrukcje wykonują się sekwencyjnie. Przytoczony wcześniej proces mówi tyle "Jeśłi rst jest w stanie niskim, to zresetuj oba rejestry, jeśli nie, to na każdym opadającym zboczu zegara zwiększaj ich zawartość o 1." Odpowiada to konstrukcji zespołó przerzutników D (zespoły te nazywamy rejestrami) wyzwalanych zboczem i z asynchronicznym resetem. Oczywiście, można zsyntetyzować także przerzutnik typu zatrzaski mniej więcej będzie wyglądało to tak:
    Code:

    zastrzask : process (en,rst,D) is
    begin
          if rst = '0' then
                Q <= '0';
          elsif en = '1' then
                Q <= D;
          end if;
    end process zatrzask;

    Syntezer zawsze wywali ostrzeżenie przy syntezie takiej struktury, ponieważ utworzyliśmy zatrzask. Ostrzega on dlatego, że czasem tworzymy zatrzaski nieświadomie i dziwimy się, że układ nie działa. Jednak jeśli wiemy, że właśnie sygnał Q ma być zatrzaskiem, to nie przejmujemy się ostrzeżeniem ;) To jeden z 'kruczków' VHDLa. Innym ważnym jest to, że wartość do danego sygnału możemy przypisać tylko w jednym procesie, inaczej syntezer zwróci błąd.
    Także, jak widać, tworząć w VHDL trzeba zwracać uwagę na wiele czynników :)
  • #12
    tony_tg
    Level 16  
    Czesc,

    Odnosnie Twoich oryginalnych pytan, to w zasadzie dostales juz odpowiedzi, ale tutaj jest co ja sadze o paru sprawach.

    b) Uklady programowalne nie dorownuja wspolczesnym procesorom jesli porownasz maksymalne czestotliwosci zegara. Natomiast inna sprawa to fakt, ze na normalny procesor wykonuje jakis zestaw rozkazow i cokolwiek robisz musi byc zamienione na TEN konkretny zestaw rozkazow wiec czestotliwosc zegara albo inaczej czas wykonania pojedynczej instrukcji i jakosc listy rozkazow danego procesora jest dla Ciebie krytyczna. (inaczej ile i jakich instrukcji musisz uzyc aby rozwiazac Twoj problem). W FPGA to Ty definiujesz jakie "instruckcje" albo jak zamierzasz rozwiazac problem i to od Ciebie zalezy jak go rozwiazesz. Dla przykladu, aby przetworzyc MPEG 4 w real time, czyli czytasz strumien danych i robisz dekodowanie go i puszczenie na monitor, w FPGA potrzebujesz zegara maksymalnie 20MHz. Powiedz mi teraz, jak szybki procesor potrzebujesz aby zrobic to samo, dalej w real time na "generic" procesorze takim jak amd czy intel? Nawet specjalizowany procesory DSP, gdzie lista rozkazow jest specjalizowana do zastosowan DSP sa wolniejsze niz implementacja w FPGA. Jak sie rozejzysz jak sa implementowane systemy gdzie trzeba przetwarzac duze ilosci danych w real time takie jak systemy video, telekomunikacja, etc to zobaczysz, ze cala robota jest odwalana w FPGA a procesory klasy pentium sa tam sprzataczkami, ktorych jedynym zadaniem jest przelaczanie jakichs wolnych rzeczy i wyswietlanie milego dla oka GUI.

    To tak apropo porownywania predkosci FPGA versus CPU ;)

    c) zignoruj to kompletnie, tak samo jak powinienes zignorowac technologie w przypadku procesorow. Zejscie do 65nm i nizej rozwiazuje a w zasadzie odklada na potem jedyny problem jaki teraz mamy z obecna architektura procesorow. Sa masakrycznie malo wydajne :) W przypadku FPGA przejscie na nowy proces technologiczny ma znaczenie zasadnicze bo pozwala wepchnac wiecej szybszych zasobow ktore mozesz uzyc, ale nie powinienes sobie zaprzatac tym glowy jak zaczynasz z FPGA. Tak samo jak nie powinienes patrzec na ilosc tranzystorow uzytych do zbudowania FPGA i porownywac ten numerek z procesorami albo chipami kart graficznych. Tak tylko wspomne ze Virtex 5 ma ponad miliard (slownie miliard) tranzystorow w sobie wiec porownywanie FPGA z CPU albo GPU pod wzgledem skomplikowania budowy jest tez bez sensu. CPU i GPU sa smiesznie proste ;)

    d) kazda ktora da sie kupic mozesz podlaczyc. Do niektorych pamieci jak DDR2 musisz uzyc wiekszego drozszego FPGA z dedykowanymi blokami IO aby podlaczyc sie do takiej pamieci.

    f) Altera - Nios2, Xilinx - Microblaze, Lattice - Mico32, wszystkie 32 bitowe procesory RISC. To od vendorow a potem sa vendor independent procesory jak tsk3000 od altiuma, i pare innych open source jak leon. Mozna przebierac. Dodatkowym atutem tych procesorow jest to, ze jak Twoj program jest za wolny to zawsze mozesz uzyc technologi C 2 RTL albo odpowiednika, tzn, kompilator zamieni Twoj kod w C na Verilog albo VHDL i wysle wykonanie tego do sprzetu zamiast meczyc sie na procesorze. Pozatym peryferale sa konfigurowalne, tzn mozesz sobie wrzucic to co potrzebujesz albo dorobic nowy samemu. Wszystko jest konfigurowanle i rozszerzalne bez dokupowania nowych kostek.

    g) to sa standardowe obudowy wiec musisz zobaczyc co specyfikacje package'ow mowia. Jak sciagniesz data sheet do FPGA to tam Ci podadza wymiary obudowy.

    Pozdrawiam,
    tony_tg
  • #13
    peter_k
    Level 11  
    Aha, to już chyba zostałem uświadomiony jaka moc obliczeniowa kryje się w FPGA :) Tutaj też jest podobne porównanie w stosunku do CPU -> http://bazy.opi.org.pl/raporty/opisy/synaba/103000/sn103908.htm

    Oczywiście coś za coś, program nie może być zbyt złożony bo się nie zmieści w bramkach logicznych FPGA. No chyba, że się zrobi mikroprocesor i będzie się wczytywało rozkazy z osobnej pamięci, wtedy program może być rozbudowany, ale kosztem prędkości przetwarzania.

    A ja cały czas stoję w miejscu, mimo iż mam duże chęci. Ciężko znaleźć dobre artykuły/książki o VHDL (<- pod kątem wykorzystania w FPGA).

    Tak sobie też myślałem, że:

    1) Na świecie jest mnóstwo super-komputerów. Gdyby tak zamiast zwykłych CPU zainstalować układy FPGA, wydajność powinna bardzo wzrosnąć. Oczywiście tylko dla niektórych algorytmów.

    2) Być może kiedyś w nowszych CPU, będą instalowane rozszerzenia FPGA, które będą mogły być wykorzystane przez oprogramowanie?
  • #14
    griva
    Level 17  
    peter_k wrote:

    A ja cały czas stoję w miejscu, mimo iż mam duże chęci. Ciężko znaleźć dobre artykuły/książki o VHDL (<- pod kątem wykorzystania w FPGA).

    zapomnij o litearaturze a naszym ojczystym jezyku bo tak naprawde prawie jej nie ma
    www.amazon.com lub ebay.com i masz do wyboru do koloru

    peter_k wrote:

    Tak sobie też myślałem, że:

    1) Na świecie jest mnóstwo super-komputerów. Gdyby tak zamiast zwykłych CPU zainstalować układy FPGA, wydajność powinna bardzo wzrosnąć. Oczywiście tylko dla niektórych algorytmów.

    2) Być może kiedyś w nowszych CPU, będą instalowane rozszerzenia FPGA, które będą mogły być wykorzystane przez oprogramowanie?


    zadanie domowe, www.cray.com. Tak naprawde prawdziwe zycie ukladow programowalnych toczy sie poza granicami naszego kraju, jestesmy jakies 20 lat do tylu w tych rzeczach. Firm ktore zajmuja sie takimi rzeczami mozna policzyc na palcach u jednej reki a uczelnie traktuja to raczej w kategorii " a moze faktycznie na FPGA bedzie to szybsze" ;-)
  • #15
    Mirko51
    Level 15  
    Polecam te książki:
    "Język VHDL w praktyce", J. Kalisz (trochę o VHDL i o projektowaniu FPGA)
    "Język VHDL Projektowanie programowalnych układów logicznych", Skahill Kevin (bardzo szczegółowo opisany VHDL od podstaw przystępnym językiem)
    "Projektowanie układów cyfrowych z wykorzystaniem języka VHDL", M. Zwoliński (tu jest przede wszystkim o modelowaniu systemów cyfrowych - projekt prostego uP, o pisaniu testbench, o syntezie i symulacji).

    Bardzo dużo materiałów znajdziesz w sieci, szczególnie na serwerach politechnik, jak PW, AGH:
    http://www.ue.eti.pg.gda.pl/fpgalab/
    http://www.ue.eti.pg.gda.pl/fpgalab/info_prog_spartan3/index.html
    http://wwwzpt.tele.pw.edu.pl/luba/j_VHDL.pdf
    http://www.fccm.agh.edu.pl/dydaktyka/VHDL_PSC/VHDL_PSC.htm
    http://www.fccm.agh.edu.pl/dydaktyka/JOSd/JOSd.htm
    http://maczek.info.bielsko.pl/~zbiju/ATH/ (wykłady MUC, VHDL_PDFy.part???.rar)
    http://pl.wikibooks.org/wiki/VHDL
    http://prz-rzeszow.pl/~zh/fpga/
    http://home.elka.pw.edu.pl/~pkaleta/vhdl/

    wiele innych => google
    oraz oczywiście po angielsku...

    polecam zakup/zmontowanie własnej płytki z FPGA Spartan3 lub Cyclone2 (żeby być na czasie), do tego Static RAM, VGA, 7seg, LCD 2x16, knefle, buczek, LEDy, TFT... I oczywście jakiś programator na LPT. Oprogramowanie - do syntezy i implementacji w FPGA jest darmowe do większości zastosowań - dla Xilinx to ISE WebPack (najlepiej w wersji 7.1).
    Taka platforma sprzętowa posłuży ci do nauki, sprawdzenia się w warunkach bojowych.
    Najlepiej uczyć się na jakiś konkretnych przykładach:
    http://www.ue.eti.pg.gda.pl/fpgalab/puc/index.html
    np. zbudować sobie jakiś zamek szyfrowy, narysować coś na VGA, zrobić zegar RTC z datownikiem.

    Na co musisz zwracać uwagę przy nauce projektowania HDL/FPGA: przede wszystkim musisz mieć świadomość czym się różni symulacja od syntezy, jakie to ma przełożenie na kodowanie. Wyrobić sobie nawyk testowania, pisania testbenchy. Musisz pamiętać, że tworzysz kawałek sprzętu (modelujesz) a nie piszesz programu (nie myl z programowaniem) - wielu ludzi na tym forum się spiera o to czy języki HDL opisują sprzęt czy jest to język programowania, ale nie ma co się nad tym niepotrzebnie rozwodzić.
    Ważną cechą języków HDL (a tym samym układów PLD) jest współbieżność - opisujesz zachowanie i architekturę (najczęściej na poziomie RTL lub gate-level) sieci układów logicznych (komponentów), które są połączone ze sobą sygnałami. W takiej strukturze jest najczęściej realizowana jedna funkcja, np. port UART, inne zasoby mogą być procesorem, a jeszcze inne kontrolerem TFT. Ale zazwyczaj zasoby matrycy FPGA mają zdefiniowane statycznie budowę (odwzorowanie jakiegoś fragmentu systemu - lub często cały system - tj. SoC). Układy PLD nie posiadają czegoś takiego jak pamięć programu (nie mylić z pamięcią konfiguracji - która przechowuje kontekst) i jak na razie nie mogą zmieniać swojej funkcjonalności w locie (oczywiście prowadzi się badania nad układami wielokontekstowymi, ale to inna bajka). Można to ominąć w ten sposób, że do FPGA połączysz CPU z dużą pamięcią, w której będą trzymane różne pliki konfiguracyjne (konteksty) i co jakiś czas w razie potrzeby będziesz przeprogramowywał swój układ (rekonfiguracja - bardzo ważna cecha struktur FPGA opartych na pamięci RAM).
    Wielu funkcji jednak nie da się wykonać w FPGA, lub jest to zbyt zasobożerne (operacje sekwencyjne - maszyna o wielu stanach - np. menu użytkownika, obsługa komunikatów na LCD) - możesz jednak zaimplementować sobie w FPGA procesor, który będzie wykonywał jakiś program - i tym samym wykonywać czynności sekwencyjne (obsługa peryferiów, interfejs użytkownika, dekodowanie plików graficznych, MP3).
    Tak więc potencjalne pole możliwości jest szerokie: jak się mawia: limit is the sky.
  • #16
    tony_tg
    Level 16  
    Czesc,

    Program moze byz zlozony a nawet powininen byc i to o wiele bardziej niz to co mozesz zrobic na CPU. Problem jest taki, ze jeszcze nie zrozumiales, ze FPGA daje Ci mozliwosci jakich nie masz piszac najbardziej wymyslny asembler na najbardziej wymyslny procesor swiata. To jest bardzo trudne, bo musisz sie wyzwolic z kajdanow pisania w jezykach CPU i posiadania umiejetnosci myslenia sekwencyjnego gdzie jedna rzecz nastepuje po drugiej. Jak sie "wyzbedziesz" tego zlego nawyku, to mozesz sie zabawic z FPGA z Twojego punktu widzenia czyli programowania. (myslales kiedys, o tym, ze piszac jakas procedure czy funkcje byloby fajnie aby sie ona wykonala szybciej niz myslisz? Na pewno Ci sie to zdarzylo bedac facetem w swiecie software'u. Zawsze macie brak mocy procesora na swoje algorytmy ;) ) Ale tak serio, FPGA to Ci wlasnie umozliwia :) Jak nie mozesz czegos zrobic szybko w kodzie C czy asemblerze ( zreszta po co sie martwic na jakim procesorze to bedzie uruchamiane, wystarczy, ze wywolanie funkcji bedzie transparent) to dlaczego nie miec czegos pod reka aby to przyspieszyc.

    A tak apropo tego co napisales, to Twoj algorytm nie zmiesci sie w bramkach czy za malo FF bedziesz mial. Ale pamietaj, ze to TYLKO Twoj algorytm. Jak potrzebujesz procesora 300 GHz aby TWOJ algorytm dzialal, to pewnie mozesz poczekac. Albo uznac, ze algorytm jest do dupy zanim sie zestarzejesz albo umrzesz i mozesz cos innego wymyslec :) No ale mozesz go opublikowac i kudos kiedys bedzie Twoje jak juz beda te fajne CPU i okaze sie ze Twoj algorytm jest super.

    1) Na swiecie jest malo super-komputerow. To jest fakt. Niestety ale tak jest. Zainstalowanie ukladow FPGA nie rozwiaze Ci podstawowego problemu wydajnosci systemu. A do tego potrzebujesz nie tylko CPU czy matrycy ukladow FPGA ale i "systemu" ktory potrafilby wykorzystac te wszystkie FPGA a co wiecej potrafilby zdefiniowac czego oczekuje uzytkownik (a Ci sa rozni) i jak szybko sie przekonfigurowac aby Twoje zadanie rozwiazac szybko i wydajnie. No i trzeba wiedziec jak to optymalnie rozwiazac w FPGA. I tutaj jest wlasnie zadanie dla uczelni. Zdefiniowac problem a nie tylko mowic o jego istnieniu, i rozwiazac go teoretycznie. Jak rozwiazanie teoretyczne bedzie, to byle inzynier je zaimplementuje ;) No i wydajnosc wzrosnie nie dla "niektorych" algorytmow tylko dla "wszystkich"

    2) nie wiem czy w nowszych CPU bedzie rozszerzenie dla FPGA. Raczej nie liczylbym na to. Ale idzie to w druga strone. Jak popatrzysz sobie na firme Actel to oni oferuja rodzine FPGA z procesorem ARM w srodku. Wczesniej firma Xilinx oferowala procesor PowerPC w Virtex2Pro a teraz kontynuuja to w Virtex4 i Virtex5. Ktos w koncu musi sprzatac i dlaczego nie mialby to byc procesor 32 bitowy? Pozatym bawienie sie w zmiane software'u to zabawa w wiadome, natomiast projektowanie sprzetu to ciezsza sprawa... To tak apropo zabrania kolesiom z software'u debbgugera i printf :) Ciekawe co wtedy zrobilaby znakomita wiekszosc bez tych dwoch rzeczy ktore Ty bierzesz za pewnik, a my w hardwarze nie do konca mamy albo nie mamy wogole. ;) A kod dalej trzeba debugowac ;) I wszystko sie dzieje w tej samej chwili a nie sekwejcyjnie :)

    Ale serio, to jak mozesz zobaczyc, bedac kolesiem obeznanym z software'm i zdajacym sobie sprawe, gdzie lezy balans, gdzie software jest lepszy a gdzie hardware, pogodzic to razem, to wroze Ci znakomita przyszlosc na rynku pracy. Dasz rade i to znakomicie.

    Pozdrawiam,
    tony_tg

    PS. Zapomnij o dobrych ksiazkach czy takich tam bajerach. Kup sobie najtansza plyte z FPGA i zapal sobie pare diod. Jak tego nie zrobisz to zadna ksiazka Ci nie pomoze. Niestety ale tak jest. Do zapalenia diod wystarczy Ci software i help w nim. Pozatym, jak juz zapalisz pare diod to potrzebujesz znajomosc jezyka angielskiego i poslugiwania sie www.google.com To Ci wystarczy ;)
  • #17
    griva
    Level 17  
    zeby nie bylo za rozowo to jeszcze dorzuce 3 grosze do postu Tony-ego. Pieta achillesowa wg mnie ukladow programowalnych jest (o zgrozo) software, proces od kompilacji do bitstreamu trwa bardzo dlugo, flow dla duzego Virtexa4 to moze byc i pol dnia, takze jedna zmiana w kodzie i pare godzin czekania na wynik w tym czasie goscie pracujacy z DSP moge wprowadzic i przetestowac paredziesiat zmian/poprawek i jak na razie ani Xilinx ani Altera nie radza sobie z tym, powiedzialbym ze pograzaja sie ;-)

    Dodano po 1 [minuty]:

    Mirko51 wrote:
    Wielu funkcji jednak nie da się wykonać w FPGA,


    daj przyklad bo ja nie znam takiej funkcji :P
  • #18
    sepher
    Level 19  
    Przepraszam za OT, ale chciałem nawiązać do poprzedniego posta. Pododbno w nowym ISE jest jakiś trochę sprytniejszy mechanizm kompilacji, który przetwarza na nowo tylko te części struktury, któe zostały zmienione, co prowadzi do sporego skrócenia czasu kompilacji. Czy ktoś testował już nowe ISE? Ja się trochę boję - z doświadczenia wiem, że po tym jak Xilinx wypuści nowy soft, trzeba poczekać na minimum jednego service packa, żeby dało się z tego korzystać bez zgrzytania zębami ;).
  • #19
    Mirko51
    Level 15  
    griva wrote:

    Dodano po 1 [minuty]:
    Mirko51 wrote:
    Wielu funkcji jednak nie da się wykonać w FPGA,

    daj przyklad bo ja nie znam takiej funkcji :P


    dobra, wyraziłem się trochę nieprecyzyjnie, choć cytat wyrwany jest z kontekstu. Może przykłady nie są zbyt trafne, ale np: jak na razie pamięci (szczególnie DRAM), zegara RTC (z potrzymaniem bat.), obwodów analogowych (oczywiście można przetwarzac to na drodze DSP), np. konwersja A/C (przynajmniej większość układów PLD tego nie potrafi - jedynie któreś z układów Actela mają wbudowane przetworniki). Tak na marginesie, należy się jednak spodziewać na kilka lat (a nawet szybciej) układów hybrydowych z programowalnym torem analogowym lub przynajmiej z makroblokami o zdefiniowanych funkcjach przetwarzania analowowego lub konwersji A/C (a potem już dalej przetworzyć operacjami DSP - np. software radio). Może słyszeliście o VHDL-AMS, modelowanie układów analogowo-cyfrowych. Pewnie jak na razie tylko służy to symulacji, ale może już niedługo da się opisać analogówkę językami HDL i bezboleśnie skompilować.
    Nie chodzi mi tutaj o spieranie się co się da wsadzić w FPGA a co nie, co jest opłacalne a co nie - o tym decydujesz sam. Jako przykład podam, że jak na razie w swoich projektach łączę logikę PLD z mikrokontrolerami, choć da się to pewnie obejść. Powód prosty: takie MSP430 posida mikromocowy rdzeń, super analogówkę, ileś tam Flash, timery. W sprzęcie przenośnym, różnego rodzaju synchronizacji czasu i zegarach RTC jest to często niezastąpione rozwiązanie.
    Odnosząc się do powyższego cytatu. Moim zdaniem wszystko wskazuje na to, że logika programowalna idzie w kierunku masowej integracji systemu - kiedyś FPGA było to czysta macierz LUT. Jak już napisałem, synteza wielu funkcji w PLD jest zbyt zasobożerna, generuje sieć dość skomplikowanych połączeń - przez co wydajność spada (szybkość zegara). Dlatego obecnie typowy FPGA posiada sprzętowe mnożarki, bloki DSP - Altera, Lattice (podstawowe operacje DSP wymagają jednak dużej liczby bramek - zresztą dlatego wymyślono procki DSP - dedykowane mnożarki, shiftery, generatory adresu - czegoś takiego zwykłe CPU kiedyś nie posiadało - obecnie wiele uC ma wbudowane conajmniej śladowe operacje DSP - nawet w AVR (choć nie każde) występuje mnożenie w formacie ułamokowym, a ARM9 instrukcje DSP też są, DSPic też są - jak widać uC przejmuje funkcjonalność DSP). Dalej, FPGA posiadają pamięci RAM - wsadzenie tego w LUT to masakra, choć niewielkie pamięci 8-32 bajty da się wsadzić w LUT RAM (pamiec rozproszona) - wspiera to Xilinx, Altera nie. I CPU w FPGA też staje się wyposażeniem standardowym - jako soft-core (nios, blaze) lub jako hard (ARM Altery, Actela, PowerPC lub MIPS w Quicklogic). No i dodatki, bez których trudno się obyć: PLL, linie I/O wielostandardowe (różnicowe oczywiście też), dopasowanie impedancyjne.
  • #20
    peter_k
    Level 11  
    Dziękuję za odpowiedzi.

    Czytam teraz różne materiały/książki o FPGA/VHDL/Verilog.

    Ostatnie pytanie które do Was mam to jakie dodatkowe podzespoły będę musiał dokupić by układ działał.

    Narazie zastanawiam się nad dwoma zestawami:

    a) http://sklep.avt.pl/go/_info/?id=47354

    b) http://www.kamami.pl/?id_prod=7139

    Ten drugi dużo bardziej mi się podoba, ale jednak ostatecznie zadecyduje cena. Mógłby mi ktoś pomóc i napisać jakie dodatkowe podzespoły będę musiał dokupić do powyższych zestawów by móc rozpocząć pracę z FPGA?

    Narazie wiem, że do zestawu a) będę musiał dokupić przejściówkę z wyjścia układu ZL4PRG na wyjście USB (mam tylko wyjścia USB w laptopie).

    Będę bardzo wdzięczny za napisanie jakie dodatkowe rzeczy będą jeszcze potrzebne! Jest to dla mnie bardzo ważne bo od tego zależy który układ wybiorę i ile pieniędzy wydam.