σχετικά με ένα μετρητή προγράμματος

H

higildedzest

Guest
Πρόσφατα έγραψα ένα πρόγραμμα καταπολέμησης, θ καταρτίζουν και να successful.But όταν άρχισε να τρέχει λειτουργία προσομοίωσης, τα αποτελέσματα ήταν wrong.i δεν καταλαβαίνουν, παρακαλούμε όλους όσους ξέρουν να μου δώσετε κάποιες συμβουλές για σας it.thank πολύ.
εδώ είναι ο κώδικας:
ενότητα counter (clk, reset, ώρα, λεπτά, δευτερόλεπτα)?
CLK input, reset?
εξόδου [7:0] ώρες, λεπτά, δευτερόλεπτα?
wire [7:0] ώρες, λεπτά, δευτερόλεπτα?
πάντα @ (posedge CLK ή επαναφορά posedge)
αρχίζω
reg [7:0] hour1, min1, Sec1?
if (reset == 1)
αρχίζω
hour1 [3:0] <= 0?
hour1 [7:4] <= 0?
min1 [3:0] <= 0?
min1 [7:4] <= 0?
Sec1 [3:0] <= 0?
Sec1 [7:4] <= 0?
τέλος
else if (Sec1 [3:0] <4'b1001)
αρχίζω
Sec1 [3:0] <= Sec1 [3:0] 1?
τέλος
άλλος
αρχίζω
Sec1 [3:0] <= 0?
εάν (Sec1 [7:4] <4'b0101)
αρχίζω
Sec1 [7:4] <= Sec1 [7:4] 1?
τέλος
άλλος
αρχίζω
Sec1 [7:4] <= 0?
if (min1 [3:0] <4'b1001)
αρχίζω
min1 [3:0] <= min1 [3:0] 1?
τέλος
άλλος
αρχίζω
min1 [3:0] <= 0?
if (min1 [7:4] <4'b0101)
αρχίζω
min1 [7:4] <= min1 [7:4] 1?
τέλος
άλλος
αρχίζω
min1 [7:4] <= 0?
εάν (hour1 [7:4] <4'b0010)
αρχίζω
εάν (hour1 [3:0] <4'b1001)
αρχίζω
hour1 [3:0] <= hour1 [3:0] 1?
τέλος
άλλος
αρχίζω
hour1 [3:0] <= 0?
hour1 [7:4] <= hour1 [7:4] 1?
τέλος
τέλος
άλλος
αρχίζω
εάν (hour1 [3:0] <4'b0011)
αρχίζω
hour1 [3:0] <= hour1 [3:0] 1?
τέλος
άλλος
αρχίζω
hour1 [7:4] <= 0?
hour1 [3:0] <= 0?
τέλος
τέλος
τέλος
τέλος
τέλος
τέλος
τέλος
αντιστοιχίσετε ώρα = hour1,
min = min1,
sec = Sec1?
endmodule

 
Χρησιμοποιείτε SystemVerilog;Αυτή η ενότητα δεν θα συγκεντρώνουν σε Verilog διότι αυτή η δήλωση δεν μπορεί να πάει μέσα πάντοτε «ένα μπλοκ»:

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

Μου κινείται πάνω σε λίγες γραμμές, και τώρα συγκεντρώνει πρόστιμο (Είμαι με τη χρήση ModelSim σε λειτουργία Verilog).

Φαίνεται να προσομοιώσουν πολύ ωραία.Είναι μια 24-ωρη BCD ρολόι.Τι δυσλειτουργία βλέπεις;Ποια προσομοιωτής χρησιμοποιείτε;

Δεν χρειάζεται δύο ώρες, λεπτά, δευτερόλεπτα σήματα.Θα μπορούσατε να ορίσει τα μητρώα παραγωγής, και την εξάλειψη των εκχωρήσετε δηλώσεις.Έκανα ότι, και αναδιατύπωσε επίσης την εσοχή για το αγαπημένο στυλ μου (έτσι μπορώ να το διαβάσετε!):
Κωδικός:

ενότητα counter (clk, reset, ώρα, λεπτά, δευτερόλεπτα)?

CLK input, reset?

output reg [7:0] ώρες, λεπτά, δευτερόλεπτα?πάντα @ (posedge CLK ή επαναφορά posedge) αρχίζει

if (reset == 1) αρχίζουν

ώρα [3:0] <= 0?

ώρα [7:4] <= 0?

min [3:0] <= 0?

min [7:4] <= 0?

sec [3:0] <= 0?

sec [7:4] <= 0?

τέλος else if (sec [3:0] <4'b1001) αρχίζει

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

τέλος αλλιώς αρχίσει

sec [3:0] <= 0?

εάν (sec [7:4] <4'b0101) αρχίζει

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

τέλος αλλιώς αρχίσει

sec [7:4] <= 0?

εάν (min [3:0] <4'b1001) αρχίζει

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

τέλος αλλιώς αρχίσει

min [3:0] <= 0?

εάν (min [7:4] <4'b0101) αρχίζει

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

τέλος αλλιώς αρχίσει

min [7:4] <= 0?

εάν (ώρα [7:4] <4'b0010) αρχίζει

εάν (ώρα [3:0] <4'b1001) αρχίζει

ώρα [3:0] <= ώρα [3:0] 1?

τέλος αλλιώς αρχίσει

ώρα [3:0] <= 0?

ώρα [7:4] <= ώρα [7:4] 1?

τέλος

τέλος αλλιώς αρχίσει

εάν (ώρα [3:0] <4'b0011) αρχίζει

ώρα [3:0] <= ώρα [3:0] 1?

τέλος αλλιώς αρχίσει

ώρα [7:4] <= 0?

ώρα [3:0] <= 0?

τέλος

τέλος

τέλος

τέλος

τέλος

τέλος

τέλος

endmodule
 
γεια εγώ βρίσκω κάποια λογική λάθος στον κώδικα
σε αυτό το μπλοκ:

εάν (ώρα [7:4] <4'b0010) αρχίζει
εάν (ώρα [3:0] <4'b1001) αρχίζει
ώρα [3:0] <= ώρα [3:0] 1?
τέλος αλλιώς αρχίσει
ώρα [3:0] <= 0?
ώρα [7:4] <= ώρα [7:4] 1?
τέλος
τέλος αλλιώς αρχίσει
εάν (ώρα [3:0] <4'b0011) αρχίζει
ώρα [3:0] <= ώρα [3:0] 1?
τέλος αλλιώς αρχίσει
ώρα [7:4] <= 0?
ώρα [3:0] <= 0?

Αν παρατηρήσετε προσεκτικά θα είναι ο έλεγχος για την ώρα όρο [7:4] = 2 και ώρα [3:0] = 9 αυτή καθιστά 29, αλλά αυτό που ακριβώς θέλετε να ελέγξετε για 24 αυτό που αισθάνομαι θέλατε να κάνετε το check για τις 23:59 αλλά ίσως χάσει.

Pleasse μου σωστή, αν κάνω λάθος.

ευχαριστώ

 
Ο κώδικας χρησιμοποιεί λιγότερο από δοκιμές, δεν δοκιμές ισότητα.

Χρησιμοποιώντας ModelSim, βλέπω να υπολογίζεται ο αριθμός των ωρών σωστά από 00 έως 23, στη συνέχεια πίσω στο 00.

 
ευχαριστώ πολύ παιδιά, θα κάνω αυτό again.i σας ευχαριστήσω για όλες τις adivce σας.

 

Welcome to EDABoard.com

Sponsor

Back
Top