Accueil > Electronique > FPGA > PWM pour FPGA
PWM pour FPGA
samedi 2 juin 2007, par
Introduction
La description qui suit permet de gérer une ou plusieurs PWM dans une FPGA. Elle est basée sur un compteur 16 bits, de deux ou plusieurs comparateurs et d’une ou plusieurs bascules RS.
Le compteur
Mon expérience m’a appris à me méfier des outils de synthèse. Toutefois, à ce jour, ils sont susceptibles de synthétiser un compteur performant.
Voici la description VHDL du compteur :
La bascule RS
La bascule RS est synchrone à une horloge. De plus, l’entrée de mise à zéro (R) est prioritaire.
Voici la description VHDL de la bascule :
Le comparateur
Le code du comparateur est extrêmement simple, jugez plutôt :
La PWM
Finalement, nous allons instancier toutes les descriptions nécessaires à l’obtention du bloc PWM.
Plusieurs PWMs
Si le besoin de plusieurs PWMs existe, il est possible de mutualiser le compteur ainsi que le comparateur à zéro. De ce fait, chaque PWM supplémentaire nécessite qu’un comparateur et qu’une bascule RS.
Remarque
L’utilisation d’un comparateur avec une sortie « plus petit que » se comporte de la même manière. Toutefois, il nécessite plus de logique que l’opérateur « égale ». De ce fait, la description que je propose permet une fréquence de travail plus élevée. De plus, la synthèse de l’opérateur « égale » est optimale sur tous les synthétiseurs que j’ai pu essayer ce qui n’est pas le cas de l’opérateur « plus petit que ».
Conclusion
J’ai synthétisé la description sous plusieurs outils et pour plusieurs cibles.
Version | Outil de synthèse | Cible | Période minimum | Niveau logique |
---|---|---|---|---|
pwm | ISE 7.1 | XC2S300E-7PQ208 | 8,049 ns | 3 |
fourpwm | ISE 7.1 | XC2S300E-7PQ208 | 8,670 ns | 3 |
pwm | ISE 7.1 | XC3S500E-4PQ208 | 8,180 ns | 5 |
fourpwm | ISE 7.1 | XC3S500E-4PQ208 | 11,313 ns | 5 |
pwm | Libero 7.1 | A54SX32A-F PQ208 | 12,155 ns | ? |
fourpwm | Libero 7.1 | A54SX32A-F PQ208 | 12,155 ns | ? |
pwm | ispLEVER 7.0 | LFXP3C-3P208C | 6,107 ns | 8 |
fourpwm | ispLEVER 7.0 | LFXP3C-3P208C | 7,375 ns | 8 |
Attention : Ces résultats ne sont donnés qu’à titre indicatif. En effet, il n’y a pas de contraintes sur l’affectation des broches.
Messages
1. PWM pour FPGA, 15 octobre 2008, 19:53, par ALAIN CHEYRIGUET
Trés très belle description, bravo !
ce n’est pas un reproche, mais personellement je préfère pour l’instanciation des composants utiliser => car les
2 cas sont valables en VHDL.
Pour ma part j’ai réalisé de nombreux compteurs décompteurs
avec affichage multiplexé et une horloge 24H avec 4 digits.
Si cela vous interesse je peux vous envoyer les codes en pdf.
Pour ma part j’utilise iseWeb pack 10.1 de xilinx avec
le starter kit coolrunnerII "cpld XC 2C 256-7TQ144 et en
FPGA nexys2 "spartan xc 3s 500E"
si vous avez d’autres réalisations ça m’interesse !
très cordialement et merci pour vos descriptions.
1. PWM pour FPGA, 13 février 2009, 20:12, par Steve
Alain, je vous remercie pour votre message. Je ne passe pas souvent ici ces derniers temps parce que je suis très pris par mes enfants et mon emploi. Mais si ce genre de description vous intéresse, je vais essayer de faire un effort pour en publier quelques autres.
2. PWM pour FPGA, 29 mars 2012, 17:37, par kayle
salut alain ,SVP j’ai besoin de vos codes VHDL pour l’affichage multiplixé car moi aussi je travaille avec la NEYXS2 et j’arrive pas à multiplixé l’affichage des 4 afficheurs à 7 segments
voici mon email : bensalem.hachem@gmail.com
et merci.
2. PWM pour FPGA, 6 mai 2012, 15:18, par pwmvhdl
salut svp j’ai pas compris le role d’entrée d est ce que pr commande la valeur d alpha ou koi qlq’un m’explique merci d’abord !!!??
1. PWM pour FPGA, 25 mai 2012, 22:33, par Steve MULLER
Bonsoir,
En effet, d correspond au réglage du rapport cyclique.
n = d / 65536 avec n le rapport cyclique
Steve
3. PWM pour FPGA, 2 août 2013, 16:58
tu pourrais expliciter pourquoi tu as choisis ces composants un counter, un comparateur et une bascule rs ?
1. PWM pour FPGA, 8 août 2013, 19:48, par Steve MULLER
Bonjour,
Merci d’avoir consulté cet article.
Votre question trouve sa réponse dans la section "Remarque", je vous conseille de la relire. Je pense que cela vous paraîtra plus claire.
Steve
4. PWM pour FPGA, 6 août 2013, 23:37, par freeman
hello
je voudrais plus d’explication sur le choix des composants
cordialement
1. PWM pour FPGA, 8 août 2013, 19:50, par Steve MULLER
Bonsoir,
Quelle est votre question ? Car le composant, c’est vous qui le choisissez.
Steve
2. PWM pour FPGA, 18 août 2013, 00:34
je voulais dire pour creer un pwm pourquoi avez vous utilisez un comparateur un compteur et une bascule rs
3. PWM pour FPGA, 19 août 2013, 08:52, par Steve MULLER
Bonjour,
Et vous, comment auriez-vous fait ?
Steve
5. PWM pour FPGA, 18 août 2013, 20:37
le code ne marche pas j’ai essayé un test bench et j’ai absolument rien en output. Voici le code, peut etre quelque chose est faux.
LIBRARY ieee ;
USE ieee.std_logic_1164.ALL ;
— Uncomment the following library declaration if using
— arithmetic functions with Signed or Unsigned values
— USE ieee.numeric_std.ALL ;
ENTITY pwm3_Tb IS
END pwm3_Tb ;
ARCHITECTURE behavior OF pwm3_Tb IS
— Component Declaration for the Unit Under Test (UUT)
COMPONENT pwm3
PORT(
clr : IN std_logic ;
clk : IN std_logic ;
d : IN std_logic_vector(15 downto 0) ;
q : OUT std_logic
) ;
END COMPONENT ;
—Inputs
signal clr : std_logic := ’0’ ;
signal clk : std_logic := ’0’ ;
signal d : std_logic_vector(15 downto 0) := (others => ’0’) ;
—Outputs
signal q : std_logic ;
— Clock period definitions
constant clk_period : time := 10 ns ;
BEGIN
— Instantiate the Unit Under Test (UUT)
uut : pwm3 PORT MAP (
clr => clr,
clk => clk,
d => d,
q => q
) ;
data_in_process : process
begin
d<= "1111111111111111" ;
wait for 20 ms ;
d<= "0000000011111111" ;
wait for 20 ms ;
d<= "1111111100000000" ;
wait for 20 ms ;
d<= "0000000000000000" ;
wait for 20 ms ;
end process ;
— Clock process definitions
clock_process :process
begin
clk <= ’0’ ;
wait for clk_period/2 ;
clk <= ’1’ ;
wait for clk_period/2 ;
end process ;
— Reset process
reset_process : process
begin
clr<=’0’ ;
wait for 3 ns ;
clr<=’1’ ;
wait for 3 ns ;
clr<=’0’ ;
wait ;
end process ;
END ;
6. PWM pour FPGA, 11 juin 2020, 12:25, par arnold
bonjour svp je voudrais de l’aide pour commander un affichage matriciel d’une matrice 64*32 p5 avec pwm
merci
1. PWM pour FPGA, 11 juin 2020, 17:55, par Steve
Bonjour Arnold,
Avez-vous un schéma ? Depuis quel composant souhaitez-vous commander votre affichage ?
Steve