IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VHDL Discussion :

Compteur avec diviseur d'horloge - Vivado


Sujet :

VHDL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant-alternant en ingénierie biomédicale
    Inscrit en
    octobre 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant-alternant en ingénierie biomédicale
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Compteur avec diviseur d'horloge - Vivado
    Bonsoir la communauté,

    Je suis actuellement en train de bosser sur un projet qui consiste à adapter des travaux pratiques de systèmes embarqués, initialement prévu sur le logiciel ISE de Xilinx, sur le nouveau logiciel Vivado que j'essaie de prendre en main.

    Le but du projet est de réaliser un compteur 4 bits avec un diviseur d'horloge (la fréquence d'horloge de la carte FPGA que j'utilise, une Artix-7, est bien trop élevée).

    Dans un fichier VHDL, j'ai donc conçu 2 architectures : une pour mon diviseur d'horloge et une pour mon compteur (voir code ci-après).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_unsigned.ALL;
     
    entity Compteur is
        Port ( a : in  STD_LOGIC_VECTOR (3 downto 0);
               load : in  STD_LOGIC;
               clock : in STD_LOGIC;
               reset : in  STD_LOGIC;
               s : out  STD_LOGIC_VECTOR (3 downto 0);
               clk : in  STD_LOGIC;
               div_33554432 : out  STD_LOGIC);
    end Compteur;
     
    architecture clk_div_262k_arch of clk_div_262k is -- architecture de mon diviseur d'horloge
     
      signal div_32, div_1024, div_32768, div_8388608: std_logic_vector (15 downto 0) := (others => '0');
      signal div_262144 : std_logic_vector (3 downto 0) := (others => '0');
      signal temp_div_33554432 : std_logic_vector (1 downto 0) := (others => '0');
      signal div_32_clk, div_1024_clk, div_32768_clk, div_262144_clk, div_8388608_clk : std_logic := '0';
     
     
    begin
     
      --compteur de période 16 et division par 32 = 2^5 
      process (CLK)
      begin
        if CLK'event and CLK='1' then
          div_32 <= div_32(14 downto 0) & not div_32(15);
        end if;
      end process;
     
      div_32_clk <= div_32(15);
     
      --compteur de période 16 et division par 32 x 32 = 2^10
      process (div_32_clk)
      begin
        if div_32_clk'event and div_32_clk='1' then
          div_1024 <= div_1024(14 downto 0) & not div_1024(15);
        end if;
      end process;
     
      div_1024_clk <= div_1024(15);
     
      process (div_1024_clk)
      begin
        if div_1024_clk'event and div_1024_clk='1' then
          div_32768 <= div_32768(14 downto 0) & not div_32768(15);
        end if;
      end process;
     
      div_32768_clk <= div_32768(15);
     
      process (div_32768_clk)
      begin
        if div_32768_clk'event and div_32768_clk='1' then
          div_262144 <= div_262144(2 downto 0) & not div_262144(3);
        end if;
      end process;
     
      div_262144_clk <= div_262144(3);
     
        process (div_262144_clk)
      begin
        if div_262144_clk'event and div_262144_clk='1' then
          div_8388608 <= div_8388608(14 downto 0) & not div_8388608(15);
        end if;
      end process;
     
      div_8388608_clk <= div_8388608(15);
     
        process (div_8388608_clk)
      begin
        if div_8388608_clk'event and div_8388608_clk='1' then
          temp_div_33554432 <= temp_div_33554432(0) & not temp_div_33554432(1);
        end if;
      end process;
     
      div_33554432 <= temp_div_33554432(1) ;
     
    end clk_div_262k_arch; -- fin architecture de mon diviseur d'horloge
     
     
    architecture Compteur_arch of Compteur is -- architecture de mon compteur, que je souhaite synchronisé avec mon horloge divisée (ici, synchronisée avec l'horloge par defaut de la FPGA)
     
    signal scpt : STD_LOGIC_VECTOR (3 downto 0):= (others =>'0');
     
    begin
     
     
    process (clock,load) begin
     
    	if (reset='1')then
    		scpt <= (others => '0');
    	elsif (rising_edge(clock)) then
    		if (load='1') then
    			scpt <= a;
    		else
    			scpt <= scpt +1;
    		end if;
    	end if;
    end process; 
     
    s <= scpt;
     
    end Compteur_arch;
    Ma question est peut être bête, mais je souhaite connecter la sortie de mon architecture du diviseur d'horloge (div_33554432 ) à mon entrée d'horloge "clock" de ma deuxième architecture, qui correspond à l'entrée de mon compteur.

    J'ai très peu de base en VHDL... et peut être que je m'y prends de la mauvaise façon. C'est ce pourquoi je vous sollicite ce soir

    Merci d'avance pour votre attention.

    Thibault

  2. #2
    Membre à l'essai
    Homme Profil pro
    Product Apps Engineer
    Inscrit en
    juillet 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Irlande

    Informations professionnelles :
    Activité : Product Apps Engineer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2016
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Bonjour Thibault,

    Mon premier conseil est d'utiliser les ressources "clocking" du FPGA lorsque tu "travaille" sur une horloge. Pour modifier la frequence d'une horloge, penses a utiliser une MMCM/PLL.

    Pur certaines fréquences <10MHz tu ne peux pas donc tu aura effectivement besoin d'utiliser la logique du FPGA.

    Pour connecter la clk d'un bloc a un autre, ca se passe pendant l'instanciation (port map)

Discussions similaires

  1. Compteur avec des caractères
    Par bibilolo2 dans le forum C
    Réponses: 10
    Dernier message: 18/07/2007, 15h35
  2. Compteur avec rupture sans SQL/99
    Par 1gazelle dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/03/2007, 09h23
  3. Afficher un compteur avec nb de caractères constants
    Par aliassaf dans le forum Général Python
    Réponses: 2
    Dernier message: 22/06/2006, 18h38
  4. Réponses: 26
    Dernier message: 25/11/2005, 16h12
  5. Compteur avec OpenDialog
    Par bajax dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/08/2004, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo