De hecho, puede usar valores iniciales en Verilog o VHDL, pero reducen la portabilidad de su diseño. Por lo tanto, deben evitarse y no se recomiendan.
Las razones ...
Su diseño se comportará de manera diferente dependiendo del dispositivo de destino. Sintetízalo para un FPGA basado en RAM (typ. Altera, Xilinx) y tu diseño funcionará porque los valores iniciales serán reconocidos.
Sintetícelo para un FPGA basado en Flash (typ. Microsemi), un CPLD (typ. Altera, Lattice) o un ASIC y su diseño no funcionará porque los valores iniciales no tienen sentido. La causa no será evidente de inmediato, especialmente si no es su propio diseño, por lo que hay tiempo y costo de ingeniería para descubrirlo y volver a trabajarlo.
La alternativa ...
Usa un reinicio. Los FPGA basados en RAM proporcionan restablecimientos asíncronos (o, menos comúnmente, síncronos) en sus DFF, por lo que le cuesta enrutamiento pero no recursos. El diseño ahora es portátil en todos los CPLD, FPGA y ASIC.
Ahora, cada dispositivo de destino debe proporcionar un restablecimiento por sí mismo.
Esto podría generarse externamente y luego pasar a través de una etapa de entrada simple para hacer un restablecimiento asíncrono, negado sincrónicamente, que evita la metastabilidad en DFFs en negación.
O puede generarse internamente en un dispositivo basado en RAM, usando un registro de desplazamiento simple de n bits (yo uso 4 bits) con un valor inicial de '0' y cambiando en un '1'. Se puede usar un valor inicial aquí en este registro de desplazamiento, y solo aquí, porque (a) da como resultado la misma señal de restablecimiento a todos los DFF que haría un restablecimiento externo y (b) esta es la única parte que debe cambiar si un dispositivo diferente es apuntado Todos los demás Verilog / VHDL permanecen completamente sin cambios en un nuevo destino del dispositivo.
La conclusión ...
Los valores iniciales tienen dificultades y pueden causar problemas invisibles. Un reinicio no lo hace y no lo hará.
Podría decir que depende del diseñador profesional su elección ... pero no lo es. Porque, a menos que trabajen completamente solos, no pagan por el desarrollo ni soportan los costos de las consecuencias.
Si está diseñando profesionalmente, debería entregar los diseños más libres de problemas a su empleador o cliente, y eso incluye la portabilidad. También está haciendo más difícil reutilizar sus propios diseños si trabaja en otro lugar en un año, cinco o diez años, en diferentes dispositivos. Los propietarios del diseño (su empleador o cliente) esperarán que otros ingenieros puedan reutilizar los diseños que pagaron, en diferentes productos con diferentes dispositivos de destino.
El hecho de que su diseño sintetizado y trabajado aquí no prueba nada, me temo. En ingeniería, es muy fácil hacer diseños que funcionen. (Piense en ese tipo cuyos estantes apenas cuelgan con un solo clavo pero todavía están allí). Nuestro objetivo es hacer diseños que nunca funcionen. En el diseño de circuitos digitales, esta es una forma de hacer eso mucho más probable.
Muchos clientes para los que he trabajado simplemente prohíben los valores iniciales en sus estándares de codificación por todas estas razones. La mayoría de IP que encontrará, especialmente la IP del proveedor PLD, usa restablecimientos por las mismas razones.
En resumen: no utilice valores iniciales. Mantenga sus diseños portátiles. Manténgase móvil a través de empleos y la industria. Reducir la búsqueda de fallos de todos.