Verilog - Una línea permanece alta, necesito que se quede baja después de un tiempo

4

Estoy trabajando en un circuito en Verilog para implementarlo en un CPLD. La salida del circuito impulsará un motor paso a paso. La entrada es un flujo de pulsos de una máquina.

Genero un pulso paso a paso cada X pulsos de husillo. No hay problema, funciona muy bien.

Sin embargo, mientras simulaba, noté que si la señal del paso a paso es alta cuando los impulsos del huso se detienen (por ejemplo, alguien apaga la máquina), la señal del paso a paso permanece alta. Esto se debe a que lo puse de nuevo en el borde anterior del pulso del husillo, y no hay más.

Esto significa que (con una implementación deficiente) el paso a paso podría ejecutarse a velocidad máxima , lo que provocaría un bloqueo de la máquina. Ahora, espero que el controlador paso a paso funcione solo en la vanguardia, pero nunca se sabe.

Finalmente, la pregunta, ya que no puedo depender de mi 'reloj' (los impulsos del cabezal) para continuar hasta el infinito, ¿cuál es una buena manera de reducir el pulso paso a paso después de 'un rato'?

Como puede ver, ni siquiera puedo describirlo correctamente, así que no puedo buscarlo en Google, jajaja. Si alguien me pudiera proporcionar algunas palabras para buscar (o mejor aún, describir una técnica estándar) me iré a las carreras.

¡Gracias!

EDITAR -

Estoy experimentando con lo siguiente (escrito de memoria ...) ¿Es esta tristeza o una buena idea?

always @(posedge Stepper) begin
     #50 // or whatever, this is a low Hz system...
     Stepper = 0;
     end

¿O la demora solo funciona en el simulador?

    
pregunta Tony Ennis

1 respuesta

6

La mejor manera (dependiendo de lo complejo que sea su diseño final) sería utilizar un oscilador CMOS rápido separado para el reloj de su sistema CPLD, y hacer que procese los pulsos de entrada y emita el pulso paso a paso. De esta manera, el reloj está funcionando todo el tiempo cuando el sistema está encendido, y puede cronometrar el período desde el último impulso de entrada; si está por encima de un cierto límite, establezca el nivel de la línea paso a paso.

Esta es la forma en que funciona un diseño síncrono típico, tiene un reloj de sistema independiente y se utiliza para "leer" (es decir, en un registro) y procesar señales asíncronas externas (a diferencia de las señales externas que registran la lógica directamente). )

Otra forma más sencilla sería tener otra línea de "reinicio" de entrada que establezca todos los registros y salidas en un estado determinado cuando se apague. Luego, podría usar un filtro de paso bajo RC simple en los pulsos de entrada, de modo que cuando se detengan, la línea descienda y el CPLD se reinicie.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas