Alternando entre 3 frecuencias

1

Actualmente tengo un programa que se ejecuta en la frecuencia X, con la entrada de reloj generada por un módulo de reloj lento que divide el reloj predeterminado a través del método de incremento de contador.

Sin embargo, deseo poder cambiar entre 3 frecuencias, X, Y y Z presionando los botones. He abonado los botones con un solo módulo generador de señal de pulso (usando d flip flops). ¿Cómo puedo hacerlo utilizando solo conceptos rudimentarios (multiplexor, etc.)? Además, ¿debería implementarse la lógica dentro del módulo de reloj lento o en el módulo principal?

Gracias.

simular este circuito : esquema creado usando CircuitLab

    
pregunta stephchia

2 respuestas

1

Ya que etiquetó su pregunta con , asumiré que realmente estás buscando una solución HDL dirigida a un FPGA. En este caso, usar un único divisor programable tiene mucho más sentido que tener múltiples divisores seguidos de un multiplexor. Algo como esto:

module clockdiv (
  input         master_clock,
  input         reset,
  input   [1:0] select,
  output reg    clock_out
)

  reg    [15:0] divider;

  always @* begin
    case (select)
      2'b00: divider <= X; // defined elsewhere
      2'b01: divider <= Y; //
      2'b10: divider <= Z; //
      2'b11: divider <= W; // ... etc.
    endcase
  end

  reg    [15:0] counter;

  always @(posedge master_clock) begin
    if (reset) begin
      counter <= 0;
      clock_out <= 0;
    end else begin
      if (counter >= divider) begin
        counter <= 0;
        clock_out <= !clock_out;
      end else begin
        counter <= counter + 1;
      end
    end
  end
endmodule

Defina X , Y , Z , etc. para obtener los índices de división de reloj que está buscando, teniendo en cuenta que el reloj de salida se divide por 2 para producir una onda cuadrada.

Esta solución nunca producirá un pulso de reloj malo, incluso si la entrada select cambia en medio de un ciclo de salida.

Abordando su problema secundario de controlar las líneas de selección, la clave aquí es llevar las dos señales de pulsador de rebote al mismo dominio de reloj que el resto de la lógica. Algo como esto:

module up_down (
  input            master_clock,
  input            reset,
  input            button_up,
  input            button_down,
  output reg [1:0] count
)

  // Synchronizers and edge detectors for asynchronous inputs
  reg              button_up_a, button_up_b, button_up_c;
  reg              button_down_a, button_down_b, button_down_c;

  always @(posedge master_clock) begin
    button_up_a <= button_up;
    button_up_b <= button_up_a;
    button_up_c <= button_up_b;

    button_down_a <= button_down;
    button_down_b <= button_down_a;
    button_down_c <= button_down_b;

    if (reset) begin
      count <= 0;
    end else begin
      if (button_up_b && !button_up_c) begin
        //rising edge on button_up detected
        count <= count + 1;
      end else if (button_down_b && !button_down_c) begin
        //rising edge on button_down detected
        count <= count - 1;
      end
    end
  end
endmodule

Conecte la salida count de este módulo a la entrada select del módulo anterior.

    
respondido por el Dave Tweed
-1

En términos reales, su U3 sería un dispositivo llamado "Selector de datos" o "Multiplexor". Busque en los dispositivos estándar de la familia 7400 Logic, como el 74ACT150, 74ACT151,74ACT152 o 74ACT153. Estos son dispositivos genéricos que están disponibles en varias de las familias de la serie 7400, tales como HC, HCT, AC, LS, F, etc. 74HC150 y 74HCT150 son lógicamente equivalentes, pero sus características eléctricas de entrada y salida son diferentes.

Los selectores de datos tienen entradas de "selección de datos" que configura en un 0 o 1 lógico en varias combinaciones para seleccionar la entrada que desea que aparezca en su salida. En su caso, podría conectar un interruptor de botón a cada uno de estos para seleccionar cuál de las tres frecuencias desea dirigir a la salida de U3. Con un poco más de trabajo, puede conectar las entradas de "selección de datos" a las salidas de un contador IC. P.ej. un 74HC93. Luego use el interruptor de botón para conducir este contador IC. A medida que realiza el ciclo del botón pulsador, las 7493 salidas de bit menos significativas seguirán el patrón de un conteo binario (00,01,10,11,00,01,10,00). Estos patrones llevarán al selector de datos a sus diferentes estados de selección de entrada a salida.

Obtenga las hojas de datos de estos circuitos integrados de la serie 7400 de DigiKey, etc. y estudielas. Encontrarás que los conceptos involucrados son bastante simples.

    
respondido por el FiddyOhm

Lea otras preguntas en las etiquetas