지금까지 배운것으로만 해도 Verilog 다 할 수 있다.(수정/내가 behavioral modeling 포스팅을 안했었구나..)
지금부터는 추가적인 기능들에 대해서 포스팅 하겠다.
💻 Function vs Task
둘다 C언어에서 함수와 비슷한 기능을 수행한다.
둘다 모듈안에 정의되어야 하고 해당 모듈 안에서만 쓰인다는 공통점이 있다.
차이점을 봐보자.
Function
- Function은 다른 Function은 이용할수 있지만, task를 이용할 수는 없다.
- 0의 시뮬레이션 시간에 실행된다.
- 어떠한 delay, event, timing control statement도 포함해서는 안된다.
- 적어도 하나의 입력인자가 있어야한다.
- 항상 하나의 리턴값만을 반환한다.
- output이나 inout 인자를 가질수 없다.
Tasks
- 다른 task나 Function을 사용할 수 있다.
- 0이 아닌 시뮬레이션 시간에 사용될 수 있다.
- delay,event,timing control statement를 포함할 수 있다.
- 입력인자가 없어도 된다.
- 값을 반환하지는 않는다, 하지만, 복수의 값들을 output, inout 을 통해서 통과시킬 수 있다.
- 0개이상의 output,inout 인자를 가질 수 있다.
💻 Task
위는 task를 사용하는 에제이다. always 문 안에서 bitwise_oper(AB_AND, AB_OR, AB_XOR,A,B);의 형태로
bitwise_oper라는 task를 호출하고 있다.
밑 블루박스는 bitwise_oper라는 task를 정의해둔 것이다.
operation이라는 모듈 내부에서 정의되어있으며, 모듈안에 지정되어 있는 reg들의 값들을 바꿔주는 역할을 수행한다.
c언어에서의 함수랑은 function이 조금 더 가까운 역할을 하고 있는 듯 보인다.
task는 계속 수행해야 하는 번거로운 일을 지정해두는 매크로 역할을 하고 있다.
task를 수행하면 내부 레지스터들의 값들도 다 변한다.
위처럼 clock이라는 신호에 delay를 걸어주며 계속해서 값을 바꿀 수도있다.
그리하여, task는 simulation module에서 많이 사용된다.
task는 static이다. 이말은, 하나라서 여러명이 동시에 access할 수 있다는 것이다.
여러명이 동시에 access하면, 충돌하여 문제가 생긴다.
이를, 해결해주는 것이 automatic이다.
task 뒤에 automatic을 붙여준다. 밑의 박스에서 posedge 일때, bitwise_xor을 호출하는 구문이 2개나 있다.
2개의 task가 동시에 호출되었지만, automatic이 붙어있으므로, 독립적으로 수행한다.
💻Function
Function은 c언어의 함수와 유사하다고 보면 되겠다.
delay,timing,event control요소는 들어갈 수 없으며, 반환값이 있다.
c언어 함수랑 똑같으니깐, 뭐 보면 알겠지..
그리고, function은 재귀적으로는 잘 사용 안한다고한다.
그런데도, 동시에 부르거나 재귀호출 해서 문제가 생긴다면 automatic 키워드를 사용해주면 된다.
'2-2 > 디지털 설계 및 실험' 카테고리의 다른 글
[디지털 설계 및 실험] Verilog vol10. Timing and Delays (0) | 2022.12.03 |
---|---|
[디지털 설계 및 실험] Verilog 기본 vol9. Useful Modeling Techniques (0) | 2022.11.18 |
[디지털 설계 및 실험] Verilog 기본 vol 6. dataflow modeling (2) | 2022.10.21 |
[디지털 설계 및 실험] Verilog 외전 (1) | 2022.10.15 |
[디지털 설계 및 실험] Verilog 기본 vol.5 Gate-Level Modeling (0) | 2022.10.12 |