Flip-flop vs descripción combinatoria: ¿cuál es exactamente la diferencia?

5

Estaba revisando un diseño de referencia de la Wiki de Altera y encontré el siguiente código:

always @* begin
   in_ready <= out_ready || ~out_valid;
end

Tengo entendido que tener un flip-flop como el que ayuda a obtener un tiempo más determinista, la herramienta de síntesis puede rehusarse a sintetizar si el out_ready || ~out_valid de demora combinatoria excede el límite y no se cumplen los requisitos de tiempo, etc. Aparte de eso, eso debería ser En equivalente a la siguiente descripción combinatoria:

assign in_ready = (out_ready || ~out_valid);

Lo que me hizo pensar en eso es el código más grande que estoy preparando. A veces, la lógica combinatoria se usa para controlar la salida "lista" de algunos módulos, pero a veces este estilo. Realmente no puedo detectar una diferencia funcional y ver una explicación obvia.

He leído en alguna parte que la lógica combinatoria no es bienvenida en los FPGA debido a problemas de tiempo y siempre se prefiere el diseño sincronizado, y este proyecto se enfoca específicamente en los FPGA. Pero la mezcla es lo que me confunde. Así que dos preguntas surgieron en mi cabeza:

  1. ¿Cuándo y por qué una solución debería preferirse a otra?
  2. ¿Hay alguna diferencia en el comportamiento (o análisis del diseño) cuando la salida del módulo es "reg" frente a cuando es un "cable"?

Cualquier ayuda es apreciada. Gracias.

    
pregunta

2 respuestas

4

Si usa un flip flop, entonces los cambios en la lógica combinacional solo "aparecerán" en la salida del flop en el borde del reloj. En general, con la lógica combinatoria, obtendrá todo tipo de transiciones espurias mientras la lógica se "asienta" en su valor final. Si las transiciones espurias son algo malo en su diseño general (lo más probable es que lo sean), querrá "filtrarlas" usando un flip flop de esta manera. Estos cambios transitorios en las salidas combinacionales cuando cambian las entradas generalmente se denominan "peligros".

En términos del hardware que está generando en ambos casos, obtendrá la misma lógica combinacional generada en su FPGA en ambos casos (out_ready || ~ out_valid). La diferencia es que, en el primer caso, simplemente está creando un alias de la red de salida de la lógica combinacional con el nombre in_ready, mientras que en el otro caso, está conectando la salida de la lógica combinacional a la entrada de un flip flop cronometrado.

En resumen, no hay nada malo con la lógica combinatoria, y sería muy difícil diseñar algo útil en un FPGA que no incluyera un montón. Ejecutar la salida a través de un flip flop aísla la siguiente "etapa" (es decir, el consumidor) de su lógica para que no vea las transiciones espurias de esa lógica que ocurren de manera inherente cuando cambian las entradas (este patrón de diseño, por cierto, es lo que forma la tubería, por ejemplo, en la moderna CPUs - se trata de). ¡Recuerda pensar en los FPGA y la lógica digital como hardware al escribir Verilog (porque eso es lo que son después de todo)!

Además, en una nota al margen, el determinismo no es algo que se mide en una escala móvil, algo es o no es determinista, final de la historia.

    
respondido por el vicatcu
2

Todos los flip-flops están controlados por lógica combinatoria (aunque podría ser una lógica muy simple, ¡como un cable!), no se puede evitar sensiblemente la lógica combinatoria.

Lalógicacontrolaelpin'D'delflipflopyelvalorsecopiaalasalidaQen(normalmente)elbordeascendentedelaentradadelreloj.

Larazónporlaqueserecomiendaasegurarquecadaunodesussubmódulosdentrodeundiseñograndetengaflipflopsensussalidasesqueayudaadividirlalógicaenpartesseparadasquesonindependientesentresíentérminosdetiempo.Notesorprendeunalargacadenadelógicaque"aparece" cuando conectas en cascada un montón de módulos supuestamente independientes.

Sin embargo, a veces, no puede permitirse esperar el siguiente ciclo de reloj: las señales listas / válidas a menudo son así, y luego no tiene más remedio que enviar la señal combinatoria "en bruto" al consumidor.

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas