Bonjour à tous,
Alors voilà ça fait quelque jours que je bloque sur un exercice en vhdl. En réalité j'essaie de me remettre à niveau pour la rentrée prochaine, alors votre aide serait la bienvenue
Comme je ne trouve pas de forum spécialisé en vhdl je le poste ici. Bref, voici l'intitulé:
Le schémas est en PJ.L'objectif est de créer un compteur de N chiffres. A l'initialisation le compteur vaut 0...0. Quand l'entrée incr=1, il compte en BCD (chaque chiffre est codé sur 4 bits). Quand incr =0, le compteur garde sa valeur. Sinon, le chiffre des unités bcd(3:0) s'incrémente jusqu'à 9. Quand il vaut 9 (et que incr=1), il repasse à 0 et c'est le chiffre des dizaines qui s'incrémente. Quand les chiffres des dizaines et des unités sont à 99 (et que incr=1), c'est le chiffre des centaines qui s'incrémente ...
paramètre générique :
N : nombre de chiffres
entrées : clk, resetn, et incr (1 bit)
sorties : bcd (4*N bits) et time_out (1 bit)
Sur le schéma figure la structure du compteur pour le chiffre n°i
en(0) = incr
time_out = en(N)
Simulation avec n =3
Synthèse avec n =8
Alors j'ai tout programmé comme on le voit sur le schémas mais il y a forcément quelque chose qui m'échappe encore dans l'énoncé.
Voici mon code:
Au moment de simuler, il ne se passe rien au niveaux des signaux.Code:library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity compteur is generic ( N : integer := 8 ); port( clk : in std_logic; resetn : in std_logic; incr : in std_logic; bcd : out std_logic_vector(4*N-1 downto 0); time_out: out std_logic ); end entity; architecture rtl of compteur is signal en : std_logic_vector(N downto 0); signal signal1 : std_logic_vector (3 downto 0); signal signal2 : std_logic_vector (3 downto 0); signal s : std_logic; signal i : natural range 0 to N; signal bcd1 : std_logic_vector (4*i+3 downto 4*i); begin en(0) <= incr; en(i+1) <= en(i) AND S; time_out <= en(N); process (clk, resetn) is begin if resetn ='0' then bcd1 <= "0000"; elsif rising_edge(clk) then bcd1 <= signal2; end if; end process; process (signal2, bcd1, en, signal1) is begin if en(i) = '0' then signal2 <= bcd1; else signal2 <= signal1; end if; end process; S <= '1' when unsigned(bcd1) = 9 else '0'; process(S, bcd1, signal1) is begin if S = '1' then signal1 <= "0000"; else signal1 <= std_logic_vector(unsigned(bcd1)+1); end if; end process; end architecture;
Je vous remercie d'avance pour votre aide.
-----