¿Debería cada diseño de FPGA incluir una señal de reinicio?

5

Estoy diseñando un sumador en VHDL, y he encontrado varios diseños de VHDL (no necesariamente agregados) que incluyen un puerto de reinicio. Mi sumador tiene registros de entrada y salida. ¿Todos los diseños deben incluir una señal de reinicio? ¿Cuál es el uso de este reinicio?

Editar:

Restablecer el carry_out tiene sentido para mí, porque algunos sistemas lo manejarían como una excepción. ¿Qué pasa con los registros de entrada y la salida de suma?

    
pregunta gilianzz

3 respuestas

8

Casi todos los diseños que tienen un registro o un pestillo deberían reiniciarse. Ahora, si o no ese restablecimiento es algo más que el reinicio de encendido del FPGA es otra pregunta.

La siguiente es una lista incompleta de lugares que siempre deberían tener un reinicio específico (ya sea encendido o diseño específico, como un botón pulsador), y lugares donde probablemente no importa tanto.

Restablecer un debe :

  • Señales de control : cualquier señal que controle el flujo de datos a través de un sistema debe tener una señal de reinicio para garantizar que se encuentren en un estado conocido. Por ejemplo, si tiene un registro que cuando está en el extremo más alto del mundo, probablemente desee saber que no estará alto cuando lo encienda.

  • Señales válidas de datos : cualquier señal que indique que los datos de un bus son válidos. Si restablece el circuito, desea saber que ningún bus de datos está marcado como válido de forma inesperada (por ejemplo, la carga de datos en FIFO).

  • Contadores : las cosas que cuentan probablemente deberían reiniciarse para que sepas en qué valor comenzó a contar. Por ejemplo, si tiene un contador para un divisor de reloj, probablemente desee que se inicie siempre en el mismo punto después del reinicio para garantizar un comportamiento determinista.

  • Máquinas de estado : la mayoría tiene un estado IDLE que se ingresa después de encender o reiniciar para esperar a que ocurra algún evento. Por lo tanto, estos deben tener un reinicio

El reinicio es opcional:

  • Algunos Buses de datos : digo algunos. Cualquiera que esté calificado por una señal válida (ver más arriba) realmente no necesita señales de reinicio, y no agregarlas puede ahorrar presiones de enrutamiento y problemas de temporización con las señales de reinicio, especialmente en grandes buses de datos. La razón por la que no se requieren es porque la señal válida debe reiniciarse. Siempre que la señal válida indique que el bus no es válido, cualquier lógica posterior debe diseñarse para que no se base en el valor de los datos; a los datos en realidad no les importa. Se supone que cambiará el valor del registro de todos modos antes de que afirme que es válido.

  • Circuitos combinacionales puros : cualquier circuito combinacional sin estado. No tiene sentido reiniciar porque la salida del circuito depende solo de las entradas, no hay forma de tener un valor inválido / desconocido después del encendido.

  • Registros no críticos : por falta de un término mejor. Básicamente, cualquier cosa en la que haya verificado en su diseño que funciona bien independientemente del valor en el registro, es decir, no le importa cuál sea el valor. Por ejemplo, si desea probar un circuito sumador como en su caso y simplemente está almacenando señales de entrada y salida, entonces realmente no es necesario un reinicio.

Probablemente hay más para cada lista, pero ese es un buen punto de partida. Si hay algún lugar clave que me haya perdido, hágamelo saber en los comentarios.

    
respondido por el Tom Carpenter
2

Recientemente tuve una discusión con Altera sobre el mismo tema. Curiosamente, dicen que en realidad no necesita una señal de reinicio en los FPGA, siempre y cuando establezca un estado predeterminado para sus registros. Esto se debe a que el FPGA puede garantizar su estado interno cuando se aplica la alimentación.

En cierto sentido, está utilizando el circuito FPGA POR como su reinicio. Puede simplemente reiniciar la alimentación para restablecer el FPGA. Por otro lado, tener un reinicio siempre es una buena práctica. Especialmente si planea migrar a ASICs o diferentes fabricantes de FPGA.

    
respondido por el user110971
1

Editar: aclara que no es el estado de las máquinas de estados individuales lo que no es válido, sino todo el sistema.

Las señales de reinicio son necesarias para los sistemas que contienen máquinas de estado cuando hay estados del sistema no válidos. Los posibles ejemplos serían

  • los motores de protocolo que cuentan los bits: el remitente y el receptor deben acordar dónde está el bit 0.
  • se reinicia una computadora: ahora sus controladores de interrupción ya no pueden atender solicitudes de interrupción, por lo que no se deben generar más solicitudes.

Los estados no válidos se ingresan porque los registros se configuran en valores aleatorios durante el encendido, o debido a errores o influencia externa (por ejemplo, rayos cósmicos que cambian de bits).

La lógica de restablecimiento solo necesita cambiar aquellos registros que tienen una influencia real en el comportamiento externo, por lo que generalmente no hay necesidad de definir estados de restablecimiento para cada registro (aunque varias arquitecturas modernas de FPGA tienen una red de distribución de restablecimiento dedicada, por lo que no hay más los recursos se consumen aquí).

Por ejemplo, un diseño de procesador garantizaría solo que el contador del programa se configuraría en el vector de reinicio y el modo de ejecución en modo supervisor. No es necesario restablecer los registros de usuarios, ya que se espera que el código de inicio los sobrescriba de todos modos.

Si su sumador necesita una señal de restablecimiento depende de la forma en que está diseñado. Un sumador puramente combinatorio no tiene ningún estado, por lo que no hay nada que restablecer.

Si la salida está registrada, podría agregar un restablecimiento que lo borre a cero, pero normalmente lo borraría a 'U' para causar un error en la simulación si ese valor se propaga a un puerto de salida.

Si su sumador tiene un estado adicional (por ejemplo, hay diseños de sumador que solo tienen un único puerto de entrada y agregan el valor a su acumulador), entonces necesitará un reinicio para borrar el acumulador. Si el reinicio está conectado a un reinicio en todo el chip, o generado por la siguiente entidad de envolvente, depende del diseño.

    
respondido por el Simon Richter

Lea otras preguntas en las etiquetas