[VHDL] probleme de simulation avec Quartus II

Fermé
touf40 - 22 avril 2005 à 16:05
russell14 Messages postés 4 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 13 mars 2008 - 13 mars 2008 à 16:43
bonjour, je suis en train d'essayer d'implémenter un EPLD (MAX7512AEFI256-10) en VHDL.
J'ai donc défini une machine à états et j'ai voulu simuler (pour commencer) les transistions entre ces états. Pour le moment, rien de bien compliqué sauf que... la simulation est mauvaise et je ne comprend pas pourquoi! Je vous met donc le code ainsi que le résultat de la simul, si quelqu'un pouvait me venir en aide, ca serait bien sympa car là, je ne vois vraiment pas.
J'utilise quartus II version 4.0 comme éditeur et simulateur.

--**********************************
voici le code utilisé
--**********************************

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;

entity module is
port(
CLK : in std_logic;
DISCO : in std_logic;
L_R : in std_logic;
RESET : in std_logic;
ETAPE : out std_logic_vector (2 downto 0)
);
end module;

architecture module_arch of module is
type state_type is (s0, s1, s2, s3, s4);
signal etat : state_type ;
signal disco_l : std_logic;
signal l_r_l : std_logic;
signal reset_l : std_logic;
signal etape_l : std_logic_vector (2 downto 0);
signal test : std_logic_vector (2 downto 0);

begin
--*********************************************************
latch_recopie : process (CLK)
begin
if rising_edge (CLK) then
-- latch
l_r_l <= L_R;
reset_l <= RESET;
disco_l <= DISCO;
-- recopie
ETAPE <= etape_l;
end if;
end process;
--*********************************************************
cycle: process (CLK, RESET, DISCO)
begin
if DISCO = '1'
then etat <= s2;
elsif RESET = '0'
then etat <= s0;
elsif rising_edge (CLK) then
case etat is
when s0 => if test = "001"
then etat <= s1;
end if;
when s1 => if l_r_l = '0'
then etat <= s4;
end if;
when s2 => if test = "011"
then etat <= s3;
end if;
when s3 => if test = "000"
then etat <= s0;
end if;
when s4 => if test = "001"
then etat <= s1;
end if;
end case;
end if;
end process;
--*********************************************************
sorties : process (etat)
begin
case etat is
when s0 => -- RESET
etape_l <= "000";
test <= "001";
when s1 =>
etape_l <= "001";
when s2 =>
etape_l <= "010";
test <= "011";
when s3 =>
etape_l <= "011";
when s4 =>
etape_l <= "100";
test <= "001";
end case;
end process;
end module_arch;

et le resultat de la simul se trouve [url=http://www.web-images.org/2491.html]ici[/url]

Quelques explications..
_ RESET est le reset (normal) actif à l'etat bas

_ DISCO est un signal informant sur la deconnexion du systeme à un autre systeme (je ne vais pas entrer dans els details... juste a savoir que DISCO est prioritaire par rapport au RESET) actif à l'etat haut

_ S0 est l'etat de reset (quand RESET passe à 0)
_ S1 est l'etat de marche normale
_ S2 est l'etat de deconnexion (quand DISCO passe à 1)
_ S3 est l'etat qui suit S2 (attente d'un reset pour redemarrer le cycle)
_ S4 est un etat dans lequel on rentre à partir de S1 grace au passage à 0 de la variable L_R.

_ test est un signal interne créé pour la simul qui sert à passer d'un etat a un autre.
_ etape_l est un signal interne qui joue le role de mouchard et permet de savoir dans quel etat on se trouve.

Les entrées sont latchées mais je ne me sers pas du RESET et DISCO latchés.

::: LE PROBLEME :::
Regardez l'image, à un moment, il y a un RESET et un DISCO pendant le RESET. A l'arrivée du RESET, ETAPE passe à "000", normal... Comme DISCO est prioritaire par rapport à RESET, quand il survient, le reset est squeezé et on passe en ETAPE "010" relative à l'etat S2 qui gère la deconnexion. normal.... Quand DISCO disparait, RESET est toujours à 0 donc on repasse en ETAPE "000" (etape de reset). normal...


MAIS, quand RESET repasse à '1', ETAPE ne change pas, le systeme reste en S0, POURQUOI ??? QU'y a t'il de faux dans le code?

j'espere que j'ai été assez clair dans mes explications, merci de bien vouloir m'eclairer!

christophe.

1 réponse

Bonsoir


pardonnez moi je n'est aucune informaton sur ceci, mais je veux bien que tu m'aide : en fait je cherche un compilateur et simmulateur de VHDL (gratuit)sur le net , et surtout est ce qu'on peut ecrire un programme VHDL sur le C; autre chose est ce qu'il ya une possibilité d'utiliser le VHDL et le logiciel ORCAD si vous le connaissez , sachant queje suis debutante avec VHDL


j'attent votre reponse sur tou1986@hotmail.com et je vou remercie infiniment.
0
russell14 Messages postés 4 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 13 mars 2008 1
13 mars 2008 à 16:43
utilise modelsim ou quartus les 2 sont gratuits. Bonne chance.
0