¿Es aceptable la teoría de operación detrás de mi diseño de FPGA?

2

(Esta pregunta está algo relacionada con una pregunta anterior mío.)

Estoy tratando de usar un FPGA para conducir una tira de LED que contiene varios circuitos integrados WS2801. ( hoja de datos WS2801 ) La premisa operativa del WS2801 es simple: reloj en 24 bits de datos (8 bits cada uno para R, G, B) y luego dejar el reloj en baja para 500µs. Esto hace que el WS2801 retenga los datos y cambie el color del LED. Si tiene una tira de múltiples WS2801 en serie, registra en 24 bits * (Número de circuitos integrados) y luego mantiene presionado el reloj para bloquearlos a todos. Simple, ¿verdad?

Por lo tanto, he creado un módulo "Controlador de prueba WS2801", cronometrado a 2MHz. (Las reclamaciones de la hoja de datos pueden ejecutarse a una velocidad de hasta 25 MHz, pero aún tengo que probar esto en la práctica).

Básicamente, mi controlador es un registro de desplazamiento (con un valor de 72 bits precargado) y un contador. ¿Por qué 72 bits? Quería probar una cadena de 3 IC WS2801. En la práctica, necesito cargar datos desde algún tipo de búfer ... cosa. (Cualquier sugerencia para eso sería apreciada pero parece que está fuera del alcance de esta pregunta).

Aquí hay un diagrama de bloques simple:
Agregaré un diagrama de bloques más preciso en un momento, no creo que la habilitación del reloj se muestre con precisión.

Elrelojsecomparteentreelregistrodedesplazamientoyelcontador.Despuésde72marcas(todoslosdatosahorasehandesplazado),lasalidadeloscontadoresbaja,loquedesactivalasalidadelrelojyevitaquelosdatossedesplacen.Esteeseliniciodelretardoderelojde500µS.
Elrelojobviamentesiguecorriendoelcontador,quesiguecontando.Ahoraelcontadorespera1.000ticsyluegoaumentalasalida,loquepermiteelrelojdesalidaylasalidadedatosenserie.

¿Porqué1,000tics?-A2MHz,elperiodoesde.5µs.Parallegara500µS,necesitamos500/.5=1,000ticks.Enlapráctica,hedescubiertoquenecesitoagregarunpocodefactordefudge:1.032ticks,enrealidad.Estopuededeberseaunretrasoenelenrutamientoopropagacióndelrelojoalgoporelestilo.Realmentenoloheinvestigadotodavía.

Eldiseñoimplementadoparecefuncionarbien.Mirélassalidasenunanalizadorlógico,todopareceestarbienyestoyobteniendoloscoloresdelosLEDqueespero.

Mipreguntaes:

¿Esesteunbuendiseño?
Sihayunmejormétodoparahacerlo,¡sugiéralo!

Sileyóelenlaceamipreguntaanterior:¿ParecequeestediseñoseintegrarámuybienenlaimagenmásgrandedelacreacióndeunFPGA Ambilight clone?

¡Gracias por leer!

    
pregunta dext0rb

3 respuestas

1

Agregaré un poco a la respuesta de Brian Carlton.

Dentro de un FPGA, es correcto; relojes cerrados no son en absoluto recomendados. Y los flip-flops tendrán una entrada ENable por separado para que no sea necesario.

Sin embargo, en su caso, debido a que su reloj cerrado solo va al pin de salida y no se usa internamente para el FPGA, puede controlar su reloj sin penalización. La forma de hacerlo es asegurarse de que la sincronización del reloj se realiza en el bloque de salida. Suponiendo que está utilizando Xilinx, en lugar de crear una instancia de OBUF para la salida de su reloj, use OBUFT , y obtendrá acceso al pin triple del búfer de salida. Si está utilizando los FPGA de otro proveedor, habrá una manera igualmente fácil de hacer esto.

Si prefiere hacer esto usando inferencia en lugar de creación de instancias, deberá asegurarse de habilitar una opción durante la compilación para insertar la lógica en los bloques de E / S. Si el reloj cerrado realmente se despliega (pero no lo mostró en su diagrama), también deberá habilitar una opción que permita generar lógica duplicada.

    
respondido por el The Photon
5

En general, cerrar un reloj es una mala idea. Esa puerta causa retraso. Esto puede hacer que el reloj del receptor llegue después de que lleguen los siguientes datos, lo que provocará violaciones del tiempo de espera.

De lo contrario, su diseño es razonable.

    
respondido por el Brian Carlton
1

¿Por qué esperas que el FPGA sea controlado por? Si algo va a alimentar 72 bits en él, creo que eso también podría conducir los LED directamente. De lo contrario, si desea algo para probar las luces, puede ser bueno diseñar un generador de patrones de prueba que pueda alternar entre unos pocos modos de salida (por ejemplo, todo blanco, todo oscuro, claro y oscuro, alternando, negro / rojo / verde) azul (repetido ocho y 24 ceros), etc. Quizás un patrón de arco iris que se desvanezca y se vea bien también podría ser bonito.

    
respondido por el supercat

Lea otras preguntas en las etiquetas