Soy nuevo en VHDL. Me dieron este código en cómo generar una señal de reloj de 1 hz (50 % de ciclo de trabajo) de la entrada de la señal de reloj de 24 MHz. Tengo algunas preguntas para más aclaración.

  1. Cómo es el contador de límite elegido? en el siguiente caso, 12000000. ¿
    sería este límite se si quiero generar un 8 hz de la señal de reloj.
  2. ¿Cómo debe el código se puede ajustar si yo quería cambiar el ciclo de trabajo
    el 80% ?

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    entity clock is
       port ( CLKin: in std_logic;
              reset: in std_logic;
              CLKout: out std_logic);
    end clock;
    architecture arch of clock is
    
      signal counter: integer:=0;
      signal temp : std_logic := '1';
    begin
    process(CLKin,counter,reset)
    begin
       if(reset='0') then counter<=0; temp<='1';
        elsif(CLKin'event and CLKin='1') then counter <=counter+1;
         if (counter = 12000000) then temp <= NOT temp; counter<=0;
         end if;
        end if;
       CLKout <= temp;
    end process;
    end arch;
InformationsquelleAutor Fatima | 2013-02-24

1 Comentario

  1. 8

    Desea dividir un reloj de 24MHz, siendo 24000000 Hz, 1 Hz.
    Por lo que se crea un contador que se incrementa cada flanco ascendente de la CLKin (24 MHz).
    Después de 24000000/2=12000000 cuenta, usted está en el medio. Que es donde cambia el valor de nivel de la señal de salida (temp <= not temp). Porque spec decir que debe ser un ciclo de trabajo de 50%. Al hacerlo, usted también comienza a contar de nuevo desde el principio.

    De 8MHz, tiene un contador (24000000/8)/2 = 1500000.

    Y sólo una pequeña observación: es mejor usar el ieee.numeric_std biblioteca i.s.o el ieee_logic_arith y la ieee.std_logic_unsigned

    Nota: el código es primero asignar a una señaltemp. Y, a continuación, la señal temp a la salida de clkout. La razón detrás de esto es que en VHDL no se puede leer de un puerto de salida (clkout). Y usted debe leer de ella al hacer la output <= not output;. A partir de una señal, la lectura es permitido.

    Y una nota más: en la sensibilidad a la lista del proceso, no es necesario tener el counter señal.

    process(CLKin, reset) -- no counter needed

    Y, otra cosa… Contando 12000000 ciclos es: 0 -> (12000000-1) = 11999999

Dejar respuesta

Please enter your comment!
Please enter your name here