El multiplexor de frecuencia, consiste en un coodigo mediante el cual podemos asignar diferentes frecuencias a una sola salida con solo presionar una combinacion de valores, en este caso, usaremos como selector un switch de dos bits.

 Un multiplexor, es un dispositivo digital que mediante un selector S. permite indicar cual de las entradas in, sera la que ira a la salida out. el numero de salidas sera 2^S,  es decir,el numero de salidas sera dos elevado al numero de selectores, en este caso seria 2^2. lo cual resulta en 4 salidas.




en verilog es un poco parecido existe una forma simple de crear un multiplexor mediante asignaciones "assign" el mismo consiste en declarar la salida y en funcion de un cambio  en selector en este caso s, condicionamos a que mande una entrada u otra.

condicional ?

En el diseño de hardware con Verilog, a menudo necesitamos realizar asignaciones basadas en condiciones. El operador ternario (? :) es una herramienta poderosa que nos permite tomar decisiones rápidas en una sola línea de código. Además, el uso del símbolo ? como un comodín, o "don't care," nos da aún más flexibilidad para especificar condiciones donde ciertos bits pueden ser ignorados.

ejemplo: Mostrar código Verilog

Código Verilog



module MUX(     
   input clk,           
output reg  out, 
 input [1:0]s            );



assign out = (s == 2'b10) ? 1'b1 : 
             (s == 2'b11) ? 1'b0 : 
             1'b0;

endmodule
    

Caso del multiplexor de frecuencia

el el caso del multip[lexor de frecuencia seria lo mismo la diferencia seria 
que el 1'b1 o el valor despues de ? puede reemplazarse por lo que querramos, en este caso por la salida de reloj, clkout equivalente a cualquiera de las frecuencias que tengamos. Mostrar código Verilog

Código Verilog


module MUX(     
  input clk,           
  input [1:0] s,          
  output reg out
);

  reg frecuencia0, frecuencia1, frecuencia2, frecuencia3;

  always @(*) begin
    out = (s == 2'b00) ? frecuencia0 : 
          (s == 2'b01) ? frecuencia1 : 
          (s == 2'b10) ? frecuencia2 :
          (s == 2'b11) ? frecuencia3 :
          1'b0;
  end

endmodule
    


para tener un ejemplo mas detallado accede a nuestro canal de youtube, donde estaremos realizando y probando el codigo con todos los divisores, para crear varias frecuencias solo es cuestion de copiar el divisor que creamos anteriormente en la seccion, divisor de frecuencia, y pegarlos varias veces reemplazandoles el nombre a las variables en cada divisor.