전자공학/디지털회로

[Verilog] Counter

17Hyuk 2022. 12. 26. 00:45

0~99 까지 count를 하는 회로이다.

2개가 존재하는데

1개는 99에서 멈추고

다른 1개는 다시 0으로 초기화가 된다.

HW이므로 Parallel 하게 실행된다.

`timescale 1ns/1ps

module counter(
	input			clk				,
	input			reset_n			,
	output	[6:0]	o_cnt			,
	output	[6:0]	o_cnt_always	
);

	// 100에서 멈추는 counter
	reg [6:0] cnt100;
	assign o_cnt = cnt100;
	always @(negedge reset_n, posedge clk) begin
		if(!reset_n)
			cnt100 <= 0;
		else if(cnt100<99)
			cnt100 <= cnt100 +1;
	end
	
	
	
	
	// 0 -> 1 -> ... -> 99 -> 0
	reg [6:0] cnt;
	assign o_cnt_always = cnt;
	always @(negedge reset_n, posedge clk) begin
		if(!reset_n)
			cnt <= 0;
		else if(cnt>=99)		// == 보다 안정적
			cnt <= 0;
		else
			cnt <= cnt +1;
	end




endmodule

 

counter.v
0.00MB
tb_counter.v
0.00MB