bonjour,
si on veut ecrire en vhdl, un compteur constitué de 10 bascules D, comment éviter d'écrire dans le programme chaque bascule D ?
merci.
-----
bonjour,
si on veut ecrire en vhdl, un compteur constitué de 10 bascules D, comment éviter d'écrire dans le programme chaque bascule D ?
merci.
on a par exemple (compteur constitué de 10 bascules):
entity compteur_10 IS
port (clock,reset : in std_logic;
q, qb : out std_logic_vector(9 downto 0));
end entity compteur_10;
puis pour l'architecture qui débute par :
architecture struct of compteur_10 is
est-ce qu'il faut forcément écrire chaque bascule D dans la suite du programme ?
merci.
non, heureusement et c'est bien là l'avantage des HDL.
Voilà un exemple de compteur 4 bits que tu pourras adapter:
Note la simplicité du "Q <= Q + 1;" pour faire compter ce compteur.Code:Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITS is PORT ( CLOCK : in std_logic; Q : inout std_logic_vector(3 downto 0)); end CMP4BITS; architecture DESCRIPTION of CMP4BITS is begin process (CLOCK) begin if (CLOCK ='1' and CLOCK'event) then Q <= Q + 1; end if; end process; end DESCRIPTION;
A+
dans ce programme, il n'y a que le clock qui est en entrée ?Code:Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITS is PORT ( CLOCK : in std_logic; Q : inout std_logic_vector(3 downto 0)); end CMP4BITS; architecture DESCRIPTION of CMP4BITS is begin process (CLOCK) begin if (CLOCK ='1' and CLOCK'event) then Q <= Q + 1; end if; end process; end DESCRIPTION;
quand j'essaie de simuler ce programme, cela ne marche pas, quel pourrait être le probleme ?
merci.
J'ai perdu ma boule cristalquand j'essaie de simuler ce programme, cela ne marche pas, quel pourrait être le probleme ?
merci.
Sérieusement, comment veux-tu que je sache. Apparemment la compilation s'est bien passée. Que se passe-t-il d'incorrect à la simulation? Tu es sur de bien avoir affecté tes signaux?
A+
les signaux sont q et clock, j'affecte à clock, un signal périodique, est-ce qu'il faut donner une valeur à q alors que c'est une valeur de sortie ?
merci.
Bien sur que non.st-ce qu'il faut donner une valeur à q alors que c'est une valeur de sortie ?
Il te faudra surement ajouter un reset. En effet, le simulateur ne peut décider de la valeur initiale du compteur.
A+
avec un reset, j'écris :
mais le problème, c'est que la compilation me détecte une erreur, mais je ne vois pas où cela peut être ?Code:Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity compteur is port ( CK, RES: in std_logic; Q: out std_logic_vector(1 downto 0)); end compteur; use work.std_arith.all; architecture a_compteur of compteur is begin process(CK) begin if CK'event and CK = '1' then if RES = '1' then Q <= "00"; else Q <= Q + 1; end if; end if; end process; end a_compteur;
merci.
Essaie-voir çà, j'ai mis les modifs en majuscules:
Code:Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity compteur is port ( CK, RES: in std_logic; Q: out std_logic_vector(1 downto 0)); end compteur; use work.std_arith.all; architecture a_compteur of compteur is begin PROCESS (RES, CK) BEGIN IF (RES = '1') THEN Q <= "00"; ELSIF (CK='0' AND CK'event) THEN Q <= Q + 1; END IF; END PROCESS; end a_compteur;
le compilateur me detecte toujours une erreur, je crois que c'est la ligne
avec use work.std_arith.all; comment la corriger ?
merci.
Vire-la ou mets-la en commentaire.