Embedded and Reconfigurable Systems M 01 – Introduzione 1 Contatti Docente: : Stefano Mattoccia Telefono : +39 051 2093860 Email : [email protected] Sito web : www.vision.disi.unibo.it/smatt Ricevimento : a richiesta via email o in aula 2 Obiettivi del corso • Introdurre metodologie per la progettazione di sistemi embedded con architetture basate su CPU multicore ARM + FPGA • mediante l’utilizzo di linguaggio C/C++ • nel contesto applicativo della embedded computer vision ma ovviamente applicabile ad altri scenari • ampio spazio alla sperimentazione con evaluation board e periferiche (telecamere, IMU, etc) • possibilità di svolgere l’attività progettuale • i linguaggi per Hardware Description Language come VHDL o Verilog NON saranno considerati Modalità d esame • L esame consiste nella valutazione di un progetto e di una relazione su un tema (a scelta) risolto con uno degli strumenti presentati nel corso • Il progetto può essere svolto in gruppo (al massimo due studenti) e deve essere prima concordato • Nella valutazione sarà considerato sia il grado di difficoltà del problema affrontato sia la soluzione proposta per risolvere il problema • La valutazione è individuale (così come il voto) e sarà eseguita una volta terminato il progetto • Nelle fasi iniziali lo sviluppo dei progetti sarà in parte svolto in aula durante l orario di lezione • Le tematiche per progetti sono varie e saranno evidenziate nel corso delle lezioni Attività progettuale • E possibile svolgere l attività progettuale • estendendo/ampliando il progetto che è stato sviluppato per l’esame (soluzione consigliata) • ovviamente è anche possibile svolgere l’attività progettuale su una tematica differente rispetto al progetto dell’esame • La valutazione dell’attività progettuale avviene attraverso la stessa metodologia già descritta per l’esame (valutazione individuale con gruppi di non più di 2 studenti) • Nell’ambito del corso sono previsti dei seminari Strumenti di sviluppo • Framework di sviluppo Vivado HL Webpack + SDK 2016.2 disponibile per Windows e Linux www.xilinx.com • Evaluation board Zedboard e Microzed http://zedboard.org/product/zedboard http://zedboard.org/product/microzed • Sensori di immagini mono e stereo • Schede di espansione per interfacciamento con sensori (IMU, sensori di temperatura, motori passo passo, etc) Materiale didattico • Lucidi proiettati a lezione, codice, etc condiviso mediante Dropbox • The Zynq Book: Embedded Processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 SoC L.Crockett, R.Elliot, M.Enderwitz,R.Stewart Strathclyde Academic Media 2014 Liberamente disponibile: http://www.zynqbook.com/ • The MicroZed Chronicles Adam Taylor Liberamente disponbile: https://drive.google.com/file/d/0B-lgsbmVeytsY3hQdi01elBDZm8/view?pli=1 • Application notes Alcune considerazioni Il settore dei sistemi embedded è in forte crescita in ambito industriale e di ricerca Molte soluzioni, anche in puro ambito industriale,sono caratterizzate da vincoli di ridotti consumi, costi, ingombri, peso ed elevate prestazioni. In ambito accademico/ricerca esistono conferenze e workshop in questo specifico ambito. Per esempio: IEEE Embedded vision: http://cvisioncentral.com/promotion/evw2016/ Reconfigurable computing: http://www.reconfig.org/ Hardware design (gratuito e a Bologna nel 2016): http://orconf.org/ Contesto applicativo di riferimento CPU Monochrome • VGA (0.3MP) 640x480@30fps : 9+ MP/s • VGA (0.3 MP 640x480@60fps : 18+ MP/s • 720p (0.9 MP) 1280x720@60fps : 55+ MP/s • 1080p (2 MP) 1920x1080@60fps : 124+ MP/s • UHD 3840x2160@60fps : 497+ MP/s (8 MP) • ...... Prestazioni 1/2 Processing GPU CPU FPGA Esistono anche architetture custom specializzate per alcuni specifici campi applicativi. Ad esempio, nel contesto della computer vision, www.movidius.com recentemente acquisita da Intel. Prestazioni 2/2 Processing CPU CPU (ARM) FPGA + CPU I due maggiori produttori di FPGA con processori multicore ARM integrati sono: • Xilinx www.xilinx.com • Altera www.altera.com (recentemente acquisita da Intel) Consumi In molti contesti applicativi non solo le prestazioni ma anche i consumi sono un fattore critico. Sebbene esistanto GPU per il settore embedded/mobile, a tal proposito si consideri le GPU Mali nel caso ARM, le maggiori prestazioni si ottengono con GPU connesse al PC (maggiori produttori NVidia e AMD). Per esempio, un NVidia Titan X, molto utilizzata in ambito scientifico ha un consumo di 250 W. Una FPGA può avere consumi inferiori a 1 W e una FPGA con un processore ARM integrato può consumare 5/10 W. Prestazioni/Consumi La valutazione in molti casi è eseguita valutando il rapporto tra prestazioni e consumi mediante il seguente indicatore: Performance/Watt Le FPGA sono la soluzione ottimale in molti casi in accordo a questo indicatore. Il motivo? L architettura è (quasi) completamente definita dal progettista (voi) e le frequenze operative sono molto più basse rispetto a quelle impiegate nelle GPU (con un architettura già complemente definite). Per una FPGA le frequenze tipiche sono dell ordine della decina o centinaia di MHz mentre per una GPU sono tipicamente dell ordine di alcuni GHz. Peso, ingombro, etc sono fattori altrettanto rilevanti. Si pensi al settore dei dispositivi wearable. Soft-core Sulle FPGA possono essere mappati, sulla logica riconfigurabile, dei microprocessori denominati soft-core. Esempi di soft-core sono: • DLX – RISC a 32 bit (progetto con studenti) • Microblaze – RISC a 32 bit (Xilinx) • Picoblaze – Processore RISC 8 bit (Xilinx) E ovviamente possibile configurare la FPGA con più processori (anche indipendenti tra loro) in base a specifiche esigenze. 15 Hard-core I soft-core sono certamente molto utili e possono essere configurati in modo ottimale per adattarsi a esigenze specifiche. Inoltre, il loro upgrade a FPGA più potenti, o di generazioni successive, è immediato. Tuttavia, i soft-core hanno due svantaggi: - sottraggono risorse alla FPGA (CLB, BRAM, etc) - la loro frequenza operativa è limitata dalla logica riconfigurabile (alcune centinaia di MHz) Per questo motivo, i principali produttori di FPGA (e.g. Xilinx e Altera) hanno recentemente progettato dispositivi che, sullo stesso die, integrano la logica riconfigurabile (FPGA) e CPU (tipicamente ARM con Linux) denominati hard-core (core fisici). 16 Zynq 1/3 Tra i dispositivi dotati di logica riconfigurabie (FPGA) e hard-core (ARM) più interessanti al momento, troviamo ZYNQ 7000 (Xilinx): http://www.xilinx.com/support/documentation/data_sheets/ds190-Zynq-7000-Overview.pdf Dual Core Cortex A9 FPGA AXI AXI AXI 17 Zynq 2/3 Specifiche della sezione con hard-core: - 2X CPU ARM Cortex A9 (architettura ARM v7-A) - Cache L1, per data e cache, 32 KB - Cache L2, unificata tra i due core, da 512 KB - ROM per il boot - 256 KB di RAM on chip - Interfaccia per memorie esterne (DDR2,DDR3,etc) - DMA Controller a 8 canali Bus AXI e altri bus Ethernet 10/100/1000 Gb Ethernet USB controller etc 18 Zynq 3/3 Per quanto riguarda la parte di logica riconfigurabile, le specifiche sono equivalenti a quelle della serie 7 delle FPGA Xilinx. Il sistema operativo di riferimento per lo ZYNQ è Linux (architettura pienamente supportata dal kernel Linux). E possibile progettare delle proprie periferiche nella logica riconfigurabile (e poi scriversi i driver per il sistema operativo...). Una ulteriore cosa interessante dell architettura ZYNQ è che al boot si avvia uno dei core ARM. Questa consente di configurare Linux e la parte configurabile ad ogni avvio in modo sicuro. Esiste la possibilità di emulare un dispositivo ZYNQ medante un emulatore software (QEmu per Linux). 19 Architettura Zynq 7000 http://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html Nuova generazione: Ultrascale+ MPSoC • • • • 2 o 4 core Cortex A53 (architettura ARM a 64 bit) 2 core Cortex R5 (real-time) Encoding/Decoding H264/H265 ..... https://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html Base di partenza: pipeline di CV In questo corso, si esaminerà una pipeline di computer vision interamente sviluppata in C/C++ con algoritmi mappati su FPGA Zynq 7000: Standalone, Linux,RTOS VGA Libreria LWIP DDR Zynq Programming 1 Gb Ethernet I2C OV 7670 Connessioni con protocolli AXI OpenCV App Possibili estensioni • Mapping in C/C++ di algoritmi di CV su FPGA • Utilizzo della libreria OpenCV su FPGA • Interfacciamento con IMU o altri dispositivi per tagging di immagini (per SLAM/Visual Odometry) • Sviluppo di driver per Linux o altri OS per gestione perferiche FPGA (interrupt, memoria condivisa) • Miglioramento del sistema (trasmissione, App OpenCV) • Utilizzo di altri sensori di immagine • ...... • Progetto guida robot? • Progetto laser scanner 3D? • Deep-learning? • Altre idee?