¿Es este un buen uso de un CPLD?

Estoy tratando de generar algunas formas de onda que están desfasadas de una señal de entrada.

La señal de entrada es de alrededor de 4,4 MHz y es una onda cuadrada al 50 % de servicio. Necesito un cambio de fase de 0 grados y 90 grados de esta forma de onda, y cada onda debe tener un ciclo de trabajo del 50%. Es posible que también necesite desplazar ambas ondas 180 grados, es decir, 180 y 270 grados. (Esto es para vídeo PAL.)

Mi idea era usar un PLL para subir la frecuencia a 17,6 MHz. Luego, un contador de décadas y dos puertas OR generarían las ondas de 0 y 90 grados. Un inversor reinicia el contador para que se desborde en 4. Se necesitaría un chip XOR para el cambio de 180 grados. El PLL sería un dispositivo de tipo 4046 y también necesitaría un contador de división por 4.

Probé esto en un simulador de circuito:

Simulación

Genial... el concepto funciona. Sin embargo, estoy bastante limitado por el espacio de la placa y el costo. Necesitaría cinco chips más el chip PLL para hacer esto. Nunca antes había programado un CPLD, pero parece la aplicación perfecta para uno. ¿Sería capaz de hacer una tarea básica como esta usando un CPLD de gama baja como este ? ¿O 32 macrocélulas serían insuficientes? ¿Existe una estimación aproximada de cuántas macroceldas se requerirían por puerta básica y cuántas se requerirían para un dispositivo complejo, como un contador?

Respuestas (3)

Esto solo aborda la segunda parte de su pregunta, cómo saber qué tamaño de CPLD necesita para un diseño:

Por lo general, la cantidad de lógica que puede incluir en un CPLD está limitada por la cantidad de flip-flops (u otros latches) o la cantidad de E/S en su diseño. Por lo general, obtiene un flip-flop por macrocelda y algo menos de un pin de E/S por macrocelda. El diseño básico permite una E/S por macrocelda, pero a menudo algunas de las E/S en la matriz no están unidas debido al número limitado de pines en un paquete determinado.

Entonces, para tu diseño, tienes 14 chancletas para tus dos contadores y estás bien. Normalmente, no recomendaría usar lógica programable para el comparador de fase en su diseño, pero a 17,5 MHz y si no es muy particular acerca de cómo hace coincidir exactamente la fase de entrada y salida, debería poder salirse con la suya. Aún necesitará un VCO externo y un circuito de filtro. Entonces, con un CPLD de 32 macroceldas, no debería tener problemas para ajustar los elementos digitales de este diseño con algo de espacio para otra lógica de pegamento que pueda necesitar.

Dicho esto, generalmente un diseño para un CPLD tan pequeño es tan simple que puede codificarlo en aproximadamente una hora y usar la herramienta de diseño del proveedor para asegurarse de que encaje antes de seguir adelante. Todos los proveedores de CPLD que conozco ofrecen versiones gratuitas de sus herramientas de diseño que cubren casi todos los tamaños de CPLD.

Finalmente, aunque la estimación de 1 flip-flop por macrocelda es precisa para los CPLD clásicos como el que usted vinculó, algunos proveedores (me vienen a la mente Altera y Lattice) han realizado una importante excursión arquitectónica en sus familias de CPLD más nuevas. Estos dispositivos se parecen más a los mini-FPGA que al CPLD clásico, y no estoy seguro de que calculen sus tamaños "equivalentes a macroceldas" de acuerdo con esta fórmula. Es probable que los nuevos dispositivos tengan más flip-flops por dispositivo, pero no permitan fan-ins muy amplios en la lógica de cada celda.

En cuanto a la otra parte de su pregunta, ¿es este un buen uso para un CPLD? Esa es una pregunta más difícil. No veo ninguna razón para no usar uno, pero tal vez a alguien se le ocurra una forma inteligente de construir este circuito a un costo menor / menos espacio en la placa / menor potencia, o lo que sea.

Algunos FPGA, al menos, tienen PLL integrados. Si puede encontrar un CPLD con un PLL integrado, reducirá el recuento de piezas a un dispositivo.
Miré el Max V de Altera, y no es obvio a partir de una lectura rápida de la hoja de datos si tiene esta capacidad. Lo más probable es que tenga que ir a un FPGA mínimo (Altera Cyclone III más o menos) para obtener un PLL integrado. Si esa es una buena compensación de costos, se necesitaría más investigación.
La hoja de especificaciones del MAX V menciona un "PLL digital" ( ver aquí ), pero no pude encontrar ninguna otra información al respecto. El Xilinx Cool-Runner 2 afirma tener un "Clock-Doubler" que es "Seleccionable para cada MacroCell" ( ver aquí ), pero no estoy familiarizado con las piezas de xilinx.
Xilinx no ha lanzado un nuevo CPLD durante casi 10 años; estoy seguro de que no tendrán un PLL que pueda hacer lo que él quiere (cuádruple). Pero Lattice o Altera pueden tenerlo.
Parece que el "duplicador de reloj" Coolrunner-2 solo se refiere a la capacidad de cada flip-flop para configurarse para activación de doble filo (similar a ddr).
No hay ni cerca de 14 flip-flops en este diseño, ya que las puntas superiores de ambos contadores no están conectadas.
@BenVoigt: De hecho, creo que se parecen más a dos fracasos necesarios.
@BenVoigt, Lo siento, acabo de contar las partes del diseño que describió. No fui a rediseñar todo para él. Pero tienes razón --- él no necesita todas las chanclas en su esquema. Cómo reducir la lógica sería una nueva pregunta.

Sugeriría que un enfoque más simple podría ser simplemente usar un circuito de retardo, en lugar de un PLL. Por ejemplo, alimentar la señal a través de un circuito RC y un comparador cuya entrada está configurada en medio riel puede generar un retraso de fase de poco más de 0 a casi 90 grados; usando dos resistencias y dos condensadores, uno puede empujar el retraso más allá de los 90 grados. Ajusta la resistencia y la tapa y deberías poder obtener un retraso bastante cercano a los 90 grados.

El problema es que la frecuencia de entrada puede cambiar: pensé en usar una red RC fija, pero estoy pensando en trabajar a 3,5 MHz o 4,4 MHz.
No sé qué nivel de precisión y estabilidad está buscando, pero una onda cuadrada perfecta que impulsa un circuito RC que alimenta un comparador que verifica el riel medio producirá un retraso que es inversamente proporcional a la frecuencia. Cuanto mayor sea el RC en relación con la frecuencia, más cerca estará el retraso de 90 grados. La dificultad principal con el circuito es que aumentar RC en relación con la frecuencia reducirá la amplitud de la señal que alimenta el comparador y lo hará más sensible al medio riel.
De particular interés, por cierto, es el hecho de que el retraso no es proporcional a R y C. Si uno usa retroalimentación para generar el medio riel (es decir, ajusta el voltaje del "medio riel" según el ciclo de trabajo de salida) debería ser posible para construir un circuito que sea relativamente insensible a las variaciones de los componentes. Uno podría empujar el retraso a 90 grados agregando un segundo circuito de retraso que se ajustó por un tiempo "absoluto" (pero solo tuvo que lidiar con el error entre la señal de pseudo-90 grados y uno real) o usando un integrador en lugar de una red RC.
Si desea usar un PLL, puede simplificar su lógica usando un par de flip flops D con salidas regulares e inversoras, sincronizadas por la salida de un PLL que se ejecuta a 4x la frecuencia de entrada. Conecte la salida no invertida del primero al segundo y la salida invertida del segundo al primero. Las cuatro salidas (regulares e invertidas, de cada flop) emitirán cada una una onda cuadrada que es 1/4 de la frecuencia PLL, en cada una de las cuatro fases.

Alternativamente, use un FPGA diminuto y el administrador de reloj dentro de él, muchos de los cuales pueden proporcionar el ciclo de trabajo de los relojes de cuatro cuadrantes corregidos. Por ejemplo, consulte la figura 2-2 en la guía del usuario de cronometraje de Xilinx para Spartan-6 .

ingrese la descripción de la imagen aquí

Sin embargo, podría ser un desperdicio si no puede encontrar un uso para la lógica real dentro de él.


(Sin embargo, acabo de revisar la hoja de datos y, para su irritación, solo funciona hasta 5 MHz. ¡Dejaré esta respuesta en caso de que sea de interés para futuros espectadores que operen en frecuencias más altas!)