Apie skaitiklis programa

H

higildedzest

Guest
Neseniai rašė skaitiklis programą, aš jį kaupia ir successful.But kai aš pradėjau vykdyti funkcijas modeliavimas, kurio rezultatai buvo wrong.i nesuprantu, prašome visus, kurie žino, kad man duoti keletą patarimų apie it.thank you very much.
Čia yra kodas:
modulis skaitiklis (CLK, atkūrimu, val, min, sek);
input CLK, Reset;
output [7:0] h, min, sek;
Viela [7:0] h, min, sek;
visada @ (posedge CLK arba posedge reset)
pradėti
reg [7:0] hour1, min1, Sec1;
if (Reset == 1)
pradėti
hour1 [3:0] <= 0;
hour1 [7:4] <= 0;
min1 [3:0] <= 0;
min1 [7:4] <= 0;
Sec1 [3:0] <= 0;
Sec1 [7:4] <= 0;
pabaiga
else if (Sec1 [3:0] <4'b1001)
pradėti
Sec1 [3:0] <= Sec1 [3:0] 1;
pabaiga
kitas
pradėti
Sec1 [3:0] <= 0;
if (Sec1 [7:4] <4'b0101)
pradėti
Sec1 [7:4] <= Sec1 [7:4] 1;
pabaiga
kitas
pradėti
Sec1 [7:4] <= 0;
if (min1 [3:0] <4'b1001)
pradėti
min1 [3:0] <= min1 [3:0] 1;
pabaiga
kitas
pradėti
min1 [3:0] <= 0;
if (min1 [7:4] <4'b0101)
pradėti
min1 [7:4] <= min1 [7:4] 1;
pabaiga
kitas
pradėti
min1 [7:4] <= 0;
if (hour1 [7:4] <4'b0010)
pradėti
if (hour1 [3:0] <4'b1001)
pradėti
hour1 [3:0] <= hour1 [3:0] 1;
pabaiga
kitas
pradėti
hour1 [3:0] <= 0;
hour1 [7:4] <= hour1 [7:4] 1;
pabaiga
pabaiga
kitas
pradėti
if (hour1 [3:0] <4'b0011)
pradėti
hour1 [3:0] <= hour1 [3:0] 1;
pabaiga
kitas
pradėti
hour1 [7:4] <= 0;
hour1 [3:0] <= 0;
pabaiga
pabaiga
pabaiga
pabaiga
pabaiga
pabaiga
pabaiga
priskirti val = hour1,
min = min1,
sec = Sec1;
endmodule

 
Ar jūs naudojate SystemVerilog?Tai modulis bus ne kompiliuoti Verilog nes šis teiginys negali eiti viduje "visada" blokas:

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

Persikėlė jį keletą eilučių, o dabar rengia bauda (I'm using ModelSim į Verilog režimu).

Atrodo, kad imituoti gerai.It's 24-hour BCD laikrodis.Koks gedimas matote?Kuris treniruokliu Jūs naudojate?

Jums nereikia dvi valandos, min, sek signalus.Galima apibrėžti juos kaip išėjimo registrus, ir pašalinti priskiria atskaitomybėje.Aš, kad ir taip pat pertvarkė wcięć į mano mėgstamiausių stilių (taip, aš galiu jį perskaityti!)
Kodas

modulis skaitiklis (CLK, atkūrimu, val, min, sek);

input CLK, Reset;

produkcija reg [7:0] h, min, sek;visada @ (posedge CLK arba posedge reset) prasideda

if (Reset == 1) prasideda

valanda [3:0] <= 0;

valanda [7:4] <= 0;

min [3:0] <= 0;

min [7:4] <= 0;

SEC [3:0] <= 0;

SEC [7:4] <= 0;

end else if (s [3:0] <4'b1001) prasideda

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

end else begin

SEC [3:0] <= 0;

if (s [7:4] <4'b0101) prasideda

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

end else begin

SEC [7:4] <= 0;

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

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

end else begin

min [3:0] <= 0;

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

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

end else begin

min [7:4] <= 0;

if (valanda [7:4] <4'b0010) prasideda

if (valanda [3:0] <4'b1001) prasideda

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

end else begin

valanda [3:0] <= 0;

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

pabaiga

end else begin

if (valanda [3:0] <4'b0011) prasideda

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

end else begin

valanda [7:4] <= 0;

valanda [3:0] <= 0;

pabaiga

pabaiga

pabaiga

pabaiga

pabaiga

pabaiga

pabaiga

endmodule
 
hi i radote loginių klaidų kodas
šiame langelyje:

if (valanda [7:4] <4'b0010) prasideda
if (valanda [3:0] <4'b1001) prasideda
valanda [3:0] <= valanda [3:0] 1;
end else begin
valanda [3:0] <= 0;
valanda [7:4] <= valanda [7:4] 1;
pabaiga
end else begin
if (valanda [3:0] <4'b0011) prasideda
valanda [3:0] <= valanda [3:0] 1;
end else begin
valanda [7:4] <= 0;
valanda [3:0] <= 0;

Jei Jūs esate įsižiūrėti tikrinti būklės valandos [7:4] = 2 ir valandos [3:0] = 9 tai daro 29, bet tai, ką tiksliai norite patikrinti, yra 24 What I Feel norėjote padaryti buvo patikrinti į 23:59, bet tikriausiai praleidau.

Pleasse pataisyti mane jei aš klysta.

ačiū

 
Kodas naudoja mažiau nei bandymai, o ne lygybę testų.

Naudojant ModelSim, matau, kad skaičiuojant valandomis teisingai nuo 00 iki 23, tada atgal iki 00.

 
Thank you very much guys, i will do it again.i ačiū už visus savo adivce.

 

Welcome to EDABoard.com

Sponsor

Back
Top