20 / 20 · Concetto
Revisione dell'integrazione RTL ed estensioni
Collega il modello didattico alle interfacce RTL e alle prove di verifica.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Dividi le responsabilità di nucleo e wrapper
Il nucleo dell'array gestisce inoltro registrato degli operandi, MAC con segno, valid/tag e advance globale. Il wrapper gestisce start/clear, dimensioni delle matrici, coordinate dei blocchi, fornitura sfasata al confine, raccolta mascherata dei risultati e handshake di uscita. Definisci ogni responsabilità con nomi dei segnali e un contratto sui fronti.
Un wrapper semplice usa IDLE, CLEAR, RUN, COLLECT e SEND. CLEAR garantisce un fronte di inizializzazione prima dei dati. RUN fa avanzare i passi logici da zero a K+2N−3. I risultati diventano completi immediatamente dopo l'ultimo fronte RUN; COLLECT li copia al fronte seguente. Ciò evita di copiare il vecchio accumulatore sullo stesso fronte del suo aggiornamento non bloccante finale.
Svolgi un esempio di latenza di integrazione
Per N=K=2, clear avviene a E−1 e il calcolo a E0..E3. Supponi che E4 copi quattro risultati in parallelo in un buffer risultati. Un'uscita da un risultato per fronte con ready sempre vero invia diciannove, ventidue, quarantatré e cinquanta a E5..E8 in ordine per righe. Misurare da clear al trasferimento finale include dieci fronti di salita E−1..E8, rispetto a quattro fronti di calcolo. Il blocco dell'uscita prolunga SEND senza cambiare i valori completati.
I payload dei risultati richiedono job e coordinate globali, oltre a una rappresentazione grezza o quantizzata definita. Non azzerare un accumulatore finché il suo risultato non è stato copiato o consumato in sicurezza. Sovrapporre il calcolo successivo a SEND richiede proprietà dei buffer e separazione dei lavori.
Rivedi i contratti quando estendi il progetto
Un moltiplicatore in pipeline cambia la temporizzazione di accumulo, tag e completamento. Suddividere la riduzione richiede somme parziali conservate e una nuova analisi della larghezza. Sovrapporre lavori richiede stati di accumulo separati. Una FIFO memorizza value, valid e tag come un unico payload e richiede verifiche di overflow e underflow.
La documentazione dell'architettura Gemmini offre un esempio da fonte primaria in cui memoria locale e movimento dei dati accompagnano l'array. La nostra macchina a stati e l'esempio temporale sono contratti didattici specificati indipendentemente.
Consegna dimensioni, larghezze, pianificazione al confine, definizione del completamento, politica di pausa/reset, ordine di uscita e log dello scoreboard. Le verifiche Node attestano il comportamento del modello di riferimento. Simulazione RTL, sintesi, chiusura temporale e integrazione del prodotto richiedono propri comandi eseguiti e prove prima di dichiarare il successo.
Prova tu
Nell'esempio di integrazione, blocca ready per due fronti dopo E6. Quali diventano il fronte finale di trasferimento e il conteggio totale misurato dei fronti?
Leggi la spiegazione
Attendi su E7 ed E8, poi invia i due risultati rimanenti su E9 ed E10. L'ultimo trasferimento è E10; misurare E−1..E10 include dodici fronti. Il calcolo rimane di quattro fronti E0..E3 e i dati bloccati devono rimanere invariati.