4/12/98Cristina Silvano - CEFRIEL1 Il problema dello scheduling Cristina Silvano CEFRIEL - Politecnico di Milano Electronic Design Automation (EDA) Area Via Fucini 2, I Milano (Italy) Ph.: Fax:
4/12/98Cristina Silvano - CEFRIEL2 Introduzione Obiettivo: assegnare le operazioni del DFG ai passi di controllo in modo da minimizzare una data funzione obiettivo e al tempo stesso soddisfare un insieme di vincoli imposti. La funzione obiettivo può includere il numero di passi di controllo, il ritardo, il consumo di potenza, le risorse hardware. Vincoli per sistemi sincroni: ogni modulo può essere utilizzato solo una volta durante un singolo passo di controllo. Entro un passo di controllo per eseguire ogni operazione si deve utilizzare una corrispondente e separata unità funzionale. Un passo di controllo corrisponde ad uno stato della FSM controllante.
4/12/98Cristina Silvano - CEFRIEL3 Introduzione (cont.) Il numero totale di unità funzionali richieste in un passo di controllo corrisponde direttamente al numero di operazioni previste (scheduled) nel passo. Realizzazione con pochi passi di controllo (più veloce) implica che in ogni passo di controllo siano attive più unità funzionali distinte (richiede più area). Realizzazione con riduzione del numero di operazioni in ogni passo di controllo minor costo (richiede meno area) ma un numero di passi di controllo più alto (più lenta). Lo scheduling implica quindi un bilancio fra costi e prestazioni.
4/12/98Cristina Silvano - CEFRIEL4 Introduzione (cont.) Il numero di passi di controllo può essere ulteriormente ridotto eseguendo operazioni ordinate nello stesso passo di controllo (chaining delle operazioni). Il bilancio non è solo fra il numero di passi di controllo e il numero di risorse hardware, ma coinvolge anche la lunghezza del passo di controllo. Se si ricorre al chaining per ridurre il numero di passi di controllo, la lunghezza del passo di controllo (cioè il numero di operazioni che devono essere compiute in serie dalla logica combinatoria) aumenta, e quindi aumenta il tempo di ciclo. Si suppone che le varie fasi di esecuzione non si sovrappongano, cioè si è escluso il pipelining.
4/12/98Cristina Silvano - CEFRIEL5 Assunzioni Le descrizioni comportamentali non contengono costrutti condizionali o cicli. Ogni operazione può essere eseguita esattamente in un passo di controllo. Ogni tipo di operazione può essere eseguita da un solo tipo di unità funzionale. Si fa riferimento ad un clock ad una sola fase e all’uso di registri master-slave.
4/12/98Cristina Silvano - CEFRIEL6 Possibili strategie Si assume assegnata una libreria di unità funzionali e registri con caratteristiche note e definita la lunghezza del passo di controllo. Approcci time-constrained o fixed-latency: minimizzano il numero di risorse rispettando un vincolo relativo al massimo numero dei passi di controllo. Approcci resource-constrained: minimizzano il numero di passi di controllo rispettando un vincolo relativo al numero di risorse massime disponibili (in termini di unità funzionali e registri).
4/12/98Cristina Silvano - CEFRIEL7 Notazione Gli algoritmi di scheduling operano su grafi di flusso dei dati (Data Flow Graph - DFG) nei quali: Ogni vertice v i rappresenta un’operazione o i nella corrispondente descrizione comportamentale; Esiste un lato orientato e ij da v i a v j se i dati prodotti dall’operazione o i vengono consumati dall’operazione o j v i è un predecessore immediato di v j ; Ogni operazione o i può essere eseguita in D i passi di controllo: per il momento si assume D i = 1.
4/12/98Cristina Silvano - CEFRIEL8 Slide 7.6
4/12/98Cristina Silvano - CEFRIEL9 Estrazione del DFG Per estrarre il DFG corrispondente ad una descrizione comportamentale occorre rilevare che: Gli operatori ammessi sono esclusivamente operatori elementari ad uno o due operandi le espressioni complesse vanno spezzate nella composizione di più operazioni elementari; In tutti i casi in cui non esistono dipendenze di dati le operazioni possono essere eseguite in parallelo da nodi indipendenti.
4/12/98Cristina Silvano - CEFRIEL10 Vincoli di dipendenza dei dati nel DFG Sia Pred_v i = insieme dei nodi immediati predecessori di v i Pred_v 1 = Ø Pred_v 2 = Ø Pred_v 3 = Ø Pred_v 4 = Ø Pred_v 5 = {v 1, v 2 } Pred_v 6 = {v 3 } Pred_v 7 = {v 5 } Pred_v 8 = {v 6, v 7 } Pred_v 9 = {v 4 } Pred_v 10 = Ø Pred_v 11 = {v 10 }
4/12/98Cristina Silvano - CEFRIEL11 Algoritmi di scheduling IL DFG mette in rilievo il parallelismo presente nel progetto: esiste quindi una certa flessibilità nell’associare un nodo del DFG ad uno specifico passo di controllo. Alcuni algoritmi di scheduling valutano i limiti estremi entro i quali un’operazione può essere assegnata. Algoritmo As Soon As Possible (ASAP): dopo aver ordinato le operazioni in base alle dipendenze dei dati, ogni operazione viene assegnata al primo passo di controllo disponibile. Algoritmo As Late As Possible (ALAP): dopo aver ordinato le operazioni in base alle dipendenze dei dati, ogni operazione viene assegnata all’ultimo passo di controllo disponibile.
4/12/98Cristina Silvano - CEFRIEL12 Algoritmo ASAP for each node v i V do if Pred_v i = Ø then E i = 1; V = V - {v i }; else E i =0; endif; endfor; while V Ø do for each node v i V do if ALL_NODES_SCHED ( Pred_v i, E ) then E i = MAX ( Pred_v i, E ) + 1; V = V - {v i }; endif; endfor; endwhile;
4/12/98Cristina Silvano - CEFRIEL13 Algoritmo ASAP L’algoritmo assegna un’etichetta ASAP (cioè l’indice del passo di controllo) E i a ogni node del DFG, assegnando così la corrispondente operazione al primo passo di controllo possibile. La funzione ALL_NODES_SCHED restituisce valore vero se tutti gli immediati predecessori di v i sono stati assegnati ad un passo di controllo ( hanno quindi un’etichetta E non nulla). La funzione MAX fornisce l’indice del nodo con il massimo valore di E fra gli immediati predecessori di v i. Il ciclo for dell’algoritmo assegna tutti i nodi che non hanno predecessori allo stato s 1 e gli altri nodi allo stato s 0 (indeterminato). Ad ogni iterazione, il ciclo while determina quali nodi abbiano tutti i predecessori già assegnati e li assegna al primo stato possibile. Il calcolo viene fatto incrementando di 1 il valore restituito dalla funzione MAX perché si ipotizza che ogni operazione abbia un ritardo di un passo di controllo.
4/12/98Cristina Silvano - CEFRIEL14 Slide 7.9
4/12/98Cristina Silvano - CEFRIEL15 Algoritmo ALAP Algoritmo duale rispetto al precedente: per ogni nodo calcola l’ultimo stato cui può essere assegnato. Si assegnano innanzitutto i nodi che non hanno successori ( e che vanno assegnati sicuramente nell’ultimo stato possibile) e poi si risale con gli stati i cui successori hanno tutti trovato un assegnamento.
4/12/98Cristina Silvano - CEFRIEL16 Confronto algoritmi ASAP e ALAP Fissato lo scheduling, si calcola il numero di unità funzionali necessarie per realizzare il progetto: il numero massimo di operazioni in un qualsiasi stato indica il numero di unità funzionali per quel particolare tipo di operazione. Per la soluzione ASAP occorrono: 4 moltiplicatori, 1 addizionatore/sottrattore e 1 comparatore. Per la soluzione ALAP occorrono: 2 moltiplicatori, 1 addizionatore, 1 sottrattore e 1 comparatore. Nell’esempio considerato: La versione ALAP è meno costosa in termini di risorse. Il numero di passi di controllo richiesto dalle due soluzioni è identico (pari a 4) e pertanto le prestazioni ottenute sono uguali. In generale gli algoritmi ASAP e ALAP non forniscono risultati ottimi sotto il profilo delle prestazioni (cioè non minimizzano il numero di passi di controllo), ma sono facili da realizzare.
4/12/98Cristina Silvano - CEFRIEL17 Mobilità degli operatori Siano s Ek e s Lk i passi di controllo ai quali è stata assegnata l’operazione o k rispettivamente con gli algoritmi ASAP e ALAP. Chiaramente E k L k cioè o k deve iniziare l’esecuzione in un passo di controllo che non può precedere s Ek e non può seguire s Lk. Numero dei passi di controllo tra s Ek e s Lk = mobility range dell’operazione o k m_range (o k ) = {s j | E k j L k } Ad esempio: m_range (o 4 ) = {s 1, s 2, s 3 } dati E 4 = 1 e L 4 = 3
4/12/98Cristina Silvano - CEFRIEL18 Slide 7.12 senza il titolo
4/12/98Cristina Silvano - CEFRIEL19 Algoritmi di scheduling ASAP ALAP Algoritmi TIME-CONSTRAINED: minimizzano il numero di risorse fissato il numero di passi di controllo Integer Linear Programming (ILP) Force-Directed Scheduling ( Euristica costruttiva senza back-tracking) Iterative Refinement (Raffinamenti iterativi) Algoritmi RESOURCE-CONSTRAINED: minimizzano il numero di passi di controllo fissato il numero di risorse List-Based Scheduling Static-List Scheduling
4/12/98Cristina Silvano - CEFRIEL20 Algoritmi Time-Constrained Importanti per sistemi dedicati ad applicazioni real-time Obiettivo: minimizzare il numero di risorse richieste (area), fissato il numero di passi di controllo. Tecniche: Programmazione matematica (ILP): conduce alla soluzione ottima, ma a costo di un’elevata complessità computazionale. Euristiche costruttive (Force-Directed Scheduling): non garantiscono l’ottimalità della soluzione. Metodi iterativi: migliorano la qualità di uno scheduling generato con un algoritmo qualunque.
4/12/98Cristina Silvano - CEFRIEL21 Metodo della Programmazione Intera Lineare (ILP) Questo metodo trova una soluzione ottima mediante ricerca branch- and-bound che coinvolge del back-tracking: alcune decisioni prese nei passi iniziali possono essere riesaminate man mano che la ricerca prosegue. Notazione usata: OP = { o i | 1 i n } insieme delle operazioni nel DFG; t i = tipo dell’operazione o i ; T = { t k | 1 i m } insieme dei possibili tipi; OP tk = operazioni in OP di tipo t k ; INDEX tk = insieme degli indici di operazioni in OP tk ; N tk = numero di unità che compiono operazioni di tipo t k ; C tk = costo unità di tipo t k ; S = { s j | 1 j r } insieme dei passi di controllo disponibili per lo scheduling delle operazioni; x ij variabili logiche ( = 1 se l’operazione o i è prevista per il passo j).
4/12/98Cristina Silvano - CEFRIEL22 Metodo della Programmazione Intera Lineare (ILP) Formulazione ILP del problema di scheduling: Min k=1,…, m (C tk N tk ) i, 1 i n, ( Ej j Lj x ij =1) j, 1 j r, k, 1 k m, ( j INDEXtk x ij N tk ) i, j, oi Pred_oj ( Ei k Li ( k x jk ) - Ei l Li ( l x jk ) - 1)
4/12/98Cristina Silvano - CEFRIEL23 Metodo della Programmazione Intera Lineare (ILP) La funzione obiettivo minimizza il costo totale delle unità funzionali necessarie: La prima condizione richiede che ogni operazione sia eseguita in uno e un solo passo di controllo fra i limiti imposti dagli algoritmi ASAP e ALAP; la seconda condizione garantisce che in nessun passo di controllo compaiano più di N tk operazioni di tipo t k ; La terza garantisce che tutti i predecessori di una qualsiasi operazione vengano eseguiti in un passo di controllo precedente. Nell’esempio occorrono 4 tipi di unità funzionali (un moltiplicatore un addizionatore, un sottrattore e un comparatore). La formulazione del problema di assegnare il DFG su 4 passi di controllo diventa: min ( C m N m + C a N a + C s N s + C c N c ) Soluzione ottenuta supponendo che addizionatori, sottrattori e comparatori abbiano costo pari a 1 e moltiplicatori costo pari a 2.
4/12/98Cristina Silvano - CEFRIEL24 Metodo della Programmazione Intera Lineare (ILP) Il costo dell’algoritmo cresce molto rapidamente con il numero delle variabili e dipende dalla struttura del DFG. Metodo computazionalmente molto costoso. Si usano delle varianti in cui si elimina il back-tracking sostituendo delle euristiche che assegnano le operazioni una alla volta invece di tentare un assegnamento simultaneo.
4/12/98Cristina Silvano - CEFRIEL25 Es slide 7.16
4/12/98Cristina Silvano - CEFRIEL26 Force-Directed Scheduling Obiettivo: ridurre il numero totale di unità funzionali usate, e viene ottenuto distribuendo le operazioni dello stesso tipo uniformemente in tutti gli stati disponibili. Tale distribuzione garantisce che le unità funzionali allocate in un passo di controllo vengano usate in modo efficiente in tutti gli altri passi di controllo porta ad un miglior rapporto di utilizzazione. Si parte dal calcolo del mobility range per ogni operazione. Si assume che ogni operazione o i abbia probabilità uniforme di essere assegnata ad un qualunque passo del campo ammissibile e probabilità zero di essere assegnata a qualsiasi altro passo di controllo. Per uno stato s j tale che E i j L i, la probabilità che l’operazione o i sia assegnata allo stato s j è data da: p j (o i ) = 1 / (L i - E i + 1)
4/12/98Cristina Silvano - CEFRIEL27 Force-Directed Scheduling (cont.) Rappresentando per ogni tipo di operatore la probabilità con dei rettangoli la cui ampiezza è proporzionale al valore per lo stato corrispondente, si costruisce un diagramma a barre che rappresenta il costo previsto per l’operatore (EOC) nel rispettivo stato. Per lo stato s j il costo dell’operatore ti tipo k è dato da: EOC jk = c k i, sj mrange (oi) p j (o i ) dove o i è un’operazione di tipo k, c k è il costo dell’unità funzionale che la esegue. Esempio: EOC 1, mult = c mult (p 1 (o 1 ) + p 1 (o 2 ) + p 1 (o 3 ) + p 1 (o 4 ) ) = c mult ( ) = c mult 2.83
4/12/98Cristina Silvano - CEFRIEL28 Slide 7.20
4/12/98Cristina Silvano - CEFRIEL29 Force-Directed Scheduling (cont.) A questo punto si cerca di bilanciare il valore di EOC per tutti i tipi di operazione. Ad ogni operazione si calcola il costo per assegnare ogni operazione non ancora assegnata entro il suo campo. Una volta assegnata un’operazione ad un passo di controllo, non si modifica più l’assegnamento effettuato (no back-tracking). Esempio: Si assegna o 3 al passo s 2 e si minimizza l’EOC per la moltiplicazione (Max (p j ) scende da 2.83 a 2.33) e si ottiene il nuovo diagramma a barre per la moltiplicazione.
4/12/98Cristina Silvano - CEFRIEL30 Slide 7.21
4/12/98Cristina Silvano - CEFRIEL31 Force-Directed Scheduling (cont.) Ad ogni iterazione dell’algoritmo si assegna un’operazione ad un passo di controllo. L’algoritmo si dice costruttivo perché costruisce una soluzione senza mai fare back-tracking. Il risultato può non essere ottimo: si può raffinare il suo valore ricorrendo a tecniche di raffinamento iterativo in cui si ammette di riassegnare un’operazione già assegnata sulla base di opportune strategie.
4/12/98Cristina Silvano - CEFRIEL32 Slide 7.23
4/12/98Cristina Silvano - CEFRIEL33 Algoritmi Resource-Constrained Importanti per sistemi con vincoli in area o consumo di potenza. Obiettivo: minimizzare il numero di passi di controllo (prestazioni) entro il vincolo di risorse assegnate. Si costruisce uno scheduling assegnando un’operazione per volta, in modo da non superare i vincoli di risorse e non violare le dipendenze dai dati. I vincoli sulle risorse si soddisfano garantendo che il numero totale di operazioni assegnate ad un passo di controllo non superi i vincoli imposti. I vincoli di dipendenza possono essere verificati garantendo che tutti i predecessori di un nodo siano stati assegnati prima di assegnare il nodo. Tecniche: List-Based Scheduling Static-List Scheduling
4/12/98Cristina Silvano - CEFRIEL34 List-Based Scheduling Generalizzazione dell’algoritmo ASAP: in assenza di vincoli sulle risorse produce gli stessi risultati. L’algoritmo mantiene una lista di nodi ready, cioè dei nodi i cui predecessori siano già stati assegnati. Ad ogni iterazione si assegnano le operazioni all’inizio della lista fino a quando le risorse disponibili in quello stato non sono esaurite. La lista viene ordinata secondo una funzione di priorità, che risolve possibili conflitti sull’uso di una risorsa. L’assegnamento di un’operazione ad un passo di controllo può rendere ready operazioni che non lo erano e che vengono inserite nella lista secondo il loro livello di priorità. Si mantiene un a lista PList per ogni tipo di operatore contenente i nodi ready, cioè i nodi con predecessori già assegnati (al primo passo nella lista ci sono solo i nodi senza predecessori). La mobilità costituisce una buona funzione di priorità.
4/12/98Cristina Silvano - CEFRIEL35 Slide 7.12
4/12/98Cristina Silvano - CEFRIEL36 List-Based Scheduling (cont.) Prima iterazione: nella lista dei nodi ready ci sono solo i nodi corrispondenti ad operazioni senza predecessore: o 1, o 2, o 3, o 4, o 10 che vengono inserite nella lista delle diverse operazioni secondo la funzione di priorità: Plist * : 1, 2, 3, 4 Plist + : 10 Plist - : NIL Plist < : NIL L’unica addizione o 10 viene assegnata al passo s 1, mentre nell’ipotesi di avere disponibili solo due moltiplicatori si assegnano ad s 1 le operazioni o 1 e o 2 che hanno mobilità più bassa e quindi priorità più alta.
4/12/98Cristina Silvano - CEFRIEL37 Slide 7.13
4/12/98Cristina Silvano - CEFRIEL38 List-Based Scheduling (cont.) Seconda iterazione: nella lista dei nodi ready si aggiungono o 5 e o 11 i cui nodi predecessori sono stati tutti assegnati e si tolgono i nodi assegnati al passo precedente. Le operazioni presenti nella lista vengono riordinate secondo la funzione di priorità: Plist * : 5, 3, 4 Plist + : NIL Plist - : NIL Plist L’unico confronto o 11 viene assegnata al passo s 2, mentre nell’ipotesi di avere disponibili solo due moltiplicatori si assegnano ad s 2 le operazioni o 5 e o 3 che hanno mobilità più bassa e quindi priorità più alta. In totale nell’esempio servono 4 iterazioni.
4/12/98Cristina Silvano - CEFRIEL39 Slide 7.14
4/12/98Cristina Silvano - CEFRIEL40 Rilascio delle ipotesi semplificatrici In particolare si ammettono ora: Unità funzionali con tempi di esecuzione diversi; Unità multi-funzione; Descrizioni comportamentali che non si limitino a codice lineare.
4/12/98Cristina Silvano - CEFRIEL41 Unità funzionali con ritardi diversi Le unità funzionali reali spesso hanno ritardi diversi, dipendenti dal loro progetto e dalla loro complessità. Non si può quindi supporre che qualsiasi operazione venga completata in un solo passo di controllo: tale ipotesi porterebbe a usare un periodo di clock troppo lungo per ospitare l’operazione più lenta. Si deve ammettere che esistano unità funzionali con ritardo variabile e che queste non vengano più eseguite in un solo ciclo di clock. Unità funzionali con ritardi variabili: Multicycling Chaining Pipelining
4/12/98Cristina Silvano - CEFRIEL42 Slide 7.25
4/12/98Cristina Silvano - CEFRIEL43 Multicycling Si dimensiona il ciclo di clock sulla durata dell’operazione più veloce. Le operazioni più lunghe (operazioni multiciclo) richiedono allora due o più passi di controllo. Occorre introdurre latch d’ingresso sul fronte delle unità multiciclo per conservare gli operandi fino a che i risultati non siano disponibili diversi cicli più avanti.
4/12/98Cristina Silvano - CEFRIEL44 Chaining L’aumento del numero di passi di controllo richiede una maggiore complessità dell’unità di controllo. Un’alternativa per aumentare l’utilizzazione delle unità funzionali consiste nel consentire che due o più operazioni vengano eseguite ordinatamente in serie in un solo passo: chaining. Tale approccio richiede collegamenti diretti fra le unità funzionali oltre a quelli già esistenti fra registri e unità funzionali.
4/12/98Cristina Silvano - CEFRIEL45 Pipelining Per aumentare il parallelismo di esecuzione si può ricorrere al pipelining: quando si usa un’unità dotata di pipelining, lo scheduler deve calcolare in modo diverso le risorse richieste. Si consideri l’impiego di un moltiplicatore pipelined a due stadi per eseguire due moltiplicazioni consecutive. Le due moltiplicazioni possono condividere lo stesso moltiplicatore perché ognuna usa un diverso stadio del moltiplicatore e quindi risulta sufficiente un solo moltiplicatore invece di due.
4/12/98Cristina Silvano - CEFRIEL46 Unità multi-funzionali Le unità multi-funzionali costano in genere meno di un insieme di unità ognuna a funzione singola che coprano lo stesso insieme di funzioni: ad esempio un addizionatore-sottrattore costa solo il 20% in più di un addizionatore e molto meno di un addizionatore e un sottrattore. La libreria dei componenti può offrire diverse implementazioni fisiche per una data unità con diverse caratteristiche di area e di ritardo.
4/12/98Cristina Silvano - CEFRIEL47 Costrutti condizionali I costrutti condizionali corrispondono ad un insieme di percorsi mutuamente esclusivi: in esecuzione, un solo percorso viene eseguito, sulla base della valutazione della condizione. Il comportamento non può essere rappresentato attraverso un DFG puro: si deve ricorrere ad un CDFG che rappresenti sia dipendenze dei dati sia dipendenze di controllo. Un algoritmo di scheduling efficiente condivide le risorse tra operazioni mutuamente esclusive.
4/12/98Cristina Silvano - CEFRIEL48 Costrutti ciclici In genere, l’ottimizzazione del corpo del ciclo migliora le prestazioni del progetto. Esiste un parallelismo potenziale tra le diverse iterazioni del ciclo, che può essere sfruttato eseguendo in parallelo diverse iterazioni del ciclo.
4/12/98Cristina Silvano - CEFRIEL49 Slide 7.26
4/12/98Cristina Silvano - CEFRIEL50 Costrutti ciclici (cont.) Si consideri un ciclo di 12 iterazioni, lo scheduling può avvenire in 3 modi diversi. Esecuzione sequenziale in b passi di controllo; il tempo totale di esecuzione è pari a 12b passi di controllo. Srotolamento parziale del ciclo (Partial Loop Unrolling): Si srotolano alcune iterazioni del ciclo e ne risulta un corpo del ciclo più lungo ma meno iterazioni. Esempio: si srotolano 3 iterazioni in una super-iterazione che richiede u passi di controllo. Se u < 3b il tempo totale di esecuzione (4u) è migliorato. Loop Folding: iterazioni successive vengono sovrapposte con tecnica pipeline. Se il corpo del ciclo richiede m passi di controllo, l’esecuzione di una nuova iterazione inizia ogni p passi di controllo (p < m). Tempo totale di esecuzione m+ (n-1) p passi di controllo. Il loop unrolling è applicabile solo se il numero di iterazioni del ciclo è noto a priori; il loop folding è applicabile anche quando tale numero non è noto.
4/12/98Cristina Silvano - CEFRIEL51 Esempio di costrutti ciclici Ciclo composto da 17 operazioni identiche che richiedono ognuna un passo di controllo. Gli archi tratteggiati indicano dipendenze dei dati tra diverse iterazioni. Confrontiamo le tre tecniche di scheduling secondo le seguenti cifre di merito: Rapporto di utilizzazione delle risorse (percentuale del numero di stati nei quali le unità sono usate per compiere un’operazione) Costo del controllo, misurato con il numero di parole di controllo diverse richieste all’unità di controllo.
4/12/98Cristina Silvano - CEFRIEL52 Esempio di costrutti ciclici (cont.) Scheduling Sequenziale: 6 passi di controllo e 3 unità funzionali. Partial Loop Unrolling srotolando due copie del ciclo: 9 passi di controllo e 4 unità funzionali. Loop Folding con iterazioni successive che partono dopo 3 passi di controllo: 9 passi di controllo (3 per la testa, 3 per il corpo del ciclo e 3 per la coda) e 6 unità funzionali.
4/12/98Cristina Silvano - CEFRIEL53 Slide 7.27 e 7.28
4/12/98Cristina Silvano - CEFRIEL54 Confronto
4/12/98Cristina Silvano - CEFRIEL55 Bibliografia D. Gajski, N. Dutt, A. Wu and S. Lin, “ High-Level Synthesis: Introduction to Chip and System Design” Kluwer Academic Press, G. De Micheli, “Synthesis and Optimization of Digital Circuits”, McGraw-Hill, M. Sami, “Hardware-Software Co-Design ”, Memorie della Scuola Nazionale del Gruppo Italiano di Ingegneria Informatica, Pavia, 3-13 Settembre, 1996.