3 votes

Essayer de faire clignoter une LED en Verilog

J'ai un CPLD avec une horloge de 50Mhz.

Voici mon code :

module FirstProject(clk, LED);
  output LED;
  input  clk;

  reg [32:0] count1;
  reg        LEDstatus;

  assign LED = LEDstatus;

  always @ (posedge clk) begin
    if (count1 < 10000000) begin
      LEDstatus <= 0;
    end
    else begin
      LEDstatus <= 1;
    end
    count1 <= count1 +1;
  end

endmodule

Je ne sais pas pourquoi cela ne fonctionne pas. Il se déploie sur le CPLD, mais la lumière est toujours allumée

Ce code fonctionne sur mon CPLD avec les mêmes affectations de broches et contraintes de synchronisation

http://www.fpga4fun.com/Opto2.html

4voto

Morgan Points 6578

La fréquence de l'horloge est de 50MHz, une boucle On-Off est de 2**33-1 (8589934591) cycles.

1/Hz = secondes
facteur de ralentissement * 1/Hz = secondes pour compléter la boucle

Cela implique que la LED tente de clignoter à :

(8589934591 / 50000000) = 171s, plus lent que 1Hz

Tout ce qui est supérieur à 25Hz ne serait pas perçu mais ce n'est pas le problème ici.

Lorsque le compteur est entre 0 et 10000000, la lumière devrait être éteinte :

10000000 / 50000000 = 0,2 secondes

Le temps d'arrêt est de 0,2 secondes et le temps d'allumage est d'environ 170 secondes. Il est probable que ce ratio soit très difficile à observer. Passer à un ratio 50/50 on/off et une observation à une vitesse plus rapide serait plus facile.

Je suggérerais de rendre count1 large de 24 bits et de baser la sortie sur le MSB de count1 ;

reg [23:0] count1; 

always @(posedge clk) begin
  LEDstatus <= count1[23];
  count1    <= count1 + 1;
end

4voto

jcoder Points 14982

Vous éteignez la LED pendant 0,025% du temps donc autant ne pas la faire clignoter.

Vous voulez probablement réinitialiser votre compteur à zéro lorsqu'il atteint 20000000 pour qu'il soit allumé et éteint la moitié du temps chacun. Sinon, basculez l'état lorsque vous atteignez 1000000 à la place -

if (count1 == 33'd1000000) begin
  LEDstatus <= !LEDstatus;
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X