Implementando un contador en VHLD con el borde activado desviado

1

Todavía estoy dando mis primeros pasos para aprender VHDL y después de un par de días todavía no pude encontrar una solución para este problema.

Lo que estoy tratando de hacer es implementar un controlador LCD en un CPLD Altera MAX II que recibirá señales de un dispositivo existente.

Una de las señales es la señal de trama que es alta mientras se recibe una trama y, de lo contrario, baja. También tengo una señal de reloj que cambia de estado bajo a alto para cada píxel de datos disponible.

En mi CPLD tengo una línea y un contador de columnas que deben restablecerse en el primer borde ascendente del reloj , después del comienzo de cada cuadro y el contador de columnas debe incrementarse en cada flanco ascendente del reloj.

Lo que estoy tratando de lograr está representado en el siguiente diagrama.

Elproblemaalquemeestoyenfrentandoesquesiintentorestablecerloscontadoresenelbordeascendentedelaseñalframeeincrementarlosenelbordeascendentedelaclkseñalmesaleelsiguienteerror:

Error(10821):HDLerroratAddressController.vhd(116):can'tinferregisterfor"line[0]" because its behavior does not match any supported register model

Creo que debería ser una forma fácil de hacer esto, pero tengo problemas para resolverlo.

    
pregunta Bruno Ferreira

1 respuesta

3

No puede conducir un solo flip-flop (como el que podría usar para implementar una máquina de estado síncrona) con dos señales de reloj diferentes. En general, cuando necesita reaccionar a los bordes en múltiples señales de esta manera, necesita usar una máquina de estado asíncrona. Desafortunadamente, las técnicas de diseño para ASMs ya no se enseñan ampliamente.

En este caso específico, podría usar un simple cierre R-S. Este pestillo se establecería con un mínimo en la señal frame , y se borraría con un máximo en la señal clk . Llame a la salida de este latch first . En su contador, que está controlado solo por la señal clk , si se establece first , borra el contador; de lo contrario, incrementas el contador.

Cuando intente sintetizar este código (especialmente para un FPGA), indudablemente recibirá una o más advertencias sobre este circuito de retroalimentación combinatoria; solo tendrá que ignorarlos. O si sus herramientas lo permiten, agregue una excepción específica para este caso.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas