sto facendo un lavoro che doveva assolutamente essere finito per dicembre. Una parte significativa dell'upgrade che stiamo facendo dipende da questo singolo componente. Dopo una quantita` innumerevole di difficolta` stanotte abbiamo prodotto il primo candidato senza errori. Lo ispeziono a mano. Ha sbagliato la rete del clock. Senza dirlo.
massimiliano l.
liked this
il clock
- d☭snake
senza dare errori
- d☭snake
non ho parole
- d☭snake
mi piace la parte "doveva assolutamente essere finito per dicembre"
- Aldo Oldo
in realta` la schedule prevedeva "estate 2014", ma e` una cosa difficile e avevamo qualche mese di margine. Mesi di margine che chiaramente spariscono in un attimo. Poi le ultime limature e insomma dicembre era la deadline oltre la quale c'e` l'abisso.
- d☭snake
ora stiamo scavando l'abisso
- d☭snake
Ma chi ha sbagliato? il place&route? o una persona?
- Dario
dario: ha sbagliato la fase del CTS. Anzi non ha sbagliato, ora da un'attenta analisi dei logfile effettivamente mi diceva come *INFO* che un intero ramo dell'albero aveva una capacita` assurda
- d☭snake
(sto ricostruendo cosa e` successo, sto capendo, ma assurdo che non sia un FATAL ERROR DISTRUZIONE E DISPERAZIONE)
- d☭snake
(ah si ha "sbagliato" il software, non una persona, magari avessi persone che lavorano a questo progetto ... siamo in due a chiudere un chip delle dimensioni di un core2 duo)
- d☭snake
interessante, non v'importa niente, ma mi sfogo qui raccontando quello che era accaduto
- d☭snake
in pratica ho il clock che mi arriva da una pad lvds, deve entrarmi nel core e tra i tanti posti dove deve andare c'e` un divisore che poi restituisce questo clock a delle pad di serializzatori e deserializzatori. E fin qui tutto normale.
- d☭snake
io sto leggendo
- quel *** di Luca
vai, scrivi pure che poi leggo
- Guiseppe
il problema e` che la pad lvds lavora a 1.2 V (lato core) i serdes pure MA il core io lo voglio far andare a 1.0 V per questioni di consumi. Poco male: o entri da 1.2 V a 1.0V, passi dal divisore e poi ritorni a 1.2 V con un level shifter oppure fai una piccola zona di core tutta a 1.2 V in modo da piazzarci il divisore e tenere quel ramo (clock -> divisore -> serdes) tutto a 1.2 V
- d☭snake
a occhio la seconda opzione e` piu` pulita e cosi` ho cercato di procedere: una strisciolina a 1.2V, dichiarato il divisore come facente parte del dominio di power a 1.2 V e poi mi fido che il software di P&R faccia il suo lavoro
- d☭snake
PERO` la perversione di questi software fa si che tu debba specificare chi sta in quale dominio di clock in ben TRE file diversi con sintassi diverse e scopi diversi. Per un qualche motivo il mio divisore era saltato via da uno di questi tre.
- d☭snake
dovete sapere che il flusso standard per fare un chip e`: 1) piazzo i componenti 2) creo prima di tutto l'albero del clock. Il clock deve arrivare a tutti i componenti appartenenti allo stesso dominio di clock piu` o meno allo stesso tempo e quando il tuo chip si misura in decine di mm non e` una cosa scontata 3) tiri tutti gli altri fili che non sono clock
- d☭snake
il punto 2 e` delicatissimo
- d☭snake
quindi lui arriva al punto 2 e si ritrova un pezzo dell'albero di clock che parte da questo fantomatico divisore. Il problema e` che ha informazioni contraddittorie: da una parte c'e` scritto che il divisore appartiene al dominio a 1.2 V, dall'altra non e` menzionato. Non sa dove metterlo e cosi` a caso lo piazza nel dominio 1.0 V.
- d☭snake
ma BEN PIU` GRAVE decide di segnarsi come FIXED, quindi come intoccabile, la connessione che PARTE dal divisore. In pratica non costruisce l'albero di clock a partire da quel punto, ma connette direttamente con un filo
- d☭snake
ora dovete sapere che un transistor ha una certa capacita` di pilotare una linea, non e` che puoi fargli pilotare qualsiasi cosa. Piu` capacita` vede piu` e` lento a caricarla. Per questo devi costruire un albero di componenti che rigenerino il segnale ogni tanto in modo da spezzettare la capacita` totale in capacita` piu` gestibili.
- d☭snake
quindi il mio povero divisore si vede davanti ~300 fili non bufferizzati che vanno a giro in mezzo chip. Una capacita` assurda. Il tempo per caricare questi fili e` MAGGIORE del periodo del clock. Quindi il clock non si muove.
- d☭snake
la cosa pazzesca e` che questo fatto mi e` stato segnalato come INFO, "oh non trovo dove piazzare questo componente, quindi lo piazzo qui a caso e poi me ne disinteresso", e in TUTTE le analisi successive ignorato. I fili erano connessi quindi LVS passa. Erano connessi rispettando le regole quindi DRC passa. Il clock va a una foglia dell'albero senza particolari constraint di timing quindi anche quello passa.
- d☭snake
(giuseppe: btw mentre indagavo questo problema ho scoperto che abbiamo anche un tool di verifica formale delle netlist a ogni passaggio. In pratica verifica formalmente che la lista dei componenti al passaggio N+1 implementi formalmente la stessa logica di quella del passaggio N anche se nel mentre ho inserito/tolto vari componenti per rispettare il timing. Non che sia servito in questo particolare problema, ma ora l'ho inserito nel flusso. Fico)
- d☭snake
un problema appassionante, come vedete. Io rimango sempre un po' scosso quando li scopro in questa maniera, dai controlli manuali o semimanuali. Se mi fossi fidato del report degli errori avrei consegnato un chip muto e fumato una cifra considerevole di soldi e tempo.
- d☭snake
non ci ho capito una fava ma è molto bello ugualmente. Un amico ha fatto per anni più o meno la stessa cosa al CERN
- dario
per l'appunto il gruppo di elettronica del CERN che ci ha recentemente revisionato questo progetto era un po' perplesso dal nostro tentativo di andare con piu` tensioni di core (che e` una cosa comune nell'industria, ma appunto nell'industria, non da noi semi-amatori)
- d☭snake
se il tuo amico sta ancora li ci sta che abbia sentito parlare del nostro chip
- d☭snake
ah, questi scrittori di tool che si limitano a scrivere *info* nei log.... :) tanta solidarietà.
- Guiseppe
per altro questi tool industriali sono qualcosa d'incredibile. Ho fatto alcune sessioni di consulenza con la casa madre produttrice del tool ed e` tutto un "ah ma questo comando e` meglio se non lo usi" "questo messaggio lo puoi ignorare" "usa assolutamente quest'opzione, no non c'e` sul manuale, l'abbiamo aggiunta ora e non ancora validata, ma e` okkeione" "si, e` cosi`, se lasci una riga vuota in quel file in quel punto crasha tutto, e` un baco noto"
- d☭snake
(in realta` questa cosa e` sensata perche` tendenzialmente chi si compra questo tool paga cosi` tanto che comprarsi anche la consulenza per usarlo e` una correzione al second'ordine. Questo non vale per noi)
- d☭snake
Io ho amici che lavorano in Synopsis che ogni volta che mettono mano al codice dei tool:1) sono stupiti che tutto stia ancora in piedi 2) ritengono che parte del codice sia magia nera, perché solo così si spiega come riescano a trattare alcuni circuiti
- Dario
che sia magia nera si evince anche dal fatto che alcuni algoritmi non vengono mai aggiornati, ma al massimo si prova a rifarli da capo. Nel tool convivono algoritmi diversi per fare la stessa cosa, lasci al buon cuore dell'utente scegliere quale usare e in funzione delle reazioni/risultati nel mondo reale decidi quale far sopravvivere nelle versioni dopo. (ad esempio il consulente che mi fa "ah ma i parassiti usi la versione superfica? ma no ma no, metti quest'opzione che riabilita il vecchio algoritmo, va molto piu` forte e non ci sono differenze fino al ghz")
- d☭snake
...aaaah come _NON_ mi manca tutto questo... e i bachi di AMBIT BuildGates... e i compilatori Xilinx che ogni tanto impazzivano e decidevano di non riuscire a caricarmi l'FPGA...
- Dario