Tesi Robotica Algoritmi ed architetture per la risoluzione di... | Page 71
4.3. PROGRAMMER’S MANUALE: OVERVIEW
4.3
71
Programmer’s Manuale: Overview
Il flusso di esecuzione in LegUp è il seguente . In primo luogo , LLVM fronte
end clang prende il file. C e li compila in LLVM rappresentazione intermedia ,
memorizzata in un file di codice byte ( .bc ) . Questo codice byte può contenere
LLVM funzioni intrinseche , quali sono le funzioni che LLVM assume esiste nella
libreria C : memcpy , memset , e memmove . Queste funzioni non esistono in
hardware , in modo da sostituirli con funzioni che abbiamo scritto a mano .
Questo viene fatto con opt -legup -prelto e quindi il collegamento nelle nostre
versioni con LLVM -ld lib/intrinsics.a . Ora ci ritroviamo solo con LLVM IR
e non intrinseci . Ora passiamo questo codice LLVM -ld e ettuare ottimizzazioni di collegamento di tempo . Infine , passiamo il bytecode ottimizzato per
llc -march = v per eseguire il backend Verilog . Il flusso del backend Verilog
è il seguente . In primo luogo , il pass manager LLVM chiama LegupPass :
runOnModule ( ) . Questa funzione legge il file tcl cycloneII.tcl o stratixIV.tcl
a seconda