Čeština / English
Login

Aplikace / Přístup k paměti BRAM z mikrokontroleru

Autor: Zdeněk Vašíček ()

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.

Update: 20090505

1. Popis aplikace

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ě.

2. Návrh systému

2.1. VHDL kód pro FPGA

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.

bram.png

Obrázek 2.1: Blokové schéma aplikace

Zdrojové kódy je možné nalézt v souboru fpga/top.vhd.

2.2. Firmware pro mikrokontroler

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.

3. Zprovoznění aplikace

  1. přeložte aplikaci

  2. naprogramujte MCU a FPGA a spusťte terminálový program

  3. 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.

Zobrazeno: 1027x Naposledy: 17.9.2017 05:11:44