divisor de reloj secuencial

-1

Soy nuevo en la programación VHDL. Quiero tener un divisor de frecuencia de una señal de reloj de entrada por 2 enteros consecutivos x, y cada uno de ellos dura 2 ciclos. En realidad lo escribí solo para x. ¿Cómo puede durar el ciclo del reloj dos períodos? a continuación es mi código, gracias por su respuesta.

library ieee;
use ieee.std_logic_1164.all;

entity clk_divider is
            generic(
                    x:integer:=2;
                    y:integer:=3);
            port(   clk_in:in std_logic;
                    clk_out:out std_logic);
end entity;

architecture beh of clk_divider is
        begin
                process(clk_in)
                        variable tmp:std_logic:='0';
                        variable count1:integer:=0;
                        --variable count2:integer:=0;

                        begin
                            if (rising_edge(clk_in)) then
                                    count1:=count1+1;
                                    if(count1=x-1) then
                                        tmp:=not tmp;
                                        count1:=0;
                                    end if;
                            end if; 
                        clk_out<=tmp;
                        end process;
end architecture;  
    
pregunta Ehsan

1 respuesta

0

En general, los relojes deben modificarse solo mediante el uso de PLL / DCM, por lo tanto, no deben realizarse mediante el uso de lógica ordinaria. La razón es que el manejo del reloj y el FPGA / ASIC requieren enrutamiento y restricción por separado, para que las herramientas funcionen correctamente.

En lugar de generar un reloj derivado, puede usar el reloj original, pero luego hacer una señal de habilitación, por ejemplo, un cálculo solo actualiza el resultado cuando se valida la señal de habilitación.

    
respondido por el Morten Zilmer

Lea otras preguntas en las etiquetas