je suis novice en VHDL et je me heurte à un problème auquel je n'ai toujours pas compris.
Je me suis amusé à créer un diviseur de fréquence en VHDL, dont le code est le suivant:
Code : Tout sélectionner
library IEEE;
library UNISIM;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use UNISIM.VComponents.all;
entity diviseur is
Port ( clk : in STD_LOGIC;
frequency : out STD_LOGIC);
end diviseur;
architecture Behavioral of diviseur is
signal counter: STD_LOGIC_VECTOR(3 downto 0):="0000";
constant n: integer := 10-1;
begin
compteur: process(clk,counter) -- diviseur de fréquence
begin
if clk'event and clk='1' then
if counter >= n then
counter <= "0000"; -- réinitialisation du compteur lorsque n est atteint
else
counter <= counter + 1;
end if;
end if;
if counter >= 5 then -- rapport cyclique de 1/2
frequency <= '0';
else frequency <= '1';
end if;
end process compteur;
end Behavioral;
Lorsque je le compile avec Xilinx ISE, je n'obtiens aucune erreur, un point d'exclamation apparaît juste à côté de "Synthesize" mais aucun warning n'apparaît nul part.
Je crée un fichier testbench waveform pour simuler mon code avec ISE Simulator, le simulateur intégré de Xilinx ISE.
Et là il se passe quelque chose d'étrange: parfois ça marche, parfois ça marche pas...
Y a-t-il un hic dans mon code ? Xilinx ISE ou du moins le simulateur est-il capricieux ?
Merci d'avance !