TLM이란 Transaction Level Modeling으로 Wiki내용을 살짝 첨부하자면
'모듈 간의 통신 세부 사항이 기능 단위 또는 통신 아키텍처의 구현 세부 사항과 분리되는 디지털 시스템 모델링에 대한 높은 수준의 접근 방식'
이라고 합니다.
위의 말을 간단하게 말하면 추상화레벨로 기능, 구조를 설계하는 방식이며, 각 peri간의 통신 구현(protocol)은 transaction이라는 packet 통신을 통해서 동작합니다.
기존에 포스팅했던 사이트를 들어가면 예제 code가 있는데, 가장 기초가 되는 example은
하나의 master block(Initiator)에서 slave block(Mem)으로 통신하는 방식을 묘사했습니다.
아래 그림을 보면서 설명하도록 하겠습니다.(혼자 공부중이라 틀린부분이 있을수도 있습니다)
initiator block, mem block 모두 tlm에서 제공하는 socket이라는 port를 서로 연결하여 통신합니다.(11, 17)
두 모듈간의 data를 전달하는 packet은 payload라는 객체를 통해 하며, 여기선 trans라는 변수로 지정합니다(14)
trans객체에 필요한 정보를 넣어주는 역할은 master block에서 해줍니다.(18~28)
이 때 slave에서 선언한 함수(b_transport)를 사용합니다.(30, 29)
이 함수는 socket interface사용을 위해 함수 macro를 통해 등록이 필요합니다(22)
slave block에서는 받은 trans에 대한 예외처리 및 동작을 수행합니다.(43~50)
최종적으로 잘 받았다는 response를 흘려보내 master block과의 socket action을 마칩니다.(33~34, 53)
각 block을 호출하는 Top에서는 아래와 같이 연결을 시켜 줍니다.
동적할당을 통해 만들어 포인터 + -> 연산자를 이용하여 각 port에 접근을 하는 것을 확인 할 수 있습니다.
위의 상세 사항은 SystemC 설치 경로에 ppt들을 참조해도 됩니다.
(systemc-2.3.3/docs/tlm/release)
'language > systemC' 카테고리의 다른 글
[systemC] TLM 2.0 (0) | 2021.06.05 |
---|---|
[systemC] sc_vector 사용해보기 (0) | 2021.05.29 |
[systemC] template class 사용 (0) | 2021.05.27 |
[systemC] image filter를 위한 memory write/read (0) | 2021.05.23 |
[systemC] SC_CTHREAD 사용 (0) | 2021.05.21 |
댓글