¿Es una buena práctica asignar siempre el valor inicial y restablecer las señales en diseño digital?

4

He leído que los valores iniciales de una señal se pueden configurar en un FPGA ya que el diseño se "carga en él" después del encendido. Sin embargo, en los ASIC solo podemos confiar en una señal de reinicio para poner todas las señales en un estado conocido. Por lo tanto, ¿es una buena práctica la asignación de valor inicial a todas las señales en el código que se sintetizará?

También he leído que las señales de restablecimiento hacen un uso intensivo de los recursos de enrutamiento en FPGA y también en ASIC requiere ser enrutado a todas partes. En los FPGA, no usar el restablecimiento en todos los registros es una forma de reducir el uso de los recursos de enrutamiento, pero no estoy seguro de qué beneficio tienen los ASIC. ¿Es una buena práctica encontrar maneras de reducir el uso de la señal de reinicio en un diseño sincrónico al no usarla en algunas partes del diseño sino en otras?

    
pregunta quantum231

5 respuestas

7

Yo diría que hay un par de maneras diferentes para argumentar eso. No estoy seguro de cuál es el método "mejor" en general, dependerá de lo que usted esté tratando de lograr. Es fácil inicializar todo en el FPGA en HDL, de modo que cuando sale de la rutina de configuración, todo comienza desde un estado conocido. Sin embargo, generalmente los restablecimientos son necesarios, incluso en un FPGA, debido a varias configuraciones de reloj. En cuyo caso, NO inicializar las cosas puede tener más sentido, ya que entonces se puede verificar la propagación de X en la simulación para asegurarse de que los restablecimientos estén haciendo su trabajo correctamente al restablecer los registros apropiados.

En términos de enrutamiento, tiene sentido averiguar qué REALMENTE necesita restablecerse y luego omitir restablecimientos en cosas donde la configuración inicial no importa. Esto ahorrará recursos de enrutamiento tanto en FPGA como en ASIC. Por ejemplo, cosas como los buses de datos con señales válidas no necesitan que CUALQUIERA del bus de datos se reinicie, solo las señales válidas. Si su bus de datos tiene 32 o 64 bits de ancho, solo restablecer las señales válidas reducirá significativamente la complejidad del circuito de restablecimiento. La complejidad reducida del enrutamiento puede llevar a una menor utilización de recursos y un cierre de tiempo más fácil. También permite que el sintetizador use las entradas de reinicio de los flip flops para otros propósitos, lo que podría simplificar la lógica y, de nuevo, mejorar el área y el tiempo.

Además, lo que reinicies y cómo lo haces (sincronización vs. async, reinicio a 0 vs reinicio a cero) puede afectar cómo el sintetizador puede inferir cosas como RAMs. Los registros de tuberías en la RAM de bloque no necesariamente tienen capacidades de reinicio o precarga, por lo que si su lógica de reinicio entra en conflicto con lo que es capaz la RAM de bloque en su chip de destino, sus registros de tuberías no se fusionarán y su rendimiento de tiempo y la utilización de recursos sufrirá.

    
respondido por el alex.forencich
4

Para ninguna de las tecnologías (FPGA o ASIC) debe confiar en la inicialización de la señal. Si necesita que sus puertas y señales se inicien en un estado conocido, use reinicios .

  

He leído que los valores iniciales de una señal se pueden configurar en un FPGA ya que el diseño se "carga en él" después del encendido.

No necesariamente. No es una función del propio estándar VHDL, y por lo tanto depende del sintetizador / FPGA. Xilinx y Altera FPGA son compatibles con esto, pero no es una industria dada. Por lo tanto, debe tener en cuenta que los diseños que se basan en las inicializaciones, sacrifican hasta cierto punto la portabilidad.

De hecho, Pedroni en Diseño de circuito con VHDL muestra el valor inicial [de] señales] no es sintetizable, solo se considera en simulaciones ". ref Sección 7.2

Además, las inicializaciones que realmente se realizan en las configuraciones de tejido deben considerarse como asíncronas , y (dependiendo de su diseño) pueden resultar en infracciones de tiempo. Para referencia, consulte página 89 de Xilinx UG470 - 7 Series FPGAs Configuration , donde el documento discute el secuenciador de inicio. Específicamente, ver Nota 3:

  • GWE se valida de forma sincrónica con el reloj de configuración (CCLK) y tiene un sesgo significativo en la parte. Por lo tanto, los elementos secuenciales no se lanzan de forma síncrona al reloj del sistema del usuario y pueden ocurrir violaciones de tiempo durante el inicio. Se recomienda restablecer el diseño después del inicio y / o aplicar alguna otra técnica de sincronización.
  

Sin embargo, en los ASIC solo podemos confiar en una señal de reinicio para poner todas las señales en un estado conocido.

Esto es preciso. Por lo tanto, en caso de que su diseño sea portado a la fabricación de ASIC, tendrá que volver a trabajar si su diseño no usa restablecimientos.

  

¿Es una buena práctica encontrar formas de reducir el uso de la señal de reinicio en el diseño sincrónico al no usarlo en algunas partes del diseño sino al uso en otras?

Yo diría que esto constituiría una mala práctica. Una buena práctica sería siempre diseñar reinicios en sus módulos. Si decide que no necesita implementarlos, no los conecte y no se usarán, pero si luego descubre que sus reinicios no conectados es la fuente del error que ha estado buscando (no un escenario descabellado), será trivial conectarlos.

Finalmente, señalaré que el diseño de todos sus reinicios (en lugar de las intializaciones) excluye los reinicios suaves. ¿Cómo vuelve a su estado de inicio predeterminado en los reinicios de software sin un buen modelo de reinicio? (usted no)

    
respondido por el Blair Fonville
2

Analogía: ¿Es una buena práctica para los desarrolladores de juegos iniciar el estado del juego cuando un usuario lo juega? Usuario 1: "Woaw, comencé el juego cerca del final y lo terminé ... uhm ... kay", usuario 2: "Comencé desde el principio y tenía un juego completo para jugar, ¡bien!".

En ese caso es muy importante , porque importa mucho.

Si está trabajando con filtros digitales, lo que sea que inicialice los registros no importa realmente porque de todos modos es crap .

En este caso, no es importante .

En otras palabras, depende de lo que realmente estás haciendo, si tienes un sistema de menú o algunas máquinas de estado finito, por lo general generalmente importa mucho. Depende del 100% de usted, o los errores que reciba, (sé que Quartus puede generar algunos errores si no inicia las señales correctamente).

Le recomendaría que siempre inicie cuando el sistema se reinicie, ese es un buen diseño en mi opinión , odiaría presionar "reiniciar" que no hace nada cuando / si un sistema se ha estrellado.

Si veo que gran parte de los recursos de enrutamiento son solo para estados de inicio, adquiriré un FPGA con más recursos, pero esa es mi opinión personal. Pero al final, depende de usted y su futura empresa y de cómo la va a utilizar. Si fuera más preciso con respecto a su uso, mi respuesta no habría sido tan general.

Si hubieras presentado algo más en este sentido:

Puedo iniciar cada estado de mi menú en mi FPGA si compro algo de FPGA con más recursos, esto costará 10 dólares más por unidad, venderé 1000 de estos. Entonces eso es 10 mil dólares, una suma de dinero relativamente grande.

O, no inicia todos los estados del menú y cada vez que alguien abre el menú aparecen opciones al azar y no tiene que comprar otro FPGA. Estás ahorrando una suma de dinero relativamente grande .

"¿Qué debo hacer?", entonces diría que actualice su FPGA porque cualquiera que use su unidad no volverá para la próxima versión que venda. Por lo tanto, puede ganar mucho dinero ahora, pero perder el 99% de sus clientes.

Digo "FPGA" en todas partes como sinónimo de FPGA y ASIC, los problemas son similares, si no idénticos.

    
respondido por el Harry Svensson
1

Gran publicación y todos han dado excelentes respuestas aquí. Un reinicio de sincronización / asíncrono para inicializar valores, siempre se proporciona para estar en el lado seguro, durante el encendido. Esto es especialmente cierto en el caso de los ASIC. Es por eso que todos los procesadores, controladores, se inician con un reinicio de encendido. También proporcionan una manera de llevar el sistema a su estado inicial, en cualquier punto de operación. En el caso de los FPGA, la mayoría de los sintetizadores ahora sintetizan valores iniciales, incluso si no hay reinicio presente. En Altera, si hay una señal de reinicio asíncrono, el sintetizador es inteligente para encontrarlo e inicializar los valores en consecuencia (no en caso de reinicio de sincronización). Si se dan tanto el bloque de reinicio como los valores iniciales, Altera muestra una advertencia si hay alguna discrepancia entre los valores bajo reinicio y los valores iniciales. Finalmente, los recursos de enrutamiento, la potencia y el rendimiento de todo el diseño dependen de si su reinicio es sincronizado o asíncrono. Puede encontrarlo aquí: enlace

    
respondido por el MITU RAJ
0

Pedroni estaría equivocado en el contexto de los FPGA basados en SRAM, en el contexto de ASIC sería correcto. Sin embargo, si escuchas a Harry Svensson, "FPGA en todas partes como sinónimo de FPGA y ASIC, los problemas son similares, si no idénticos", por lo que ahora está probablemente equivocado.

La mejor práctica es entender su arquitectura de destino, comprender el uso a largo plazo del código que escribe, comprender qué proceso de sintetizador y configuración (en caso de FPGA) implementará con su RTL. Escriba el código apropiado para su aplicación.

    
respondido por el Daniel elftmann

Lea otras preguntas en las etiquetas