Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 13

i i “LP_Tesi” — 2011/9/9 — 21:20 — page 13 — #13 i i L’obbiettivo del progetto è quello di utilizzare questo nuovo tipo di approccio per sviluppare un’applicazione per sistema embedded che a partire da due immagini sia in grado di calcolare la mappa di disparità. Come è ben noto esistono vari tipi di sistemi special purpose, tra cui possiamo annoverare ASIC, Microcontrollori, FPGA, SoC ed MPSoC. La nostra scelta è ricaduta sugli FPGA. In elettronica digitale, un Field Programmable Gate Array, solitamente abbreviato in FPGA, è un circuito integrato digitale la cui funzionalità è programmabile via software. Si tratta di dispositivi standard la cui funzionalità da implementare non viene impostata dal produttore che quindi può produrre su larga scala a basso prezzo. La loro genericità li rende adatti a un gran numero di applicazioni in campo consumer, comunicazioni, militare, ecc. Sono programmati direttamente dall’utente finale, consentendo la diminuzione dei tempi di progettazione, di verifica mediante simulazioni e di prova sul campo dell’applicazione. Usualmente vengono programmati con linguaggi detti di descrizione Hardware (HDL) come il Verilog o il VHDL. Allo stato attuale questi possono essere considerati gli unici linguaggi, che nel mondo della progettazione e simulazione digitale arrivano insieme ad una quota di mercato pari a circa il 100%. Nell’ambito di questo lavoro, gli FPGA utilizzati però non sono stati programmati direttamente in uno di questi due linguaggi, si è preferito passare ad un livello di più alta astrazione. A questo scopo è stato utilizzato il linguaggio BSV (Bluespec SystemVerilog). BSV è un linguaggio simil-C++ ad alto livello per la descrizione Hardware. Pensandoci bene il passo fatto da HDL a BSV è molto simile al passo eseguito molto tempo fa quando venne scritto il primo compilatore permettendo così il passaggio da un codice di basso livello (Assembler) ad un codice di più alto livello compilato (C per esempio). Il linguaggio BSV può essere compilato in due modi completamente diversi: • Nel primo modo si ottiene del codice effettivamente in C++ timing driven, che compilato ulteriormente genera dei veri e propri eseguibili che tramite alcune chiamate di sistema presenti in BSV permettono di stampare a schermo il contenuto di variabili, registri e stringhe durante la simulazione; • Nel secondo si ottiene del codice in Verilog (anche questo simulabile) che attraverso il meccanismo di sintesi può essere usato per programmare un FPGA. In questo modo senza avere la benché minima idea su come sia strutturato il Verilog si è in grado di programmare un FPGA dopo un periodo di training 13 i i i i