[Verilog HDL] CH7 루프UVM & RTL/Verilog HDL2022. 6. 14. 14:54
Table of Contents
Introduce
Verilog에는 4가지 형식의 루프문이 있다. 모든 루프 문장은 initail, always블록 안에 위치해야 한다.
- while
- for
- repeat
- forever
While 루프
while-수식이 거짓이 될 때까지 수행한다. 다음은 while 루프의 사용법이다.
// 0부터 127까지 카운트 예제
integer count;
initial begin
count = 0;
while (count <128) begin
$display("Count = %d",count);
count = count + 1;
end
end
// 플래그에서 처음으로 1의 값을 갖는 비트를 찾는 예제
`define TRUE 1'b1;
`define FALSE 1'b0;
reg[15:0] flag;
integer i;
reg continue;
initial begin
flag = 16'b 0010_0000_0000_0000;
i = 0;
continue = `TRUE;
while((i<16)&&continue) begin
if(flag[i]) begin
$display("Ture bit at element number d%",i);
continue = `FALSE;
end
i = i+1;
end
end
For 루프
for루프는 3가지 부분을 나뉜다.
- 초기화 상태
- 종료 상태가 참인지를 판단
- 제어 변수의 값을 바꾸기 위한 절차적 할당
integer count ;
initial
for(count=0;count<128;count=count+1)
$display("Count = %d",count);
for루프는 아래에서 처럼 배열이나 메모리를 초기화하는데 쓰일 수 있다.
`define MAX_STATES 32
integer state [0:`MAX_STATES-1]; // 원소 0:31dmf 가진 정수형 배열 상태
integer i;
initial begin
for(i=0;i<32;i=i+2) // 모든 짝수 위치에 0으로 초기화
state[i] = 0;
for(i=1;i<32;i=i+2) // 모든 홀수 위치에 1으로 초기화
state[i] = 1;
end
Repeat 루프
repeat구조는 정해진 힛수만큼 루프를 수행한다. 일반적인 논리 수식의 루프에 쓰여 질 수 없다. 그런 상황에서는 while루프가 사용된다. repeat구조는 반드시 상수, 하나의 변수또는 하나의 값이 될 수 있는 숫자를 포함해야한다.
// 데이터 버퍼 모듈의 예
// 데이터 시작 신호를 받은 후 다음 8cycle동안 데이터를 받는다.
module data_buffer(
parameter cycles = 8;
input data_start;
input [15:0] data;
input clk;
reg[15:0] buffer [0:7];
integer i;
);
always @(posedge clk) begin
if(data_start) begin
i = 0;
repeat(cycles) begin
@(posedge clk) buffer[i] = data;
i = i+1;
end
end
end
endmodule
Forever 루프
루프는 어떤 수식도 포함하지 않고, $finish task를 만날 때까지 계속 수행한다. 이 루프는 항상 참값을 갖는 while(1)루프와 동일하다. forever루프는 일반적으로 타이밍 제어 구조와 같이 쓰인다. 사용법은 다음과 같다.
// 클럭 생성 always대신 forever사용
reg clock;
initial begin
clock = 1'b0;
forever #10 clock = ~clock;
end
// 매 클럭의 상승엣지에서 두 개의 레지스터가 동기화 된다.
reg clock;
reg x,y;
initial
forever @(posedge clock) x = y;
'UVM & RTL > Verilog HDL' 카테고리의 다른 글
[Verilog HDL] CH7 순차 처리와 병렬 처리 블록 (0) | 2022.06.14 |
---|---|
[Verilog HDL] CH7 조건문, 다중분기 (0) | 2022.06.14 |
[Verilog HDL] CH7 타이밍 제어 (0) | 2022.06.14 |
[Verilog HDL] CH7 구조적 프로시저 & 절차적 할당 (0) | 2022.06.14 |
[Verilog HDL] CH6 연산자 (0) | 2022.06.14 |
@Return :: Return
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!