If 문
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 52번째.
if 문은 조건이 참일 때만 코드를 실행하는 의사결정 블록입니다. if 문은 조건(condition)을 확인합니다.
만약 condition이 참(1)이면 내부 코드가 executes됩니다. condition이 거짓(0)이면 코드를 건너뜁니다.
구문:
if (condition) begin
// condition이 true일 때 코드가 실행됩니다
end간단한 예제
if (reset) begin
count = 0;
end이 예제에서:
begin및end는 코드 블록의 시작과 끝을 표시하는 데 사용됩니다
reset이 1(true)이면begin과end안의 코드가 실행됨 →count가 0이 됨reset이 0(false)이면 내부 코드가 건너뛰어짐 → 아무 일도 일어나지 않음
begin 및 end는 다른 프로그래밍 언어의 중괄호 { }처럼 작동합니다. 여러 statement를 함께 묶어 Verilog가 어떤 코드가 if condition에 속하는지 알 수 있게 합니다. 여기에는 하나의 statement만 있지만, 일관성을 위해 begin과 end를 사용하는 것이 좋은 습관입니다.
Always Block 내부의 If Statement
always @(posedge clk) begin
if (reset)
count <= 0;
end참고: 단일 문장의 경우 begin과 end는 생략 가능합니다. 예를 들어, 위 always 블록의 경우 if 뒤에 단 하나의 문장만 포함되어 있으므로 begin/end가 필요하지 않습니다.
조건(Condition)은 어떤 표현식(Expression)이든 가능합니다
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
end중요한 규칙
| 규칙 | 설명 |
|---|---|
condition은 어떤 표현식이든 가능합니다 | 0이 아닌 (알려진) 값은 참(true)으로 취급되고, 0은 거짓(false)으로 취급됩니다 |
여러 문장에는 begin / end가 필요합니다 | 다른 언어의 { }와 같습니다 |
begin/end가 없으면, 단 하나의 문장만 따릅니다 | 바로 다음 줄만 해당됩니다 |
챌린지
수행할 작업:
- 이 코드가 작동하도록 빠진
if문을 추가하세요.
enable이1일 때,out은a & b와 같아야 합니다.enable이0일 때,out은0으로 유지되어야 합니다 (변경되지 않음).
시작 코드는 out = 0으로 초기화하고 두 경우를 모두 테스트합니다.
직접 해보기
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// 테스트 케이스 1: enable = 1
enable = 1;
// TODO: if 문 추가 (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// 테스트 케이스 2: enable = 0
enable = 0;
out = 0;
// TODO: out은 0으로 유지되어야 함
$display("enable=0: out = %d (should be 0)", out);
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.