Vývojový FPGA kit Cyclone II + USB Blaster

V tomto návodu bych Vám rád ukázal trochu jiné, pokročilejší programování.
Jedná se o Vývojový FPGA kit, ve kterém najdete FPGA ze série Cyclone II a programátor Altera Blaster. U FPGA čipu se konkrétně jedná o typ Cyclone II EP2C5T144C8, který disponuje 89 I/O piny a 4608 logickými elementy. Programátor Altera Blaster dokáže komunikovat s FPGA pomocí JTAG rozhraní a nahrávat tak do něj data. A na desce s FPGA se nachází také velké množství propojovacích headerů s datovými a napájecími piny, 3 LED diody, tlačítko a 50 MHz krystal, který slouží jako hlavní zdroj hodinového signálu. Pro napájení je pak na desce konektor pro 5V adaptér. A co se týká I/O pinů, tak ty komunikují na úrovních 3,3 Voltů.

Účelem tohoto návodu není detailní vysvětlení rozdílů mezi mikrokontroléry jako je Arduino a FPGA čipy. Ale v jednoduchosti uvidíte už na ukázce blikání LED diodou, že práce s FPGA je složitější, ale nabídne nám také větší možnosti.

Pro práci s naším Cyclone FPGA čipem můžeme použít základní vývojové prostředí Quartus II, které ve verzi Web je dostupné zdarma po jednoduché registraci.
V prvním kroku tedy navštivte stránky firmy Intel a vytvořte si registraci typu Individual account.
https://www.intel.com/content/www/us/en/my-intel/fpga-sign-in.html

Po vytvoření účtu se můžete přepnout na další odkaz, kde si stáhnete samotné prostředí Quartus.
Je nutné stáhnout starší verzi 13.0sp1, protože je to poslední verze s podporou čipů Cyclone II.
A z balíčků bude stačit stáhnout prostředí Quartus II společně s Devices Cyclone II, jako vidíte na obrázku. U stažení si můžete buď doinstalovat Download Manager od Akamai (doporučuji) či zvolit Direct Download.
http://fpgasoftware.intel.com/13.0sp1/?edition=web&platform=windows&download_manager=dlm3

Po stažení balíčků se přesuneme k jejich instalaci, kterou provedeme běžným způsobem.

Po úspěšné instalaci si můžeme spustit poprvé prostředí Quartus II, kde nás uvítá tato obrazovka.

Na ní klikneme na tlačítko „Create a New Project“ a vytvoříme si nový projekt s nastavením našeho FPGA. Na první záložce pouze potvrdíme přechod tlačítkem Next. Na další obrazovce vyplníme cestu k naší složce pro projekt. Já jsem si vytvořil svůj projekt v nové složce, jako vidíte níže.
A ještě je nutné zadat nové jméno pro náš projekt. Zde tedy zadám například „blikani_led“, přičemž se tento název přepíše i do názvu top modulu, což můžeme nechat a potvrdit přechod na další obrazovku tlačítkem Next.

Pokud bychom už měli nějaké zdrojové soubory z jiného projektu, mohli bychom si je zde přidat. My ale začínáme nový projekt, a proto nabídku „Add Files“ přeskočíme tlačítkem Next.
A tak se dostaneme na nabídku pro volbu našeho FPGA čipu. Je potřeba nejprve zvolit správnou rodinu čipů, my tedy zvolíme family Cyclone II.
A poté musíme ještě zvolit správný typ procesoru, v našem případě již zmíněný EP2C5T144C8. Po označení čipu levým klikem myši se můžeme přesunout dál tlačítkem Next.

Nyní se ocitneme na nabídce „EDA Tool Setting“, kde bychom mohli zvolit případné další nástroje pro syntézu či simulaci. My ale žádný nemáme, a proto se pouze přesuneme tlačítkem Next na finální obrazovku se Summary. Pokud jste vyplnili vše správně, měli byste vidět podobný výsledek, který můžete potvrdit tlačítkem Finish.

Nyní se přesuneme ke zdrojovému kódu. Já jsem si připravil jednoduchý blikač s LED diodami, které jsou vestavěné přímo na desce s FPGA čipem. Jako programovací jazyk jsem použil VHDL, protože z mé zkušenosti je to stále nejčastější hardwarový jazyk, který se vyučuje ve školách či kurzech. Pro vytvoření nového souboru si tedy otevřeme nabídku „File-New“, kde zvolíme „VHDL File“ ve skupině „Design Files“.

V prostředí se otevře prázdný soubor, do kterého můžeme začít psát kód.
V ukázkovém kódu vidíte na začátku připojení potřebných knihoven a dále vytvoření entity s potřebnými porty. Poté následuje architektura, ve které nejprve vytvoříme všechny potřebné konstanty a proměnné. Po nich pak vytvoříme samotný blok pro logiku ohraničený pomocí begin a end.
Jako ukázku sekvenční logiky vidíme proces, který je citlivý na signál clk, tedy změnu hodin. V něm se nachází podmínka, která při detekci náběžné hrany hodinového signálu pracuje s čítačem. Pokud napočítá čítač do nastavené maximální hodnoty, provedeme jeho vynulování a převrácení stavové proměnné. Jinak přičteme hodnotu 1 do čítače.
Níže pod procesem pak vidíme jednoduchou kombinační logiku, kde pouze přiřadíme stavovou proměnnou přímo na piny s LED diodami.

-- Blikani LEDkou
-- navody.dratek.cz

-- pripojeni potrebnych knihoven
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

-- vytvoreni entity s porty
entity blikani_led is
  port (
    clk : in std_logic;
    led1 : out std_logic;
    led2 : out std_logic;
    led3 : out std_logic
  );
end blikani_led;

-- vytvoreni architektury pro entitu
architecture rtl of blikani_led is
  -- zadani rychlosti vstupnich hodin (50 MHz)
  constant CLK_FREKVENCE : integer := 50000000;
  -- zadani poctu bliknuti za sekundu
  constant BLIK_FREKVENCE : integer := 1;
  -- pocet hran, po kterych dojde k prepnuti LED diody
  constant CITAC_MAX : integer := ((CLK_FREKVENCE/BLIK_FREKVENCE)/2);
  -- promenna pro ulozeni stavu citace
  signal citac : unsigned(24 downto 0);
  -- promenna pro ulozeni stavu LED
  signal stav : std_logic;
-- hlavni blok
begin
  -- process citlivy na zmenu hodin clk
  process(clk) begin
    -- detekce nabezne hrany hodin
    if rising_edge(clk) then
      -- kdyz napocitame do maximalni hodnoty,
      -- vynulujeme citac a prepneme stav
      if (citac = CITAC_MAX) then
        citac <= (others => '0');
        stav <= not stav;
      -- jinak pricteme jednicku do citace
      else
        citac <= citac + 1;
      end if;
    end if;
  end process;
  
  -- prirazeni promenne stav na piny s LED diodami
  led1 <= stav;
  led2 <= not stav;
  led3 <= stav;
end rtl;

Po vložení kódu z návodu můžeme VHDL soubor uložit, kdy nám prostředí pojmenuje náš soubor dle názvu entity a my ho můžeme uložit do složky s projektem.

Jako další krok budeme potřebovat přiřadit správné piny na čipu k našim portům. V první kroku je dobré provést kontrolní analýzu kódu, aby nástroj mohl detekovat naše porty. To provedeme tak, že dvakrát klikneme na levé straně na volbu „Analysis&Elaboration“.

Tento proces by měl trvat krátkou chvilku a po něm uvidíte zelené potvrzení úspěšného překladu. Nyní tedy můžeme otevřít nabídku „Assignments-Pin Planner“. Touto volbou se nám otevře okno s náhledem na celý FPGA čip, kde nás bude zajímat spodní část obrazovky, kde bychom měli vidět naše 4 porty clk a LED diod. U každého z portů nastavíme správný pin ve sloupečku Location a to následovně. Pin clk připojíme na PIN_17, led1 na PIN_3, led2 na PIN_7 a led3 na PIN_9. To bude v této nabídce vše, a proto ji nyní můžeme zavřít.

Po zvolení pinů si můžete všimnout, že se nám zelený výsledek analýzy změnil na otazník. Pro kontrolu můžete znovu spustit analýzu a poté se připravíme na nahrání programu do FPGA čipu.
Pro tento účel můžete připojit programátor USB Blaster do počítače. Pokud by si sám nedokázal najít ovladače, můžeme mu pomoci pomocí nástroje „Správce zařízení“ (vyvoláme buď pomocí zkratky Windows+X a volbou Správce nebo napsáním názvu „Správce zařízení“ v nabídce Start).
Zde uvidíte neznámé zařízení, u kterého stačí zvolit volbu „Aktualizovat ovladač“, „Vyhledat ovladač v počítači“ a nasměřovat hledání do složky s instalací, např. „C:altera13.0sp1quartusdrivers“. Poté by se měl programátor bez problémů nainstalovat a my se tak můžeme přepnout zpět do prostředí Quartus II.

Pro dočasné nahrání programu do FPGA desky připojíme programátor na pravý konektor s názvem JTAG a zapojíme napájecí adaptér do FPGA desky. V prostředí si pak přepneme na levé straně volbu Flow z „RTL Simulation“ na „Full Design“ a poklikáme na volbu „Compile Design“.

A pokud dopadne vše správně, měli byste vidět například tento výsledek, kdy Warningy nám zatím nevadí.

Nyní se můžeme přesunout k nahrání programu do FPGA čipu. Pro tento účel si poklikáme níže na možnost „Program Device“. V nově otevřeném okně si budeme muset nejprve nastavit náš programátor, pro co stačí kliknout na ikonu „Hardware Setup“ a otevřeném okně zvolit pro „Currently selected hardware“ náš „USB-Blaster“. Po zvolení můžeme zavřít nabídku tlačítkem Close.

Po výběru USB Blasteru musíme přiřadit náš zdrojový soubor z kompilace. To uděláme tak, že klikneme tlačítko „Add File“ a vybereme soubor „blikani_led.sof“. Po tomto kroku se nám objeví připravený obrázek konfigurace a my můžeme nahrát náš design pomocí tlačítka Start. Pokud proběhne vše správně, měli byste vidět v pravém horním rohu „100% Successful“ a na FPGA desce blikající diody.

Vývojový FPGA kit Cyclone II je zajímavý nástroj, který vyžaduje pokročilejší znalosti elektroniky a také hardwarových jazyků. Proto jsem chtěl tento návod vytvořit hlavně jako ukázku rozchození FPGA desky s programátorem, kde si můžete jednoduše prohlédnout rozdíly při jednoduchém blikání s LED diodou oproti programu pro Arduino.
FPGA čipy se obecně používají pro odlišná zařízení oproti Arduinu. Jejich výhodou je možný paralelní běh mnoha procesů najednou na jednom čipu, velké množství propojovacích I/O pinů a vysoká rychlost v desítkách megahertzů.

Pokud Vás tento návod zaujal a chtěli byste na Návodech vidět pokračování s FPGA, napište to, prosím, do komentářů u videa na Youtube.

Seznam použitých komponent:
https://dratek.cz/arduino/1508-fpga-ep2c5t144-cycloneii-vyvojovy-kit-altera-usb-blaster-jtag-programator.html

Pozn: pokud máte problém se stažením software ze stránek Intelu, můžete využít tento odkaz.

Další podobné články