본문 바로가기

Programming/SystemVerilog

UVM TLM port interface 관련 메소드들

put

  • .put(trans)을 호출함으로써, 다른 component로 transaction을 전송한다.
  • put() 메소드는 blocking이므로, transaction이 성공적으로 보내지기 전까지는 함수가 return되지 않는다. ==> 동작을 멈추고 기다린다는 뜻. 시뮬레이션 타임 소모.

 

get

  • .get(trans)을 호출함으로써, 다른 component로부터 transaction을 회수한다.
  • get() 메소드는 blocking 이므로, transaction을 성공적으로 가져오기 전까지는 함수가 return되지 않는다.
    • ==> 동작을 멈추고 기다린다는 뜻. 시뮬레이션 타임 소모. 예를들면 상대방으로부터 패킷을 받을때까지 1초..2초...3초... 이렇게 기다려.
  • get() method call consumes the transaction. i.e like how FIFO get method will takeout the entry from FIFO
  • get() 메소드는 transaction을 소비한다(consumes). – 무슨뜻일까 – 즉 FIFO가 get method로부터 FIFO entry를 가져 오듯이, get()메소드는 port를 통해 transaction을 받아온다는 뜻?
  • get을 연속적으로 호출하면 서로 다른 transaction instance를 반환한다. 이 뜻은 즉, 첫번째 get이 transaction을 소비하고, 두번째 get은 새로운 transaction을 받길 기대한다.

 

peek

  • peek method는 transaction을 소비하지 않고 받아온다. 실제로 꺼내오진 않는다는 뜻.
  • .peek(trans) 는 다른 컴포넌트로부터 transaction을 회수해 오지만 소비하지는 않는다.
  • 그말은 즉, 연속적인 peek을 호출하면, 매번 똑같은 transaction을 return 받음.
  • peek 역시 blocking이다.

 

try_put

  • try_put 메소드는 blocking 하지 않고 transaction을 다른 component로 전송할 때 사용한다.
  • .try_put(trans)를 호출하면, transaction 전송이 가능할 때! trans를 전송한다.
  • 만약 받는 쪽에서 transaction을 받을 준비가 됬으면 1을 return하고, 그렇지 않으면 0을 return받는다.

 

can_put

  • can_put 메소드는 component가 transaction을 받을 준비가 됐을 때 1을 return하고, 준비가 되지 않았으면 0을 return한다.
  • can_put()을 호출할 때 argument는 필요하지 않다. (argument를 건네주면 안된다.) 그냥 다른 component가 trans를 받을 준비가 됐는지 아닌지 확인 용도로 쓰인다.

 

try_get

  • try_get 메소드는 blocking execution 없이 트랜잭션을 회수하는 데 사용한다.
  • .try_get(trans)을 호출하면 다른 component로부터 transaction을 회수할 수 있다. 회수가 가능할 때만!
  • transaction이 회수 가능하면 1을 return하고, 불가능하면 0을 return한다.

 

can_get

  • component가 transaction을 즉각 회수할 수 있는 상태이면, can_get() 메소드는 1을 return하고, 그렇지 않으면 0을 return한다.
  • can_get() 메소드는 argument를 필요로 하지 않는다. 회수할 수 있는 transaction이 있는지만 확인하는 메소드이다.

 

transport

  • calling .transport(req, resp) 메소드는 주어진 request를 실행하고, output argument에 response를 return한다.
  • the transport 메소드는 blocking이다. operation이 끝나기 전까지 시뮬레이션은 block된다.

 

Analysis

write

  • .write(trans) 메소드를 호출하면, 해당 포트를통해 transaction이 broadcast 된다.
  • 즉 analysis port를 subscribe 하는 여러 포트들을 list로 갖고 있으며, analysis port의 write 호출 시 transaction은 subscriber들에게 모두 전송됨.
  • write method는 nonblocking 콜이다.