au sujet d'un compteur de programme

H

higildedzest

Guest
Récemment, j'ai écrit un programme comptoir, je le compiler et successful.But quand j'ai commencé à courir à la fonction de simulation, les résultats étaient wrong.i ne comprends pas, s'il vous plaît tout le monde qui savent qu'il me donner quelques conseils à votre sujet it.thank beaucoup.
Voici le code:
Module compteur (clk, reset, heure, minutes, secondes);
input clk, reset;
sortie [7:0] Hour, minutes, secondes;
fil [7:0] Hour, minutes, secondes;
always @ (CLK posedge ou réinitialiser posedge)
commencer
reg [7:0] hour1, min1, sec1;
if (reset == 1)
commencer
hour1 [3:0] <= 0;
hour1 [7:4] <= 0;
min1 [3:0] <= 0;
min1 [7:4] <= 0;
sec1 [3:0] <= 0;
sec1 [7:4] <= 0;
fin
else if (Sec1 [3:0] <4'b1001)
commencer
sec1 [3:0] <= sec1 [3:0] 1;
fin
autre
commencer
sec1 [3:0] <= 0;
if (Sec1 [7:4] <4'b0101)
commencer
sec1 [7:4] <= sec1 [7:4] 1;
fin
autre
commencer
sec1 [7:4] <= 0;
if (min1 [3:0] <4'b1001)
commencer
min1 [3:0] <= min1 [3:0] 1;
fin
autre
commencer
min1 [3:0] <= 0;
if (min1 [7:4] <4'b0101)
commencer
min1 [7:4] <= min1 [7:4] 1;
fin
autre
commencer
min1 [7:4] <= 0;
if (hour1 [7:4] <4'b0010)
commencer
if (hour1 [3:0] <4'b1001)
commencer
hour1 [3:0] <= hour1 [3:0] 1;
fin
autre
commencer
hour1 [3:0] <= 0;
hour1 [7:4] <= hour1 [7:4] 1;
fin
fin
autre
commencer
if (hour1 [3:0] <4'b0011)
commencer
hour1 [3:0] <= hour1 [3:0] 1;
fin
autre
commencer
hour1 [7:4] <= 0;
hour1 [3:0] <= 0;
fin
fin
fin
fin
fin
fin
fin
assigner heure = hour1,
min = min1,
sec = sec1;
endmodule

 
SystemVerilog utilisez-vous?Ce module ne compile pas en Verilog parce que cette déclaration ne peut pas aller l'intérieur d'un «toujours» de bloc:

reg [7:0] hour1, min1, sec1;

Je l'ai déplacée en place quelques lignes, et maintenant il compile bien (je suis en mode utilisant ModelSim Verilog).

Il semble pour simuler fine too.Il s'agit d'un 24-BCD heure d'horloge.Qu'est-ce dysfonctionnement que vous voyez?Qui simulateur utilisez-vous?

Vous n'avez pas besoin de deux séries d'heure, minute, les signaux sec.Vous pouvez les définir comme des registres de sortie, et d'éliminer les assigner des déclarations.Je l'ai fait, et aussi reformaté la mise en retrait à mon style favori (pour que je puisse le lire!):
Code:

Module compteur (clk, reset, heure, minutes, secondes);

input clk, reset;

sortie reg [7:0] Hour, minutes, secondes;always @ (CLK posedge ou réinitialiser posedge) commencent

if (reset == 1) commencer

heure [3:0] <= 0;

heure [7:4] <= 0;

min [3:0] <= 0;

min [7:4] <= 0;

SEC [3:0] <= 0;

sec [7:4] <= 0;

end else if (sec [3:0] <4'b1001) commencent

SEC [3:0] <= s [3:0] 1;

end else begin

SEC [3:0] <= 0;

if (sec [7:4] <4'b0101) commencent

sec [7:4] <= sec [7:4] 1;

end else begin

sec [7:4] <= 0;

if (min [3:0] <4'b1001) commencent

min [3:0] <= min [3:0] 1;

end else begin

min [3:0] <= 0;

if (min [7:4] <4'b0101) commencent

min [7:4] <= min [7:4] 1;

end else begin

min [7:4] <= 0;

if (heure [7:4] <4'b0010) commencent

if (heure [3:0] <4'b1001) commencent

heure [3:0] <= heure [3:0] 1;

end else begin

heure [3:0] <= 0;

heure [7:4] <= heure [7:4] 1;

fin

end else begin

if (heure [3:0] <4'b0011) commencent

heure [3:0] <= heure [3:0] 1;

end else begin

heure [7:4] <= 0;

heure [3:0] <= 0;

fin

fin

fin

fin

fin

fin

fin

endmodule
 
Salut je trouver une erreur de logique dans le code
dans ce bloc:

if (heure [7:4] <4'b0010) commencent
if (heure [3:0] <4'b1001) commencent
heure [3:0] <= heure [3:0] 1;
end else begin
heure [3:0] <= 0;
heure [7:4] <= heure [7:4] 1;
fin
end else begin
if (heure [3:0] <4'b0011) commencent
heure [3:0] <= heure [3:0] 1;
end else begin
heure [7:4] <= 0;
heure [3:0] <= 0;

Si vous observez attentivement, vous vérifiez l'heure condition [7:4] = 2 et l'heure [3:0] = 9 ce qui rend 29, mais ce que nous voulons exactement à vérifier est de 24 ce que je sens que vous avez voulu faire, c'était de vérifier pour 23:59, mais vous avez probablement manqué.

Pleasse me corriger si je me trompe.

merci

 
Le code utilise moins que des essais, pas de tests d'égalité.

Utilisation de ModelSim, je le vois compter les heures correctement à partir de 00 à 23, puis de nouveau à 00.

 
Merci les gars très bien, je vais le faire again.i je vous remercie pour tous vos adivce.

 

Welcome to EDABoard.com

Sponsor

Back
Top