Nell'aggiornamento precedente, abbiamo esaminato come definire uno stack di strati adatto per il modulo e come aggiungere il routing di fanout a tutti i componenti posizionati sulla scheda. Basandoci su tutte queste preparazioni, ora siamo quasi pronti per tracciare le prime piste. Prima di iniziare a collegare qualsiasi componente sulla scheda, però, dobbiamo definire i profili di impedenza e impostare le regole di progettazione corrispondenti per la larghezza della traccia adeguata.
L'impostazione dei profili di impedenza è semplice nel gestore dello stack di strati. Dobbiamo definire sia i profili di impedenza singola che differenziale. Le informazioni sui valori di impedenza necessari possono essere ottenute dagli standard delle interfacce e dalle guide di progettazione hardware per il processore NXP i.MX8. I seguenti valori di impedenza, sia singola che differenziale, sono utilizzati nel design:
Sullo stack di strati precedentemente definito abbiamo quattro strati di segnale disponibili che possiamo utilizzare per il routing controllato dall'impedenza, che sono lo strato superiore, L2, L7 e lo strato inferiore. Lo strato superiore e inferiore hanno ciascuno solo un piano di massa di riferimento mentre L2 e L7 sono incastonati tra due piani di riferimento. Dopo aver inserito i valori di impedenza e gli strati di riferimento, la geometria della traccia viene calcolata automaticamente:
Gestore dello stack di strati profilo di impedenza differenziale 100 Ohm
Nel definire la geometria delle piste, in particolare la larghezza della pista e l'intervallo per le coppie differenziali, è importante tenere a mente lo spazio di routing necessario. Se possibile, ci piacerebbe mantenere la larghezza complessiva della coppia differenziale piccola al fine di limitare lo spazio di routing necessario. A seconda della densità della scheda, questo dovrebbe essere preso in considerazione anche quando si definisce lo stack dei layer.
C'è solo un passo rimasto prima che possiamo tracciare le prime piste, ed è comunicare ad Altium Designer quali larghezze di pista (e intervalli per le coppie differenziali) sono richiesti a seconda dell'interfaccia e del layer di routing. I valori di impedenza sono assegnati alle interfacce appropriate nello schema. Qui possiamo lavorare con direttive per assegnare reti a classi di reti o classi di coppie differenziali.
Multiple classi di reti assegnate a un blanket di progettazione
Nell'editor delle regole di progettazione possiamo ora prendere di mira queste reti o classi di coppie differenziali e assegnare le corrispondenti geometrie delle piste. Invece di inserire manualmente la geometria della pista possiamo scegliere il profilo di impedenza corrispondente che abbiamo definito nel gestore dello stack dei layer:
Profilo di impedenza utilizzato nella finestra di dialogo delle regole di progettazione – regola di priorità alta sovrascrive il profilo di impedenza
Nota che abbiamo un'altra regola di progettazione che assume la massima priorità nella nostra configurazione. Questa regola di progettazione si applica solo a determinate aree di progettazione che abbiamo creato nell'aggiornamento precedente. Queste aree sono posizionate direttamente sotto i componenti a passo fine e ci permettono di utilizzare localmente una larghezza e uno spazio delle tracce fino a 85 um nella regione di breakout. Le regole di progettazione per queste aree hanno la massima priorità poiché dobbiamo sovrascrivere i profili di impedenza definiti. Poiché potremmo non essere in grado di seguire la geometria delle tracce richiesta all'interno di queste aree, dobbiamo mantenerle il più piccole possibile e utilizzare geometrie delle tracce che si discostano dai profili di impedenza solo dove assolutamente necessario. Se manteniamo queste sezioni molto piccole, l'impatto complessivo sull'integrità del segnale del canale sarà accettabile. Tuttavia, dovremo verificare ciò nelle nostre simulazioni post-layout.
Aree di progettazione in rosso mostrate sotto i BGA a passo fine
Ora che tutte le regole di progettazione sono state definite, possiamo iniziare a tracciare la prima interfaccia. Su questa scheda inizieremo con l'interfaccia DRAM.
Noterete che non abbiamo ancora definito la strategia di routing generale per questa scheda. Avremmo potuto farlo prima di posizionare qualsiasi traccia e, a seconda delle preferenze personali, non c'è nulla di sbagliato in questo. Su questa scheda ho deciso di instradare prima l'interfaccia DRAM per vedere quanto spazio e quanti strati di routing dobbiamo allocare all'interfaccia DRAM. Se possiamo instradare l'IC LPDDR4 su due o tre strati di segnale, allora possiamo allocare uno o due strati di routing ad altre interfacce nelle vicinanze. Poiché l'interfaccia DRAM occupa parecchio spazio, specialmente su una scheda piccola come questa, avere un altro strato di segnale vuoto disponibile sarebbe molto desiderabile.
Diamo un'occhiata veloce all'instradamento dei condensatori di decoupling sull'IC LPDDR4. Collegare i condensatori di decoupling faceva parte del routing di breakout nell'articolo precedente. Rivediamolo prima per vedere se dobbiamo aggiungere ulteriori VIA o tracce sullo strato superiore o inferiore. Il fatto che stiamo utilizzando VIA riempiti e sigillati gioca a nostro favore quando si tratta di instradare i condensatori di decoupling.
Ogni pin di alimentazione sul DRAM IC ha il proprio VIA passante che può connettersi a tutti i 10 strati della scheda. Dobbiamo utilizzare i VIA su questi pin poiché stiamo gestendo le correnti di ritorno su tutti i piani di massa nello stackup. Poiché i condensatori di disaccoppiamento sono posizionati sul lato inferiore della scheda, dobbiamo anche avere i pad di alimentazione VDD e VDDQ disponibili sul lato inferiore della scheda. Il DRAM IC ha un passo dei pin di 0,65mm nell'asse Y. Questo passo dei pin ci permette di posizionare i condensatori di disaccoppiamento direttamente tra i pad GND e VDD/VDDQ. Questo arrangiamento permette di ottenere l'induttanza di loop più bassa possibile. Possiamo ora distribuire uniformemente i condensatori di disaccoppiamento tra i pin di alimentazione.
I resistori di terminazione dell'orologio opzionali sono anche posizionati direttamente sotto i pin dell'orologio, ognuno connesso direttamente ai pin attraverso i VIA.
Condensatori di disaccoppiamento posizionati sul lato inferiore del IC LPDDR4
Poiché non sono necessari segmenti di traccia aggiuntivi per i condensatori di disaccoppiamento, possiamo utilizzare lo spazio sullo strato inferiore per il routing dei segnali. Ci atterremo strettamente al design di riferimento dell'i.MX 8M plus e posizioneremo tutte le coppie differenziali DQS sul lato inferiore della scheda. Inoltre, possiamo anche posizionare i segnali di reset e abilitazione dell'orologio della DRAM sul lato inferiore:
Routing DRAM lato inferiore
Colorare i segnali di comando/indirizzo/controllo in modo diverso dai gruppi DQ ci aiuta a identificare una buona strategia di routing. I segnali di comando/indirizzo/controllo ciano sono tutti situati dietro le prime due file di pin di segnale sul SoC, ad eccezione dei due segnali di orologio. Se vogliamo instradare questi segnali sugli strati interni dobbiamo assicurarci che non ci siano VIA provenienti dalle due file esterne di pin di segnale a intralciare. Possiamo collegare il Byte 0 dai canali A e B così come i segnali di orologio che sono tutti disponibili sulle due file esterne direttamente sullo strato superiore senza necessità di cambiare strato:
Routing DRAM lato superiore
Il Byte 1 dai canali A e B si trovano entrambi verso l'angolo del BGA. Questo è perfetto poiché ci permette di spostare quei segnali su L2 e di collegarli al DRAM IC lasciando comunque abbastanza spazio tra questi due gruppi di routing per collegare i segnali di comando/indirizzo/controllo:
Routing L2 del DRAM
Parlando in termini stretti, non stiamo cambiando il layer di riferimento, ma ne stiamo introducendo un secondo passando a L2. Non appena posizioniamo una traccia con una tensione variabile nel tempo sopra un piano di massa, una corrente fluirà indipendentemente dalla presenza di un secondo piano di riferimento. Per fornire un percorso di ritorno per queste correnti stiamo anche utilizzando VIA di ritorno vicino alle transizioni di layer sul layer superiore. I segnali che stanno cambiando layer dietro le due file esterne di pin sotto il BGA hanno già VIA di ritorno nelle vicinanze che sono formati dalle due file di pin di massa e VIA di massa del SoC:
VIA di ritorno per l'interfaccia DRAM
Ecco un altro dettaglio da tenere a mente in relazione ai percorsi di ritorno. Stiamo utilizzando un layerstack di micro VIA sfalsati. Pertanto, i due micro VIA sequenziali devono essere posizionati con una certa distanza minima l'uno dall'altro. È necessario un breve segmento di traccia per stabilire una connessione tra i due VIA sequenziali. Questo segmento di traccia è posizionato sul piano di massa sotto il layer superiore e inferiore. Dobbiamo fare attenzione a non creare tagli o vuoti sul piano di massa che interromperebbero il percorso di ritorno delle linee di segnale:
Gestione del percorso di ritorno - vuoti e divisioni sul lato sinistro, routing migliorato sul lato destro
Disponendo i micro VIA e i segmenti di traccia in linea con la griglia BGA del dispositivo DRAM possiamo assicurarci che ci sia sempre una solida connessione a terra sotto le linee di segnale:
Le tracce sul layer superiore e su L2 sono distanziate di almeno 0.275mm l'una dall'altra. Questa distanza è necessaria per garantire che non creiamo un eccessivo diafonia tra questi segnali. Dovremo verificare anche questo in una simulazione post-layout.
L'unica cosa che rimane da fare ora per completare il routing dell'interfaccia DRAM è la regolazione del ritardo. Tuttavia, non lo faremo ora. Invece, la regolazione del ritardo sarà eseguita per tutte le interfacce una volta terminato il routing. Per design di altissima densità o interfacce che richiedono molta compensazione del ritardo, è meglio eseguire la regolazione della lunghezza prima piuttosto che dopo. I requisiti di tempistica su LPDDR4 non sono troppo rigidi quindi sono fiducioso che non incontreremo problemi se ci prendiamo cura di ciò più tardi.
Per ora il routing DRAM è completato e possiamo passare alla fase di pianificazione del layout e instradare tutte le altre interfacce. Questo e altro farà parte del prossimo aggiornamento sul progetto del modulo di calcolo open-source!