Répondre à la discussion
Page 1 sur 4 12 3 DernièreDernière
Affichage des résultats 1 à 30 sur 118

vhdl



  1. #1
    pol5700

    vhdl

    voila je doit réaliser une fonction detection de front descendant d'un signal(11bit, avec horloge 16*plus rapide)

    pour cela je doit programmer un monostable a l'aide d'un compteur et tt sa en vhdl.

    j'ai le cour et des exemple mais je comprend pas trop!

    donc pour réaliser cela je pense mettre un compteur avec entrée de validation qui sera le front descendant, ensuite le compteur compteur 160 peridode de clk, qd arrive le 160, le compteur se remet a zero et attent le prochain front de validation.

    pensez vous que c'est dur?

    je peu partir sur la base d'un compteur 8bit pour réaliser cela?

    voila mon 1er programme, ya t-il quelques lignes de juste ou tout est a refaire? je suis parti sur une base de monostable la!



    -si donnee passe a 0, le compteur compte et mono=1
    -si le compteur est a 160, le reset se met a 1 pds 1us
    -si le reset se met a 1, le compteur se remet a zéro et mono=0

    par contre j'ai pas mis la bonne syntaxe, je voudrais deja bien prendre en main le vhdl!


    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    use ieee.std_logic_arith.all;

    entity monostable is
    port
    (
    clk,donnee,raz: in std_logic;
    mono: out std_logic
    );
    end monostable

    architecture arch_monostable of monostable is

    begin
    process(clk)
    signal compte: std_logic_vector(3downto 0);
    if (donnee'event and donnee="0") then compte:=compte+1 and mono=1
    if (compte=160) then raz=1for 1us
    if (raz=1) then compte=0 and mono=0
    end if
    end if
    end if
    end process
    end monostable

    -----


  2. Publicité
  3. #2
    jiherve

    Re : vhdl

    Bonsoir
    Je passe sur le charabia déclaratif , il manque toutefois un reset ou equivalent, de la logique non initialisée a la mise sous tension c'est de la daube(et je suis poli).
    Un signal se déclare après architecture et avant begin
    et pour compter jusqu'a 160 il faut au moins 8bits.
    et je declarerais :

    compte :std_logic_vector(8 downto 0) ;
    et alias mono : std_logic is compte(8);

    Attention au librairies certaines ne sont pas universelles!
    Donc:
    Process(Clk, clrn)
    If clrn = '0' then-- reset asynchrone à la mise sous tension au moins on sait d'où l'on part
    compte <= (others => '0');
    elsif rising_edge(clk) then -- on fait du synchrone et pas de la zoubida
    if raz = '1' then
    compte(8) <= '1;
    compte(7 downto 0) <= std_logic_vector(to_unsigned(1 59,7));
    elsif donnée = '1' and mono = '1' then
    compte <= std_logic_vector(unsigned(comp te) -1);
    end if;

    end if;
    end process;
    Vu l'heure j'espère que c'est encore bon!
    JR

  4. #3
    pol5700

    Re : vhdl

    merci pour cette reponse, je met sa en forme,la bonne sintaxe et tout et je test ce soir!

    je te tien au courant de mon avancement, j'aurai peut etre d'autre question sur le vhdl ou d'autre difficulté a programmer.


    juste une question qu'est ce qui est de la daube???

  5. #4
    jiherve

    Re : vhdl

    Citation Envoyé par pol5700 Voir le message
    merci pour cette reponse, je met sa en forme,la bonne sintaxe et tout et je test ce soir!

    je te tien au courant de mon avancement, j'aurai peut etre d'autre question sur le vhdl ou d'autre difficulté a programmer.


    juste une question qu'est ce qui est de la daube???
    De la logique qui n'est pas initialisée !
    Idem en soft lorsque l'on n'initialise pas les variables, on croit faire une économie mais qqs années plus tard kaboum le gros bug poilu car pas de pot ce jour là la case mémoire (ou les bascules) démarre avec une valeur non prévue!
    JR
    JR

  6. #5
    pol5700

    Re : vhdl

    donc mon prog c'est de la daube???

    comme tu la rectifié sa ne l'ai plus?

    merci

  7. A voir en vidéo sur Futura
  8. #6
    pol5700

    Re : vhdl

    Citation Envoyé par jiherve Voir le message
    Bonsoir
    Je passe sur le charabia déclaratif , il manque toutefois un reset ou equivalent, de la logique non initialisée a la mise sous tension c'est de la daube(et je suis poli).
    Un signal se déclare après architecture et avant begin
    et pour compter jusqu'a 160 il faut au moins 8bits.
    et je declarerais :

    compte :std_logic_vector(8 downto 0) ;
    et alias mono : std_logic is compte(8);

    Attention au librairies certaines ne sont pas universelles!
    Donc:
    Process(Clk, clrn)
    If clrn = '0' then-- reset asynchrone à la mise sous tension au moins on sait d'où l'on part
    compte <= (others => '0');
    elsif rising_edge(clk) then -- on fait du synchrone et pas de la zoubida
    if raz = '1' then
    compte(8) <= '1;
    compte(7 downto 0) <= std_logic_vector(to_unsigned(1 59,7));
    elsif donnée = '1' and mono = '1' then
    compte <= std_logic_vector(unsigned(comp te) -1);
    end if;

    end if;
    end process;
    Vu l'heure j'espère que c'est encore bon!
    JR
    le reset tu la appelé clrn, c'est bien sa?

    et alias mono fait partie du prog?

    merci

  9. Publicité
  10. #7
    pol5700

    Re : vhdl

    voila j'ai refait tout le prog:

    sa pourrai aller mtn?

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    use ieee.std_logic_arith.all;

    entity monostable is
    port
    (
    clk,donnee,clrn: in std_logic;
    mono: out std_logic
    );
    end monostable;

    architecture arch_monostable of monostable is

    compte : std_logic_vector(8 downto 0);
    et alias mono : std_logic is compte(8);


    begin
    Process(Clk, clrn)
    If clrn = '0' then
    compte <= (others => '0');
    elsif rising_edge(clk) then
    if raz = '1' then
    compte(8) <= '1';
    compte(7 downto 0) <= std_logic_vector(to_unsigned(1 59,7));
    elsif donnee = '1' and mono = '1' then
    compte <= std_logic_vector(unsigned(comp te) -1);
    end if;
    end if;
    end process;

    end arch_monostable;


    sauf qu'en voulant simuler le logiciel me dit:

    error line 16: vhdl error syntax: found illegal use of a statement ina declarative part.

    je trouve pas l'erreur, tu voi ce qui ne va pas?

    merci

  11. #8
    jiherve

    Re : vhdl

    Bonsoir
    Si la ligne 16 c'est celle de l'alias alors il y a un et de trop!
    JR

  12. #9
    pol5700

    Re : vhdl

    non la ligne 16 est celle la:

    compte : std_logic_vector(8 downto 0);

    si j'enleve le et sa ne marche pas , meme erreur!

  13. #10
    Jack

    Re : vhdl

    Utilise les balises "code" (le # dans la barre d'icônes de la fenêtre d'édition) pour présenter ton code VHDL. Ca permettra de garder l'indentation et la lecture en sera facilitée.

    A+

  14. #11
    jiherve

    Re : vhdl

    re
    il manque "signal" !
    et pourtant j'en ai pissé toute la journée!
    il se fait tard !
    JR

  15. #12
    pol5700

    Re : vhdl

    il manque signal ou?

    c'est que signal ou une ligne entiere?

    merci

  16. Publicité
  17. #13
    Jack

    Re : vhdl

    devant tes noms de signaux, comme compte.

    A+

  18. #14
    pol5700

    Re : vhdl

    signal compte : std_logic_vector(8 downto 0);
    signal et alias mono : std_logic is compte(8);

    comme sa? sa marche pas et j'ai 5 erreur avec ces ligne de code!

    le signal et alias me parait bizar, non?

  19. #15
    Jack

    Re : vhdl

    il faut qu'un alias soit un sous-type du signal dont il est tiré.

    Il doit y avoir incompatibilité entre std_logic_vector et std_logic.

  20. #16
    Jack

    Re : vhdl

    Tu as encore d'autres erreurs:

    un process commence par begin
    raz n'est pas déclaré

    Code:
    compte <= std_logic_vector(unsigned(comp te) -1);
    il y a un espace dans compte

  21. #17
    pol5700

    Re : vhdl

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    use ieee.std_logic_arith.all;

    entity monostable is
    port
    (
    clk,donnee,clrn: in std_logic;
    mono: out std_logic
    );
    end monostable;

    architecture arch_monostable of monostable is

    signal compte : std_logic_vector(8 downto 0);
    signal et alias mono : std_logic is compte(8);


    begin
    Process(Clk, clrn)
    If clrn = '0' then
    compte <= (others => '0');
    elsif rising_edge(clk) then
    if raz = '1' then
    compte(8) <= '1';
    compte(7 downto 0) <= std_logic_vector(to_unsigned(159,7));
    elsif donnee = '1' and mono = '1' then
    compte <= std_logic_vector(unsigned(compte) -1);
    end if;
    end if;
    end process;

    end arch_monostable;

    voila le prog, le raz dont tu me parle été le 1er prog!

    ya des espace sur le forum alors que sur mon prog ya pas lol, bizar sa

  22. #18
    Jack

    Re : vhdl

    signal et alias mono : std_logic is compte(8);
    Tu es sur de la syntaxe?

    compte(7 downto 0) <= std_logic_vector(to_unsigned(1 59,7));
    Que doit faire cette ligne?

    pense aux balises code, c'est dur de lire sans indentation.

    Des commentaires dans ton source permettrait de connaitre la fonction des I/O et de signaux. Quel est la fonction de raz? Et de clrn?

  23. Publicité
  24. #19
    pol5700

    Re : vhdl

    je ne comprend psa trop ta derniere phrase.
    il me manque une ligne de code pour def les signaux?

    non la syntaxe me parait louche!

    pour etre franc, j'ai fait un mix de mon prog et de celui de jiherve, je ne comprend pas tout du prog, mais j'espere pouvoir comprendre des que j'arrivé a similer, donc a trouver l'erreur.

  25. #20
    Jack

    Re : vhdl

    Des commentaires dans ton source permettrait de connaitre la fonction des I/O et des signaux. Quel est la fonction de raz? Et de clrn?
    Je ne vois pas trop ce que tu ne comprends pas dans cette phrase

    Tu donnes des noms, d'accord. Mais si on pouvait savoir à quoi servent ces signaux, ce serait plus facile pour suivre ton raisonnement.

  26. #21
    pol5700

    Re : vhdl

    deja j'ai pas de signal raz! c'été une erreur!

    j'ai clk, donnee, clrn en entrée
    et mono en sortie

  27. #22
    Jack

    Re : vhdl

    deja j'ai pas de signal raz! c'été une erreur!
    Alors essaie de mettre un peu d'ordre dans ton source, parce qu'on ne va pas beaucoup avancer sinon.

    Je t'ai trouvé ceci, si ça peut t'aider:
    http://www.alse-fr.com/ALSE_UART_fr.pdf

  28. #23
    Jack

  29. #24
    pol5700

    Re : vhdl

    lol,c'est des prog de fou sa, je regarderai sa bien demain matin car la je fatigue!

    oui je referai bien mon prog!

    la tu ma donner des prog pour usart mais la je cherche uniquement a faire un monostable a l'aide d'un compteur.

    merci

  30. Publicité
  31. #25
    Jack

    Re : vhdl

    la tu ma donner des prog pour usart mais la je cherche uniquement a faire un monostable a l'aide d'un compteur.
    Il me semblait que ton problème à la base était la réalisation d'un uart.

    Si tu n'as qu'un monostable à réaliser, il te suffit donc de réaliser un simple compteur qui s'arrête en fin de comptage.

    Cherche des exemples de compteur en vhdl (il en existe de quantités) et adapte-le. Il suffit d'ajouter une entrée qui autorise ou non le comptage.

    A+

  32. #26
    pol5700

    Re : vhdl

    la j'essai de remplacer mes montage monostable par des monostable en vhdl.

    en fait la periode to sera 160 peride de clk.

    oui j'ai toruvé des exmple mais ji comprend pas tout

    mon prog ne ferai pas sa?

  33. #27
    Jack

    Re : vhdl

    Je le trouve compliqué pour un simple compteur.

    A+

  34. #28
    pol5700

    Re : vhdl

    ok je vais en tenter un autre, je pense réussir a faire un compteur jusqu'a 160.

    mais c'est pour l'entrée de validation, le reset, que je sais pas encore cmt faire.

    je vais voir sa!

  35. #29
    pol5700

    Re : vhdl

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    entity compteur is
    port
    (
    clk,reset:in std_logic;
    qut unsigned(7 downto 0)
    );
    end entity;

    architecture compt of compteur is

    signal q_int: unsigned(7 downto 0);

    begin
    process (clk, reset)
    begin
    if reset='0' then
    q_int <= (other => '0');
    elsif rising_edge (clk) then
    q_int <= q_int+1;
    end if;
    end process;

    q<=q_int;

    end compt;


    voila un compteur sur 8 bits .

    mais faut encore que je trouve cmt l'arreter a 160 et comment la declancher sur front descendant de l'entrée de validation. et cmt le remettre a 0 qd il est a 160!

    encore du boulot quoi.

    mais pour le compteur, se prog est une bonne base?

  36. #30
    Jack

    Re : vhdl

    Bon , je rappelle que je n'ai que des bases en VHDL, mais je suppose qu'un "IF" sur l'entrée de validation permettrait la mémorisation de l'impulsion sur cette entrée. Utilise un signal pour mémoriser cette impulsion. Le compilateur créera automatiquement une bascule.

    Lorsque le compte sera atteint, il faudra réinitialiser ce signal.

    A+

Sur le même thème :

Page 1 sur 4 12 3 DernièreDernière

Discussions similaires

  1. langage vhdl
    Par sound dans le forum Électronique
    Réponses: 1
    Dernier message: 15/12/2007, 07h51
  2. vhdl
    Par sound dans le forum Électronique
    Réponses: 12
    Dernier message: 09/12/2007, 14h29
  3. vhdl
    Par eagle_75 dans le forum Électronique
    Réponses: 5
    Dernier message: 29/03/2007, 19h52
  4. vhdl
    Par koko720 dans le forum Électronique
    Réponses: 0
    Dernier message: 16/11/2006, 23h41