앞서 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

10ns Clock with forever

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

10ns Clock with repeat

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

10ns Clock with for

생각했던 대로 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

10ns Clock with while

역시 잘 동작 되는 것을 확인할 수 있습니다:)

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기