Estaba estudiando sobre el diseño de FPGA y luego encontré estos términos Throughput
y Latency
. Entonces, el autor proporcionó un ejemplo de una implementación altamente segmentada para encontrar la raíz cúbica de un número:
que aparentemente tiene el siguiente diagrama lógico:
Luego, el autor ha intentado reducir la 'Latencia' escribiendo el código de esta manera:
que se desenrolla así:
Mi pregunta es para mí, ambas implementaciones parecen casi idénticas, entonces, ¿en qué se diferencian? Entiendo la asignación de bloqueo y no bloqueo, pero ¿cómo están causando un diagrama lógico diferente en este caso? ¿ Cómo está disminuyendo la latency
del circuito en el segundo caso?
Lógicamente hablando, tienes razón, son idénticos. Sin embargo, la primera implementación está cronometrada (tenga en cuenta las @(posedge clk)
sentencias always frente a las @*
sentencias de la segunda), por lo que tiene una latencia mínima de tres ciclos que se determina a partir del período del reloj. La segunda implementación se calcula de forma completamente asincrónica, por lo que su latencia depende solo de la velocidad de su tecnología (qué tan rápido se resuelven las multiplicaciones y los retrasos en el enrutamiento).
Lo que ilustra este ejemplo es que muchas funciones digitales se pueden implementar de una manera muy canalizada o en una ruta lógica larga, o en algún punto intermedio. El que elijas puede depender de muchos factores. La primera implementación es menos eficiente en cuanto a recursos, ya que utiliza muchos registros adicionales para almacenar los valores canalizados de un ciclo a otro. El segundo es más eficiente en recursos , pero si lo coloca en un sistema síncrono que se ejecuta a una frecuencia de reloj alta , será más difícil cerrar el tiempo porque encaja mucha lógica en un ciclo.
En particular, ambas implementaciones tienen un rendimiento equivalente . Ambos pueden manejar un cálculo cada ciclo de reloj, solo que la primera implementación proporcionará la salida tres ciclos de reloj después de recibir las entradas correspondientes.
DuttaA
always
declaración hace la diferencia? ¿Qué pasa con los registros? ¿Por qué no está allí en la segunda implementación?jalalipop
DuttaA
jalalipop
DuttaA
jalalipop