Tato stránka obsahuje podrobný popis hardware a periferií připravených pro cvičení a semestrální úlohy. Návody jak se se k přípravku připojit naleznete na stránce Nápověda k práci s přípravkem MicroZed APO.
Rozhraní přístupná přímo na desce MicroZed
tlačítko a reset tlačítko
Na výukovém modulu jsou vyvedené v logickém návrhu obsloužené následující periferie
Kompletní mechanický návrh a návrh elektroniky kitu je k dispozici v GIT repozitáři https://gitlab.com/pikron/projects/mz_apo/microzed_apo
Pro zobrazení a editaci mechanického návrhu je potřeba nainstalovat program FreeCAD https://freecadweb.org/
Pro zobrazení a editaci schémat a pložného spoje pak návrhový systém Ing. Petra Porazila - PEDA https://sourceforge.net/projects/peda/
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) |
0x43c20000 | 0x4000 | DCSPDRV_REG_BASE_PHYS_0 | Periferie pro řízení prvního stejnosměrného motorku |
0x43c30000 | 0x4000 | DCSPDRV_REG_BASE_PHYS_1 | Periferie pro řízení druhého stejnosměrného motorku |
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 /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 spi_leds_and_enc_v1_0_spi_fsm_inst komponenty spi_leds_and_enc_v1_0_spi_fsm. O realizaci sady registrů připojených k CPU sběrnicí AXI se pak stará komponenta 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.
K vývojovému kitu je připojený grafický displej s lokálním řadičem, který se stará o obnovování obrazu na TFT LCD display s rozměry 480 x 320 bodů.
Řadič přijímá příkazy zapisované na 16-bitovou bránu mapovanou do fyzického paměťového prostoru na adresu 0x43c00008 (PARLCD_REG_BASE_PHYS+PARLCD_REG_CMD_o).
Většina příkazů pak vyžaduje pro provedení vlastní operace zapsání dat. Data je potřeba zapsat na adresu 0x43c0000c (PARLCD_REG_BASE_PHYS+PARLCD_REG_DATA_o).
Příklady práce s LCD naleznete na stráce cvičení 09.
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 /system/ip/display_16bit_cmd_data_bus_1.0/hdl.
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 /system/ip/servo_led_ps2_1.0/hdl.
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 /system/ip/audio_single_pwm_1.0/hdl.
Tato periferie byla původně navržená pro předmět Programování systémů reálného času (B3M35PSR, B4B35PSR). Do FPGA návrhu pro předmět Architektura počítačů je zahrnutá volitelně.
Návrh periferie je zahrnutý dvakrát. Jednou pro připojení výkonového stupně a odečtu polohy ke konektoru PMOD1, pro který jsou registry mapované od adresy DCSPDRV_REG_BASE_PHYS_0 a podruhé pro motor připojený přes konektor PMOD2, bázvá adresa DCSPDRV_REG_BASE_PHYS_1.
Ofset registru | Symbolické označení | Bity | Popis |
---|---|---|---|
0x0000 | DCSPDRV_REG_CR_o | 31 .. 0 | Řídicí registr periferie |
4 | Přímé řízení výstupu PWMA | ||
5 | Přímé řízení výstupu PWMB | ||
6 | Povolit výstup PWM podle plnění a periody | ||
8 | Vynulování načítané polohy v IRC | ||
0x0004 | DCSPDRV_REG_SR_o | 31 .. 0 | Stavový registr periferie |
8 | Logická úroveň na pinu IRCA | ||
9 | Logická úroveň na pinu IRCB | ||
10 | Logická úroveň na pinu IRC IRQ | ||
0x0008 | DCSPDRV_REG_PERIOD_o | 31 .. 0 | Nastavení periody PWM po 10 ns (100 MHz) |
29 .. 0 | Nastavení délky PWM (vhodných 5000, 20 kHz) | ||
0x000C | DCSPDRV_REG_DUTY_o | 31 .. 0 | Regist pro nasvaneí požadované úrovně plnění PWM, jednotka 10 ns |
29 .. 0 | Maska implementovaných bitů, nastavení délky pulsu/plnění v periodě | ||
30 | Volba směru aplikace napětí na motor | ||
31 | Volba napětí pro opačný směr otáčení | ||
0x0010 | DCSPDRV_REG_IRC_o | 31 .. 0 | Napočítaný počet inkrementů/poloha/natočení motoru |
Implementace periferie se nachází v adresáři /system/ip/dcsimpledrv_1.0/hdl.
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
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