¿Razón detrás de la demora de la tubería de funciones de división de Altera?

3

En Quartus II, la función lpm_divide estándar tiene un parámetro PIPELINE_DELAY . El valor predeterminado es floor(WIDTH_Q div 2) , donde WIDTH_Q := ancho del cociente en bits.

Tengo curiosidad por saber por qué este es un parámetro para que el usuario cambie (en lugar de ser lo que sea), y no puedo ver por qué este valor predeterminado es el caso.

    
pregunta OJFord

1 respuesta

6

Un divisor es una serie de restas y multiplexores que seleccionan el valor para el siguiente paso. Si se hace de manera puramente combinatoria, entonces el camino crítico a través de toda esta lógica es bastante largo (incluso con el sistema de búsqueda anticipada en los sustractores) y el ciclo del reloj debe ser muy lento.

Pero el proceso es fácil de canalizar, y el número de etapas de tubería que puede usar es bastante arbitrario. Puede insertar un registro de canalización después de cada par restar-mux, o puede elegir hacer dos o más etapas de restar-mux por registro de tubería (dos parece ser el valor predeterminado). Incluso podría llegar a canalizar los restas y los muxes por separado (o incluso canalizar dentro de cada resta) para obtener la velocidad de reloj más rápida posible, pero esto sería bastante extremo.

Cuantos más registros de canalización utilice, más corta será la ruta crítica (y el período de reloj), pero utilizará más recursos (los registros). Además, la latencia general aumenta, ya que debe tener en cuenta los tiempos de configuración y propagación de los registros de la tubería en el período del reloj (además de los retrasos de lógica de resta de mux). Esto se multiplica por el número de etapas de canalización para calcular la latencia total.

Esta es la razón por la que le dan el control de este parámetro, es para que pueda seleccionar la compensación correcta para su aplicación en particular.

Tenga en cuenta que, independientemente del valor de este parámetro, con este módulo, obtendrá un resultado por ciclo de reloj. Si no necesita este nivel de rendimiento, usaría un módulo diferente que calcula el cociente en serie, un bit (o posiblemente más de uno) a la vez.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas