728x90
반응형
- reusable한 작은 코드 섹션을 작성할 때 사용
- time consuming constructs 사용 가능.
- wait
- posedge
- delays (#)
- blocking, non-blocking 할당 모두 사용 가능.
- 입출력의 개수 제한이 없음.
- 함수는 single value만 반환 가능
- 설계에서 여러 번 반복되는 간단한 코드 구현 작업에 가장 적합.
- SPI, I2C 등
- 인터페이스에서 핀을 구동 하는것.
- SPI, I2C 등
- 모듈에서 task 호출이 가능한 코드 작성
- 전역 변수에 엑세스 가능.
- 전역 task를 만들 수도 있음.
- 모듈 외부에 task 코드 작성.
// inline IO 스타일
task <name> (<IO_list>);
begin
// code here
end
endtask
// inbody IO 스타일
task <name>;
<IO_list>
begin
// code here
end
endtask
- <\name>
- 필수로 지정해야 함.
- 로컬 변수 선언, 사용 가능.
- 전역 변수 엑세스 가능.
- task내에서 다른 task 호출 가능. 함수도 호출 가능.
Verilog Task Example
- pulse 생성 task 작성
- 시간단위 선언
- 글로벌 reg 타입 신호로 펄스를 생성.
- 출력을 선언할 필요 X
// 전역 변수 선언
reg pulse;
// inline task
task pulse_generate(input time pulse_time);
begin
pulse = 1'b1;
#pulse_time pulse = 1'b0;
end
endtask
// in body task
task pulse_generate;
input time pulse_time;
begin
pulse = 1'b1;
#pulse_time pulse = 1'b0;
end
endtask
- delay 연산자 사용 가능
- 반환값 X
- 대신 입력, 전역 변수로 엑세스 가능한 모든 신호에 값을 할당.
Calling a Task in Verilog
- task 호출
- 함수와 같은 방식으로 표현식의 일부로 사용 X
- 코드 블록을 설계에 포함시키는 shortcut 이라고 생각해야 함.
- 선언 순서대로 parameters 전달.
generate_pulse(pulse_time);
- pulse_lengh input은 pulse_time 변수에 매핑.
- 펄스 출력은 pulse_out 변수에 매핑.
Automatic Tasks in Verilog
- 2001 Standard에만 사용 가능.
- 동적 메모리 할당.
task increment(input integer incr);
integer i = 1;
i = i + incr;
$display("Result of increment = %0d", i);
endtask
initial begin
increment(1);
increment(2);
increment(3);
end
결과 출력
Result of increment = 2 Result of increment = 4 Result of increment = 7
로컬 변수 i의 값은 정적이며, 단일 메모리 위치에 저장.
- i의 값은 영구적.
- task 호출시에도 그 값을 유지.
- task를 호출할 때마다 이미 저장된 값을 증가시킴. (i가 계속 쌓임.)
task automatic increment (input integer incr);
integer i = 1;
i = i + incr;
$display("Result of increment = %0d", i);
endtask
initial begin
increment(1);
increment(2);
increment(3);
end
결과 출력
Result of increment = 2 Result of increment = 3 Result of increment = 4
i 값 고정 X
- 동적 할당될 때 마다 1로 선언.
- 작업 실행이 완료되면 동적 할당 메모리가 해제되고 로컬 변수가 더이상 존재 X
728x90
반응형
'Verilog HDL > 1. Verilog HDL Basic (문법)' 카테고리의 다른 글
[Verilog Tutorial] level-9 Function and Task 모음 (0) | 2024.01.16 |
---|---|
[Function and Task] 3. 예제 풀이 (0) | 2024.01.16 |
[Function and Task] 1. 베릴로그 함수 (0) | 2024.01.16 |
[Verilog Tutorial] level-8 Loops 모음 (0) | 2024.01.16 |
[Loops] 2. 예제 풀이 (0) | 2024.01.16 |