클록 생성
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 71번째.
클록은 일정한 간격으로 0과 1 사이를 계속 전환하는 신호입니다. 클록은 플립플롭이나 카운터와 같은 순차 논리에 필수적입니다.
클록을 생성하는 이유
테스트벤치에서 순차 회로를 테스트하려면 클록이 필요합니다. 클록은 플립플롭, 레지스터, 상태 머신의 동작을 구동합니다.
클록을 생성하는 방법
| 방법 | 설명 |
|---|---|
always와 # 지연 | 가장 일반적인 방법 |
forever 루프 | 대안 방법 |
repeat 루프 | 고정된 횟수의 주기에 사용 |
방법 1: 지연이 있는 항상 블록
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;- 시간 0에서
clk = 0 - 시간 단위 5마다
clk가 전환됩니다
- 주기 = 10 시간 단위
- 진동수 = 시간 단위당 1/10 = 0.1
방법 2: 무한 루프
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endalways 방법과 같은 결과입니다.
방법 3: 고정된 횟수만큼 반복하기
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
end정확히 10개의 클록 에지(5번의 전체 주기)를 생성한 다음 멈춥니다.
챌린지
4시간 단위마다 토글되는 클록(주기 = 8시간 단위)을 생성하는 누락된 코드를 추가하세요.
할 일:
- 시간 0에
initial블록을 사용하여clk를 0으로 초기화하세요. clk를 4시간 단위마다 토글하도록 지연이 있는always블록을 사용하세요.
직접 해보기
module clock_challenge;
reg clk;
// TODO: 단계 1 - clk = 0으로 설정하는 initial 블록 추가
// TODO: 단계 2 - 4시간 단위마다 clk를 토글하는 always 블록 추가
initial begin
$monitor("Time %0t: clk = %b", $time, clk);
#20;
$display("Clock generated for 20 time units");
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러