Salut à tous !
Toujours dans le cadre de mon écran à LED, j'ai besoin de réaliser un générateur de PWM dans un CPLD. Le module reçoit un entier codé 4bits et doit générer un signal dont le rapport cyclique dépend de l'entier. Sachant que 0 doit coder une sortie à 0 et 15 doit coder une sortie à 1.
Voila ce que ca donne :
library ieee;
use ieee.std_logic_1164.all;
entity Calculateur is
port(Entree : in integer range 0 to 15;
H : in std_logic;
Sortie : out std_logic);
end Calculateur;
architecture Rapport_cyclique of Calculateur is
begin
process(H,Entree)
variable count : integer;
begin
if count>=16 then count := 0;
end if;
case Entree is
when 0 => Sortie <= '0';
when 15 => Sortie <= '1';
when others =>
if count > Entree then Sortie <= '0';
else Sortie <= '1';
end if;
count := count+1;
end case;
end process;
end Rapport_cyclique;
(L'idée est simplement de compter un certain nombre de périodes d'horloge en maintenant la sortie à l'état haut, puis un autre nombre de périodes en maintenant la sortie à l'état bas)
La fréquence n'est pas un probleme puisque la seule contrainte est que celle du signal de sortie soit supérieure à 50Hz.
Mais voila, lorsque je teste ce module sous Quartus 2, il fonctionne à merveille pour Entrée = 0 ou 15, mais me donne un état indéterminé en sortie pour toute autre valeur...
Un peu d'aide ne serais pas de refus ^^
-----