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 콜이다.
'Programming > SystemVerilog' 카테고리의 다른 글
UVM TLM 인터페이스 export, port, imp port 차이점 (0) | 2021.04.23 |
---|---|
UVM TLM에 대해서 알아봅시다! (0) | 2021.04.21 |
항상 헷갈리는 시스템베릴로그 $cast - Up-Casting과 Down-Casting (14) | 2021.04.21 |
시스템베릴로그의 Virtual Classes와 Polymorphism (0) | 2021.04.21 |