Elektroda.pl
Elektroda.pl
X
IGE-XAO
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Podstawy związane z FPGA... (środowisko + literatura).

22 Lis 2014 14:21 2535 8
  • Poziom 9  
    Witam! Miałem na studiach pokrótce omówioną tematykę CPLD, FPGA, mikrokontrolerów, etc... (tylko 2-3 wykłady). Niestety niewiele z tego pamiętam i chciałbym sobie odświeżyć wiadomości, poznać szerzej tą tematykę, a docelowo zaprogramować i zmontować kilka układów (tylko na własne cele). Interesują mnie układy przetwarzające niewielką ilość danych, jak i te mocniejsze, które będą musiały przerobić w sekundzie znacznie więcej (w chwili obecnej trudno mi jest opisać precyzyjnie wymagania). Myślałem początkowo o gotowych DSP (od TI), ale chyba FPGA będzie i lepsze (bardziej uniwersalne) i bardziej wydajne (?).

    Mam kilka pytań:
    1. Czy np. na Altere można pisać programy w języku wysokiego poziomu (jak C++ czy Python) i później to jakoś przekonwertować na VHDL? Czy w grę wchodzi tylko VHDL (oraz Verilog i podobne)?
    2. Jakie środowisko będzie najlepsze dla nowicjusza z możliwością symulacji / testowania? (symulacji na komputerze bez płytki uruchomieniowej).
    3. Gdzie znajdę schematy układów sprzęgających z FPGA - możecie coś polecić?
    4. Interesuje mnie też dobra literatura na temat FPGA (po polsku lub angielsku) i możliwie nowa, tj. możliwie aktualna. Od czego zacząć?

    Dziękuje !

    BIF
  • IGE-XAO
  • Pomocny post
    Poziom 28  
    Jest SystemC (oparty na C++), który mógłby posłużyć też do syntezy, ale i tak nie będzie to programowanie jak na PC. Poza tym nie wiem jak z darmowymi narzędziami, a komercyjne będą mieć raczej kosmiczne ceny. Ale C++ w pracy z FPGA może się przydać – do tworzenia programów dla soft procesorów.

    BIF22 napisał:
    3. Gdzie znajdę schematy układów sprzęgających z FPGA - możecie coś polecić?

    A cóż to za układy?
  • Pomocny post
    Poziom 15  
    Cytat:
    1. Czy np. na Altere można pisać programy w języku wysokiego poziomu (jak C++ czy Python) i później to jakoś przekonwertować na VHDL? Czy w grę wchodzi tylko VHDL (oraz Verilog i podobne)?

    Nie da się połączyć w taki sposób języka do programowania współbieżnego z językiem do programowania sekwencyjnego.
    Cytat:
    3. Gdzie znajdę schematy układów sprzęgających z FPGA - możecie coś polecić?

    Masz na myśli FPGA z prockiem?
  • IGE-XAO
  • Poziom 9  
    Witam!

    Dziekuje za zainteresowanie!

    Pisze z Linuxa Live bez polskich znakow :( - mam nadzieje, ze moderator mnie nie wygoni ;)

    Szukam, na poczatek porownania ukladow:
    - AVR
    - procesory ARM
    - mikrokontrolery PIC
    oraz FPGA

    pod katem:
    - mozliwosci i ograniczen
    - wydajnosci
    - jezykow programowania
    - mozliwych zastosowan / najczestszych zastosowan
    - itp. (ogolnie kilkanascie najwazniejszych cech tych ukladow)
    ...w celu odswiezenia wiadomosci i wybrania odpowiedniego ukladu. Bo im wiecej czytam np. o AVR (mozliwosc programowania w C) to sie zastanawiam czy FPGA bedzie najlepsze dla mnie.

    Ma ktos takie porownanie (np. w formie tabelarycznej) "pod reka" ?


    Mowiac uklady sprzegajace mialem na mysli interfejsy do podlaczenia np. LCD, modulu komunikacji USB czy innych rozwiazan (Bluetooth, kamera, LAN,....)

    Dzieki za pomoc!
  • Pomocny post
    Poziom 20  
    Nie wiem czy gdziekolwiek znajdziesz tak obszerne porównanie z jednego prostego powodu gdyż podajesz architektury a nie rozwiązania konkretnych producentów. PIC to jest cała rodzina od 8 do 32 bitowców. ARM to układy od mikrokontrolerów po procesory aplikacyjne. Chyba tylko AVR ( w sensie atmela) można łatwo opisać. Ogólnie większość (Jak nie wszystkie) procesory można programować w C jest to język tak powszechny że zawsze wyjdzie na niego kompilator. W wielu przypadkach można również używać C++. Do AVR jest jeszcze Pascal i Bascom. Do niektórych ARMów java i C#. I to wszystko są języki do pogramowania sekwencyjnego.

    FPGA znowu to zupełnie inna bajka. Gdyż ich się w pewnym sensie nie programuje. Tylko za pomocą jezyka opisu sprzętu opisuje jakie wewnętrzne połączenia mają powstać w układzie. I tutaj najczęściej spotykany jest VHDL i Verilog, nieważne jaką rodzinę FPGA wybierzesz. Altera ma jeszcze swojego AHDLa. No i są jeszcze środowiska graficzne.

    A co do mocy FPGA to rozrzut jest jeszcze większy niż w mikrokontrolerach gdyż mamy układy od malutkich CPLD jak MAX altery po ogromne stratixy.

    FPGA używa się jak dane muszą być przetwarzane równolegle. Nadają się do przetwarzania sygnałów. Jak przejrzysz forum ludzie robią na nich swojego rodzaje karty graficzne czy sterowniki wyświetlaczy. Ciężko jest jednoznacznie stwierdzić co do czego. To wszystko to zupełnie inne progi cenowe . Duże znaczenie mają też preferencje oraz wiedza konkretnego konstruktora.

    Widzę że jesteś studentem więc radze po prostu zacząć czy od mikrokontrolerów (możesz kupić któryś z zestawów STM32discovery) czy też od FPGA (studenci mają dobrą cene na DE0 nano terasica) zaczniesz coś robić to się tobie wszystko rozjaśni. Co do materiałów na stronie Altery jest zakładka Training.
  • Pomocny post
    Poziom 12  
    miszaa88 napisał:
    Cytat:
    1. Czy np. na Altere można pisać programy w języku wysokiego poziomu (jak C++ czy Python) i później to jakoś przekonwertować na VHDL? Czy w grę wchodzi tylko VHDL (oraz Verilog i podobne)?

    Nie da się połączyć w taki sposób języka do programowania współbieżnego z językiem do programowania sekwencyjnego.

    Nie wiem czy można tak radykalnie odpowiedzieć na to pytanie ;) Za bardzo się tym nie interesowałem, ale zdaje się, że podejmuje się próby opracowania takiego Design Flow, aby wykorzystywać wysokopoziomowe języki programowania typu C do prototypowania układów logiki programowalnej. Weźmy na ten przykład Xilinxa:
    http://www.xilinx.com/products/design-tools/vivado/integration/esl-design.html
    O ile mi wiadomo, próbom tym daleko do doskonałości (Ma ktoś jakieś doświadczenia?). Jakby nie było, sądzę że aby zachować nad wszystkim pełną kontrolę VHDL/Verilog będą niezbędne.

    Co do pytania założyciela tematu:
    Też kiedyś szukałem takiej literatury, która porównywałaby możliwości, typowe zastosowania, ograniczenia itp mikrokontrolerów (AVR, ARM), logiki programowlnej FPGA, procesorów sygnałowych DSP. Nie udało mi się znaleźć nic sensownego, ale z biegiem czasu poznałem specyfikę tych układów osobno (poza DSP z których nie miałem okazji korzystać) i intuicyjny wydaje się dla mnie typowa charakterystyka:
    - mikrokontrolery AVR, ARM - aplikacje działające sekwencyjnie, od prostej i średnio-zaawansowanej złożoności (AVR) do złożonych i wydajnych programów (ARM). Wygodne do komunikacji z typowymi peryferiami, typu wyświetlacze itp.
    - DSP - jw. ale do zastosowanie tam gdzie wymagane jest szybkie wykonywanie wielu złożonych operacji obliczeniowych, przetwarzanie potokowe
    - FPGA - układy wymagające bardzo dużej szybkości działania, działające współbieżnie, ale mogące zawierać część sekwencyjną. Duża elastyczność (np. definiowanie wejść/wyjść). Bardzo wygodne do projektowania własnych układów cyfrowych. Mogą zawierać bloki DSP oraz dostępne są narzędzia usprawniające projektowanie układów cyfrowego przetwarzania sygnałów. Dostępne gotowe rdzenie IP (Intelectual Property Cores), implementujące wybrane funkcjonalności - często też dostępne za darmo, np: interfejsy komunikacyjne, interfejsy pamięci, bloki obliczeniowe (FFT, DFT), kodeki, kryptograficzne itd. Cechą wg mnie bardzo istotną jest to, że nie trzeba bardzo dobrze znać budowy danego układy FPGA aby łatwo rozpocząć na nim pracę - wszystkie używa się podobnie, głównie z wykorzystaniem tego samego, ściśle ustandaryzowanego języka (VHD/Verilog).
    - FPGA SoC - System-on-a-chip (tzw. układy hybrydowe): łączy FPGA z mikrokontrolerem. W logice może być zaimplementowany mikrokontroler - soft-procesor lub hard-procesor, np: dwurdzeniowy procesor ARM otoczony peryferiami komunikacyjnymi + logika programowalna. Taka architektura łączy zalety obu części, ale - drogie.

    Podsumowując - kiedy stosować który układ? Ja bym to podzielił tak:
    a) Mikrokontrolery AVR, ARM i inne:
    - sterowanie liniami do częstotliwości kilku MHz,
    - tam gdzie potrzeba łatwego wykorzystania wielu interfejsów komunikacyjnych, USB, SPI, I2C…
    - ograniczona szybkość do ok. 20-100 MHz. procesory: MSP, AVR, ARM (instrukcje niejedno taktowe)
    - możliwość przenoszenia kodu z C
    b) Układ programowalny FPGA:
    - szybkie sterowanie liniami setki MHz
    - dobre tam, gdzie występuje prosta równoległość, obliczeń i sterowania
    - dość skomplikowana i niewygodna implementacja funkcji wykonywanych sekwencyjnie
    - nietrywialna przenośność kodu z C
    c) FPGA SoC:
    - tam gdzie występuje wymaganie dużej szybkości obliczeniowej w sposób równoległy ze złożonym sterowaniem sekwencyjnym
    - łączy zalety mikroprocesorów i logiki programowalnej
    d) Procesory DSP:
    - duża wydajność obliczeniowa, powiedzmy >> 100 MHz, wydajny dostęp do pamięci
    - mała liczba linii typu I/O, interfejsów

    Pozdrawiam
  • Poziom 12  
    Różnice pomiędzy uC a PLD dość dobrze oddaje ten fragment tekstu:

    For every day projects, microcontrollers are low-cost and easy to use. But when you have a project that needs raw power and high speed you may want to check out FPGAs (Field Programmable Gate Arrays). FPGAs are like raw chips that you can design by hand. They run very fast and very efficiently. They are designed for mass-parallel execution so they're very good at handling a lot of I/O pins at once, especially for real time video or audio or emulation applications.

    Typowe bóle projektantów uC to niewystarczająca liczba GPIO oraz mała prędkość wykonywania programu. Jeżeli pprojekt wymaga obróbki większej ilości sygnałów i to szybko, to wtedy wyborem są układy programowalne.
  • Poziom 9  
    Dziękuje za mały przegląd tych układów, myślę, że wielu początkującym się przyda. Ja dotarłem do tej pory do porównań dwóch architektur DSP vs FPGA czy ARM i PIC, ale nie do wszystkich na raz.

    Jeszcze chciałem zapytać o narzędzia (środowiska) do wizualnego projektowania układów FPGA. Czy producenci chipów takie oferują? (a może firmy trzecie?) Chodzi mi o funkcjonalność podobną do MATLAB/Simulink gdzie schemat logiczny układa się graficznie z pojedynczych bloków, na starcie mamy wszystkie wejścia i wyjścia, a użytkownik łączy odpowiednie we/wy bloków funkcjonalnych, itd. ( Matlab generuje pliki w VHDL oraz Verilog ).

    Cytat:
    - FPGA SoC - System-on-a-chip (tzw. układy hybrydowe): łączy FPGA z mikrokontrolerem. W logice może być zaimplementowany mikrokontroler - soft-procesor lub hard-procesor, np: dwurdzeniowy procesor ARM otoczony peryferiami komunikacyjnymi + logika programowalna. Taka architektura łączy zalety obu części, ale - drogie.


    Rozumiem, że chodzi o coś takiego jak TerasIC DE1-SoC Board?
    Łaczy na jednej płytce: FPGA z mikrokontrolerem czy raczej FPGA z procesorem (ARM) ?
  • Poziom 12  
    BIF22 napisał:

    Jeszcze chciałem zapytać o narzędzia (środowiska) do wizualnego projektowania układów FPGA. Czy producenci chipów takie oferują? (a może firmy trzecie?) Chodzi mi o funkcjonalność podobną do MATLAB/Simulink gdzie schemat logiczny układa się graficznie z pojedynczych bloków, na starcie mamy wszystkie wejścia i wyjścia, a użytkownik łączy odpowiednie we/wy bloków funkcjonalnych, itd. ( Matlab generuje pliki w VHDL oraz Verilog ).

    Tak, dwóch największych prodeucentów Altera i Xilinx oferują takie narzędzia - Schematic Editor. Nie wiem jak pozostali producenci, nie miałem styczności. Polega to na budowaniu struktury logicznej przy wykorzystaniu dostępnych bloków bibliotecznych - od najprostszych (bramki logiczne) przez bardziej złożone (rejestry, liczniki, bloki arytmetyczne) po najbardziej rozbudowane (pamięci RAM, generatory DDS, interfejsy). Niektóre bloki są konfigurowalne, co znaczy że można je dostosować do swoich wymagań - np. ilość bitów licznika, zachowanie przy przepełnieniu itp. Co istotne, można łączyć obie metody projektowania, tj. graficznego i z użyciem VHDL/Veriloga. Można utworzyć symbol bloku logicznego utworzonego za pomocą VHDL i wykorzystać go w edytorze schematów.

    BIF22 napisał:

    Cytat:
    - FPGA SoC - System-on-a-chip (tzw. układy hybrydowe): łączy FPGA z mikrokontrolerem. W logice może być zaimplementowany mikrokontroler - soft-procesor lub hard-procesor, np: dwurdzeniowy procesor ARM otoczony peryferiami komunikacyjnymi + logika programowalna. Taka architektura łączy zalety obu części, ale - drogie.


    Rozumiem, że chodzi o coś takiego jak TerasIC DE1-SoC Board?
    Łaczy na jednej płytce: FPGA z mikrokontrolerem czy raczej FPGA z procesorem (ARM) ?

    Tutaj to kwestia rozróżnienia czym jest mikrokontroler a czym mikroprocesor ;). Na tej płytce którą podałeś, jest typowy układ FPGA SoC z hard-processorem, co znaczy, że w krzemie "wydziergany" jest na stałe mikroprocesor z peryferiami (mikrokontroler) i otoczony jest logiką programowalną. Jedna część z drugą może się oczywiście komunikować. Przykładem od Xilinx jest architekrura układów Zynq.
    Istnieje też coś takiego jak soft-procesor, czyli implementujesz mikroprocesor w obrębie zwykłego układu logiki programowalnej, która nie ma tej struktury "wydzierganej" na stałe. Mikroprocesor to blok logiczny i może być implementowany w logice tak samo jak inne bloki. Dodając do niego logiczne peryferia uzyskasz mikrokontroler w FPGA.