Partage
  • Partager sur Facebook
  • Partager sur Twitter

Diviseur de fréquence VHDL

FPGA

11 mars 2017 à 10:21:22

Bonjour,

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 ?

Merci.

-
Edité par Charlycop 11 mars 2017 à 10:22:58

  • Partager sur Facebook
  • Partager sur Twitter
11 mars 2017 à 11:41:28

Essaie un truc du genre (en pseudocode):

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)



  • Partager sur Facebook
  • Partager sur Twitter
17 décembre 2019 à 21:05:40 - Message modéré pour le motif suivant : Réponse à un message supprimé


19 décembre 2019 à 2:15:44

Salut,
J'avoue ne rien connaître à ce pseudo-langage.
Est-ce un exercice théorique ou pratique?
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?
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.