FPGA fejlesztés |
[HUN] [ENG] |
Primo | HT1080Z | Videoton TVC |
A szükséges tudást évek alatt szedtem fel. Erre nem is akarok sok szót vesztegetni. Tehát csak röviden. Az FPGA áramkörök olyan magas integráltságú digitális áramkörök, ahol a belső kapcsolás nincs előre kialakítva, hanem induláskor kell a megfelelő konfigurációt betölteni. A konfiguráció határozza meg az épp működő belső kapcsolást. Az FPGA áramkörök különböző kapacitással és bonyolultsággal rendelkezhetnek (néhány ezer, vagy akár pár millió kaput is tartalmazhatnak). Végső soron bármit megoldhatunk ezekben az áramkörökben, feltéve, hogy megfelelő méretű (kapacitású) chippel dolgozunk.
A hagyományos digitális áramkörökön kívül az FPGA-k tartalmaznak speciális elemeket is, amelyeket a fejleszés során fel lehet használni, ezáltal "okosabb", vagy "gyorsabb" megoldásokat adhatunk, mintha csak a klasszikus digitális elemeket használnánk. Néhány példa ezek közül:
- PLL és DCM: órajelek előállítására és módosítására képes modulok, ezekkel lehet adott frekvenciából másikat előállítani, fáziseltolást és hasonló műveleteket elvégezni. Ha például egy rendszernek 3-4 órajelre is szüksége van, nem kell annyi oszcillátort illeszteni az FPGA-hoz, elég egyetlen "master" órajel, a többit a PLL elő tudja állítani. (Bizonyos értékhatárokon belül, természetesen.)
- DSP/Muliplier: hardver DSP feldolgozók, általában 32 vagy több biten lehet összeadást és szorzást megvalósítani konkurrens módon. Tehát lehetőség van például egy mikroprocesszor szorzás műveletét (MUL,IMUL utasítások) egyetlen órajelciklus alatt végrehajtani
- Block RAM memória: Kis méretű, de gyors szinkron statikus memória. Ennek mérete általában erősen korlátozott (FPGA modelltől függ persze), cserébe viszont nagyon gyors és DUAL-PORT elérésre is képes. Általában FIFO-k, Cache-ek kialakítására alkalmas.
- IO illesztők: a legkülönfélébb I/O szabványok támogatása (LVTTL, LVCMOS, PCI, TMDS, DDR stb) Ezeket a külvilággal összeköttetésben álló FPGA lábakon használhatjuk. Általában az FPGA-k több feszültségszinten is tudnak dolgozni (1.2V, 1.8V, 2.5V. 3.3V stb), de természetesen korlátozott számú lábak állnak erre rendelkezésre. Külön csoportot képeznek az órajelek fogadására kialakított CLOCK lábak.
Az FPGA-ban elhelyezett áramkört többféle módon is megtervezhetjük. Akár kapcsolási rajzot is készíthetünk, de ahogy a kapcsolás egyre bonyolultabb lesz, ezt egy bizonyos idő után lehetetlen átlátni. Ezért fejlesztették ki a digitális áramkörök működését leíró nyelveket, a HDL nyelveket (Hardware Description Language). A tevezők ma két domináns nyelvet használnak: a Verilog-ot és a VHDL-t. Mindkettőnek vannak előnyei és hátrányai, de végső soron mindkettőnél a cél ugyanaz: az áramkör működésének struktúrált szöveges leírása. Kezdők számára talán a VHDL kicsit egyszerűbb, olvashatóbb. Én is inkább a VHDL-t használom, bár mostanában már a Verilog-hoz is hozzá szoktam nyúlni.
Az FPGA-ban történő tervezés során nem árt, ha ismerjük a hagyományos digitális áramökörket. Jó, ha tudjuk, hogy mi az a kapu és multiplexer, demultiplexer, flip-flop és társaik, ismerjük különbséget a szint- és az élvezérelt tárolók között, ha mond valamit az, hogy open collector vagy nagyimpedanciás kimenet. Nem állítom hogy ezen ismeretek nélkül lehetetlen megtanulni a HDL nyelveket, de talán nagyobb feladat "nulláról" indulni.
Ahogy az elmúlt években az FPGA-val hobbi szinten foglalkoztam, mellette megtanultam legalább egy áramkörtervező szoftver használatát is, így sikerült saját FPGA board-ot készítenem. Vannak kész fejlesztőeszközök persze, de a saját áramkör megtervezése mindenképpen jó tapasztalat volt. Jelenleg két áramkörre szoktam fejlesztésre használni:
- a saját magam készítette kártyát, amin egy Xilinx Spartan 6 (LX9)-os FPGA található,
- a végterméknek mondható MiST board-ot, amin Altera Cyclone III FPGA van.
A Xilinx Spartan 6 fejlesztő board | A MiST fejlesztő board | A tényleges implementációk leírásai: |
Linkek és referenciák:
[Home]
Kapcsolat: a
címre írhatsz, előbb-utóbb válaszolok.