산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog 함수 마스터하기: 효율적인 RTL 설계를 위한 활용법

RTL 내에서 반복되는 코드 조각을 여러 번 호출해야 할 때가 많습니다. 이들은 주로 시뮬레이션 시간을 소비하지 않으며, 다양한 데이터 값으로 복잡한 계산을 수행해야 할 수 있습니다. 이런 경우 function을 선언하고 반복되는 코드를 함수 안에 넣어 결과를 반환하게 하면 됩니다. 이제 함수 호출만 하고 계산할 데이터만 전달하면 되므로 RTL 코드 양이 획기적으로 줄어듭니다. 이는 C 언어의 함수와 매우 유사합니다.

함수의 목적은 표현식에서 사용될 값을 반환하는 것입니다. 함수 정의는 항상 function 키워드로 시작하며 반환 타입, 이름, 괄호로 감싼 포트 리스트가 뒤따릅니다. Verilog는 endfunction 키워드를 만나면 함수 정의가 끝남을 알 수 있습니다. 함수는 최소 하나의 입력을 가져야 하며, 아무것도 반환하지 않으면 반환 타입은 void가 됩니다.

문법

function [automatic] [return_type] name ([port_list]);
  [statements]
endfunction

automatic 키워드는 함수를 재진입 가능(reentrant)하게 만듭니다. 태스크 내 선언된 항목들이 태스크의 다른 호출 간에 공유되는 대신 동적으로 할당됩니다. 이는 재귀 함수나 동일한 함수가 포크되어 N개 프로세스에 의해 동시에 실행될 때 유용합니다.

함수 선언

함수 입력을 선언하는 두 가지 방법이 있습니다:

function [7:0] sum;
  input [7:0] a, b;
  begin
    sum = a + b;
  end
endfunction

function [7:0] sum (input [7:0] a, b);
  begin
    sum = a + b;
  end
endfunction

함수에서 값 반환

함수 정의는 함수와 같은 이름의 내부 변수를 암시적으로 생성합니다. 따라서 함수 범위 내에서 같은 이름의 다른 변수를 선언하는 것은 불법입니다. 반환 값은 함수 결과를 내부 변수에 할당하여 초기화합니다.

sum = a + b;

함수 호출

함수 호출은 표현식의 피연산자이며 다음과 같은 문법을 가집니다.

reg [7:0] result;
reg [7:0] a, b;
initial begin
  a = 4;
  b = 5;
  #10 result = sum (a, b);
end

함수 규칙

재귀 함수

자신을 호출하는 함수를 재귀 함수라고 합니다. 아래 예제는 주어진 숫자의 팩토리얼을 계산하는 재귀 함수입니다.

module tb;
  initial begin
    integer result = factorial(4);
    $display("factorial(4) = %0d", result);
  end

  function automatic integer factorial(integer i);
    integer result = i;
    // 이 함수는 다른 인수로 자신의 본문 내에서 호출됨
    if (i) begin
      result = i * factorial(i-1);
      $display("i=%0d result=%0d", i, result);
    end else
      result = 1;
    return result;
  endfunction
endmodule

시뮬레이션 로그

xcelium> run
i=1 result=1
i=2 result=2
i=3 result=6
i=4 result=24
factorial(4) = 24
xmsim: *W,RNQUIE: Simulation is complete

verilog

  1. Stratasys FDM 프린팅 최적화를 위한 Insight 필수 기능 10가지
  2. C++ 함수 완전 정복: 실전 코드 예제로 이해하기
  3. 파이썬 람다 함수 마스터하기: 실용 예제 & 모범 사례
  4. 버릴로그(Verilog) 입문: 디지털 회로 설계를 위한 하드웨어 기술 언어
  5. Verilog 결합(Concatenation) & 복제(Replication) 연산자 실전 가이드
  6. Verilog 할당문 이해: 유형, 문법, 모범 사례
  7. Verilog 차단 vs 비차단 할당: 핵심 차이점 완벽 이해
  8. Verilog 수학 함수 마스터하기: 효율적인 하드웨어 설계를 위한 활용
  9. C 함수 마스터: 선언, 정의, 호출, 인자 전달(값/참조), 재귀
  10. MATLAB 함수 완전 정복: 정의, 워크스페이스, 입출력, 익명/중첩/비공개 함수