Los errores críticos se arreglan. Por lo general, se fijan antes de que el producto entre en producción. A menos que esté utilizando muestras tempranas, es posible que nunca vea los errores más graves.
La reparación de errores es difícil y costosa. No es solo cambiar una línea de código RTL. Si hiciera eso, tendría que volver a sintetizar, rehacer el diseño físico, modificar el diseño para solucionar cualquier problema de tiempo, comprar un conjunto de máscaras completamente nuevo, producir obleas nuevas, probar las obleas (normalmente), validar las nuevas correcciones y Posiblemente caracterice o califique el producto nuevamente. Esto lleva meses y cuesta una cantidad angustiosa de dinero. Por esa razón, tratamos de corregir errores directamente en el diseño (preferiblemente en una sola capa de metal). Esto es más rápido y más barato que comenzar desde la síntesis de RTL, pero aún no es bueno.
De todos modos, si estamos solucionando un error crítico, ¿por qué no solucionamos todos los otros errores? Nuevamente, esto toma tiempo, tiempo para descubrir e implementar una solución, tiempo para volver a ejecutar las pruebas de verificación de diseño. Ese tiempo significa que tomará más tiempo llevar el siguiente producto al mercado. Y mientras tanto, es casi seguro que encontrarás más errores en tu producto actual si te fijas lo suficiente. Es una batalla perdida. Reparar errores es aún más difícil para un producto que ha estado fuera durante mucho tiempo, ya que la gente tiene que sumergirse en el diseño antiguo para descubrir qué está pasando. Como dice Null, los clientes pueden tener que recalificar su producto en su sistema. Si su producto aún está en desarrollo, retrasar el lanzamiento de producción puede hacer que los calendarios de los clientes se deslicen, lo que hace que los clientes sean muy infelices.
Normalmente, los errores que quedan solo ocurren en configuraciones extrañas, causan problemas muy pequeños, tienen soluciones fáciles o todo lo anterior. Simplemente no son lo suficientemente malos como para merecer la pena. Y si reutiliza un módulo de hardware en el siguiente producto, sus clientes actuales ya tendrán la solución en su software de todos modos.
Las cadenas de herramientas de software son otro factor. Si un módulo permanece el tiempo suficiente, su cadena de herramientas podría cambiar lo suficiente como para rehacer las antiguas pruebas de validación y convertirse en un gran proyecto en sí mismo. Y probablemente no pueda simplemente cargar las herramientas antiguas, porque ya no está pagando la licencia del sitio. Pero mientras no cambie el módulo, puede seguir copiándolo y pegándolo en las nuevas MCU.
El software también es un problema del lado del cliente. Si su corrección de errores rompe la compatibilidad hacia atrás de alguna manera, todos sus clientes tendrán que actualizar su código, para lo cual es posible que ni siquiera tengan las herramientas.
Como alguien que trabaja en el desarrollo de microcontroladores, puedo decirles que a todos nos encantaría corregir todos los errores. Pero tratar de hacerlo demoraría el desarrollo de manera impredecible, molestaría a los clientes, costaría una tonelada de dinero y, al final, probablemente fallaríamos.