function에서 scode의 문장을 사용하면 VHDL/Verilog 변환이 이루어지는데, function에 parameter를 전달할 때는 약간의 주의가 필요하다.
scode는 expression이 필요할 때 logic으로 주어진 경우 자동으로 active high expression으로 바꾸는 기능이 있다.
logic(enable)
with sequence(clk):
count <= (count + 1,enable)
위의 code는 enable==1과 같은 condition expression이 주어져야 하는 위치에 enable logic만 쓰인 경우이다. 이와 같이 expression이 필요한 경우에 logic만 주어진 경우 active high로 간주하여 enable==1과 같이 변환하여 준다.
다만 위의 code가 funtion으로 구현되었을 경우에는 call하는 쪽에서 logic으로 parameter를 보낼 지 expression으로 보낼 지 알 수가 없게 되고, 모두 다 지원해야 한다. 이 경우 function에서는 주어진 parameter를 변형하지 말고 그대로 사용하면 된다.
def test_func(clk,enable):
count = logic_unique("count")
with sequence(clk):
count <= (count + 1,enable)
return count
위와 같이 code가 작성되었을 경우 call하는 쪽에서는 logic, expression 양쪽 모두를 사용할 수 있다
- count <= test_func(clk,enable) : enable이 high인 경우 counting한다.
- count <= test_func(clk,enable==0) : enable이 low인 경우 counting한다.
만일 test_function에서 enable==1과 같이 작성한 경우 첫 번째는 문제가 없게 되겠지만, 두 번째의 경우는 (enable==0)==1과 같은 의미가 되어 syntax error가 발생하게 된다.
scode를 작성할 때는 expression보다는 logic를 사용하는 것이 간편하고, function작성시 예기치 않은 에러를 막을 수 있게 된다.