Je suis sur un projet en licence d'électronique, ou il nous est demandé de faire un diviseur de fréquence de 100Mhz à 5Hz. On nous a fournis le code d'un diviseur de 100Mhz à 25Mhz, qui consiste à diviser par 4 la fréquence, donc avec un compteur sur 2 bits car 2^2=4 si j'ai bien compris.
entity ClkDiv is
Port ( clk100,reset : in STD_LOGIC; -- Horloge 100 Mhz et Reset Asynchrone
clk25 : out STD_LOGIC); -- Horloge 25 MHz
end ClkDiv;
architecture Behavioral of ClkDiv is
-- Registre Horloge 25 MHz
signal clk: std_logic_vector(1 downto 0);
begin
-- Affectation Port de Sortie
clk25<=clk(1);
--------------------------------------------
-- DIVISION PAR 4 DE L'HORLOGE 100 MHZ
process(clk100,reset)
begin
if reset = '0' then
clk <= "00";
elsif rising_edge(clk100) then
clk <= clk + '1';
end if;
end process;
end Behavioral;
Cependant, je dois diviser ma fréquence initial de 100Mhz par 20 million, ou alors ma fréquence de 25Mhz par 5million. Comme ce ne sont pas des puissances de 2, je me demande comment faire ?
if reset = '0' then
clk <= "00";
elsif rising_edge(clk100) then
if clk < DIVISEUR then
clk <= clk + '1';
else
clk <= 0;
end if
end if;
Tu as donc un compteur qui ira de 0 à DIVISEUR-1
Maintenant, histoire de ne pas faire tout l'exo à ta place, je te donne des indices:
- Je suppose que tu veux ton 5Hz avec un rappor cyclique de 50% ? Si oui, fais du 10Hz et divise par 2. Si tu veux une impulsion d'une certaine longueur à 5 Hz (un genre de PWM) alors ajoute un comparateur sur ton compteur.
- Si tu as besoin de fréquences intermédiaires, tu peux utiliser une cascade de diviseurs (genre 7 fois 10 puis 2 ou autre)
Il existe des compteurs qui se rechargent à partir d'un autre registre.
Le registre contient le diviseur. Si tu veux diviser par 13, le registre ccontiendra 13.
Imaginons un compteur descendant qui commandera sa recharge sur l'underflow et que cet underflow est envoyé en entrée au système que tu veux contrôler.
Est-ce que cela a du sens?
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.