앞서 if~else 문과 case문에 대해서 알아봤고 이번에는 Verilog에서의 반복문에 대해서 살펴봅시다.
- forever 문
forever begin
code to execute;
end
forever문은 위와 같은 꼴로 작성을 하게 되는데 이렇게 하면 영원히(forever) 반복하는 반복문이 되게 됩니다.
이 forever문은 보통 Testbench에서 clock을 생성할 때 사용하게 되는데 한번 5ns마다 Toggle되는 즉, 10ns의 Clock을 만들어봅시다.
initial begin
clk = 1'b0;
forever begin
clk = #5 ~clk ;
end
end
clk의 초기값을 초기에 한번 실행되는 inital 문으로 0으로 잡아주고
forever문 안에서 #5(# delay)를 이용해 5ns마다 Toggle 되는 Clock을 만들 수 있었습니다.
- repeat 문
repeat(반복 횟수) begin
code to execute;
end
repeat문은 반복횟수를 입력해서 특정 횟수를 반복하도록 하는 반복문입니다.
위에서 forever 문으로 생성한 clock을 repeat문으로 변경해서 5번만 실행되도록 해볼까요?
initial begin
clk = 1'b0;
repeat(5) begin
clk = #5 ~clk ;
end
end
5번만 Toggle되고 더이상 Toggle되지 않는 것을 확인할 수가 있습니다.
이외에도 Verilog에도 C언어에 존재하는 for문, while문이 존재합니다.
이 부분은 C언어와 큰 차이가 없으니 간단히만 살펴보고 넘어가도록 할게요.
- for 문
for (초기 값; 조건; 증/감) begin
code to execute;
end
begin, end가 추가된 것 이외에 C언에서 사용하던 for문과 다른 것은 없네요.
이걸로 또 Clock을 만들어볼까요? for문을 이용해 또 5번 Toggle하는 Clock을 만들어보죠.
int i=0;
initial begin
clk = 1'b0;
for(i=0 ; i<5 ; i++) begin
clk = #5 ~clk;
end
end
생각했던 대로 5번 Toggle하고 더이상 변하지 않는 것을 확인할 수 있습니다.
- while 문
while(조건) begin
code to execute;
end
while도 begin, end가 추가된 것 이외에 이전에 알던 것과 별반 다를게 없습니다.
또 한번 5번 Toggle하는 Clock을 만들어봅시다.
int i=0;
initial begin
clk = 1'b0;
while(i < 5) begin
clk = #5 ~clk;
i++;
end
end
역시 잘 동작 되는 것을 확인할 수 있습니다:)
최근댓글