题解 | #加减计数器#
加减计数器
http://www.nowcoder.com/practice/9d50eb2addaf4a37b7cd5a5ee7b297f6
- 题目的testbench要求输出都延后一个时钟,因此增加一个寄存器tmp来暂存计数。
- 根据mode来判断计数何时跳变;zero输出时刻在tmp为0的下一周期,因此用tmp==0来判断。
完整代码:
`timescale 1ns/1ns
module count_module(
input clk,
input rst_n,
input mode,
output reg [3:0]number,
output reg zero
);
reg[3:0] tmp;
always@(negedge rst_n or posedge clk)begin
if(~rst_n)
tmp <= 0;
else if(mode)
tmp <= tmp==9? 0: tmp+1;
else if(~mode)
tmp <= tmp==0? 9: tmp-1;
end
always@(negedge rst_n or posedge clk)begin
if(~rst_n)
number <= 0;
else
number <= tmp;
end
always@(negedge rst_n or posedge clk)begin
if(~rst_n)
zero <= 0;
else if(tmp==0)
zero <= 1;
else
zero <= 0;
end
endmodule