题解 | #可置位计数器#
可置位计数器
https://www.nowcoder.com/practice/b96def986e29475e8100c213178b73a8
`timescale 1ns/1ns module count_module( input clk, input rst_n, input set, input [3:0] set_num, output reg [3:0]number, output reg zero ); reg rst_async_n; reg set_d1; // *********************** 为满足题目的时序 ***************** // // 将复位设置成异步复位,同步释放 always @(posedge clk or negedge rst_n) begin if(!rst_n) rst_async_n <= 1'b0; else rst_async_n <= 1'b1; end // 将set信号打一拍 always @(posedge clk or negedge rst_async_n) begin if(!rst_async_n) set_d1 <= 1'b0; else set_d1 <= set; end // ********************************************************** // // number always @(posedge clk or negedge rst_async_n) begin if(!rst_async_n) number <= 4'd0; else if(set_d1) number <= set_num; else number <= number + 1'b1; end // zero always@(*)begin if(!rst_async_n) zero = 0; else zero = (number == 4'b0); end endmodule