5 votos

Temporización de dos líneas paralelas en la FPGA [Principiante]

Así que supongamos que quiero hacer cierta acción basada en cierta señal. Tengo la señal "nx"; si es 1, quiero "NO" una entrada X(16bit) y si no lo es, quiero la X sin cambios.

Mi idea era hacer las dos cosas y fanout en MUX y decidir qué salida utilizar en función del bit "nx". Pero no estoy tan seguro de si funcionaría en hardware real (o incluso FPGA para el caso), porque el carril que no cambia nada va a ser llevado a cabo más rápido que el que tiene puertas "NOT" en él.

Two lanes into mux, 1 NOT 1 w/o NOT

¿Es correcto lo que he entendido? Y si es así, ¿es un problema incluso en la FPGA (esas operaciones realmente "comen" ciclos de reloj)? Y si es así, ¿cómo se puede resolver este sencillo problema?

5 votos

Las cosas en una FPGA no "comen ciclos de reloj" en la forma en que estás pensando. Todo lo que pongas en un proceso tomará un ciclo de reloj. Si el sintetizador no puede enrutar ese proceso y cumplir con tus restricciones de reloj, te lo dirá y tendrás que modificar el diseño, o correr con un reloj más lento. Esta "manualidad" te permite cronometrar todo lo que ocurre en una FPGA hasta el ciclo de reloj, a diferencia de un procesador en el que no tienes un control total de cuántos ciclos de reloj puede llevar algo.

6 votos

Así que un camino puede ser más rápido que el otro. Cada circuito combinatorio tiene caminos de diferente longitud. Pero mientras le des suficiente tiempo para propagarse tendrás el resultado correcto. Por eso tenemos la noción de "camino crítico". Los circuitos combinatorios no tienen relojes.

1 votos

"Los circuitos combinatorios no tienen relojes", eso lo resume todo muy bien. ¡¡¡Muchas gracias a los dos por las impresionantes respuestas!!! Echaré un vistazo a las advertencias, si es que surge alguna entonces

1voto

duskwuff Puntos 1570

¿Es correcto lo que he entendido?

Aparte de su malentendido de los "ciclos de reloj", que se ha abordado en los comentarios, su intuición sobre el tiempo de propagación es realmente incorrecta aquí.

La función que describes se implementaría como una única 2-LUT para cada bit de X (con la función Xout[i] = X[i] ^ NX ), no como dos trayectorias combinatorias separadas. El tiempo de propagación de la LUT es independiente de la lógica a partir de la cual se ha sintetizado.

En la práctica, esta 2-LUT probablemente sería absorbida por las LUTs utilizadas para otra lógica que rodea esta función.

0 votos

Oh .. Nunca pensé en usar XOR para esto. ¡Genial! ¿Hay alguna regla (aparte del álgebra booleana básica o la práctica) para averiguar estas soluciones? Todavía estoy aprendiendo las cuerdas

0 votos

Estoy de acuerdo, la mayoría de la lógica se convierte en LUTs para una FPGA, pero no creo que puedas estar seguro de que todas las rutas de retardo tendrán exactamente la misma temporización a través de una LUT/multiplexor. Las entradas de selección necesitarán ser invertidas, entonces sus valores verdaderos y complementarios seleccionarán una entrada mux. El inversor para las líneas de selección introducirá algún sesgo en los retrasos de la ruta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X