Download - 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

Transcript
Page 1: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

1 1

Sistemi Digitali M

03 – Hello LED

Stefano Mattoccia, DISI - University of Bologna

Page 2: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

Creazione periferiche (C/C++) e validazione (C/C++)

Design entry grafico

Sviluppo software C/C++ per uno specifico OS

Fasi di sviluppo di un progetto Zynq

Questa parte sarà oggetto della mggior parte delle prossime lezioni

Page 3: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

ARM Memory Controller

Custom Module (FPGA) (e.g., GPIO)

DDR

AXI Lite

Esempio: accensione LED mediante ARM

Consideriamo, per il momento una periferica già esistente in forma di IP Core denominata GPIO.

Page 4: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

DDR

GPIO AXI INT

Page 5: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

La memoria (esterna) e lo spazio di indirizzamento (32 bit) sono condivisi tra:

•  ARM Cortex A9_0

•  ARM Cortex A9_1

•  FPGA

Vi è un unico memory controller (all’interno del PS) e un unico spazio di indirizzamento per le memorie e le periferiche (sia ARM sia FPGA) che sono pertanto memory mapped tra:

0x00000000 -> 0xFFFFFFFF

La PL (FPGA), è connessa al controllore della memoria DDR mediante le porte High Performance HP 0, 1, 2, 3. Elevate prestazioni (GB/s) in lettura e scrittura

Zynq: spazio di indirizzamento

Page 6: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

0x00000000

0xFFFFFFFF

DDR

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

0x00100000

0x1FFFFFFF

GPIO 0x41200000

Page 7: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

Il progetto Vivado risultante per il controllo di 8 led mediante un IP core (GPIO) con interfaccia AXI lite è il seguente:

Ne progetto è stato inserito (automaticamente) un hub (AXI interconnect) nel caso si decidesse in futuro di utilizzare altre periferiche AXI lite. Inoltre, è stato inserito (automaticamente) un modulo per il controlle del reset del sistema (Processor System Reset).

Progetto Vivado

Page 8: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)

#include <stdio.h> #include "platform.h" #include "xil_io.h" #include <unistd.h> int main() { init_platform(); int c; useconds_t sleeping_time_us = 50000; printf("Hello LED\n"); for (c=0;c<=255;c++) { printf("Xil_Out start %d\n",c); Xil_Out8(0x41200000, c); printf("Xil_Out done, sleeping for %d us\n",sleeping_time_us); usleep(sleeping_time_us); } for (c=255;c>=0;c--) { printf("Xil_Out start %d\n",c); Xil_Out8(0x41200000, c); printf("Xil_Out done, sleeping for %d us\n",sleeping_time_us); usleep(sleeping_time_us); } cleanup_platform(); return 0; }

Codice ARM/SDK (Baremetal OS)

Page 9: 03 – Hello LEDvision.deis.unibo.it/~smatt/DIDATTICA/Sistemi_Digitali_M/PDF/03_He… · 03 – Hello LED Stefano Mattoccia, DISI - University of Bologna . Creazione periferiche (C/C++)