Čeština / English
Login

Firmware / Komponenta PicoCPU

Autor: Ladislav Čapka, Zdeněk Vašíček ()
Update: 12.4.2010

1. Úvod

Komponenta PicoCPU je vytvořena jako univerzální procesor s pamětí a skládá se ze dvou části. První část tvoří procesorové jádro PicoBlaze od firmy Xilinx Inc. a druhou bloková paměť BRAM, která slouží jako paměť instrukcí. Jádro procesoru PicoBlaze tvoří velmi jednoduchý 8-bitový procesor vytvořený firmou Xilinx určený k použití v celé škále hradlových polí FPGA. Toto procesorové jádro disponuje instrukční sadou čítající 57 instrukcí. Maximální využitelná délka zásobníku pro uchování návratových adres (CALL/RETURN) je 31 položek.

Délka instrukcí procesoru PicoBlaze je, z důvodu efektivního využití paměti BRAM, 18 bitů. Dále je procesor vybaven 16-ti osmibitovými registry pro obecné použití a až 256 vstupními a 256 výstupními porty. Adresní sběrnice pro výběr instrukce má šířku 10 bitů a lze tedy vytvořit program dlouhý až 1024 instrukcí. Assembler, ve kterém lze napsat kód pro procesor PicoBlaze, se překládá pomocí programu KCPSM3, který je součástí balíku popsaného dále. Vlastní jádro procesoru PicoBlaze je navrženo jako jednoduchá komponenta, ke které stačí připojit pouze paměť obsahující instrukce programu. Bloková paměť BRAM je součástí komponenty PicoCPU, čímž se stává její použití velmi jednoduchým.

1.1. Popis balíku PicoBlaze

Z důvodu licenční politiky firmy Xilinx není možné, aby použité VHDL jádro procesoru a překladač KCPSM3 byly součástí SVN. Je proto nutné si nejprve z webových stránek Xilinx stáhnout balík PicoBlaze pro Spartan-3. Ten je možné nalézt na stránkách XILINX.

Balík, který lze zdarma stáhnout, obsahuje řadu souborů, které nejsou pro správnou funkci komponenty PicoCPU zapotřebí. Jádro procesoru PicoBlaze je obsaženo v souboru kcpsm3.vhd. Tento soubor je nutné nahrát do adresáře SVN fpga\units\picocpu\picoblaze\. Komponenta PicoCPU přímo na tento soubor odkazuje a není tedy zapotřebí nic měnit.

Další důležitou součástí je překladač assembleru PicoBlaze. Ten je možné nalézt v adresáři Assembler a pro jeho chod jsou důležité následující soubory:

  • KCPSM3.EXE

  • ROM_form.coe

  • ROM_form.v

  • ROM_form.vhd

Program KCPSM3 funguje jako command-line překladač, jehož jediným parametrem je název souboru, obsahující zdrojový kód v assembleru. Překladač vytvoří několik souborů. Pro další zpracování se jako nejvhodnější jeví soubor s příponou .HEX, neboť jej lze poměrně jednoduše zpracovat v MCU a přes SPI uložit do blokové paměti PicoCPU. Další možností je využít vygenerovaného bloku ve VHDL (.VHD) či Verilogu (.V) a vysyntetizovat paměti BRAM se statickými daty.

1.2. Seznam instrukcí osmibitového procesoru PicoBlaze

  • Skokové instrukce: JUMP, CALL, RETURN

  • Aritmetické operace: ADD, ADDCY, SUB, SUBCY, COMPARE

  • Logické operace: LOAD, AND, OR, XOR, TEST

  • Operace posuvu a rotací: SR0, SR1, SRX, SRA, RR, SL0, SL1, SLX, SLA, RL

  • Operace přerušení: RETURNI` ENABLE, RETURNI DISABLE, ENABLE INTERRUPT, DISABLE INTERRUPT

  • Operace s hodnotami: STORE, FETCH

  • Operace s porty: INPUT, OUTPUT

Všechny instrukce trvají dva hodinové takty. Detailnější informace je možno nalézt v balíku PicoBlaze v manuálu KCPSM3 (KCPSM3_Manual.pdf).

2. Implementace komponenty PicoCPU na FITkitu

Navržená komponenta obaluje základní jádro procesoru PicoBlaze a přidává instrukční paměť BRAM. Obsah paměti, tedy instrukce, je možno měnit online, jedinou podmínkou je, že procesor PicoBlaze musí být zastaven. Spuštění a zastavení vykonávání programu procesorem zajišťuje signál CORE_EN. Pokud je tento signál ve stavu log. 0, je možno modifikovat obsah paměti. Pokud je ve stavu log. 1, paměť lze pouze číst a jádro procesoru uvedený program vykonává. Přístup k paměti je realizován signály RAM_ADDR, RAM_DATA_IN, RAM_DATA_OUT a RAM_DATA_WE. Pro přístup k paměti v režimu čtení stačí modifikovat adresu, danou signálem RAM_ADDR a hodnota (tedy instrukce) je přímo vystavena na sběrnici RAM_DATA_OUT. Zápis do paměti je realizován vystavením kódu instrukce na sběrnici RAM_DATA_IN a nastavením signálu RAM_DATA_WE do log. 1. Taktování procesoru i paměti probíhá signálem CLK a lze tedy rychlost vykonávání programu měnit dle požadavků.

Další součástí procesoru jsou porty. Procesorové jádro PicoBlaze může vybrat vždy 1 z 256 zařízení připojených k portu signálem PORT_ID, se kterým se v tu chvíli pracuje. Pokud program zapíše data na port pomocí instrukce OUTPUT, jsou data vystavena na sběrnici OUT_PORT a signál WRITE_STROBE, označující platnost výstupních data procesoru, je nastaven na log. 1. Pokud procesor vyžaduje čtení z portu, je využit signál READ_STROBE, který označuje požadavek vystavení dat na sběrnici IN_PORT.

Poslední součástí, se kterou umí komponenta PicoCPU pracovat, je řadič přerušení. Vstupní přerušení pro procesor je realizováno nastavením signálu INTERRUPT na log. 1. Pokud je toto přerušení akceptováno a provedeno, je nastaven signál INTERRUPT_ACK na log. 1.

Rozhraní implementované PicoCPU komponenty je vyobrazeno na obrázku 2.1.

picocpu_bridge.png

Obrázek 2.1: Rozhraní komponenty PicoCPU.

Popis vstupních a výstupních signálů entity komponenty:

  • CLK - vstupní hodinový signál komponenty

  • RST - reset komponenty

  • CORE_EN - aktivace procesorového jádra

  • PORT_ID - identifikátor vybraného portu

  • IN_PORT - vstupní 8-bit port procesoru

  • READ_STROBE - příznak čtení dat z vybraného portu

  • OUT_PORT - výstupní 8-bit port procesoru

  • WRITE_STROBE - příznak platnosti dat na výstupním portu

  • INTERRUPT - signál přerušení procesoru

  • INTERRUPT_ACK - potvrzení přerušení

  • RAM_ADDR - výběr adresy v programové paměti instrukcí

  • RAM_DATA_IN - vstupní hodnota instrukce pro zápis na vybranou adresu

  • RAM_DATA_WE - potvrzení zápisu instrukce na vybranou adresu

  • RAM_DATA_OUT - hodnota instrukce na vybrané adrese

Zobrazeno: 980x Naposledy: 23.9.2017 12:45:21