본문 바로가기

Programming/SystemVerilog

UVM TLM에 대해서 알아봅시다!

TLM이 뭐지..??

 

이 개념을 알기까지 넘 오래 걸렸다...

Transaction이 뭔지 제대로 설명해주는 문서도 없어! 죄다 영어야!!

 

 

RTL로 작성된 Design에서.. rtl이 주고받는 signal은 클록에 맞춰서 drive/load 된다.

이에 대비되는 개념으로 transaction은 검증 컴포넌트 간 주고 받는 아이템으로,

DUT의 signal과 달리 timing을 신경 쓸 필요가 없다.

검증시 input에게 줄 stimuli의 내용과 규칙 등을 signal보단 좀더 추상적인 레벨에서 나타낸 것이다.

timing에 맞춰야하고 더 엄격하게 작성되는 하드웨어 수준에서의 signal을, 검증 컴포넌트끼리 통신할 때까지 갖고갈 필요는 없기 때문에,

signal보단 추상적인 개념인 transaction을 작성해 UVM component끼리 주고 받게 한다!

(이런 TLM 시퀀스를 실제 DUT를 구동하기 위한 signal로 구체화 하는 것이 driver임. )

 

 

그리고 UVM은 TLM을 주고받기 위한 library를 제공한다.

transaction-level interface, ports, exports, imp ports, analysis ports 등이 TLM library에 포함된다.

이런 TLM element는 Transactions을 보내고 받고, 서로 다른 컴포넌트간 transaction을 이동시키기 위해 필요하며, 각각이 고유한 역할을 한다.

 

앞서 말했듯이, transaction은 DUT signal 처럼 클록 타이밍에 맞춰서 들어가는 신호들이 아님!

전송할 item의 내용과 랜덤화 규칙 같은 것을 정의한 추상적인 개념으로 sync가 없음.

그럼 Transaction은 component 사이에서 어떻게 전송될까? component간 Transaction을 주고 받는 규약이 필요함!!

이를 가능하게 하는 것이 TLM interface들이야!

 

 

TLM interface의 종류 3가지~

  1. Blocking
  2. Non-Blocking
  3. Combination

Blocking : Receiver가 완벽하게 받을 때까지 sender는 전송하지 않는다.

Non-Blocking : simulation time을 소모하지 않고(즉 blocking과 달리 안멈춘다는 얘기 무야호~) transaction을 보내는 시도를 한다.

Combination : blocking과 nonblocking 모두 포함함. 마치 콤비네이션 피자! 내 입맛따라 섞어섞어 알지 알지??

 

 

다음 편에 계속! 무야호~~