Tengo una pregunta sobre cómo tratar con las x en las simulaciones de netlist de Verilog. Tengo un desacuerdo con otro ingeniero (que es un poco más alto que yo) sobre cuál es el enfoque correcto. Aunque esta pregunta puede parecer basada en opiniones, creo que hay una respuesta correcta incluso si las opiniones están divididas.
Hago desarrollo para ASIC de señal mixta. Estoy haciendo simulaciones de netlist de un microprocesador que no tiene su registro de programa restablecido (es un ARM Cortex-M3, hay una opción para no restablecer los registros durante la síntesis).
Tenemos una ROM que el procesador comienza a ejecutar después del reinicio. Durante la ejecución del programa, un registro de programa (R6) tiene una x en él porque no se restableció. En un punto de la simulación, las x de ese registro se propagaron como incendios forestales a través del resto del diseño y rompen la simulación. No vemos este problema en las simulaciones RTL.
Preferiría realizar un cambio de diseño para hacer que los registros se reinicien o que el programa ROM escriba los ceros en esos registros a primera hora. Mi universidad es muy resistente a hacer cualquier cambio de diseño para borrar estos x, y él preferiría enmascararlos en la simulación de alguna manera.
Su argumento es que las "x no son reales porque las x no existen en el hardware real". Por lo tanto, concluye que las x en la simulación no son reales, y que cualquier cambio de diseño basado en estos no es algo bueno, o al menos, una respuesta demasiado extrema.
Mi opinión es que, aunque es cierto que las x no existen en el hardware, representan valores desconocidos o impredecibles. Creo que la biblioteca de puertas modela x para propagarse pesimista. Por lo tanto, si las x se están propagando para matar la simulación, esto sugiere que podría haber una combinación de bits que causaría un problema. Como esa es una posibilidad, no veo que se haga un cambio de diseño para borrar las x como demasiado extremas, incluso si no puedo probar que sean absolutamente reales. (Supongo que podría intentar una búsqueda de la mala combinación de bits, pero eso sería mucho trabajo).
Ahora, puedo imaginar una respuesta de que el enfoque correcto depende del tipo de calidad que se está desarrollando aquí. Pero creo que los cambios de diseño que he sugerido (agregar los restablecimientos o borrarlos en el programa) cuestan muy poco (especialmente la modificación del programa ROM). Creo que pasar por el proceso de enmascarar los bits en la simulación sería mucho más laborioso.
¿Qué podría estar malinterpretando desde su punto de vista? ¿Cuál es el mejor enfoque? ¿Es realmente tan malo hacer un cambio de diseño para un problema que no puedes probar que es absolutamente real?