Abstrakt: Jednoduchá aplikace demonstrující řízení LED diody pomocí procesoru PicoBlaze implementovaného uvnitř FPGA.
Tato jednoduchá aplikace demonstruje řízení LED diody pomocí 8-bitového procesoru Picoblaze od firmy XILINX, který je implementován uvnitř FPGA jako komponenta PicoCPU. PicoBlaze je řízen programem, který pravidelně každou sekundu inkrementuje hodnotu jednoho registru a tuto hodnotu zapisuje na výstupní port procesoru, kde je připojena žlutá LED dioda. Protože je dioda připojena na nejnižší bit, bliká v intervalu jedna sekunda.
V této aplikaci jsou použity dva adresové dekodéry SPI_ADC (viz Komunikační systém) a komponenta PicoCPU. Komponenta PicoCPU je propojena s jedním z adresních dekodérů, díky němuž je umožněn přístup k paměti programu. Druhý adresní dekodér je využit pro řízení procesoru - umožňuje jeho spuštění a zastavení. Z toho důvodu je za tímto dekodérem připojen registr, který drží uloženu zapsanou hodnotu.
Protože procesor PicoBlaze používá z důvodu efektivního využití pamětí BlockRAM 18-bitové instrukce, je pro jednoduchost použita v dekodéru 24 bitová datová šířka slova. Adresace paměti probíhá prostřednictvím 10-bitového adresního signálu. Nastavení generických parametrů pro SPI dekodér sloužících pro přenos instrukcí programu:
ADDR_WIDTH = 16 (šířka adresy)
DATA_WIDTH = 24 (šířka dat)
ADDR_OUT_WIDTH = 10 (šířka výstupní adresy)
BASE_ADDR = 16#F800# (bázová adresa SPI dekodéru).
Druhéhý adresní dekodér slouží pouze k přenosu jednobitové informace, která povoluje/zakazuje chod procesoru. Instrukce pro procesor lze nahrát do paměti pomocí terminálu. Ukázkový kód je možné najít v SVN ve složce data. Zdrojový kód je nutné přeložit překladačem KCPSM3
, který je součástí balíku PicoBlaze, jehož popis můžete nalézt na stránce Komponenta PicoCPU.
Program pro procesor PicoBlaze je napsán v Assembleru a obsahuje dvě rutiny (main
a delay
). Hlavní programová smyčka zapisuje na port hodnotu registru r7
a tuto hodnotu inkrementuje. Úkolem rutiny delay
je realizovat co nejpřesněji zpoždění 1 sekundu pomocí smyček. Zde vycházíme ze znalosti frekvence, na které je PicoBlaze provozován a dále ze znalosti doby trvání jedné instrukce, což je dle datasheetu dva hodinové cykly.
Předtím, než procesor PicoBlaze spustíme, je zapotřebí nahrát do instrukční paměti program. Program lze nahrát pomocí terminálu.
Program pro MCU vychází řeší příjem a zpracování souboru .hex, který je výstupem překladače assembleru KCPSM3. Tento soubor je mikrokontrolerem přijat a uložen do paměti FLASH, aby nebylo nutné vždy po spuštění FITkitu program nahrávat znovu. K zápisu do FLASH slouží příkaz FLASH W HEX
. Soubor .hex obsahuje vždy 1024 instrukcí. Na jednom řádku je uložena právě jedna instrukce. Každá instrukce je uložena jako hexadecimální číslo.
Po spuštění/resetu FITkitu je program pro PicoBlaze automaticky odeslán z paměti FLASH prostřednictvím sběrnice SPI do FPGA, kde ho přijímá adresní dekodér a zapisuje do BlockRAM paměti nacházející se uvnitř PicoCPU. Aktualizaci programu z paměti FLASH je možné provést pomocí příkazu CPU UPDATE
. Pro povolení případně zakázání vykonávání instrukcí procesorem PicoBlaze je možné využít příkazy CPU START
a CPU STOP
.
Ze stránek XILINX stáhněte implementaci PicoBlaze v jazyku VHDL. Dle pokynů uvedených v Komponenta PicoCPU zprovozněte komponentu PicoCPU.
Přeložte aplikaci
Spusťte terminálový program QDevKit a naprogramujte MCU a FPGA
Zahajte komunikaci s FITkitem a pomocí příkazu FLASH W HEX
nahrajte program pro procesor PicoBlaze umístěný v data/counter.hex do paměti FLASH umístěné na FITkitu.
Kód pro PicoBlaze lze v případě potřeby ze zdrojového souboru přeložit pomocí příkazu kcpsm3.exe counter.psm
.
Pomocí příkazu CPU UPDATE
inicializujte paměť programu uvnitř FPGA a povolte činnost procesoru.
Procesor začne vykonávat instrukce čímž bude blikat dioda D4