题解 | #加减计数器#
加减计数器
https://www.nowcoder.com/practice/9d50eb2addaf4a37b7cd5a5ee7b297f6
`timescale 1ns/1ns
module count_module(
input clk,
input rst_n,
input mode,
output reg [3:0]number,
output reg zero
);
reg [3:0]number_reg;//输出寄存器
parameter MAX = 4'd9;
parameter MIN = 4'd1;
always@((487950916)posedge clk or negedge rst_n)begin
if(!rst_n)begin
number_reg <= 4'd0;
number <= 4'd0;
zero <= 1'b0;
end
else if(mode)begin//加计数
if(number_reg == MAX)begin//加计数达最大值
number_reg <= 4'd0;
number <= number_reg;
zero <= 1'b0;
end
else begin//加计数继续
if(number_reg == 4'd0)
zero <= 1'b1;
else
zero <= 1'b0;
number_reg <= number_reg + 1'b1;
number <= number_reg;
end
end
else if(mode == 1'b0)begin//递减
if(number_reg == MIN)begin//减至最小值
number_reg <= 4'd0;
number <= number_reg;
zero <= 1'b0;
end
else begin//递减继续
if(number_reg == 4'd0)begin
number_reg <= MAX;
zero <= 1'b1;
end
else begin
number_reg <= number_reg - 1'b1;
zero <= 1'b0;
end
number <= number_reg;
end
end
else begin//mode未知
number <= 4'd0;
zero <= 1'b0;
end
end
endmodule