-
[Verilog][기초문법] task, function개발/Verilog 2022. 1. 9. 02:24
함수와 태스크를 이용해 반복적인 루틴작업을 모듈화 할 수 있다.
두개의 차이점을 표로 나타내면 다음과 같다
function task function ... endfunction
시뮬레이션 시간이 0이다.
딜레이, 타이밍 제어 등의 구문들은 사용할 수 없다.
하나의 값을 리턴한다
내부에서 function은 호출되지만, task는 호출할 수 없다.task ... endtask
시뮬레이션 시간은 0 될 수 있다.
딜레이, 타이밍 요소가 포함될 수 있다.
리턴값은 없지만, 여러개의 output 포트로 출력을 보낼 수 있다.
내부에 다른 task, function을 호출할 수 있다.둘의 가장 큰 차이점은 바로 타이밍제어 요소가 포함되는지 여부이다.
function은 @(), #(delay) 등의 문장을 넣을 수 없다.
반면 task는 가능하다. 따라서 task 가 function의 상위호환으로 볼 수 있다.
1. task
태스크는 task , endtask 키워드로 선언한다
task [automatic] identifier (port list); begin ... end endtask // example task bit_operation (); beging input [15:0] a, b; output [15:0] and_ab, or_ab, xor_ab; begin #10; and_ab = a & b; or_ab = a | b; xor_ab = a ^| b; end end endtask // C style port declarartion task bit_operation (input [15:0] a, b, output [15:0] and_ab, or_ab, xor_ab); begin begin #10; and_ab = a & b; or_ab = a | b; xor_ab = a ^| b; end end endtask
task 선언시 [] 안에 있는 키워드는 옵션이다.
automactic 키워드를 넣으면 다이나믹 태스크가 된다. 키워드를 넣지 않으면 기본적으로 static으로 선언된다.
port 선언하는 방법은 블럭 내부에 선언하는 것과 C 언어처럼 포트 부분에 선언을 하는것 2가지가 있다.
어느것을 사용해도 무방하다.
task 는 return 값이 없는 대신에, output 포트로 결과를 보내줄 수 있다.
그리고 여러개의 output을 갖는게 가능하다.
return 으로 값을 반환하진 못하지만 함수를 종료시키는건 가능하다.
2. function
함수는 function endfunction 키워드로 선언한다.
// 함수 형식 function [automatic] [signed | unsigned ] [range] identifier (port list); begin ... end function // example funciton automatic reg parity_check (); begin input [31:0] addr; // 리턴 방법 1 parity_check = ^addr; // 리턴 방법 2 return ^addr; end endtask // C style port declarartion // example funciton automatic reg parity_check (input [31:0] addr;); begin // 리턴 방법 1 parity_check = ^addr; // 리턴 방법 2 return ^addr; end endtask
함수 선언시 리턴값이 음수가 있을땐 signed 키워드로 명시해줄 필요가 있다.
키워드를 쓰지 않으면 기본적으로 unsigned 이다.
함수는 return 키워드로 값을 반환하거나 함수 이름으로 반환 할 수 있다.
task와 마찬가지로 C 언어 스타일로 입출력 리스트를 선언 할 수 있다.
'개발 > Verilog' 카테고리의 다른 글
[Verilog][기초문법] generation 구문 사용법 (0) 2022.01.08 [Verilog][기초문법] 조건문, 분기문 (0) 2022.01.08 [Verilog][기초문법] 모듈, 포트 (0) 2022.01.05 [Verilog][기초문법] 데이터 형 (0) 2022.01.03