Vhdl- Wait until ?
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Vhdl- Wait until ?



  1. #1
    invite7ebcb46b

    Post Vhdl- Wait until ?


    ------

    Bonsoir,

    je suis actuellement sur un projet scolaire qui consiste à faire une alarme de maison en vhdl.
    L'alarme est composée de 4 capteurs, dont 3 instantanées ( qui déclenchent l'alarme ) et un à retardement. ( Qui n'active l'alarme qu'après un certains temps).


    J'ai un petit souci au niveau du capteur à retardement, et plus particulièrement son activation :

    En effet, le capteur à retardement se situe au niveau de la porte d'entrée. Et donc, je dois faire en sorte qu'une fois que l'utilisateur active l'alarme à l'aide de son badge, le capteur à retardement ne fonctionne qu'après un temps donné. ( Histoire que cela ne déclenche pas l'alarme alors que l'utilisateur n'est pas encore sorti de chez lui ).
    C'est justement cela que je n'arrive pas à gérer.
    Mon idée était de mettre un timer ( diviseur d'horloge), et qui dès qu'il passe à 1, active un signal t. Et pour que le capteur à retardement active l'alarme, il faut à la fois le signal cr du capteur et t du timer.

    J'aurais fait intuitivement ce code :


    signal t3 : std_logic ;

    process
    begin
    wait until (timer3='1');
    t3<='1';
    end process;


    process( present, badge, c1, c2, c3,cr,timer2,timer1,t3,timer3)

    begin
    futur <= present;
    case present is

    when alarmeatt => if badge ='1' then futur <= attente ;
    else if timer2='1' then futur <=alarme1 ; end if ; end if ;
    when attente => if badge ='1' then futur <= actif ; end if;
    when alarme2=> if badge='1' then futur <= attente; end if;
    when actif => if ( c1 ='1' or c2 ='1' or c3='1') then futur <= alarme1;
    else if (cr='1' and (t3='1' )) then futur <= alarmeatt ; end if ; end if ;
    when alarme1=> if badge='1' then futur <= attente;
    else if timer1='1' then futur <= alarme2 ; end if; end if;

    end case;
    end process;
    Au niveau des états, attente est l'alarme désactivée,
    actif est l'alarme allumée.
    Alarme 1 est l'état où l'alarme est déclenchée et les sonneries extérieures et intérieures sonnent.
    Alarme 2 est l'état où seul la sonnerie intérieure de l'alarme est en marche.
    L'état Alarmeatt est la zone de temporisation du capteur à retardement avant de déclencher l'alarme.


    Mon souci est que lorsque j'exécute ce code dans mon Top module, il me sort que le timer3 est inutilisé.

    Je conclus donc que mon wait until ne doit pas être bien exploité ( voir ne fait pas ce que je veux ), dans la mesure ou je ne l'ai jamais utilisé. Pourriez vous m'aider à y voir plus clair?


    P.S : Au niveau logiciel, j'utilise Xilinx ISE et Isim pour mes simulations.

    -----

  2. #2
    invite00e5225f

    Re : Vhdl- Wait until ?

    Salut!

    Est ce qu'il ne faut pas faire passer "timer3" dans le premier process?

    process(timer3)......

  3. #3
    jiherve

    Re : Vhdl- Wait until ?

    Bonsoir,
    Code:
    process
    begin
    wait until (timer3='1');
    t3<='1';
    end process;
    et comment il fait le timer3 pour être égal à '1'?
    attention aux affectations faites dans des process //.
    Autre remarque : il faut indenter et éviter les lignes avec des assertions multiples, cela aide à la lisibilité..
    de même la visibilité des déclarations de toutes les variables/signaux ne serait pas un luxe pour pouvoir être aidé efficacement.
    JR
    l'électronique c'est pas du vaudou!

  4. #4
    invite7ebcb46b

    Re : Vhdl- Wait until ?

    Alors pour peter, dans un process avec un wait until, il ne faut pas de sensibilités.

    Pour jiherve, le timer 3 est une entrée. Au niveau des variables/ signaux, j'ai ceci :

    entity alarm is
    Port (
    [] badge : in STD_LOGIC;
    raza : in STD_LOGIC;
    c1,c2,c3,cr : in STD_LOGIC;

    timer1,timer2,timer3 : in STD_LOGIC;
    clk : in STD_LOGIC;
    E : out STD_LOGIC;
    S : out STD_LOGIC;
    DT : out STD_LOGIC);
    end alarm;

    architecture Alarme of alarm is
    type state is ( attente, actif, alarme1,alarme2,alarmeatt);
    signal present, futur : state ;
    signal t3 : std_logic ;

    Au niveau de l'indentation, mon code est normalement indenté, mais je t'avoue que je manie mal la fonction Quote et ai du mal à restitué la forme.

    AU niveau des timers, chaques timer est en fait un diviseur d'horloge.
    En gros, dans 3 états ( Actifs, alarmeatt, alarme1 ) j'ai ma sortie DT qui passe à 1, et qui active les décompteurs d'horloges. Les 2 décompteurs pour timer1 et timer2 marchent parfaitement ( avec simulation ). Mais comme je vous l'ai dit, le timer 3 refuse.

  5. A voir en vidéo sur Futura
  6. #5
    jiherve

    Re : Vhdl- Wait until ?

    Bonsoir,
    et donc sans sourciller tu affectes une entrée de ton entity ?
    Pour le code utilise notepad++ c'est gratuit et en couleurs ,il faudra que tu configures la tabulation pour être remplacée par des espaces.
    JR
    l'électronique c'est pas du vaudou!

  7. #6
    invite7ebcb46b

    Re : Vhdl- Wait until ?

    J'ai finalement réussi à résoudre mon problème , en rajoutant simplement un état supplémentaire sur ma machine d'état, et avec un simple diviseur d'horloge.
    Merci en tout cas de votre aide

Discussions similaires

  1. wait sur xilinx
    Par invited6661c5b dans le forum Électronique
    Réponses: 1
    Dernier message: 12/12/2008, 19h47
  2. Point flottant en VHDL et vhdl-200x
    Par invite6eee6b27 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 02/09/2008, 20h47
  3. WAIT AND SEE chez ALPINE
    Par invite205a8caf dans le forum Dépannage
    Réponses: 1
    Dernier message: 26/10/2005, 15h41
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...