Čeština / English
Login

Návody / Ladění aplikací v FPGA

Autor: Pavol Korček ()

Abstrakt: Dokument popisuje jak lze debugovat hardware běžící uvnitř FPGA s využitím nástroje ChipScope

Update: 23.10.2009

1. Úvod

Občas může nastat situace, kdy máte napsanou aplikaci pro FITKit, která bez problému funguje v simulacích avšak po přeložení a nahrání do FPGA nefunguje tak, jak by měla. Důvodů, proč se toto může stát, je několik. Jedním z nejčastějších zdrojů problémů je stav, kdy nebyly v simulacích podchycené všechny situace, které skutečně můžou nastat. Dalším, o mnoho zákeřnějším problémem, je situace, kdy překladové nástroje zoptimalizovaly část kódu do té míry, že se změnila funkčnost aplikace. Oba z uvedených problému se velice obtížně ladí. I proto vznikl nástroj Chipscope, který slouží pro ladění aplikací přímo na čipu FPGA. Po vložení ICON (integrated controller core) a ILA (integrated logic analyzer) pasivních sond do laděné aplikace a jejích správném zapojení je možné monitorovat libovolný signál při reálné činnosti FPGA.

2. Co je zapotřebí:

  1. mít nainstalovaný ChipScope,

  2. mít kabel pro propojení JTAG FPGA a počítače (např. Xilinx Platform Cable na obrázku 2.1),

  3. vygenerovat ILA a ICON sondy,

  4. přidat vygenerované komponenty do aplikace a zahrnout je do překladu,

  5. přeložit aplikaci, nahrát ji do FPGA, připojit se k sondám a analyzovat

chipscope_01.png

Obrázek 2.1: Xilinx Platform Cable

3. Zapojení JTAG kabelu

Pro připojení k FPGA využíva Chipscope port JTAG Boundary Scan. Tento je na FITkitu do FPGA přiveden skrze pinheader JP1. Je zapotřebí připojit všechny piny (GND, TDO, TDI, TCK, TMS, VCC). Druhou stranu kabelu je nutné zapojit do USB počítače, kde je nainstalovaný Chipscope.

4. Generováni sond ILA a ICON

Předtím, než se pustíte do tohoto kroku, si je potřebné ujasnit, kolik signálů budeme monitorovat. ICON slouží pro připojení ILA sond. V celém FPGA může být jen jediný ICON, ke kterému lze připojit až 15 ILA sond. Ty mohou snímat signály do datové šířky 4096 bitů a frekvence 500MHz. Sondy jsou schopny zaznamenat až 131072 vzorků. Je však zapotřebí myslet na to, že čím více budeme chtít zaznamenat, tím více zdrojů na FPGA zabereme. Konkrétní parametry sond se volí při jejich generováni pomocí Xilinx CORE Generator (součást ISE), kde je možné zjistit i zdrojové obsazení (počet BRAM apod.).

4.1. Generování ICON

Spustíme CORE Generátor a založíme nový projekt (Ctrl+N), který si pojmenujeme a uložíme na zvolené místo. Následně nastavíme parametry podle obrázku 4.1:

chipscope_02.png

Obrázek 4.1: Nastavení parametrů

V pravé části programu vybereme ICON (obrázek 4.2)

chipscope_03.png

Obrázek 4.2: Volba komponenty

Následující okno nám dovolí měnit parametry. Je možné zadat název, pod kterým se bude ICON přidávat do aplikace a počet připojených ILA komponent (Control Ports). Ostatní parametry neměníme. Potvrzením "Generate" se ICON vygeneruje spolu s dodatečnými soubory. Jejich obsah je popsán v souboru README po úspěšném dokončení generování. Pro nás důležité soubory budou vysvětleny dále.

4.2. Generováni ILA

Tak jako při generováni ICON, je nutné použít CORE Generátor. Už však není potřeba zakládat nový projekt, ale je možné použít projekt již založený. Všechna nastavení (typ FPGA atd.) tak zůstanou zachována. Z nabídky vybereme sondu ILA.

chipscope_04.png

Obrázek 4.3: Volba parametrů sondy ILA

Zvolíme jméno komponenty a následující nastavení (obrázek 4.3):

  • počet trigrovacích portů, do kterých se zapojí signály, na které bude sonda reagovat (až 16 na jednu ILA, obvykle stačí 1)

  • počet sekvenčních stupňů je parametr, kterým určujeme, jak moc komplexní události chceme monitorovat (obvykle stačí 1, detekuje konkrétní událost bez předcházející/následující sekvenční události)

  • použití relativních maker (RPMs) je vhodné pro ošetření problému s časováním

  • někdy je vhodné zapnout trigrovací výstup z ILA, který je aktivní při splnění podmínky monitorování (je možné spustit jinou událost)

  • vzorkování je možné zapnout na vzestupnou i sestupnou hranu

  • hloubka dat určuje maximální počet vzorků, který bude sonda schopna zaznamenávat (pozor na počet zdrojů zabraných sondou)

  • shodnost dat a triggeru je vhodné volit v situacích, kdy se velikost dat a trigrovacích portů se příliš nedliší (obvykle vyhovuje nastavit shodnost)

chipscope_05.png

Obrázek 4.4: Volba parametrů sondy ILA

V dalším okně můžeme měnit následující parametry (obrázek 4.4):

  • velikost trigrovacího portu závisí na tom, kolik signálů (když jsme zvolili data shodné s trigerem) anebo kolik trigerů potřebujeme

  • počet "match" jednotek volíme vyšší než 1, pokud chceme na trigrovacím portu zaznamenat i podmínky jako je logický OR a jiné

  • velikost čítače udává, za jak dlouho po vyvoláni trigrovací podmínky se má triger vykonat (je možné nastavit šíři až 32, přičemž tuhle podmínku je možné nastavit i později pomocí nástroje Chipscope a už předtím nastavené dostatečně velké datové hloubky)

  • typ shody obvykle stačí nastavit na "basic". Stavy, které je sonda schopná analyzovat jsou zobrazené ihned pod výběrem

  • poslední možnost není vhodné povolit v případe, že máme data stejné s trigrovacím portem

Před generováním ILA sondy je vhodné zjistit její zdroje. To se docílí výběrem "Core Resource Usage" na levé dolní straně okna. Následně je možné spustit generování.

Vygenerované soubory, pro ICON anebo ILA sondy jsou potřebné *.vho, popisují jak zapojit vygenerované komponenty do aplikace. Soubory *.ngc obsahují popis komponent pro samotné FPGA.

5. Přeložení aplikace pro FITKit s podporou Chipscope

Nejprve je zapotřebí do zdrojového kódu aplikace vložit definici vygenerované komponenty ICON a ILA (k nalezení v souborech chipscope_icon.vho a chipscope_ila.vho):

component chipscope_icon
  PORT (
    CONTROL0   : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0)
  );
end component;
 
component chipscope_ila
  PORT (
    CONTROL : INOUT STD_LOGIC_VECTOR(35 DOWNTO 0);
    CLK     : IN STD_LOGIC;
    TRIG0   : IN STD_LOGIC_VECTOR(7 DOWNTO 0)
  );
end component;

Dále je nutné dodat definici signálu (dle počtu připojených sond):

signal TRIG0                 : std_logic_vector(7 downto 0);
signal CONTROL0              : std_logic_vector(35 downto 0);

a jejich parametry, aby je syntetizátor nezoptimalizoval (jde o pasivní sondy)

attribute dont_touch                      : boolean;
attribute dont_touch of chipscope_icon    : component is TRUE;
attribute dont_touch of chipscope_ila     : component is TRUE;

Téměř na závěr stačí dodat zapojení komponent a datových (pokud jsou obsaženy) a trigrovacích signálů, např.:

ICON_0 : chipscope_icon
port map (
   CONTROL0  => CONTROL0
);
 
ILA_0 : chipscope_ila
port map (
   CONTROL   => CONTROL0,
   CLK       => CLK,
   TRIG0     => TRIG0
);
 
TRIG0 <=     "0" &                   -- 1
             sdram_busy &            -- 1
             sdram_addr_mux &        -- 1
             sdram_data_out &        -- 3
             sdram_data_out_vld &    -- 1
             sdram_rd_en;            -- 1

Nyní je nutné přidat vygenerované komponenty (*.ngc) do procesu překladu aplikace pro FITKit. To je možné udělat úpravou souboru /base/Makefile.inc, kde přidáme řádek:

CHIPSCOPE_PATH ?= $(BASE)fpga/chipscope

Dále řádek:

$(NGDBUILD) $(NGDBUILDFLAGS) -uc "$(FPGAUCF)" $< $@ && $(RM) -rf netlist.lst xlnx_auto*

nahradíme řádkem:

$(NGDBUILD) $(NGDBUILDFLAGS) -uc "$(FPGAUCF)" -sd $(CHIPSCOPE_PATH) $< $@ && $(RM) -rf netlist.lst xlnx_auto*

Samozřejmě je nezbytné aby fpga/chipscope obsahoval všechny vygenerované *.ngc soubory (v našem případě chipscope_icon.ngc a chipscope_ila.ngc).

Takto pozměněnou aplikaci přeložíme a nahrajeme do FPGA obvyklým způsobem.

6. Připojení k sondám a vlastní analýza

Spustíme nástroj ChipScope a připojíme se k FPGA (obrázek 6.1):

chipscope_06.png

Obrázek 6.1: Aplikace ChipScope

Zvolíme rychlost (zde postačí 3MHz) a USB port (přednastavený) a potvrdíme. Po úspěšném připojení se zobrazí seznam dostupných zařízení. V našem případě se jedná o FPGA XC3S50.

Následně je možné vidět všechny připojené ILA sondy. V tuto chvíli je vhodné nastavit jména signálů na které je sonda skutečně připojena, vytvořit sběrnice (skupiny stejně pojmenovaných signálu) a projekt uložit. Každá ILA má vlastní nastavení, ze kterých nás nejvíc zajímá Waveform a Trigger Setup.

Do Waveformu je možné pouhým přetažením přidat monitorované signály (obrázek 6.2):

chipscope_07.png

Obrázek 6.2: Waveform

Kurzor T ukazuje, kdy byla splněna monitorovací podmínka a kurzory O a X jsou uživatelsky nastavitelné. Dále je potřebné nastavit trigger poklepáním na Trigger Setup (obrázek 6.3):

chipscope_08.png

Obrázek 6.3: Nastavení trigeru

Podle vlastností vygenerované ILA sondy je možné volit následující parametry:

  • "Match Unit" – nastavení jednotek. V případě existence více match jednotek je množné každou nastavovat samostatně

  • Funkce udává, za jakých podmínek se na monitorovaném signálu bude generovat trigger (shoda, neshoda, vetší-menší než apod., v našem případe shoda ==)

  • Hodnota udává, při které hodnotě bude trigger spouštěn. Buď na konkrétní hodnoty (1,0) anebo, pokud nás daný signál nezaujímá, (X). Dále je možné volit mezi F – falling edge, R – rising edge apod. Závisí však na vlastnostech vygenerované jednotky.

  • Radix udává zápis hodnoty vícebitových signálu pro lepší čitelnost (BIN, HEX apod.).

  • Hodnota čítače udává, jak už bylo vysvětleno, sekvenční závislosti.

Dále je možné volit výsledný logický výraz přes všechny použité Match Unit a způsob, kterým se budou data zachytávat. Je možné vybrat "Window", kdy se zaznamená daný počet oken o dané hloubce s udaným počátkem a nebo zvolit "N Samples", kdy se nastaví pouze počet vzorků, který se uloží při vyvolání trigeru.

Po tomto nastavení je možné spustit zaznamenávání, např. pomocí ovládacích tlačítek (obrázek 6.4):

chipscope_09.png

Obrázek 6.4: Ovládací lišta

Popis (zleva doprava): První tlačítko spustí komunikaci přes JTAG kabel (při zapnutí Chipscope). Následující vypne/zapne lištování statusu sondy (při přehrávání FPGA je vhodné vypnout). Další skupinka zapne trigger, zastaví trigger a zobrazí zachycené data a nebo způsobí zachycení jednoho aktuálního vzorku dát bez ohledu na splnění podmínky (T!). Další tlačítka v pořadí přepnou na zobrazení oblasti s uživatelským kurzorem X a kurzorem O. Další přejdou na předchozí nebo následující vzorek, kde byla splněná podmínka. Poslední tři tlačítka poslouží k nastavení přiblížení nebo oddálení zobrazené plochy.

Zaznamenaná data je možné exportovat (FILE->Export) a tak uložit k další analýze.

Pro více informací ohledně ChipScope analyzátoru je možné nahlédnout do oficiální dokumentace ChipScopeDoc.

Zobrazeno: 1458x Naposledy: 23.9.2017 12:51:42