Function을 작성할 때 output logic을 parameter로 전달할 수도 있고, function 내부에서 생성하여 return 할 수 있다.
- func(clk,reset,inlogics,out_logic)
- out_logic <= func(clk,reset,inlogics)
scode는 두 가지 방식 다 지원하지만 두 번째 방식을 권장한다.
실제로 scode에서 제공하는 library function들은 모두 두 번째 방식으로 구현된다. 두 번째 방식은 가독성이 좋고, out logic에 대해 미리 선언할 필요없고, return 되는 값을 assign하므로 자동 선언을 이용할 수 있는 장점이 있다.
n개의 bits를 0 부터 counting하는 함수 count_nbit가 있다고 하자.
def count_nbit(clk,reset,nbit) :
cnt = logic_unique("cnt[%s]"%nbit)
with sequence(clk) :
cnt <= (0,reset,cnt+1)
return cnt
위의 함수를 nbit가 4, nbit가 5인 logic을 만들려면 다음과 같다.
cnt1 <= count_nbit(clk,reset,4)
cnt2 <= count_nbit(clk,reset,5)
cnt1,cnt2는 따로 logic 정의하지 않아도 count_nbit 안에서 정의되므로, 각각 4bits, 5bits logic으로 자동 선언된다.
Multiple return을 이용하려면 function에서 출력을 tuple로 받으면 된다.
def tb_pattern(clk, values, clock_index):
....
...
# .....
return data, valid
(d,v) <= tb_pattern(clk,[10,20,30], 10)
d,v는 자동 선언되므로 따로 정의할 필요 없다.