외부 기능
0->1->0 펄스를 세는 기능을 함.
액티브엣지 시점에서
외부 포트
input source
output cnt
동작
1. source가 1이면 internal_cnt가 1이 할당됨.
2. source가 0이되면 internal_cnt가 1인지 확인하고 그렇다면 cnt값을 1만큼 증가시킴. 그리고 다음 펄스를 위해 internal_cnt를 0으로 초기화시킴.
// Code your design here
module pulse_counter(
input source,
output reg [3:0] cnt,
input clk,
input rstn
);
reg internal_cnt;
always @(posedge clk or negedge rstn) begin
if (!rstn) begin
internal_cnt = 0;
cnt = 0;
end
else begin
if (source == 1) begin
internal_cnt = 1;
end
else begin
if (internal_cnt == 1) begin
cnt = cnt+1;
internal_cnt = 0;
end
else begin
cnt = cnt;
internal_cnt = 0;
end
end
end
end
endmodule
// Code your testbench here
// or browse Examples
module tb_top;
reg clk;
reg source;
wire [3:0] cnt;
reg rstn
initial begin
clk = 1;
forever begin
#10 clk = ~clk;
end
end
// Instantiate device under test
pulse_counter u1(.source(source),
.cnt(cnt),
.clk(clk),
.rstn(rstn));
initial begin
rstn = 1;
#1 rstn = 0;
#1 rstn = 1;
end
endmodule