Tengo dos señales entrantes con las que quiero probar la coincidencia. Pero, primero quiero retrasar todas las señales de un canal en el período en el que se envían las señales (2 ms) y comparar la coincidencia de esta manera. Básicamente, quiero almacenar la información en tiempo real durante 2 ms y luego reproducirla tan pronto como termine de recopilar, y continuar este proceso una y otra vez. ¿Es esto factible usar un FPGA? Estaba pensando en usar uno de los siguientes:
outputA <= inputA after 2 ms;
outputA <= inertial inputA after 2 ms;
outputA <= transport inputA after 2 ms;
pero por lo que entiendo, ¿estos solo se usan para simulación? ¿Qué otro método sería mejor para lograr esa tarea? ¿Usando un registro de desplazamiento o algo similar?
editar:
En mi configuración, tengo dos detectores (módulos de conteo de fotones individuales) que convierten los fotones de luz en una señal digital (3.3V, aproximadamente 50 ns de ancho de pulso). Luego, las señales se envían a una placa Altera DE2, donde se prueban con puertas AND para ver si coinciden (tenga en cuenta que las señales se acortan de 50 ns a alrededor de 15 a 25 ns de antemano, con lógica interna y sin pérdida de tiempo). El reloj de esta placa funciona a 50 MHz, que tiene un flanco ascendente cada 20 ns. El láser envía un pulso cada 2 ms. Los conteos reales y los conteos de ruido aleatorios de estos detectores no siguen el reloj, por lo que no necesariamente compartirán un flanco ascendente o descendente exactamente el reloj de 50 MHz. Probar la coincidencia no es el problema que tengo, lo que debo hacer ahora es retrasar una de las señales por el período del láser y probar la coincidencia en ese momento. Debido a que el láser es muy lento, no es práctico retrasar la señal físicamente (requeriría alrededor de 1 km de fibra óptica). Por lo tanto, estoy tratando de hacer este retraso a través del mismo FPGA. Ahora para reformular mis preguntas:
(1) ¿Es posible mantener la precisión temporal (hasta muy pocos nanosegundos) al usar un búfer FIFO para retrasar una de las señales entrantes , o enviar las señales al búfer perderá eso? ¿Precisión y solo compartir los flancos ascendentes / descendentes con mi reloj? (¿Dice el búfer que el bloque de datos es totalmente cero o totalmente 1, dependiendo de si la señal estaba en estado alto o bajo en el borde ascendente del reloj cuando recopila los datos?)
(2) ¿Cómo podría comenzar a escribir código para un búfer de este tipo? ¿Es esto algo que puedo encontrar una copia en línea o podría haber algún "asistente de búfer" que pueda crear utilizando un programa VHDL como Quartus II? / p>