Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Code_FPGA



  1. #1
    elec_cup
    Invité

    Code_FPGA


    ------

    bonjour,

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    -----
    entity gr_main is
    port(
    clock : in std_logic;
    impulsion: in std_logic
    );
    end entity;
    -----
    architecture gr of gr_main is
    signal inc : std_logic_vector (3 downto 0) :="0000";
    -----
    begin
    -----
    process
    begin
    wait until impulsion'event and impulsion='1';
    loop
    wait until clock'event and clock='1';
    inc<=inc+1;
    if impulsion'event and impulsion='1' then exit;
    end if;
    end loop;
    -----
    end process;
    end gr;

    --------------------------------------------------------------------
    Le but de ce code est de calculer la période du signal 'impulsion'.
    Alors voilà, mon problème vient du fait que lorsque la période est terminé, c'est-à-dire entre les deux fronts montants de impulsion, le signal 'inc' continue de compter.

    Celà vient des lignes :
    wait until impulsion'event and impulsion='1';
    if impulsion'event and impulsion='1' then exit;

    Car en effet, lorsque impulsion='1', on sort de la boucle, mais en même temps l'instruction :
    wait until impulsion'event and impulsion='1';
    Cette instruction nous fait retourner dans la boucle, d'où le comptage continue.


    Mais je ne vois pas comment faire !!

    Cordialement

    DELALIN Ambroise

    -----

  2. Publicité
  3. #2
    jiherve

    Re : Code_FPGA

    bonsoir,
    ce code est non shynthétisable donc a priori inutile en dehors d'un exercice!.
    Si ton horloge est de frequence tres supérieure à celle du signal à mesurer il faut d'abord echnatilloner proprement le signal et ensuite faire un compteur.
    Code:
    entity gr_main is
    port(
    clock : in std_logic;
    reset :  in std_logic;-- il faut toujours un reset sinon c'est le tirage du loto!!
    impulsion: in std_logic;
    valeur : std_logic_vector (3 downto 0)-- c'est mieux de sortir la valeur.
    );
    end entity;
    -----
    architecture gr of gr_main is
    signal inc : std_logic_vector (3 downto 0) ;
    signal ff_sync : std_logic_vector (2 downto 0);
    begin
      process (reset,clock)
      begin
        if reset = '0' then
          inc <= (others => '0');
          valeur <=  (others => '0');
        elsif rising_edge(clock) then
          ff_sync <= ((ff_sync(1) and (not ff_sync(0))) & ff_sync(0) & impulsion);
          if ff_sync(1) = '1' then
            inc <= inc+1;
          elsif ff_sync(2) = '1' then
             inc <= (others => '0');
          end if;
          if ff_sync(2) = '1' then
            valeur <= inc;
          end if;
         end if;
      end process;
    end architecture;
    Si je suis pas trop fatigué cela doit fonctionner.
    JR
    l'électronique c'est pas du vaudou!

  4. #3
    elec_cup
    Invité

    Re : Code_FPGA

    Bonjour,
    j'ai regardé le code que vous m'avez envoyé, il est complexe. Je n'ai pas appronfondi la comprehension.
    Il me semble qu'il y ait plus simple, voir code ci-dessous.

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    -----
    entity gr_main is
    port(
    clock : in std_logic;
    impulsion: in std_logic;
    valeur : out std_logic_vector (3 downto 0)
    );
    end entity;
    -----
    architecture gr of gr_main is
    -----
    signal inc : std_logic_vector (3 downto 0) :="0000" ;
    -----
    begin
    -----
    process
    begin
    wait until impulsion='1';
    loop_1 : loop
    exit loop_1 when impulsion='0';
    if clock'event then
    inc<=inc+1;
    end if;
    end loop loop_1;
    valeur<=inc;
    end process;
    -----
    end gr;

    ---------------------------------------
    J'ai un test_bench qui me fait les stimulis.
    Lors de la simulation, j'ai une erreur du type:
    # Break in Process line__21 at C:/Documents and Settings/ambroise.delalin/Bureau/Apprendre_2/JR.vhd line 28

    ==> Je ne vois pas l'erreur.

    Le but de ce programme est de calculer le nombre de coup d'horloge pendant que impulsion est à l'état '1'.

    Cordialement

    DELALIN Ambroise

  5. #4
    jiherve

    Re : Code_FPGA

    Bonsoir,
    Le break c'est dans mon code ou dans le tien?
    Je pense que c'est dans le tien et c'est normal c'est fini puisque ton process est unique.
    Il faudrait rajouter une boucle.
    Ceci dit encore une fois ton code est non synthétisable, cela ne sert qu'a faire joujou , le but du VHDL c'est tout de même de concevoir FPGA ou ASIC sinon un bout de code en C ou n'importe quel autre charabia ferait le boulot.
    JR
    l'électronique c'est pas du vaudou!

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
Découvrez nos comparatifs produits sur l'informatique et les technologies.