====== Přípravek MicroZed APO ====== ==== Popis hardware použité procesorové desky MicroZed ==== * MICROZED EVALUATION KIT * ADSAES-Z7MB-7Z010-G * Xylinx Zynq 7Z010 * Základní čip: Xilinx Zynq-7000 All Programmable SoC * Typ: Z-7010, součástka XC7Z010 * CPU: Dual ARM® Cortex™-A9 MPCore™ @ 866 MHz (NEON™ & Single / Double Precision Floating Point) * 2x L1 32 kB data +32 kB instruction, L2 512 KB * FPGA: 28K Logic Cells (~430K ASIC logic gates, 35 kbit) * Výpočetní jednotky v FPGA: 100 GMACs * Paměti v FPGA: 240 KB * Paměť na desce MicroZed: 1GB * Operační systém: GNU/Linux * GNU LIBC (libc6) 2.19-18+deb8u7 * Jádro Linux 4.9.9-rt6-00002-ge6c7d1c * Distribuce: Debian Jessie * Více informací na adrese http://microzed.org/product/microzed Rozhraní přístupná přímo na desce MicroZed * 1G ETHERNET, * USB Host, konektor A * sériový port UART1 přes převodník na USB, USB mikro-B * mikro SD karta * na desce je Flash, jedna uživatelská LED, uživatelské tlačítko a reset tlačítko ==== Popis rozhraní vývojového kitu MZ_APO ==== Na výukovém modulu jsou vyvedené v logickém návrhu obsloužené následující periferie * malý paralelní LCD display, zatím přístup jen přes command a data register * v FPGA lze implementovat automat na zobrazení z framebufferu * 32 LED diod pro zobrazení 32-bit slova (připojení k FPGA je přes SPI) * dva RGB LED indikátory (připojení SPI) * tři rotační ovládací vstupy (IRC) s vyvedenými fázově posunutými signály a kontaktem na stisknutí (připojení přes SPI) * čtyři výstupy na modelářská serva, signál a napájeni 5V výstupy jsou přímo připojené na FPGA a doplněné LED diodami dva lze použít i pro připojení 5V PS2 klávesnice * audiovstup na převodník v Zynqu, ten má interface do ARM části, ale lze ho sběrnicí připojit i do FPGA Programmable Logic. Na desce je osazený malý mikrofon, při zapojení externího do 3.5 mm červeného JACKa dojde k přepnutí na vnější vstup, jumperem lze nastavit ze zesíleného na klasický 1V linkový standard * audio výstup, pouze PWM přímo z FPGA PL, ale při vhodné modulaci lze přehrát i melodii. Na desce je přilepený malý reproduktor s možností přepnutí na sluchátka po zapojení do JACK (pouze mono výstup) * 2x PMOD konektor, jedná se o de-facto standard pro připojení pomalých (max. desítky MHz) periferií k FPGA, na každém je vyvedeno 8 FPGA PL signálů, napájení +3.3V a navíc jsou přidané piny pro napájení +5V, s tím že +5V lze odpojovat jumperem. Při zkratu do 3.3 logických signálů hrozí zničení. Není přímo použitý standard PMOD konektoru, který na straně FPGA používá samičku. Důvod je možnost snadného připojení na plochý kabel. Krátkou spojkou je možné zařídit redukci přímo na interface kompatibilní s dostupnými PMOD periferiemi. * 1x 40 pin konektor s 36 FPGA 3.3V signály. Odpovídá rozložení signálů na výukových deskách Altera DE2. Část signálů je vedena s ohledem na použitelnost pro rychlé LVDS spojení. Druhá půlka je sdílená s PMOD výstupy. Vyvedené je napájení +3.3V a jumerem připojovaných +5V. * 2x rozhraní pro připojení 10-bit paralelních kamer. * dva kanály pro připojení CAN sběrnic, budiče do 5 MBd připojení přes FPGA PL buď na integrované kontroléry nebo na radiče v FPGA, ty by bylo možné implemntovat v rámci nějakého projektu s podporou CAN-FD * zdroj pro napájení 5.5 mm JACKem z 12 až 24 VDC. * na konektor USB B je připojený čip FTDI, který obstarává přístup na sériovou konzoli směrovanou na UART0 obvodu Zynq. Vlastní signály obvodu Zynq a napájení kitu jsou konektoru a signálů USB galvanicky oddělené. S volbou nastavení konzole na piny MIO10 a MIO11 byla upravená a skompilovaná vlastní verze zavaděče {{http://www.denx.de/wiki/U-Boot|U-Boot}}. Zkompilované bylo na míru jádro operačního systému Linux. * při použití UART0 přes převodník FTDI, je možné signálem break aplikovaným po dobu delší než 1s desku resetovat. * dvoupinový konektor pro externí reset, například relátkem při použití pro vzdálený přístup a ladění aplikací * návrh hardware Ing. Petr Porazil ve firmě PiKRON s.r.o. === Tabulka bázových adres jednotlivých periferií === ^ Fyzická \\ adresa ^ Rozsah ^ Symbolické označení ^ Popis ^ | 0x43c40000 | 0x4000 | SPILED_REG_BASE_PHYS | Blok periferií, otočných voličů, maticové klávesnice a RGB LED | | 0x43c00000 | 0x4000 | PARLCD_REG_BASE_PHYS | Paralelní LCD display | | 0x43c50000 | 0x4000 | SERVOPS2_REG_BASE_PHYS | Řízení až čtyř modelářských serv, alternativně PS2 | | 0x43c60000 | 0x4000 | AUDIOPWM_REG_BASE_PHYS | Jednoduchý audio výstup (zatím jen PWM) | === Blok otočných voličů, maticové klávesnice a RGB LED === Sada registrů začíná na fyzické adrese SPILED_REG_BASE_PHYS ^ Ofset registru ^ Symbolické označení ^ Bity ^ Popis ^ | 0x004 | SPILED_REG_LED_LINE_o | 31 .. 0 | Řádka 32 žlutých LED diod mapovaná přímo do paměti | | 0x010 | SPILED_REG_LED_RGB1_o | 23 .. 0 | Zápis RGB hodnot do PWM registrů pro RGB LED 1 | | | | 23 .. 16 | Červená složka R | | | | 15 .. 8 | Zelená složka G | | | | 7 .. 0 | Modrá složka B | | 0x014 | SPILED_REG_LED_RGB2_o | 23 .. 0 | Zápis RGB hodnot do PWM registrů pro RGB LED 2 | | | | 23 .. 16 | Červená složka R | | | | 15 .. 8 | Zelená složka G | | | | 7 .. 0 | Modrá složka B | | 0x018 | SPILED_REG_LED_KBDWR_DIRECT_o | 31 .. 0 | Přímý zápis do LED a výstupu/scanu klávesnice | | | | 2 .. 0 | Přímý výstup (or) na R, G a B diody RGB LED 1 | | | | 5 .. 3 | Přímý výstup (or) na R, G a B diody RGB LED 2 | | | | 6 | Samostatná stavová LED dioda | | | | 7 | Samostatná stavová LED dioda | | | | 11 .. 8 | Výběr řady klávesnice | | 0x020 | SPILED_REG_KBDRD_KNOBS_DIRECT_o | 31 .. 0 | Zpětná odezva klávesnice a otočných voličů | | | | 3 .. 0 | Zpětná odezva klávesnice | | | | 16 | Nefiltrovaný stav kanálu A modrého voliče B | | | | 17 | Nefiltrovaný stav kanálu B modrého voliče B | | | | 18 | Nefiltrovaný stav tlačítka modrého voliče B | | | | 19 | Nefiltrovaný stav kanálu A zeleného voliče G | | | | 20 | Nefiltrovaný stav kanálu B zeleného voliče G | | | | 21 | Nefiltrovaný stav tlačítka zeleného voliče G | | | | 22 | Nefiltrovaný stav kanálu A červeného voliče R | | | | 23 | Nefiltrovaný stav kanálu B červeného voliče R | | | | 24 | Nefiltrovaný stav tlačítka červeného voliče R | | 0x024 | SPILED_REG_KNOBS_8BIT_o | 31 .. 0 | Filtrované hodnoty voličů jako 8 bit čísla | | | | 7 .. 0 | Relativní natočení modrého voliče B | | | | 15 .. 8 | Relativní natočení zeleného voliče G | | | | 23 .. 16 | Relativní natočení červeného voliče R | | | | 24 | Filtrovaná hodnota tlačítka modrého voliče B | | | | 25 | Filtrovaná hodnota tlačítka zeleného voliče G | | | | 26 | Filtrovaná hodnota tlačítka červeného voliče R | Další informace pro zájemce o vlastní návrh periferie pro integrovaný procesor v hradlovém poli Implementace periferie se nachází v adresáři [[https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/tree/refs/heads/microzed_apo:/system/ip/spi_leds_and_enc_1.0/hdl|/system/ip/spi_leds_and_enc_1.0/hdl]]. Protože se v případě LED diod a otočných voličů jedná o pomalé periferie a množství pinů využitelných pro zajímavější a rychlejší rozhraní jako jsou kamery je velké, tak jsou pro přenesení vstupně výstupních signálů z a do pomalých periferií využité sériově (SPI sběrnice) připojené GPIO expandery. Přenášená je v obou směrech posloupnost 48 bitů. O přenos se stará instance [[https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/blob/refs/heads/microzed_apo:/system/ip/spi_leds_and_enc_1.0/hdl/spi_leds_and_enc_v1_0.vhd#l263|spi_leds_and_enc_v1_0_spi_fsm_inst]] komponenty [[https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/blob/refs/heads/microzed_apo:/system/ip/spi_leds_and_enc_1.0/hdl/spi_leds_and_enc_v1_0_spi_fsm.vhd|spi_leds_and_enc_v1_0_spi_fsm]]. O realizaci sady registrů připojených k CPU sběrnicí AXI se pak stará komponenta [[https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/blob/refs/heads/microzed_apo:/system/ip/spi_leds_and_enc_1.0/hdl/spi_leds_and_enc_v1_0_S00_AXI.vhd#l550|spi_leds_and_enc_v1_0_S00_AXI]]. V odkazované části na konci zdrojového kódu je zřetelně vidět, jak jsou jednotlivé logické signály a jejich skupiny mapované do bitů a bitových polí v jednotlivých registrech AXI periferie. === Paralelní LCD display === Sada registrů začíná na fyzické adrese PARLCD_REG_BASE_PHYS ^ Ofset registru ^ Symbolické označení ^ Bity ^ Popis ^ | 0x000 | PARLCD_REG_CR_o | 31 .. 0 | Řídicí registr periferie | | | | 1 | Generování signálu reset pro display | | 0x008 | PARLCD_REG_CMD_o | 7 .. 0 | Generování řídicího cyklu/zápis příkazu do řadiče LCD | | 0x00C | PARLCD_REG_DATA_o | 15 .. 0 | Generování datového 16-bit cyklu/zápis příkazu do řadiče LCD | | 0x00C | PARLCD_REG_DATA_o | 31 .. 0 | Generování dvou datových cyklů pro řadič (15 .. 0) a (31 .. 16) | Implementace periferie se nachází v adresáři [[https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/tree/refs/heads/microzed_apo:/system/ip/display_16bit_cmd_data_bus_1.0/hdl|/system/ip/display_16bit_cmd_data_bus_1.0/hdl]]. === Výstupu na modelářská serva nebo pro PS2 klávesnici/myš === Sada registrů začíná na fyzické adrese SERVOPS2_REG_BASE_PHYS ^ Ofset registru ^ Symbolické označení ^ Bity ^ Popis ^ | 0x000 | SERVOPS2_REG_CR_o | 31 .. 0 | Řídicí registr periferie a přímé ovládání | | | | 0 | Nastavení klidové hodnoty (H/L) pro LED/SERVO1 | | | | 1 | Nastavení klidové hodnoty (H/L) pro LED/SERVO2 | | | | 2 | Nastavení klidové hodnoty (H/L) pro LED/SERVO3 | | | | | překrývá se s PS2 Clock | | | | 3 | Nastavení klidové hodnoty (H/L) pro LED/SERVO4 | | | | | překrývá se s PS2 Data, defaultně třetí stav | | | | 8 | řízení směru signálu SERVO4/PS DATA, 0 .. in, 1 .. out | | 0x00C | SERVOPS2_REG_PWMPER_o | 23 .. 0 | Perioda PWM cyklu v kroku 10 ns | | 0x010 | SERVOPS2_REG_PWM1_o | 23 .. 0 | Plnění PWM signálu SERVO1 v kroku 10 | | 0x014 | SERVOPS2_REG_PWM2_o | 23 .. 0 | Plnění PWM signálu SERVO2 v kroku 10 | | 0x018 | SERVOPS2_REG_PWM3_o | 23 .. 0 | Plnění PWM signálu SERVO3 v kroku 10 | | 0x01C | SERVOPS2_REG_PWM4_o | 23 .. 0 | Plnění PWM signálu SERVO4 v kroku 10 | Implementace periferie se nachází v adresáři [[https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/tree/refs/heads/microzed_apo:/system/ip/servo_led_ps2_1.0/hdl|/system/ip/servo_led_ps2_1.0/hdl]]. === PWM audio výstup === Sada registrů začíná na fyzické adrese AUDIOPWM_REG_BASE_PHYS ^ Ofset registru ^ Symbolické označení ^ Bity ^ Popis ^ | 0x000 | AUDIOPWM_REG_CR_o | 31 .. 0 | Řídicí registr periferie | | 0x008 | AUDIOPWM_REG_PWMPER_o | 23 .. 0 | Perioda PWM cyklu v kroku 10 ns | | 0x00C | AUDIOPWM_REG_PWM_o | 23 .. 0 | Plnění PWM signálu v kroku 10 | Implementace periferie se nachází v adresáři [[https://rtime.felk.cvut.cz/gitweb/fpga/zynq/canbench-sw.git/tree/refs/heads/microzed_apo:/system/ip/audio_single_pwm_1.0/hdl|/system/ip/audio_single_pwm_1.0/hdl]]. ==== Další periferie ==== === Uživatelské tlačítko na procesorovém modulu === Tlačítko je přivedené na pin PS_MIO51_501 SoC Zynq. V jádru Linux je pro MIO nastaven offset 906. Pro přístup k uživatelskému tlačítku je tedy potřeba přistupovat k GPIO pinu 957 (= 906 + 51). echo 957 > /sys/class/gpio/export cat /sys/class/gpio/gpio957/value === Uživatelská LED na procesorovém modulu === LED je přivedená na pin PS_MIO47_501 SoC Zynq. V jádru Linux je pro MIO nastaven offset 906. Pro přístup k uživatelské LED je tedy potřeba přistupovat k GPIO pinu 953. echo 953 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio953/direction echo 1 > /sys/class/gpio/gpio953/value ==== Odkazy ==== * [[https://www.youtube.com/watch?v=sNtlEysC0yA|GNU/Linux and FPGA in Real-time Control Applications]], přednáška [[https://installfest.cz/if17/|Installfest 2017]]. [[https://installfest.cz/if17/slides/so_t2_pisa_realtime.pdf|Prezentace ve formátu PDF]]. * [[https://rtime.felk.cvut.cz/hw/index.php/Zynq|Poznámky k SoC Zynq]] na stránkách s informacemi k používanému [[https://rtime.felk.cvut.cz/hw/|HW]] ve skupině [[http://industrialinformatics.fel.cvut.cz/|Průmyslové informatiky]] * [[http://industrialinformatics.fel.cvut.cz/students|Seznam projektů]] a témat dalších možných prací a spolupráce (návrhy témat diplomových a bakalářských prací, placené práce přes prázdniny atd.) * [[https://github.com/ppisa/zynq-rt-utils-and-builds|GIT repositář]] s konfigurací jádra [[https://www.kernel.org/|Linux]] a zavaděče [[http://www.denx.de/wiki/U-Boot/WebHome|U-boot]] s úpravami pro kyty MZ_APO