Abstrakt: Aplikace demonstruje zpřístupnění blokové paměti BRAM, která je integrovaná uvnitř FPGA, přes rozhraní SPI. Paměť je připojena k mikrokontroléru a pomocí příkazů pro zápis a čtení do/z SPI je možné modifikovat a číst její obsah.
Tato aplikace demonstruje připojení blokové paměti ke komunikační sběrnici SPI, pomocí které je možné z mikrokontroleru číst a modifikovat obsah paměti. Paměť samotná může sloužit např. pro uchování informací o obrazu (viz grafické aplikace), fontu či jiných dat.
Bloková paměť RAM (BRAM)
FPGA obvod použitý ve FITkitu obsahuje čtyři blokové paměti BRAM o celkové kapacitě 4 x 16384 bitů. Každá pamět může být použita v závislosti na požadavcíc aplikace jako dvouportová nebo jednoportová. V prvním případě se využívá primitiva RAMB16_Sm_Sn
, v druhém případě primitiva RAMB16_Sn
, kde konstanty m a n specifikují datovou šířku prvního a druhého portu a mohou nabývat následujících hodnot: 1, 2, 4, 9, 18 nebo 36 bitů. V případě datové šířky 9, 18 a 36 bitů má uživatel k dispozici 8, 16 a 32 datových bitů a navíc 1, 2 případně 4 paritní bity. Paritní bity mohou být využity také k úschově dat, neboť výpočet parity není prováděn automaticky.
Uživatel má tedy možnost nainstancovat paměť s datovou šířkou, která nejlépe vyhovuje dané aplikaci a tudíž může uspořit bity, které by byly jinak nevyužity. Paměť BRAM je synchronní a v případě dvouportové varianty jsou k dispozici dva nezávislé hodinové vstupy. Nejčastěji se používá pro implementaci vyrovnávacího bufferu FIFO, případně datového úložiště o malé kapacitě.
Pro komunikaci mikrokontroleru s pamětí BRAM je použit adresový dekodér SPI (viz dokument Komunikační systém), který je adresován pomocí 16-bitů široké adresy. Data jsou přenášena do a z paměti po 16ti bitech. Způsob zapojení jednotlivých komponent uvnitř FPGA je zobrazen na následujícím obrázku.
Zdrojové kódy je možné nalézt v souboru fpga/top.vhd.
Program pro mikrokontroler používá k přenosu 16bitových slov z/do paměti funkci FPGA_SPI_RW_AN_DN
a je navržen tak, že je schopen obsah paměti zinicializovat, přečíst a vyplnit postupně se zvyšující hodnotou.
Ukázka kódu realizujícího zápis 16-bitového slova na 16-bitovou adresu
unsigned short val = 0x1234; //zapis 16 bitove hodnoty val na adresu BRAM_BASE + offset FPGA_SPI_RW_AN_DN(SPI_FPGA_ENABLE_WRITE, BRAM_BASE + offset, (unsigned char *)&val, 2, 2);
Ukázka čtení 16-bitového slova z 16-bitové adresy s využitím stejné funkce
unsigned short val; //cteni 16 bitove hodnoty z adresy BRAM_BASE + offset FPGA_SPI_RW_AN_DN(SPI_FPGA_ENABLE_READ, BRAM_BASE + offset, (unsigned char *)&val, 2, 2);
Zdrojové kódy je možné nalézt v souboru mcu/main.c.
přeložte aplikaci
naprogramujte MCU a FPGA a spusťte terminálový program
pomocí příkazu help
je možné vypsat seznam příkazů souvisejících s touto aplikací
Aplikace nevyžaduje ke své činnosti nastavit kromě propojek umožňujících programování další propojky.