본문 바로가기
HW Design/1. Verilog HDL Basic

[Function and Task] 1. 베릴로그 함수

by 한PU 2024. 1. 16.
728x90
반응형
  • subprograms
    • tasks
    • functions
    • reusable한 코드를 작성할 수 있음.
      • 최대한 reusable하게 만드는것이 좋음.
  • function과 task의 차이점.
    • 차이점 1
      • function을 작성하면 계산을 수행하여 단일 값을 반환
      • task는 여러 개의 순차문을 실행하지만 값을 반환 X, 대신 출력의 개수를 무제한으로 가질 수 있음.
    • 차이점 2
      • function은 즉시 실행. delays, posedge, wait 등의 구문을 포함할 수 없음.
      • task는 가능.

Verilog Function

  • 하나 이상의 입력값을 받아 출력값을 반환하는 subprogram
  • 코드의 작은 부분을 구현 가능.
  • 동일 코드를 반복하는 대신 함수를 사용하면 유지 관리가 더 쉬워짐.
    • 객체지향 관점?
  • 베릴로그 모듈에 함수를 호출하는 데 사용할 코드를 작성.
// inline arguments 선언 스타일
function <return_type> <name> (input <arguments>);
    // local 변수 선언
    begin
        // function code
    end
endfunction

// inbody arguments 선언 스타일
function <return_type> <name>;
    (input <arguments>);
    // local 변수 선언
    begin
        // function code
    end
endfunction
  • <\name>
    • 함수 이름 작성
  • inline 선언
    • begin end 를 생략 가능.
  • <\arguments>
    • 함수에 대한 입력 선언.
  • - 반환 데이터 타입 선언. - 이 부분 제외시 기본적으로 1bit 값을 반환.
function integer easy_example (input integer a);
    easy_example = a;
endfunction

Rules for Using Functions in Verilog

  • 시간이 많이 걸리는 구문을 포함할 수 없는 것 등.
    • delay, posedge, wait statements.
    • task를 이용하여 작성해야 함.
  • 함수 내에서 task 호출 불가능.
    • 함수 내에서 다른 함수를 호출하는 것은 가능.
  • 함수는 즉시 실행. blocking 할당만 사용 가능.
  • local 변수 선언, 사용 가능.
  • global 변수 엑세스 가능.
Rules for Using Functions in Verilog
하나 이상의 input arguments를 가질 수 있음.
오직 1개의 값만 반환 가능
time consuming constructs 사용 불가 (posegde, wait, delays(#))
task 호출 불가능
다른 function 호출 가능
Non-blocking 할당 사용 불가능
local 변수 선언, 사용 가능
global 변수에 엑세스 가능
return type을 특정하지 않으면 single bit 반환

Verilog Function Example

  • 2 input 합계 반환 함수
    • integer 사용
    • 덧셈 연산자 사용
// inline 선언
function integer addition (input integer in_a, in_b);
    addition = in_a + in_b;
endfunction

// inbody 선언
function integer addition;
    input integer in_a;
    input integer in_b;
    begin
        addition = in_a + in_b;
    end
endfunction

Calling a Function in Verilog

  • positional association
    • 함수를 호출할 때 parameters를 선언한 순서와 동일한 순서로 함수에 전달.
    • 인수 선언 순서가 매우 중요.
func_out = addition(a, b);
  • in_a는 a에 매핑되고, in_b는 b에 매핑.
    • 순서가 중요!!

Automatic Functions in Verilog

  • automatic 키워드를 사용하여 함수를 reentrant로 선언할 수 있음.
    • 2001 Sandard에서만 가능.
  • Reentrant
    • 함수 내의 변수와 인수가 동적 할당.
    • <-> 일반 함수는 변수와 인수가 정적 할당.
      • 정적 메모리 할당
        • 함수 처리를 수행하는 데 사용되는 모든 메모리는 한번만 할당, 이후 고정
    • 동적 메모리 할당
      • 함수가 호출될 때 마다 메모리를 할당.
      • 함수가 완료되면 메모리 할당 해제
  • automatic 키워드를 사용해 재귀 함수를 작성 가능.
    • recursive function
      • 팩토리얼 계산 등.
function automatic integer factorial (input integer a);
    begin
        if (a > 1) begin
            factorial = a * factorial(a - 1);
        end
        else begin
            factorial = 1;
        end
    end
endfunction
728x90
반응형

'HW Design > 1. Verilog HDL Basic' 카테고리의 다른 글

[Function and Task] 3. 예제 풀이  (0) 2024.01.16
[Function and Task] 2. Task  (0) 2024.01.16
[Verilog Tutorial] level-8 Loops 모음  (0) 2024.01.16
[Loops] 2. 예제 풀이  (0) 2024.01.16
[Loops] 1. 베릴로그 loop문  (0) 2024.01.16