https://slidesplayer.org/slide/11177553/
들어오는 클럭이(입력주기가) 일정하면 타이머
일정하지 않으면 카운터
숫자를 세기 위해선 이전값의 유지 필요 -> 플립플롭 필요
이전 비트의 하강엣지때 토글되는 T플립플롭 연결
서로 다른 클럭으로 작동
클럭펄스 Active-Low

(MSB)0000(LSB)->1000->0000->0100 PDT에 의한 지연시간때문에 카운트가 바뀔때 0000이되는 순간이 아주 잠깐있음, 비동기 이기 때문에 이전의 모듈이 먼저 바뀌고 그 출력이 다음 모듈로 전달 되기 때문에
module up_counter_asyc(
input clk, reset_p,
output [3:0] count);
T_flip_flop_n T0(.clk(clk), .reset_p(reset_p), .t(1), .q(count[0]));
T_flip_flop_n T1(.clk(count[0]), .reset_p(reset_p), .t(1), .q(count[1]));
T_flip_flop_n T2(.clk(count[1]), .reset_p(reset_p), .t(1), .q(count[2]));
T_flip_flop_n T3(.clk(count[2]), .reset_p(reset_p), .t(1), .q(count[3]));
endmodule
wire형에 0을 주면 접지와 같음
reg형에 0을 주면 시뮬레이션 상태에서는 가능은하지만 어짜피 실제 보드에서는 파워 리셋 기능있음, 코드짜다 나중에 실수하지 말고 그냥 리셋코드 사용
시뮬레이션이 나오지 않음
전에 만든 T플립플롭에서 q값 초기화 필요 처음(unknown)상태->reset

reset값을 1로준다면 출력값 0으로 초기화

클럭의하강 엣지마다 카운터 증가

이전비트의 상승엣지에 토글되기 때문에 처음에 모두 1-> 그다음 서로 연결된 상승엣지에서 토글
module down_counter_asyc(
input clk, reset_p,
output [3:0] count);
T_flip_flop_p T0(.clk(clk), .reset_p(reset_p), .t(1), .q(count[0]));
T_flip_flop_p T1(.clk(count[0]), .reset_p(reset_p), .t(1), .q(count[1]));
T_flip_flop_p T2(.clk(count[1]), .reset_p(reset_p), .t(1), .q(count[2]));
T_flip_flop_p T3(.clk(count[2]), .reset_p(reset_p), .t(1), .q(count[3]));
endmodule
초기화

상승엣지에서 동작하는 다운카운터
