verilog HDL

[Verilog] Task / Function

난 훈이 2022. 3. 21. 18:19
  • task

다른 task나 function을 사용할 수 있음

non - zero 시뮬레이션 시간에 수행될 수 있음

지연, 사건 또는 타이밍 제어 문장을 포함할 수 있음 ( #, assign )

input, output 또는 inout을 하나도 가지지 않거나 다수를 가질 수 있음

값을 되돌릴 수 없지만 input과 output을 통해 여러 개의 값을 전달할 수 있음

 

#SV

static / automatic 

module, interface, program, package에 정의된 task는 기본적으로 static

class 내에 선언된 task는 항상 automatic

ex) 

tb_

initial begin

 display(); #1;

 display(); #1;

 display(); #1;

end

 

task display();

 integer i = 0;

 i = i + 1;

 $display("i=%d",i);

endtask

// static 

   i = 1;

   i = 2;

   i = 3;

// automatic

   i = 1;

   i = 1;

   i = 1;

  • function

다른 function을 사용할 수 있지만, 다른 task는 사용할 수 없음

항상 시뮬레이션 시간 0에 수행됨

어떤 지연, 사건 또는 타이밍 제어문장을 포함할 수 없음

적어도 하나 이상의 input 인수를 가져야만 함

항상 하나의 값을 되돌리지만 output 또는 inout 인수를 가질 수 없음

 

공통점

wire를 가질 수 없음

행위 수준 문장만 포함함

always 또는 initial 문장을 포함하는 것이 아니며 always 블록, initial 블록 또는 다른 task와 function으로부터 호출

 

  • task

다음 조건 중 하나가 참이면 task를 사용해야 함

프로시저에 지연,타이밍 또는 사건 제어 구조가 존재함

프로시저가 출력 인수를 하나도 가지지 않거나 하나 이상을 가짐

프로시저가 입력 인수를 가지지 않음

 

task<name_of_task>;

     <task_declaration> → 파라미터 선언, i/o 포트 선언, 변수(reg, time, integer) 선언, event 선언

     <statements>

endtask

 

task 호출

task <name_of_task>;

<name_of_task>(<parameter_list>);

ex)

 

  • function

다음 조건이 모두 참이면 함수를 허용함

프로시저에 지연, 타이밍 또는 사건 제어 구조가 없음

프로시저는 하나의 값을 되돌림

적어도 하나의 입력 인자가 있음

output 또는 input 인자가 없음

non-blocking 할당이 없음

 

function 선언 문장

function [<return_range_or_type>] <function_name>;

 <function_declaration> → 파라미터 선언, input선언 (output, inout 선언 X), 변수 선언

 <statements>

endfunction

 

function 호출

<function_name>(<arguments_list>);

result = calc_value(addr);

ex)