Pierwsze moje zetknięcie się z układami logiki programowalnej (tymi trochę bardziej złożonymi niż układy PAL lub GAL) wywołało skojarzenie z “gumową logiką”. W dużej mierze to określenie nie jest to pozbawione racji. Układy logiki programowalnej (PLD) pozwalają na znaczną elastyczność w zastosowaniach. To tak jak “wyprodukowanie” własnego układu scalonego. Można do niego dodawać nowe funkcje a układ PLD będzie “się rozciągać”. Ponieważ układy PLD mają ograniczone zasoby, toteż ich “rozciągliwość” ma swoje granice.
W oparciu o zasoby układu można w nim zrealizować wymyśloną przez siebie funkcję. Bardzo interesującą możliwością układów PLD jest możliwość określenia znaczenia dla poszczególnych wyprowadzeń. Pomijając kilka pinów, które mają swoje znaczenia (jak doprowadzenie zasilania do układu), istnieje możliwość w znacznym stopniu dowolnego przyporządkowania sygnałów do fizycznych wyprowadzeń układu. Z pewnością wielu przekona się o tym w trakcie opracowania płytki drukowanej, w której będzie użyty układ PLD.
Z czasem okazało się, że układy CPLD nie są “super elastyczne” i zawierają trochę ograniczeń, tj. są takie projekty, które nie mieszczą się w strukturze układu pomimo, że nie wyczerpują wszystkich jego zasobów. Układami, dla których “dozwolone są wszelkie chwyty”, są układy FPGA. W tych strukturach praktycznie giną ograniczenia projektowe (chyba, że projektowane jest urządzenie o parametrach super, ultra kosmicznych). Bardzo istotną cechą układów PLD jest ich szybkość działania. Przetwarzanie sygnałów cyfrowych o częstotliwości około 100 MHz nie jest niczym niezwykłym, co jest często poza zasięgiem możliwości mikrokontrolerów oraz mikroprocesorów.
Ogólnie układy PLD można podzielić na trzy grupy:
- proste układy SPLD (ang. Simple Programmable Logic Devices), do których należą układy z rodziny PAL oraz GAL,
- złożone układy CPLD (ang. Complex Programmable Logic Devices), do których należą przykładowo układy CoolRunner, układy XC9500, MAX3000,
- matryce bramkowe FPGA (ang. Field Programmable Gate Array), do których należą przykładowo układy rodziny SPARTAN, VIRTEX, CYCLONE.
- wymyślić sposób rozwiązania, czyli jak to zrobić,
- narysować (utworzyć za pomocą odpowiedniego oprogramowania narzędziowego schemat układu cyfrowego) lub opisać (za pomocą odpowiedniego języka HDL) rozwiązanie (możliwa jest do zastosowania metoda mieszana: część jest określona za pomocą rysunku, część za pomocą języka opisu),
- przetestować rozwiązanie, czyli za pomocą oprogramowania zdefiniować sygnały wejściowe i zweryfikować sygnały wyjściowe,
- określić własne wymagania dotyczące docelowego rozwiązania (między innymi przyporządkować poszczególnym sygnałom fizyczne wyprowadzenia),
- wytworzoną zawartością zbioru konfiguracyjnego zaprogramować odpowiednią pamięć układu PLD.
- układy z nieulotną pamięcią konfiguracyjną (EEPROM lub FLASH), do których typowo należą układy SPLD i CPLD,
- układy z ulotną pamięcią konfiguracyjną (statyczną RAM), do których typowo należą układy FPGA.
Kilka publikacji, które kiedyś były na elportalu. Większość została napisana ponad 10 lat temu, ale sądzę, że niektóre rozważania są zawsze ponadczasowe .
- Implementacja nadajnika asynchronicznej transmisji szeregowej w układzie PLD
- Obsługa matrycowej klawiatury 4x4 w układzie FPGA (SPARTAN 3 firmy XILINX)
- Kostka do gry Realizacja w układzie PLD
- 4-przyciskowa klawiatura realizacja w układzie PLD (realizacja poprzez narysowanie schematu)
- Wyświetlacz stanu 8-bitowej szyny Implementacja w oparciu o układ logiki programowalnej (realizacja w technologii mieszanej: rysunek/VHDL)
- Hexcalcul projekt dla układu SPARTAN 3 (art. do Elektroniki Praktycznej)