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 :
Au niveau des états, attente est l'alarme désactivée,
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;
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.
-----