Read in EN

function return

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는 자동 선언되므로 따로 정의할 필요 없다.

← All posts