728x90
반응형
- subprograms
- tasks
- functions
- reusable한 코드를 작성할 수 있음.
- 최대한 reusable하게 만드는것이 좋음.
- function과 task의 차이점.
- 차이점 1
- function을 작성하면 계산을 수행하여 단일 값을 반환
- task는 여러 개의 순차문을 실행하지만 값을 반환 X, 대신 출력의 개수를 무제한으로 가질 수 있음.
- 차이점 2
- function은 즉시 실행. delays, posedge, wait 등의 구문을 포함할 수 없음.
- task는 가능.
- 차이점 1
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
- 팩토리얼 계산 등.
- 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
반응형
'Verilog HDL > 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 |