I bug critici vengono corretti. Di solito vengono riparati prima che il prodotto entri in produzione. A meno che tu non stia usando i primi campioni, potresti non vedere mai i peggiori bug.
La correzione di bug è difficile e costosa. Non sta cambiando solo una riga di codice RTL. Se lo facessi, dovresti risincronizzare, ripetere il layout fisico, modificare il layout per risolvere eventuali problemi di temporizzazione, acquistare un nuovo set di maschere, produrre nuovi wafer, testare i wafer (normalmente), convalidare le nuove correzioni e eventualmente caratterizzare o qualificare nuovamente il prodotto. Questo richiede mesi e costa una quantità di denaro angosciante. Per questo motivo, proviamo a correggere i bug direttamente nel layout (preferibilmente su un singolo strato di metallo). Questo è più veloce ed economico rispetto a ricominciare dalla sintesi RTL, ma non è ancora buono.
Se stiamo risolvendo un bug critico, perché non correggere anche tutti gli altri bug? Ancora una volta, ciò richiede tempo - tempo per capire e attuare una correzione, tempo per rieseguire i test di verifica del progetto. Quel tempo significa che ci vorrà più tempo per commercializzare il prossimo prodotto. E nel frattempo, quasi sicuramente troverai più bug nel tuo prodotto attuale se guardi abbastanza bene. È una battaglia persa. Risolvere i bug è ancora più difficile su un prodotto che è stato rilasciato da molto tempo, poiché le persone devono tuffarsi nel vecchio design per capire cosa sta succedendo. Come afferma Null, i clienti potrebbero dover riqualificare il prodotto nel proprio sistema. Se il tuo prodotto è ancora in fase di sviluppo, ritardare il rilascio della produzione può far scivolare le pianificazioni dei clienti, il che rende i clienti molto scontenti.
Normalmente, i bug che vengono lasciati si verificano solo in strane configurazioni, causano problemi molto lievi, hanno soluzioni alternative facili o tutto quanto sopra. Non sono abbastanza male da valere la pena. E se riutilizzi un modulo hardware sul prodotto successivo, i tuoi clienti esistenti avranno già la soluzione alternativa nel loro software.
Le toolchain software sono un altro fattore. Se un modulo rimane abbastanza a lungo, la tua toolchain potrebbe cambiare abbastanza da rifare i vecchi test di validazione diventa un grande progetto in sé. E probabilmente non puoi semplicemente caricare i vecchi strumenti, perché non stai più pagando per la licenza del sito. Ma finché non si modifica il modulo, è possibile continuare a copiarlo e incollarlo in nuovi MCU.
Anche il software rappresenta un problema per il cliente. Se il tuo bugfix rompe in qualche modo la retrocompatibilità, tutti i tuoi clienti dovranno aggiornare il loro codice, per il quale potrebbero non avere più gli strumenti.
Come qualcuno che lavora nello sviluppo di microcontrollori, posso dirti che ci piacerebbe tutti correggere ogni bug. Ma provare a farlo ritarderebbe lo sviluppo in modo imprevedibile, infastidire i clienti, costare un sacco di soldi e, alla fine, probabilmente avremmo comunque fallito.