matite e gomma

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0

Validazione XHTML 1.0 Validazione CSS 3
Logo del Dipartimento di Matematica e Informatica, Insegnamento di Sistemi dedicati, link al Forum

Realizzazione su FPGA di un coprocessore multicore mappato in memoria

Esercitazione 12 di Sistemi dedicati

Docente: Giuseppe Scollo

Università di Catania
Dipartimento di Matematica e Informatica
Corso di Laurea Magistrale in Informatica, AA 2017-18

Indice

  1. Realizzazione su FPGA di un coprocessore multicore mappato in memoria
  2. argomenti dell'esercitazione
  3. flusso di lavoro del progetto
  4. progetto del coprocessore multicore
  5. interfaccia hardware del coprocessore
  6. mappa dei registri del coprocessore
  7. sistema Nios II con coprocessore e Performance Counter
  8. driver software
  9. programmi di test e misura delle prestazioni
  10. risultati delle misure di prestazioni
  11. riferimenti

argomenti dell'esercitazione

in questa esercitazione si trattano:

flusso di lavoro del progetto

fasi principali di sviluppo:

progetto del coprocessore multicore

produzione della descrizione VHDL del coprocessore multicore in due passi:

i rispettivi sorgenti delay_collatz.vhd e multicore_delay_collatz.vhd sono disponibili nella cartella vhdl dell'archivio allegato, nonché nella cartella VHDL/code/e12 dell'area riservata di laboratorio

il coprocessore è dotato dell'input core_select a n bit che codifica il core a cui smistare l'operazione di I/O, mentre gli output done dei core individuali sono esposti quale stato globale in una porta parallela di output a 2n bit

le cartelle vuote delay_collatz, mc_delay_collatz e mc_interface sono intese ospitare progetti di compilazione e simulazione dei suddetti sorgenti e di quello descritto appresso; cartelle omonime in tests forniscono rispettivi file di input per le simulazioni

interfaccia hardware del coprocessore

un'istanza del componente coprocessore multicore è incorporata nell'interfaccia Avalon memory-mapped descritta dal sorgente multicore_delay_collatz_avalon_interface.vhd e accede ai seguenti segnali del bus Avalon:

l'acquisizione dell'input a 64 bit per il coprocessore avviene dunque in due cicli di bus, perciò l'interfaccia deve memorizzare il dato ricevuto nel primo ciclo per poi concatenarlo a quello ricevuto nel secondo ciclo; ne consegue la classica struttura a due processi della descrizione:

d'altra parte, l'output a 32 bit del dato a 16 bit prodotto da un core del coprocessore ne richiede l'estensione con zeri, realizzata dall'interfaccia

la consultazione del sorgente multicore_delay_collatz_interface.vhd mostra le relazioni tra i segnali di I/O del componente di calcolo e i segnali all'interfaccia Avalon

mappa dei registri del coprocessore

la costruzione con Qsys del sistema Nios II con il componente coprocessore, simile a quella dell'esercitazione precedente, assegna al coprocessore un indirizzo base e, a partire da questo, un'area di memoria per i suoi registri di I/O

la seguente mappa dei registri indica anche i segnali del componente coprocessore individuati dai corrispondenti offset di registro, indicizzati dal valore di core_select in parentesi, dove k = 2n è il numero di core paralleli, e con la legenda :

ro segnale ao             ro segnale ao
0 x0(0)[31..0] 0   2k delay(0) 8k
1 x0(0)[63..32] 4     ...  
  ...     3k-1 delay(k-1) 12k-4
2(k-1) x0(k-1)[31..0] 8(k-1)   3k status 12k
2k-1 x0(k-1)[63..32] 8k-4        

sistema Nios II con coprocessore e Performance Counter

le successive fasi di sviluppo sono simili a quelle dell'esercitazione precedente:

la costruzione Qsys del sistema Nios II è più celere se effettuata come modifica del sistema Qsys dell'esercitazione precedente, dal quale si rimuove il componente delay_collatz_avalon_interface e gli si aggiunge un'istanza del nuovo componente multicore_delay_collatz_avalon_interface

driver software

gli script TCL per la generazione del driver software nel BSP del progetto, forniti nella cartella codesign/ip/multicore_delay_collatz_avalon_interface dell'archivio allegato, sono simili a quelli dell'esercitazione precedente

i sorgenti C del driver software, forniti nella cartella HAL allo stesso percorso, differiscono da quelli dell'esercitazione precedente nei seguenti aspetti:

programmi di test e misura delle prestazioni

i programmi di test e misura delle prestazioni forniti nelle cartelle codesign/amp* dell'archivio allegato calcolano il delay per 2M punti d'inizio a partire da X_BASE = 1128784494896128

in entrambe le versioni del test, il programma assegna al core j il calcolo del delay per i punti di inizio nella classe di congruenza j mod MDC_N_CORES, dunque per 2M/32 = 64K traiettorie (in media nella seconda versione); la differenza fra le versioni in codesign/amp_s* e quelle in codesign/amp_t* è la seguente:

i parametri di creazione dei progetti nel Monitor Program sono indicati nel file allegato MonitorNotes.txt

risultati delle misure di prestazioni

la compilazione, caricamento sulla FPGA ed esecuzione del programma sequential_multicore_delay_collatz_timing, nei due progetti codesign/amp_s e codesign/amp_s_o3 produce i Performance Counter Report in figura

Performance Report della versione sequenziale, ottimizzazione O1

Performance Report della versione sequenziale, ottimizzazione O3

seguono infine i Performance Counter Report dell'esecuzione del programma statustest_multicore_delay_collatz_timing, nei due progetti codesign/amp_t e codesign/amp_t_o3

Performance Report della versione status-tested, ottimizzazione O1

Performance Report della versione status-tested, ottimizzazione O3

riferimenti

materiali utili per l'esperienza di laboratorio proposta: