Verilog: Why the "maxcount" cannot keep its max value but changes with the "count"? -
any appreciated!
i wrote module in order keep track of score (<= 99) game written in verilog , runs on led array. want able maintain max score. when current count
greater maxcount
, maxcount
equal current count
, else keeps value.
the problem is, not know why maxcount
changes value whenever count
changes (it cannot keep value when count less, instead become less along count
)
is there logical error? or there verilog error missed?
thank much!
module score_keep(clock, reset, pt_0, pt_1, pt_2, pt_3, hex1, hex0, hex3, hex2); input clock, reset; input signed [3:0] pt_0, pt_1, pt_2, pt_3; output [6:0] hex1, hex0, hex3, hex2; wire signed [6:0] count; wire signed [6:0] maxcount; score_counter sc (clock, reset, pt_0, pt_1, pt_2, pt_3, count, maxcount); display(count, maxcount, hex1, hex0, hex3, hex2); endmodule module display (count, maxcount, hex1, hex0, hex3, hex2); input [6:0] count, maxcount; output [6:0] hex1, hex0, hex3, hex2; wire [4:0] unit, unit_m; wire [4:0] tens, tens_m; assign unit = count % 10; assign tens = count / 10; assign unit_m = count % 10; assign tens_m = count / 10; seg7 ud (unit, hex0); seg7 td (tens, hex1); seg7 umd (unit_m, hex2); seg7 tmd (tens_m, hex3); endmodule module score_counter(clock, reset, pt_0, pt_1, pt_2, pt_3, count, maxcount); input clock, reset; //input signed [3:0] sum; input [3:0] pt_0, pt_1, pt_2, pt_3; parameter signed [3:0] no_point = 4'b0000, plus_one = 4'b0001, plus_two = 4'b0010, neg_two = 4'b1110; //input zero, negative, carry, overflow; output signed [6:0] count, maxcount; reg signed [6:0] count, maxcount; ////wire ps; //reg ns; @(posedge clock) if (reset) begin count <= 7'b0; maxcount <= 7'b0; end else begin if (count > maxcount) begin maxcount <= count; end if (pt_0 == neg_two) begin if (count < 2) begin count <= 7'b0; end else begin count <= count - 2; end end else begin count <= count + pt_0; if (count > 7'b100010) begin count <= 7'b0; end end if (pt_1 == neg_two) begin if (count < 2) begin count <= 7'b0; end else begin count <= count - 2; end end else begin count <= count + pt_1; if (count > 7'b100010) begin count <= 7'b0; end end if (pt_2 == neg_two) begin if (count < 2) begin count <= 7'b0; end else begin count <= count - 2; end end else begin count <= count + pt_2; if (count > 7'b100010) begin count <= 7'b0; end end if (pt_3 == neg_two) begin if (count < 2) begin count <= 7'b0; end else begin count <= count - 2; end end else begin count <= count + pt_3; if (count > 7'b100010) begin count <= 7'b0; end end end endmodule
your displaying count
hex?
positions.
assign unit_m = count % 10; assign tens_m = count / 10;
should be:
assign unit_m = maxcount % 10; assign tens_m = maxcount / 10;
Comments
Post a Comment