logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Czym są układy programowalne?

leonow32 21 Paź 2012 22:38 16863 13
  • Czym są układy programowalne? Z moich obserwacji wynika, że większość hobbystów na uczelni bądź na elektrodzie coś na ten temat słyszała. I tylko tyle. A wielka szkoda, bo układy programowalne potrafią robić rzeczy, których przy pomocy procesora zrobić się po prostu nie da.

    Na początek jednak przypomnijmy definicję procesora - układ (niekoniecznie scalony!), który wykonuje listę instrukcji wg określonej kolejności. Czy już dostrzegasz słaby punkt procesora? Nie? No tak, przecież lista instrukcji może być dowolna, można więc zrealizować bardzo różnorodne czynności. Ale czy procesor może wykonać dwie instrukcje jednocześnie? No właśnie... i tu jest haczyk. Nie może. A układ programowalny może wykonywać bardzo wiele czynności dokładnie w tym samym czasie i to bez jakiegokolwiek uszczebrku na funkcjonalności. Dochodzimy zatem do wniosku, że procesor jest fajny, jeśli ma wykonywać czynności szeregowo. Układ programowalny służy do czynności wykonywanych równolegle.

    Na czym polega sekret układów programowalnych? Większość kursów, książek i wykładów rozpoczyna się od dłuuuuugiej rozprawy na temat ich wewnętrznej budowy. Napiszę bardzo skrótowo - układ programowalny to zbiór bramek i przerzutników, które można sobie połączyć według własnych potrzeb. Można to porównać do klocków lego. Procesor można by analogicznie porównać do kalkulatora, ale też zbudowanego z klocków lego, tyle że sklejonych ze sobą na stałe.

    Inne zalety - są niesamowicie szybkie. Częstotliwości rzędu setek MHz nie są tu niczym nadzwyczajnym. Możliwe jest też precycyjne kontrolowanie czasu. Ciekawym zastosowaniem jest tworzenie prototypów układów scalonych, które potem mają być wdrożone do produkcji.

    SPLD, CPLD, FPGA

    Zasadniczo rozróżnia się trzy rodzaje układów programowalnych:

    :arrow: SPLD (Simple Programmable Logic Device) - najstarsze, najprostsze i obecnie już chyba nie produkowane.
    :arrow: CPLD (Complex Programmable Logic Device) - średnio złożone. Można dzięki nim zastąpić kilkanaście lub nawet kilkadziesiąt układów logicznych 74xx. Posiadają wewnętrzną pamięć i po włączeniu zasilania od razu są gotowe do pracy
    :arrow: FPGA (Field Programmable Gate Array) - złożone i bardzo zaawansowane. Przy pomocy FPGA można tworzyć własne procesory i bardzo zaawansowane układy. Na ogół nie mają pamięci stałej, lecz jedynie RAM, więc po każdym włączeniu muszą zostać skonfigurowane.

    Powyższy podział jest dość orientacyjny. Istnieją układy FPGA z wbudowaną pamięcią stałą. Czasami granica między FPGA i CPLD jest na tyle rozmyta, że nawet producenci układów mają problem z właściwym zaszufladkowaniem układu. Na przykład MachXO2 od Lattice figuruje na stronie producenta jednocześnie w kategorii CPLD i FPGA :)

    Producentów jest wielu, ale trzech z nich wiedzie prym: Xilinx, Altera, Lattice.

    Czym to się programuje?

    Stop! Programuje się procesor! CPLD/FPGA się konfiguruje. Ktoś może zapytać w takim razie, dlaczego w nazwie tych układów jest słowo "programowalne"? Powinno być raczej konfigurowalne. Taki szczegół i czepialstwo językowe...

    Logikę, czyli to co wgrywamy do środka scalaka, tworzymy nie w języku programowania, ale w języku opisu sprzętu (HDL, Hardware Description Landuage). Obecnie stosuje się dwa z nich.

    :arrow: VHDL - jest to dość ciężkostrawny język i wydaje mi się dość trudny. Składnia przypomina Pascala, którego wcale nie znam, więc może dlatego moje zniechęcenie do VHDL
    :arrow: Verilog - bardziej przypomina C, który większości elektronikom zajmującym się mikrokontrolerami powinien być znany. Składnia jest prosta i zwarta, a podobieństwa do C są dość daleko idące, więc nauka idzie dużo szybciej niż przy VHDL. W internecie istnieje wiele kursów Veriloga.

    To, co napiszemy w języku opisu sprzętu, musi zostać przetworzone przez syntezator (odpowiednik kompilatora), który przerobi słowny opis na równania logiczne. Następnie równania muszą być zaimplementowane w strukturę bramek i przerzutników. Na szczęście ten proces dokonuje się samoczynnie i de facto o fizycznej budowie CPLD/FPGA niewiele trzeba wiedzieć. Na końcu otrzymujemy plik, który można wgrać do układu programowalnego tak samo jak wsad do mikrokontrolera.

    Od czego zacząć?

    Układy FPGA potrafią być bardzo drogie, więc na początek proponuję wziąć się za CPLD. Xilinx produkuje fajne kostki XC9572XL albo XC2C64 w obudowach PLCC44. Można sobie zrobić prostą płytkę testową, jak na zdjęciu.

    Czym są układy programowalne? Czym są układy programowalne?

    Jeżeli masz port LPT w komputerze to super - możesz sobie zrobić programator na płytce prototypowej za kilka złotych. Jeżeli masz tylko USB to zła wiadomość - niestety czeka Cię wydatek 200zł albo tańsze i uciążliwe prowizoryczne rozwiązania. Na upartego da się zrobić programator na FT232RL, ale zaprogramowanie prostego XC9572XL zajmuje aż 8 minut. Można spróbować także szybszej wersji, FT2232HL - wtedy programowanie zajmuje kilkanaście sekund, ale trzeba wykonać sporo klikaniny. Ja polecam oryginalny programator Xilinx Platform Cable DLC9G - działa zawsze, szybko i z każdym układem.

    Fają rzecz ostatnio wypuścił Lattice. MachXO2 to krzyżówka CPLD i FPGA, mająca dodatkowo kilka ciekawych peryferiów. Dostępna jest płytka, wyposażona w programator USB oraz darmowe oprogramowanie. Haczyk natomiast jest taki, że układy Lattice są słabo rozpowszechnione w Polsce i może być problem aby je później kupić w hobbsystycznych małych ilościach. http://www.latticesemi.com/products/cpld/machxo2/index.cfm
    http://www.latticesemi.com/products/developmenthardware/developmentkits/machxo2picokit.cfm

    Zapraszam też do zapoznania się z kilkoma prostymi przykładami kodów w języku Verilog
    Verilog: sterownik wyświetlacza LED 7-segmentowego
    Verilog: liczniki
    i krótki kurs tego języka

    Jeżeli ktoś bardziej obeznany w tym temacie ma jakieś zastrzeżenia, to proszę o konstruktywną krytykę :)

    Fajne? Ranking DIY
    O autorze
    leonow32
    Poziom 30  
    Offline 
    leonow32 napisał 2025 postów o ocenie 1221, pomógł 37 razy. Mieszka w mieście Poznań. Jest z nami od 2007 roku.
  • #2 11437084
    mickpr
    Poziom 39  
    leonow32 napisał:
    To, co napiszemy w języku opisu sprzętu, musi zostać przetworzone przez syntezator (odpowiednik kompilatora), który przerobi słowny opis na równania logiczne.

    "Obeznany w temacie" nie jestem, ale chyba chodzi o "syntezer". Syntezator kojarzy mi się z muzyką.

    Poza tym - czy temat (dobrze wszak rozpoczęty) nie dubluje tego kompendium :
    https://www.elektroda.pl/rtvforum/topic1842513.html ?
    Może po prostu przenieść go tam?
  • #3 11440550
    a.bakus
    Poziom 15  
    CPLD można zaprogramować przez usb za pośrednictwem arduino. Prowizorka oczywiście.

    Bardzo ciekawy, subiektywnie napisany i artykuł. Fajnie się czyta. Chcemy więcej takich !
  • #4 11442018
    leonow32
    Poziom 30  
    Możesz opisać ten sposób z Arduino?

    Tutaj jest dostępna metoda z FT232RL, czyli popularna przejściówka USB-RS232 - http://openschemes.com/2011/10/25/bit-bang-jt...ilinx-cpld-using-ft232-homebrew-svf-player/6/
    a tutaj są opisane metody z FT2232HL https://www.elektroda.pl/rtvforum/topic2222248.html
    Jak widać, jednym działa a innym nie. Mi działało z XC9572XL, a ze Spartanem 3 już nie chciało, nie wiadomo czemu.
  • #6 11453394
    albert421
    Poziom 10  
    Kolego leonow32, rewelacyjnie napisany artykuł !
    ...wczoraj wieczorem postanowiłem się w końcu zainteresować co to takiego układy CPLD.
    Po przejrzeniu w necie kilku artykułów prawie się zniechęciłem, ponieważ nie dawały mi zwięzłej odpowiedzi "Co robią i jak działają CPLD, jak się za nie zabrać i czym się różnią od procesorów"
    Po przeczytaniu Twojego artykułu z całą pewnością się za to zabiorę.
    Na początek mam zamiar kupić taką gotową płytkę prototypową:
    Link
    i uczyć się programowania w Verilogu - czy w Twojej ocenie to dobry wybór ?
  • #7 11453779
    mickpr
    Poziom 39  
    albert421 napisał:
    czy w Twojej ocenie to dobry wybór

    A mogę ja wtrącić swoje "3 grosze"?
    Skoro kupujesz płytkę ewaluacyjną - polecam jednak wyłożyć nieco więcej pieniążków na jakieś proste FPGA. Na CPLD wiele nie zrobisz.
    Jeśli problemem jest przylutowanie BGA - zawsze można wybrać sobie układ w obudowie ...QFP (np. starsze Spartany od Xlilinx'a), a płytkę zamówić.

    O ile do realizacji prostego układu CPLD się nada, to nie da się w nim wykonać nic większego. Wspomniany przez ciebie "procesor" odpada w przedbiegach w CPLD.
    Można oczywiście połączyć kilka CPLD, ale czy o to nam chodzi?

    Co do programowania - wystarczy zbudować sobie na LPT (wiem, nie każdy komputer ma - ale o tym zaraz) programator Xilinx JTAG Cable (schemat na stronach Xilinx'a).
    Jeśli ktoś nie ma portu LPT polecam poświęcić tą "stówę" na JTAG na USB, lub kupić sobie kartę LPT na PCI (lub PCMCIA) (sprawdzone - działa).
    Co do konfiguracji i example'sów - polecam przeszukanie starszych numerów EP. Naprawdę jest co czytać w temacie CPLD/FPGA. Oprócz tego oczywiście http://opencores.org/ .
  • #8 11453974
    albert421
    Poziom 10  
    @mickpr:
    ...chyba trochę źle mnie zrozumiałeś (albo ja źle się wyraziłem) - ja nie chcę robić na CPLD procesorów. Chcę na początek jedynie poznać te układy ponieważ nigdy wcześniej nie miałem z nimi styczności.
    (do tej pory rzeźbiłem jedynie w PIC-ach za pomocą assemblera)
    Chodzi o to, że jeżeli poznam podstawy CPLD i uznam że za ich pomocą da się lepiej, prościej lub szybciej zrobić rzeczy które do tej pory robię na PIC-ach, to zapewne zabiorę się i za układy FPGA i kupię sobie programator full-professionall :)
    Na razie mam nadzieję że ta płytka do najprostszych ćwiczeń mi wystarczy.
    (Port LPT - całe szczęście, w PC-cie jeszcze mam)
    Oczywiście bez problemu mógłbym sobie polutować taki programator ale trochę szkoda mi czasu na takie mało twórcze zajęcie.
    Dzięki wielkie za linka - analizowanie przykładów to najlepszy sposób nauki.
  • #9 11454693
    tymon_x
    Poziom 30  
    Ja ci kolego radzę zainwestować w Lattice, dokładnie w serię MachXO: Lattice MachXO2 - opinie

    Xilinx i Altera dawno już zrezygnowali z segmentu CPLD, teraz pchają się w to coraz bardziej wymyślne zabawki, jak przestrzenne matryce, Zynq-7000 i tak dalej...

    Ten zestaw co zaproponowałeś to śmiech na sali i łatwy sposób na wyciągnięcie kasy za nic nie warty produkt (eval). W standardowym CPLD musisz marnować zasoby, żeby zrobić logikę do SPI czy I2C, w MachXO2 masz te interfejsy w krzemie razem z timerem. Idealne układ programowalny dla osoby mające doświadczenie z uC, bo inaczej mógłbyś się rozczarować, że nic się nie da sensownego zrobić :)

    Jak cię stać wydać troszkę więcej kasy, zainteresuj się zestawem DE0-Nano Development and Education Board od Terasic (FPGA Altera).
  • #10 11456752
    leonow32
    Poziom 30  
    albert421 napisał:
    Na początek mam zamiar kupić taką gotową płytkę prototypową:
    Link

    Nie kupuj tego, straszne dziadostwo i wyrzucona kasa. Lepszą płytkę sam możesz sobie zrobić (koszt mojej płytki z XC9572XL to jakieś 15zł i podłączam do tego inne własne moduły lub płytki stykowe). Tak jak Tymon napisał, jak już chcesz kupować coś droższego, to kup płytkę z MachXO2 albo z jakimś innym FPGA. Np. Spartan 3 od Xilinxa, trochę już podstarzały, ale za to w necie jest dużo materiałów na ten temat.

    Jeżeli zdecydujesz się na układy Xilinxa to tutaj masz Xilinx ISE - instrukcja dla początkujących
  • #11 11460839
    coosha
    Poziom 11  
    CPLD programowałem , fajna sprawa i bardzo szybkie układy idealnie nadaja sie do stworzenia automatów . Pozdrawiam
  • #12 12537439
    Zuzikofon
    Poziom 10  
    Witam,

    nie znam się na elektronice ale mam pytanie i mam nadzieję że mi pomożecie.

    Szukam układu/urządzenia, które mogę podłączyć przez port USB do komputera.
    Układ ten będzie realizował proste operacje matematyczne na dostarczanych danych oraz kilka warunków (np. jeżeli wynik obliczenia jest większy od poprzedniej liczby itd.).
    Do komputera będę wgrywał oprogramowanie podające dane wejściowe - liczby, (nie większe niż 16.000).
    Algorytm zawarty w układzie będzie je analizował, przeliczał i dawał odpowiedź albo jakiś sygnał zwrotny do komputera.
    Program w komputerze na tej podstawie bedzie np. wyświetlał na ekranie wynik.
    Szybkość nie jest ważna - wystarczy taka jak algorytm napisany w Basicu i uruchomiony na Commodore 64.

    Zależy mi na tym aby było to urządzenie zewnętrzne, nie zostawiać algorytmu w komputerze do którego je podłączę (program podający dane i obsługujący może zostać).

    Obrazowo - jakis algorytm iteracyjnego szukania najwiekszej i najmniejszej liczby w ciągu
    czyli wchodzi ciąg liczb i po każdej zwraca najwiekszą i najmniejszą (do tej pory) liczbe w ciągu - jeżeli się nie zmieniła to podaje tę samą

    Czy da sie to zrealizować układem programowalnym?

    Ile to kosztuje?

    (oczywiście sam nie bedę tego realizował, musze kogos poszukać - fachowca - i zlecić do zrobienia - oczywiście odpłatnie)

    Czy są takie układy które mają pamieć (niewielką, nawet 64kB) nie znikającą po odłączeniu zasilania? (aby np. pamiętała najwiekszą i najmniejszą liczbe znaleziona do tej pory i ile liczb ciągu zostało przeanalizowane)

    Jeżeli to nie ten dział prosze o przeniesienie.
  • #13 12537543
    mickpr
    Poziom 39  
    Zuzikofon napisał:
    Czy da sie to zrealizować układem programowalnym?
    Pewnie się da, ale po co adoptować do tego jakieś FPGA, skoro wystarczy Atmega, ewentualnie Atmega+FT232RL (prościej).
    Atmega ma wewnętrzny EEPROM , a jeśli jest go za mało - możesz dołączyć jakiś zewnętrzny EEPROM, FLASH, albo (najprościej) kartę SD.
  • #14 12538240
    Zuzikofon
    Poziom 10  
    [/quote]Pewnie się da, ale po co adoptować do tego jakieś FPGA, skoro wystarczy Atmega, ewentualnie Atmega+FT232RL (prościej).
    Atmega ma wewnętrzny EEPROM , a jeśli jest go za mało - możesz dołączyć jakiś zewnętrzny EEPROM, FLASH, albo (najprościej) kartę SD.[/quote]

    dzięki,
    znalazłem natomiast taki wynalazek (na ATMega chyba):
    Arduino
    (i np. TinyLilly Mini Processor)

    czy ma ktos jakiś inny pomysł? (np. na gotowe rozwiązanie)
    wystarczy dostęp przez USB, procesor pamięć ram i rom - nie potrzeba przetworników A/D, guzików itd....

    taki programowalny pendrive :-)
REKLAMA