10 votos

Usando ambos bordes de un reloj

Estoy programando una Altera Cyclone IV utilizando Verilog y Quartus II. En mi diseño, me gustaría usar ambos bordes de un reloj para que yo pueda hacerlo reloj de la división por una extraña factor con un 50% de ciclo de trabajo. Aquí es un fragmento de mi código:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

Ahora, cuando me compilar este, Quartus II arroja el siguiente error:

Verilog HDL Siempre Construir error en adc_clocking.v(83): evento el control no puede realizar la prueba de positivo y negativo de los bordes de la variable "low_jitter_clock_i"

¿Cómo puedo utilizar los aspectos positivos y negativos borde de un reloj en mi diseño?

7voto

GSerg Puntos 33571

Cuando se asigna a un registro en un borde sensible a bloquear siempre, está definiendo un flip-flop. Los FPGAs no han flip-flops que puede desencadenar en ambos bordes de un reloj.

Con el fin de hacer lo que usted quiere, usted va a necesitar para tener dos siempre bloques, uno para cada borde del reloj y, a continuación, encontrar una manera de combinar las salidas de los dos bloques sin crear problemas.

Por ejemplo, uno para bloquear siempre podía contener su divisor programable. Diseño de manera que la salida de ciclo de trabajo es menor que el 50% cuando se da un número impar. El uso de la segunda bloquear siempre (en el otro flanco de reloj) para retrasar la salida de la primera cuadra 1/2 del reloj, a continuación, O las dos salidas juntos. Desactivar la salida del segundo bloque para incluso divisor de valores.

2voto

Martin Thompson Puntos 6509

Si se trata de lógica interna, probablemente tienes que escribir mucho más cercano a las chanclas que están disponibles. Excepto Coolrunner II no me parece de toda lógica programable con registros inherentemente de doble filo.

Por lo tanto, tendrás que crear dos always de bloques, uno para el negedge uno para el posedge y combinar las salidas con cierta lógica combinatoria.

O usar un PLL para duplicar el reloj y entonces puede utilizar lógica convencional solo filo.

2voto

Michael Cramer Puntos 111

Terminé de implementar el ciclo de deber del 50% para los factores de división impar usando el método descrito aquí.

1voto

Alex Andronov Puntos 178

Como Dave Tweed notas, a menos que un FPGA incluye flip flop de hardware que puede operar en ambos bordes de un reloj, será necesario escribir su propia lógica para implementar el comportamiento deseado utilizando convencional de una sola borde chanclas. Mientras que hay un número de maneras diferentes en que uno puede implementar un circuito que se comporta como una doble filo flip flop, circuitos de añadir algo de tiempo restricciones, que son diferentes de aquellos asociados con chanclas.

Por ejemplo, un enfoque simple es tener un módulo de combinación de dos 2-entrada xors y un par de "T" flip flops (donde el estado de la entrada cuando un reloj de pulso llega indica si ese flanco de reloj debe alternar la salida), uno provocado por un flanco de subida y uno provocada por un flanco de bajada. La salida del módulo será el xor de los flip flops' salidas y la entrada a ambos flip flops será el xor de la salida del módulo y su entrada.

Un circuito diseñado en esta moda va a trabajar, esencialmente, como un doble filo flip flop, aunque con más tiempo de instalación y la propagación de las veces, pero con una temporización de restricción. Normal flip flop que no está en una retroalimentación camino no importa si el inicio de un borde de reloj tiene un montón de runt pulsos a condición de que el reloj se estabiliza en un válidos nivel, y siempre que la configuración de restricción de tiempo, medido desde antes de la primera runt pulso y el tiempo de espera y el reloj-activa las limitaciones de tiempo, medido desde el momento en que el reloj de pulso estable se activa, se cumplan. El comportamiento del flip flop de salida será indefinido durante el tiempo que el reloj es inestable, pero se definirá luego de que el reloj se estabiliza. El doble-xor-doble-flop módulo habría que añadir los adicionales de temporización restricción de que cualquier borde de reloj que iba a cambiar la salida debe ser a una distancia segura de cualquier otro flanco de reloj que podría hacerlo. El no cumplir esta restricción, por ejemplo, por tener tres reloj bordes muy cerca de sucesión, mientras que la entrada no coincide con el de salida, podría dejar el resultado en un indeterminado o estado metaestable (tenga en cuenta que los escenarios que implican un número par de aristas, no son una preocupación, ya que estas situaciones implican nada pero runt pulsos; los tres casos de borde (u otro número impar de los casos mayor que uno) son una preocupación debido a que habría un pulso válido siguiente el runt pulsos.

Una alternativa de diseño de circuitos sería tener los dos flip flops como el anterior, sino que se alimentan de sus salidas a un multiplexor. Este circuito no iba a ser lanzada en mal estado por el runt pulsos, y su sincronización restricciones sería el mismo que el subyacente de los cierres, pero tienen la desventaja de que una salida, que era alto y debe permanecer (o era baja y debe permanecer bajo) por lo que podría glitch brevemente en un flanco de reloj. En algunos circuitos que no importa, pero en otros, lo haría.

Probablemente sería posible para la síntesis lógica herramientas para la aplicación de doble filo chanclas automáticamente mediante el análisis de lo que falta de tiempo se han especificado como importante, pero hacerlo sería un poco difícil. También aumentaría el riesgo de que un pequeño cambio en un diseño que podría causar un cambio importante en la aplicación y por lo tanto el rendimiento de un importante e inesperado cambio en el comportamiento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X